Весь май я потратил на изучение и написание Python не менее 30 минут каждый день, и вот почему, как и что я делал и что я узнал ... кроме некоторого Python

Почему?

В конце прошлого года я выпустил проект под названием CodeHalf, который я создал, чтобы помочь мне отслеживать свою привычку писать код каждый день, вскоре после того, как я написал здесь на Medium статью о том, что я узнал из этого.

За последние 6 месяцев я пропустил, может быть, несколько дней, и это произошло только из-за того, что я стал папой, так что я думаю, этого следовало ожидать. За это время мне удалось сделать гораздо больше, чем когда-либо прежде. Так думает даже мой публичный профиль на Github:

Это было здорово, именно то, что я всегда хотел сделать, но что-то было не так. Я тратил много времени на кучу разных проектов, но это было почти так же, как я думал, я утомлялся необходимостью постоянно находить, чем заняться.

Это было по иронии судьбы, потому что у меня никогда не было столько проектов одновременно.

Некоторое время я тоже думал, что хочу снова выучить новый язык, я недавно играл с Elixir и Phoenix, но они были слишком похожи на Ruby и Rails, над которыми я тратил большую часть своего времени.

Я прошел через множество вариантов языка от C до Scala, от Rust до Java, до Lisp и обратно, тем временем раздражая моих друзей, пытаясь решить, что попробовать дальше.

В конце концов я остановился на Python, это был язык, который мне уже нравился, когда я изучал его, недавно я слушал пару хороших подкастов от Programming Throwdown на нем, TensorFlow и OpenA Я использую его для машинного обучения, я знал, что такие проекты, как PyGame, существуют, многие проекты Raspberry Pi и IoT используют и много других слухов по этому поводу.

Как это?

Так что мне захотелось изучить Python: увидев большие улучшения в производительности, которые я получил с моделью CodeHalf, и будучи утомленным решением, что делать дальше, я решил попробовать что-нибудь немного другое.

Я бы отложил все свои другие проекты и строго тратил свои минимум 30 минут в день на изучение материала Pythony. Каждый раз, когда у меня оставалось после этого, я мог потратить на выполнение других проектов, таких как исправление ошибок CodeHalf или объединение запросов на вытягивание. Это решение было принято ближе к концу апреля, поэтому я решил, что май будет Python May.

Вот примерно то, что произошло, и ресурсы, которые я использовал:

День 1. После Автостопом по Python я установил последнюю версию Python 2.x и прошел первые несколько уровней бесплатного курса CodeSchool Try Python.

День 2. Закончил курс CodeSchool, прочитал кучу страниц на LearnPython.org в дополнение к курсу CodeSchool и написал свою первую попытку в FizzBuzz, вы можете найти Github Gist здесь

День 3 - узнал о генераторах, словарях и других структурах данных из официальных документов Python. Прочтите в StackOverflow разговоры о питонических способах выполнения определенных действий. Первая попытка встроенной функции map и лямбда-выражений. 2-я попытка FizzBuzz с добавленными практиками Pythonic здесь

День 4 - Сразился с установкой PyGame и написал простой графический интерфейс с зеленой точкой, медленно перемещающейся в правую часть черного экрана.

Дни с 5 по 8. Написал простую игру-змейку с PyGame, провел субботний вечер в прямом эфире, работая над ней в Twitch в надежде, что кто-нибудь поправит меня моими непифоническими способами, но получил только пару Круто Вместо этого. Источник на Github здесь и выглядит примерно так:

День 9. Установил Django и начал работать с официальным руководством Написание своего первого приложения Django. Сделал заметку о том, что Django ощущается как Rails 2 и с ним сложно что-либо делать.

День 10 и 11. Установлена ​​библиотека машинного обучения TensorFlow, пройдены некоторые обучающие программы на сайте. Решили, что фактический объем изучения Python страдает из-за необходимости тратить значительно больше времени на понимание лежащих в основе математики и теории.

День 12 и 13 - потратил пару дней на чтение отличных разделов «Организация кода» и «руководства по стилю» в руководстве по Python для автостопщиков, о котором я упоминал ранее. Стал намного лучше относиться к Python как к языку (подробнее об этом позже).

