Поради сеньйорів: як прокачати знання 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 хвилин на її аналіз і пошук схожих рішень в мережі. Навчіться формалізувати проблеми і ставити правильні питання. Навчіться шукати потрібні вам ресурси. Перед тим, як поставити своє запитання, не поспішайте, постарайтеся його максимально чітко сформулювати. Можливо, що відповідь на питання криється в самому питанні. Тренуйтеся викладати свої думки максимально чітко і лаконічно. Бажано відразу англійською мовою. ;)

Дивіться на проблему ширше. Тренуйте здатність бачити більше, ніж написано в таске. Намагайтеся розвивати спільне бачення системи, аналізуйте таски самостійно, використовуючи діаграми класів, сутностей, схеми алгоритмів і т. п. Завдання інженера — вирішувати бізнес-проблеми клієнтів. Прагніть зв'язувати конкретне завдання з проблемами бізнесу. Це допоможе уникати потенційні конфлікти в коді і запобіжить появу вузьких місць.

Думайте про своїх колег. Коли ти зосереджений над виконанням тільки конкретних завдань, часто створюється ілюзія, що менеджер, клієнти, тимлиды не завжди надходять правильно. Найчастіше це не так і це може перешкодити досягненню цілей. Намагайтеся зрозуміти мотивацію своїх колег і клієнтів. Поставте себе на їх місце, подумайте, які проблеми вони вирішують і які обмеження у них є. Завжди замислюйтесь про бізнес-процеси підприємства і ваших клієнтів. Не просто показуйте свою залученість в проект, а будьте залученими та захопленими їм по-справжньому. Допоможіть бути ефективними своїм колегам.

Займайтеся наставництвом та допомогою. Не просто орієнтуйтеся на своїх наставників, але і постарайтеся самі стати наставником. Спробуйте почати з малого і підготувати міні-доповідь для внутрішнього митапа або просто напишіть маленьку статтю для новачків в корпоративній вікі. Спробуйте допомогти своєму сусідові з вирішенням проблеми на його проекті. Це все допоможе ще раз переосмислити і усвідомити все, що ви знаєте. Вкласти ваші знання в систему, поліпшити ваше розуміння.

Організуйте себе. Займіться тайм-менеджментом. Керуйте своїм часом. Обов'язково будуйте план свого розвитку, і ретельно плануйте свої завдання. Давайте естімейти всім вашим завданням і обов'язково аналізуйте причини провалу ваших дедлайнів і причини успіхів. І пам'ятайте: «До мети рухається той, хто хоча б повзе».

Андрій Сильця , Engineer Senior, 5+ років досвіду розробки Python

Якщо спробувати відповісти на питання, як з джуна влетіти в синьйори, то крім банальщини «вчитися, вчитися і ще раз вчитися» плюс реальні бойові завдання/проекти, коли волосся від страху стає дибки на спині, нічого не спадає на думку.

Це означає, що не боїмося, беремо на себе відповідальність і працюємо. Це як музиканти: або по 8 годин ти граєш і ти віртуоз, або йдеш в директорію театру.

Якщо простіше, то запитайте у себе: як ви себе почуваєте, коли вихідні реально починаються тільки у ятницю ввечері «та фіча» таки взлетіла (боже, збав вам закоммітитись у майстер: я тут про задоволення, а не про бестпрактіс).

Так от, ця штука вас і витягне з джуна на інший рівень. Все інше — це тулі та плюшки. Надзвичайно важливі, але все ж таки це більше атрибути та методи, ніж сама суть процесу.

Один з найулюбленіших та найдешевших способів — це вибрати собі ментора або «ну від того чувака з тіми, який ну так все класно нишпорити, може пояснити і з ним по кайфу разом щось запилити» і просто кататись поряд з ним. Це як перші спуски на лижах: побачив, як поряд інструктор ганяє початківців, і їдеш за ними, повторюєш і дряпаєшся на ще крутіший схил.

В процесі допомагають книжки та блоги (не боїмося витратити 15-50 баксів за платні штуки):

Тренуємося на чомусь цікавому:

І, звичайно, їдемо на всякі тусі, бажано тематичні:

Пробуємо Python і вибираємо до душі:

Отже, не боятися брати відповідальність на себе та ловити кайф від зробленого. Далі вже якось саме прилипне.

Опубліковано: 14/09/17 @ 10:58
Розділ Блоги

Рекомендуємо:

Релокация в країну посмішок, або Як живеться в Бангкоку
DOU Проектор: Розумний.укр — місце зустрічі замовників та виконавців
Підсумки серпня 2017. Перший сайт вийшов на 1000 уніків
Як і чому почалась революція ІТ-освіти у Львові
iOS дайджест #20: що винен знаті Junior iOS Developer