Советы сеньоров: как прокачать знания junior Python
Советы сеньоров — ежемесячная рубрика, в рамках которой опытные специалисты делятся практическими советами с джуниорами — общие лайфхаки по обучению, какие книги и ресурсы читать, какие навыки осваивать и многое другое. В этом выпуске говорим о Python разработчиках.
Александр Жаботинский, Senior Software Engineer, 8 лет опыта Python разработки
Привет, дорогой друг! Значит, ты уже джуниор Python разработчик? Полагаю, ты уже прочел PEP-8 и согласен с философией Тима Петерса? Возможно, ты читаешь эти строки, так как, поработав годик-другой, увидел, столько возможностей, сфер и направлений для этого прекрасного языка, и хочешь выбрать правильный вектор для своего развития? Увы, не существует единого мнения. И моё представление пути Python-дева основывается на личном опыте, холиварах с коллегами и положении вещей в данный момент времени. Я не стану перечислять свои настольные книги, ведь ты сам можешь открыть Amazon и выбрать всё, что понравится: от компьютерного зрения и Data Science до Embedded и администрирования. Первый шаг ты уже сделал. И если у тебя есть пару минут, я расскажу, на что следует обратить внимание.
Вспомнил эпизод из фильма «Солдат Джейн», когда нужно было написать сочинение на тему «Почему я люблю морскую пехоту» и что бы не меньше 500 слов. Вот почему же я люблю Python? Всё перечислять не стану, выделю главное для себя.
Во-первых, у него минимальный порог входа — я знаю много непрограммистов из сферы, которым однажды ночью было «видение», что они могут и должны написать новый проект на Джанге (ведь это так просто), который порешает все вопросы компании, этим же программистам так долго объяснять, их вечно нету, они вечно заняты. Такие проекты порой доходят до прод-стадии и вполне себе работают годами, что говорит о том, что любой айтишник может быстро научиться писать сайты на Python и что любой Python-разработчик обязан уметь запилить веб на этом супер-мега-популярном Web-фреймворке не хуже этого непрограммиста, при том не допуская ошибок, о которых я позже расскажу. Да, да, Django — это мастхев. И поскольку веб-разработка — это не только бекенд, то тебе придется также уметь нарисовать красивые кнопочки или хотя бы сделать всё возможное, чтобы эти кнопочки нарисовали другие разработчики. Спагетти jQuery в прошлом, тренд фронтенда — веб-компоненты, я бы уделил время на разбор хотя бы этого фреймворка (ссылка на YouTube) со всеми его производными: версткой, сборщиками фронтенда, стандартами ECMAScript и т. д.
Во-вторых, Python-код читаемый. Вспомним «видение непрограммиста» — обычно в таких видениях не показывают те его части про «хоть какие-нибудь тесты» и архитектуру. И вот потом это произведение инженерной мысли попадает тебе на поддержку и доработку! Ты знаешь, что с Python проблем не будет, ведь, повторюсь, код читаемый, даже без комментариев. Да, Python решает вопрос, где открывать фигурную скобочку вместо тебя! Конечно, понять, зачем необходимо тестирование и зачем продумывать перед написанием кода архитектуру, чтобы не делать ошибок выше, вроде как надо. Но на практике не всегда ясно, зачем. Часто начинающие разработчики берут это как правило и потом, устав от поддержки этого правила и не увидев явного профита в разработке, бросают это дело. Мой совет — постарайся найти компанию/проект, где есть поставленный процесс и есть много разных участников: от РО, РМ до разных девелоперов и дизайнеров, которые этот процесс реально используют, т. е. есть командная работа. Пусть это будет не высокооплачиваемая работа, получи профит от изучения культуры программирования. Это не должен быть Scrum по утрам, потому что так везде. Ты должен почувствовать, что без написания тестов у тебя уходит больше времени на согласование и коммуникацию, поиск ошибки, рефакторинг или объяснению коллеге на код-ревью, что ты хотел сказать в этой небольшой функции на 100 строк. Со временем твой стиль написания спагетти-кода эволюционирует, станет более структурированным и компактным.
В-третьих, Python можно применить практически везде. Мой первый язык был Delphi, потом я работал сисадмином. В Python я пришел через книгу «Python в системном администрировании UNIX и Linux», позже я начал применять Python для решения других задач. Возможно, ты ранее тоже писал на чем-то другом или окончил курсы и теперь веб-разработчик. Не останавливайся — посмотри, как еще можно применить Python, и ты сильно удивишься, ведь это и вычисления на графических адаптерах, распознавание изображений, посмотри, как с его помощью управляют разными GPIO, USB, RS232. И напоследок — Python-комьюнити. По питону проходят интересные конференции, митапы в Украине и ЕС. Сходи познакомься с ребятами, послушай доклады. Барин из-за границы одобряет Python! А значит, при желании можно будет и уехать.
Не бойся поменять работу, если появится чувство, что всё стоит на месте, надоел проект или остановилось развитие. Да, не быть джампером и продолжительно работать на одном месте работы очень важно, но еще важнее быть высококлассным специалистом, разбираться в технологиях, «решать проблемы». Одно место работы в CV навряд ли охватит многие области применения, а вот практический опыт асинхронного программирования, нагруженных, многопоточных систем ценится больше. Обязательно сходи на интервью в другую компанию, если пригласят — это тоже развитие, которое укажет на твои слабые стороны и, возможно, мотивирует на изучение нового материала. Попробуй придумать написать какой-то pet-проект/стартап с нуля или же поучаствовать в open source. Изучай, развивайся, придумывай, пиши, рефактори — в конце концов, ты ж программист.
Евгений Климов, CTO, 7 опыта Python разработки
Вчера я проводил урок по Python и около часа говорил об особенностях языка. В конце мне задали вопрос о важности глубокого понимания алгоритмов и структур данных, а я (дурак!) ответил, что крутил их вокруг того дуба из Пушкинской сказки. Во всяком случае до тех пор, пока мы не выучили, как правильно ветвиться в git, как пользоваться Sphinx и для чего нужно всегда иметь актуальное описание проекта и инструкций к запуску в README. Я чертовски устал от споров о том, какой алгоритм быстрее справится с задачей, когда внутри исходников отсутствуют docstrings, а написание unittests оставлено до лучших времен.
Соблазн написать сложнейший продукт, в котором никто кроме тебя не разберется — огромен. Но мы все создаем продукты для бизнеса, а основная ценность нашей работы — это поддерживаемость и устойчивость к изменениям. Обычно функционал постоянно дополняется, обновляется и переписывается с нуля. Программисты болеют, их хантят другие компании, они улетают на острова в поисках духовного просветления. На их место приходят другие, и у всех свое собственное видение на true-программирование. Кто-то любит singleton, кто-то считает его анти-паттерном. Но я, как владелец проекта, не хочу думать об особенностях реализации. Я хочу знать, что код хорошо задокументирован, что весь функционал полностью покрыт тестами, и нас не ждут сюрпризы в следующем релизе.
Начиная свой путь, разработчик будет большим молодцом, если вместо сложных структур данных освоит рефакторинг — «Совершенный Код», «Чистый Код». Научится правильно вести свои проекты в git — хорошая статья о ветвении. Научится тестировать свои приложения и разрабатывать через TDD — курс по тестированию, книга «Экстремальное Программирование».
Только после того, как ваш код будет читабелен и надежен, когда вы сможете гордиться тем, что не забивали на то, что вроде делать нужно, но на что постоянно нет времени... Только тогда есть смысл оттачивать свой навык и обращаться к изучению алгоритмов и сложных структур данных.
Игорь Павленко, CTO, 7 лет опыта Python разработки
Будьте Хакером. В хорошем смысле этого слова. Во всём стремитесь дойти до самой сути происходящих вещей. Понять, как устроен интернет, софт, с которым вы работаете, библиотеки, фреймворки, инструменты.
Чтобы прокачать свои знания вам необходимо быть исследователем своей предметной области и области своих коллег. Если вы прочитали о новой технологии или инструменте, попробуйте применить его на практике. Подумайте, какую пользу он может принести на проекте. Поиграйтесь с ним, нагрузите тестами и сравните с другими похожими библиотеками. Чем больше вы будете исследовать, тем шире будет ваш горизонт знаний и тем проще будет решать задачи, которые встают перед вами на реальных проектах.
Цените свой труд. Не позволяйте себе халтурить или лениться. Всегда пишите самый лучший код, который вы можете написать. Покрывайте его тестами, вычищайте и оформляйте согласно всем стилевым и корпоративным стандартам. Уважайте ваших коллег и PEP-8. Обязательно включайте pylint, sonar или другие анализаторы в самом строгом режиме.
Ищите свой путь. Все люди разные и по-разному воспринимают информацию. То, что подходит одним джуниорам, не будет подходить другим, так что никогда не сдавайтесь. Если вам сложно с какой-то книгой или туториалом — попробуйте поменять подход или руководство.
Непрерывно учитесь. Никогда нельзя переставать учиться. По статистике успешные руководители читают как минимум около 60 книг в год. Не останавливайтесь на технической литературе. Читайте книги направленные на развитие софт скиллов и просто художественную литературу. Возьмите на вооружение правило, что день прожит зря, если вы не узнали ничего нового в его течении или не прочитали хотя бы главу хорошей книги. Не забывайте про спецификации, RFC и PEP. Это поможет вам понять, как и почему именно так развивается ваш язык и инструменты.
Непрерывно тренируйтесь. Просто получать знания — мало. Нужно постоянно закреплять их на практике. Пишите код. Делайте пул реквесты в open source библиотеки, которыми пользуетесь. Просите коллег делать вам код-ревью. А ещё помните, что написание кода — это лишь малая часть работы. Куда больше времени в разработке отнимает чтение кода. Поэтому постоянно читайте хороший код. Постоянно ищите хорошие open source библиотеки и разбирайте, как они устроены. Прорисуйте модульные и компонентные их диаграммы, data-flow чарты. Попробуйте понять, почему разработчики принимали именно такие решения. Для начала хорошо подойдут Werkzeug, Django REST Framework и Requests. После этого можно попробовать проанализировать исходный код async.io и сопутствующих ей библиотек.
Научитесь пользоваться Google. Если вы сталкиваетесь с какой-то проблемой, то не бегите сразу к коллегам, потратьте 15 минут на её анализ и поиск похожих решений в сети. Научитесь формализовать проблемы и задавать правильные вопросы. Научитесь искать нужные вам ресурсы. Перед тем, как задать свой вопрос, не спешите, постарайтесь его максимально четко сформулировать. Возможно, что ответ на вопрос уже кроется в самом вопросе. Тренируйтесь излагать свои мысли максимально чётко и лаконично. Желательно сразу на английском языке. ;)
Смотрите на проблемы шире. Тренируйте способность видеть больше, чем написано в таске. Старайтесь развивать общее видение системы, анализируйте таски самостоятельно, используя диаграммы-классов, сущностей, схемы алгоритмов и т. п. Задача инженера — решать бизнес-проблемы клиентов. Старайтесь связывать конкретное задание с проблемами бизнеса. Это поможет избегать потенциальные конфликты в коде и предотвратит появление узких мест.
Думайте о своих коллегах. Когда ты сосредоточен над выполнением только конкретных задач, часто создаётся иллюзия, что менеджер, клиенты, тимлиды не всегда поступают правильно. Чаще всего это не так и это может помешать достижению целей. Старайтесь понять мотивацию своих коллег и клиентов. Поставьте себя на их место, подумайте, какие проблемы решают они и какие ограничения у них есть. Всегда задумывайтесь о бизнес-процессах всего предприятия и ваших клиентов. Не просто показывайте свою вовлечённость в проект, а будьте вовлечёнными и увлечёнными им по-настоящему. Помогите быть эффективными своим коллегам.
Занимайтесь наставничеством и помощью. Не просто ориентируйтесь на своих наставников, но и постарайтесь сами стать наставником. Попробуйте начать с малого и подготовить мини-доклад для внутреннего митапа или просто напишите маленькую статью для новичков в корпоративной вики. Попробуйте помочь своему соседу с решением проблемы на его проекте. Это всё поможет ещё раз переосмыслить и осознать всё, что вы знаете. Уложить ваши знания в систему, улучшить ваше понимание.
Организуйте себя. Займитесь тайм-менеджментом. Управляйте своим временем. Обязательно стройте план своего развития, и тщательно планируйте свои задачи. Давайте эстимейты всем вашим задачам и обязательно анализируйте причины провала ваших дедлайнов и причины успехов. И помните: «К цели движется тот, кто хотя бы ползёт».
Андрій Силка, Senior Engineer, 5+ років досвіду Python розробки
Якщо спробувати відповісти на питання, як з джуна влетіти в синьйори, то крім банальщини «учиться, учиться и еще раз учиться» плюс реальні бойові завдання/проекти, коли волосся від страху стає дибки на спині, нічого не спадає на думку.
Це означає, що не боїмося, беремо на себе відповідальність і працюємо. Це як музиканти: або по 8 годин ти граєш і ти віртуоз, або йдеш в директори театру.
Якщо простіше, то запитайте в себе: як ви себе почуваєте, коли вихідні реально починаються тільки в п’ятницю ввечері «та фіча» таки взлетіла (боже, збав вам закоммітитись в мастер: я тут про задоволення, а не про бестпрактіс).
Так от, ця штука вас і витягне з джуна на інший рівень. Все інше — це тули та плюшки. Надзвичайно важливі, але все ж таки це більше атрибути та методи, ніж сама суть процесу.
Один з найулюбленіших та найдешевших способів — це вибрати собі ментора або «ну отого чувака з тіми, який ну так все класно шарить, може пояснити і з ним по кайфу разом щось запилити» і просто кататись поряд з ним. Це як перші спуски на лижах: побачив, як поряд інструктор ганяє початківців, і їдеш за ними, повторюєш і дряпаєшся на ще крутіший схил.
В процесі допомагають книжки та блоги (не боїмося витратити
- MiguelGrinberg.com
- Flask Book
- «Learning Python, 5th Edition»
- «Redis in Action»
- Блог Андрія Свєтлова
- Навчальний посібник Django Girls
- Learn Python on The Hard Way
- Курс «The Ultimate Python Programming Tutorial»
Тренуємося на чомусь цікавому:
І, звичайно, їдемо на всякі туси, бажано тематичні:
Пробуємо Python і вибираємо до душі:
- WEB (Flask/Django)
- ComputerVision
- Data Science
- BigData
- System tools
Отже, не боятися брати відповідальність на себе та ловити кайф від зробленого. Далі вже якось саме прилипне.