День 14 - Изучение Python GTK + 3 из этих отличных документов для написания некоторых настольных приложений с графическим интерфейсом. Также узнаем о пакете PyCrypto. Создал простое настольное приложение для генерации ключа RSA, сохранения его в файл локально и загрузки при следующем запуске.

День 15 и 16 - изучение и использование буферов протокола, а затем вскоре после gRPC. Написал простой клиент-серверный проект для отправки сообщений между клиентами со сквозным шифрованием.

День 17 и 18. Узнайте больше о модулях и пакетах Python из различных источников, таких как официальная документация и поиск в Google. Прочтите много PEP8 Руководство по стилю кода Python. Реорганизовал мой проект по сравнению с предыдущими днями с помощью нового найденного модуля и понимания пакетов.

День 19–21. Узнал о Flask, веб-микрофреймворке Python и хранилище данных Redis и интегрировал их в свой проект по шифрованию.

День 22 и 23. Узнал о модульном тестировании на Python из руководства автостопщика. Написал еще один FizzBuzz, на этот раз с тестами и расширяемым набором правил. Код можно найти здесь. В основном это было сделано для того, чтобы изучить больше стандартной библиотеки и применить полученные знания на практике.

День 24 и 25. Возвращаемся к функциональным частям Python, таким как карта и фильтр. Еще одна попытка лямбда-выражений и понимания списков. Написал еще один глупый лайнер FizzBuzz, чтобы по-настоящему изучить вышесказанное. Код здесь

День 26–31. Создание клона тетриса с помощью PyGame. В основном готовый код можно найти здесь.

Ура, я сделал это!

Итак, что я узнал?

Я немного изучил Python, и я узнал о некоторых действительно крутых проектах и ​​библиотеках для Python, но этого и следовало ожидать, остальное немного сложно:

Выучить новый язык за месяц сложно

Если вы уже знаете похожий язык программирования или другие языки, это будет действительно быстро, поскольку вам не нужно изучать многие концепции, только синтаксис. Это также означает, что вы, вероятно, довольно быстро выйдете на плато в процессе обучения.

Было несколько раз в течение месяца, когда я изучал библиотеку и работал с ней, и я делал сознательные усилия, чтобы остановиться, так как я чувствовал, что обучение больше склонялось к библиотеке или ее концепциям, чем к самому Python.

Это в значительной степени подошло к моменту 26-го дня, когда я не мог придумать эффективного источника, чтобы узнать больше о самом Python, и затем провел следующую неделю, работая над клоном Tetris, поскольку, по крайней мере, это заставило бы меня написать код Python, а пока не обязательно оптимально для обучения даст мне знакомство.

Я нашел несколько книг по продвинутым темам Python, но они действительно не подходили для моих целей, учитывая временные рамки.

По опыту я знаю, что лучше всего учиться при работе с большими кодовыми базами. Я подумывал найти хорошо зарекомендовавший себя проект Python с открытым исходным кодом на Github, но по опыту знал, что потребуется непропорционально много времени, чтобы ознакомиться с проектом в достаточной степени и внести свой вклад.

Python - это… ОК

Одной из вещей, которая с самого начала меня раздражала, была необходимость принять экземпляр рассматриваемого объекта в качестве первого аргумента для методов экземпляра.

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

Система отступов и ее условности были для меня смешанной. Я понимаю, что вам почти нужно использовать 4 пробела для отступа, когда вы используете его как часть своего языка, но, исходя из двух пространств Ruby, сначала это просто кажется ненужным. Первоначально меня также раздражала необходимость использования таких ключевых слов, как `pass` для создания пустых методов, что вы, вероятно, будете делать регулярно как часть TDD.

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

Синтаксис Lambda казался ограниченным и неудобным по сравнению с Ruby, функциональные части, такие как map и filter, не казались очень элегантными, и, похоже, они также мало использовались сообществом (из моего краткого чтения).

К концу месяца я чувствовал себя хорошо по поводу самого языка и соглашений, я бы не сказал, что было что-то заметно лучше, чем любой из языков, которые я использовал в прошлом, или даже действительно Ruby в этом отношении. кроме одного: составьте список понятий! Люблю их!

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

Экосистема потрясающая

