среда, 6 сентября 2017 г.

Открытый курс машинного обучения на Хабре

Сегодня на хабре официально стартовал второй запуск открытого курса машинного обучения. Первый был этой весной. Пытался участвовать, но работа эмоционально выматывала - дальше первой недели не прошёл.

Попытка номер два. Первая неделя - знакомство с Pandas. Это такой пакет к Питону для работы с таблицами, наподобие Excell, но более мощный и более гибкий. Весной было такое ощущение и сейчас повторилось, когда работал с ним - чувствую себя немного волшебником. Из кучи разрозненных данных выкристаллизовывается структура, внутренние связи и закономерности. Удивительное ощущение...

Кстати, очень классная тенденция - давать своего рода рабочие тетради в виде файлов Jupyter Notebook. Там и вся теория, и возможность тут же попробовать ту или иную команду, и поэкспериментировать с ними. Причем в git-архиве к первой неделе аж пять разных файлов, в том числе классический с данными по Титанику :) Будет чем завтра поиграться.

Курс рассчитан примерно на 10 недель и требует довольно много времени, но по концентрации информации ИМХО один из лучших на русском языке - так что планирую закончить.

вторник, 5 сентября 2017 г.

Coursera - Основы программирования на Python

В августе наткнулся на Coursera на курс "Основы программирования на Python" от ВШЭ. Питон мне нравится плюс в связи с поиском работы - лишние "корочки" лишними не будут, в общем, поступил. Coursera очень настойчиво подталкивала в сторону платного варианта обучения, (цены кстати вполне разумные), но я сейчас без работы, так что проходил в бесплатного варианте. Сегодня официально завершил обучение, ниже - впечатления от курса.


Огромный плюс по нынешним временам - прохождение в бесплатном варианте даёт полный доступ ко всем заданиям курса. Разница только в том, получите ли вы официальную бумагу о завершении обучения или нет. Во многих других курсах отправить выполненное задание на проверку в бесплатном варианте невозможно

Очень понравилось огромное количество заданий - 100 оцениваемых и ещё примерно столько же дополнительных, не влияющих на итоговый балл. Задания сильно различаются по сложности - от простейших, решаемых в уме, до таких что несколько часов приходилось крутить, пока найдётся решение. 

К слову, тут сказывается заметный минус курса - отсутствие информации о проходимых тестах. В примерах к каждой задаче есть два-три теста, на которых можно проверить свой код - и тут всё понятно, есть вводимая информация и написано что должна вывести на экран программа студента. Дальше, после отправки кода на сайт - он дополнительно проходит проверку на тестах, неизвестных пользователям. При этом вся доступная информация - "Wrong Answer. Test 7" - явна недостаточна для отладки.

Чтобы сберечь себе нервы, я решил воспринимать это как дополнительный бонус - возможность отладки кода в условиях отсутствия наглядного тестирования, но для начинающего программиста - это не нужное усложнение процесса обучения. При этом преподаватель курса на форуме бывает не часто. Менторов, которые бы регулярно отвечали на вопросы студентов, тоже нет. Доступная тестовая информация, на которой проверяются задачи на сайте, сняла бы процентов восемьдесят всех вопросов от обучающихся.

К слову, цитата из видео курса про обработку ошибок: "То есть что делать, если у нас в процессе выполнения команд в try возникла какая-то ошибка, какое-то исключение было брошено. Ну вот, в принципе здесь мы можем... Как бы это сделал плохой программист? Давайте сделаем. Напишем, что возникла ошибка. Вот, отлично! Наверняка вы сталкивались с такой проблемой, что вы заполняете на сайте, например, какую-то форму, нажимаете «Отправить», а оно говорит: «Ошибка». И вы сидите ломаете голову, что за ошибка, что же оно хотело. И там оказывается, что телефон нужно было написать... вместо 8 написать +7, или какие-то скобочки или еще что-то. Догадаться до этого невозможно, и так поступают только плохие программисты. Мы пытаемся стать хорошими. Давайте пытаться лучше"
Я в таких случаях либо самостоятельно писал тестовый модуль, проверяющий мой код на различных комбинациях входных данных, либо копался в архивных записях форума - курс идет не первый поток, так что большинство критичных моментов уже обсуждалось. Уже ближе к концу курса узнал, что заметная часть простых задач вместе с тестами взяты с pythontutor.ru, так что если совсем тупик с каким-то тестом, можно попытаться найти эту задачу там.

Отдельная фича курса - вводимый код проверяется на соответствия стандартам стиля Python (PEP-8). Это - к примеру наличие пустой строки в конце файла (причем только одной) или выделение арифметических знаков пробелами. Нарушение стиля никак не влияет на выполнение программы (только на её читаемость), но неправильно оформленные программы даже не проверяются на работоспособность. Впечатления от этого неоднозначные. С одной стороны - это здорово, все эти моменты по оформлению запомнились сами собой в процессе сдачи задач. С другой стороны - требовать от начинающих ещё и соблюдение стиля, когда они толком ничего не знают, это на мой взгляд лишнее. Хорошо, что в среде PyCharm программу можно привести к стандартам PEP-8 всего одним нажатием комбинации клавиш Ctrl+Alt+L. 

К слову - разобрана отладка в PyCharm, помню мне очень не хватало этого в курсе Stepic. И вообще, если до курса я запускал Питон практически только в режиме Jupyter Notebook, то сейчас вполне комфортно чувствую себя в PyCharm. Не знаю ещё всех-всех нюансов этой IDE, но того что освоил вполне за время курса, вполне достаточно для комфортной работы.

Отдельного упоминания заслуживает преподаватель - Густокашин Михаил Сергеевич. Реально - человек на своём месте! Умеет объяснять, доходчиво и без занудства. Иногда ошибается в коде, но по факту это получается отдельный урок - как искать собственные ошибки и как реагировать на них.  

Восьмая неделя курса посвящена функциональному программированию - наконец то узнал что это такое. Зацепило своей изящностью - зачастую большой кусок программы с вводом данных, условиями, циклами можно заменить всего одной строчкой (правда длинной строчкой). Чем то напоминают концепцию перенаправления ввода/вывода в командной строке Windows или Linux, когда выходные данные одной программы становятся входными для другой в длинной цепочке. Не уверен, что такой код писать легче чем стандартный, но - интересно. Совсем по другому мозги работают. Пожалуй, когда будет по свободнее со временем - надо будет освоить Haskell.

Девятая неделя - азы объектно-ориентированного программирования. Что-то про ООП я и раньше знал, из других языков, поэтому прошёл быстро, но по ощущениям для новичков может быть сложным. Хотя, это всего три процента в итоговой оценке, так что если совсем никак - можно и пропустить.

Общий вывод - курс понравился, для изучающих Python однозначно рекомендую. Можно проходить и совсем не зная языка (имея крепкую психику и умея самостоятельно искать необходимую информацию), но лучше всё же брать это вторым курсом, после какого-то вводного (например на Stepic)