Разнообразная экосистема вокруг Python просто ВАУ!

Особенно если сравнивать с Ruby, я бы предположил, что 80% + Rails. Конечно, есть проекты Ruby, не относящиеся к Rails, но они, как правило, плохо принимаются, и сообщества, как правило, крошечные. Это довольно очевидно, когда вы ищете ответы Ruby в StackOverflow, и по крайней мере половина рекомендуемых решений фактически из ActiveSupport - библиотеки Rails, а не из стандартной библиотеки Ruby.

Есть несколько отличных библиотек, таких как PyCrypto, NumPy, SciPy, PyGame, различные библиотеки привязки GTK и т. Д., Все очень зрелые и / или многофункциональные.

Отличные вещи, такие как буферы протоколов, gRPC, TensorFlow, OpenAI, которые, как я считаю, имеют лучшие поддерживаемые библиотеки для Python.

И я даже не успел познакомиться со всем миром разработки Raspberry Pi и IoT, который, насколько мне известно, имеет действительно сильную поддержку Python с кучей отличных библиотек и проектов.

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

Страх пропустить

Я решил проводить минимум 30 минут в день только на Python большую часть времени, и это все, на что у меня было время, и страх упустить другие вещи действительно начал закрадываться.

Стоит ли мне тратить больше времени на изучение ботов, которым сейчас уделяется огромное внимание? Стоит ли мне изучать больше Эликсира? Оказываю себе медвежью услугу, не заглядывая в каждую последнюю часть технологии / библиотеки / языка / концепции / техники, которые ежедневно появляются в моей ленте новостей? Наверное, нет, но определенно хотелось, по крайней мере, поначалу.

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

Еще одно интересное наблюдение под этим заголовком - это то же самое, что когда я уезжаю в отпуск без ноутбука; У меня никогда не было так много «хороших» идей для новых побочных проектов и стартапов.

В то же время я не решался преследовать их с помощью Python, поскольку это может отвлечь внимание от изучения Python, и, кроме того, я еще не решил, хочу ли продолжать работать над проектом, если он действительно взлетит ... Глупо, я знаю, но мыслительный процесс у меня, тем не менее, продолжался.

Вывод

Считаю ли я, что время было потрачено не зря? Абсолютно! Я получил много удовольствия и выучил Python достаточно, чтобы быть уверенным, что смогу начать читать более крупный проект и знать, как узнать больше или осмелиться, я скажу, даже взяться за написание небольшого и среднего проекта на Python.

Собираюсь ли я продолжить свое путешествие по Python? Слишком рано говорить, я уже решил, что у меня будет небольшой июнь, чтобы поработать над вещами, которыми, как мне кажется, пренебрегли.

Сделал бы я что-то подобное снова с другим языком? Возможно, хотя в зависимости от языка я мог бы либо сократить время немного короче, либо я буду лучше подготовлен, имея наготове материалы, которые помогут мне пройти через плато, возможно, купив отличную книгу среднего или экспертного уровня.

Могу ли я порекомендовать сделать что-то подобное другим? О, да! Если у вас в настоящее время нет привычки писать код для себя и учиться каждый день, это будет отличным началом. Если вы уже делаете это, то да, я призываю вас бросить вызов самому себе и посмотреть, как далеко вы можете продвинуться за фиксированный период времени, например, за месяц.

Совет от профессионала: ведите ежедневный дневник своего прогресса в этот день, ссылок, которые вы сочли полезными, и того, где взять на следующий день, чтобы не тратить драгоценное время. Я использовал CodeHalf, чтобы отслеживать их для себя, но ручка и бумага / документы Google и т. Д. Также должны работать нормально.

Если вы уже сталкивались с подобными проблемами в прошлом, или вы находитесь в середине одного из них прямо сейчас, или даже просто планируете сделать одно, я был бы рад услышать от вас. Вы можете связаться со мной в твиттере @efexen

Я надеюсь, что это вдохновило вас узнать что-то новое или, по крайней мере, предоставило здоровый список ссылок, если вы заинтересованы в изучении Python;)

Мы будем благодарны за любые отзывы, и если вам понравилась эта статья, порекомендуйте ее и поделитесь ею с другими в надежде, что они вдохновятся.