Хто такий Python-розробник. Огляд зсередини від Олександри Воронцової

Про професію розповідає Олександра Воронцова, наставник курсу «Python-розробник» в Яндекс Практикумі.

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

Хто такий Python-розробник. Огляд зсередини від Олександри Воронцової

Про професію розповідає Олександра Воронцова, наставник курсу «Python-розробник» в Яндекс Практикумі.

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

— Я близько двох років була розробником в Яндекс Диску, а до цього займалася обробкою великих даних в Яндексі. Кожен день приблизно на 2 Тб ми рахували статистику використання фіч. Наприклад, як часто люди натискали кнопку переходу на сайт після того, як їм надійшов лист. Зараз розробляю інструменти для міжнародної логістики в Joom, наприклад, для відстеження посилок і оптимізації вартості перевезень.

Python — це хороша мова, щоб почати вивчати програмування. У неї низький поріг входу внаслідок простого і зрозумілого синтаксису. За вихідні за допомогою Інтернету і відеоуроків можна навчитися писати програми, які спростять ваш побут. Наприклад, Telegram-бот, в який будь-який член родини може відправити нагадування про те, що треба купити в магазині. А коли зберетеся за покупками, пишіть команду: «Я в магазині. Що треба купити? » І отримаєте список покупок.

Чим займається Python-розробник

Python найчастіше використовують в розробці серверної частини вебдодатків. При цьому багато що можна реалізувати як на Python, так і на C ++ або Java. Те, чим ви будете займатися на роботі, залежить від сфери, в яку ви потрапите. Python також застосовують для аналізу великих даних і проєктування нейромереж.

Головне завдання python-розробника — зробити так, щоб сервіси розуміли запит, а сайти правильно реагували на дії користувачів. Порядок роботи над проєктом може бути таким.

  1. Отримати завдання і декомпозувати його (тобто, розбити на маленькі частини). Важливо почути, що конкретно від вас хочуть, і домовитися, хто і що буде робити.
  2. Написати код.
  3. Покрити код тестами і перевірити, що всі тести проходять. Іноді цей пункт міняють місцями з другим, в такій ситуації спочатку перевіряють, що програма не працює.
  4. Закомітити (зафіксувати зміни) і пройти код-рев’ю — отримати коментарі від більш досвідченого розробника і внести його правки.
  5. Викотити реліз або зібрати образ на машині.
  6. Підтримувати код, поки він кимось використовується.

Як проходить типовий день Python-розробника

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

День починає з того, що я проводжу код-рев’ю — перевіряю код на помилки й неточності. І часом з’являються принципові питання, які ми потім обговорюємо з командою.

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

Написання коду безпосередньо на Python займає малий відсоток мого робочого часу. Буває, що за день пишеш десять рядків, в хорошому випадку — 50.

Велику частину часу займають:

  •         читання коду
  •         тести
  •         виправлення помилок

Іноді виявляється, що попередні написані десять рядків не вписуються в існуючу архітектуру, і ти не можеш їх використовувати. Тоді доводиться все переписувати спочатку.

Бувають ситуації, коли тести не знаходять проблеми в коді. І коли він виходить в продакшн, треба стежити, щоб нововведення у користувача працювали правильно. Іноді з’являється унікальний користувач зі своїм набором фіч, і починаються проблеми. В цьому випадку відкатуємо реліз і розбираємося, що відбувалося.

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

У роботі я використовую Slack (робот jenkins надсилає мені інформацію про те, як протестувати Комміт на гітхаб), Github, пошту, вільний інтернет, PyCharm (середовище розробки), Things 3 (тудушнік), Iterm 2, так як частина дій зручніше провертати через командний рядок.

Що треба знати Python-розробнику

Треба базово знати мову програмування. У моєму розумінні, до базових знань відносяться:

  • типи та структури даних: чим вони відрізняються один від одного, наприклад, в яких випадках краще використовувати списки, а коли — кортежі
  • як зберігаються перемінні
  • що таке умовні конструкції, цикли та функції

При цьому список потрібних для роботи скілів відрізняється від напрямку, в якому ви хочете розвиватися. Конкретніше розповім про два найпопулярніших: веб-розробка та аналіз даних.

Веб розробка

  • Фреймворки. Перший — Flask. З його допомогою можна швидко запрограмувати щось працююче. Але всі додаткові функції треба підключати й завантажувати окремо, якщо вони потрібні, звичайно.
  • Django. З ним треба познайомитися хоча б трохи, бо тривалий час він був одним з найпопулярніших. Тому велика ймовірність, що, прийшовши розробником на Python в якусь компанію, ви застанете проєкт на Django, і його треба буде підтримувати. Основна відмінність Django від Flask — все, що вам може знадобитися, вбудовано в сам фреймворк.

На старті слід знати хоча б один з цих фреймворків. Решта набору залежить від того, в якому напрямку ви хочете розвиватися і які завдання ставить перед вами тімлід. Зазвичай третім радять вивчити асинхронний фреймворк. Наприклад, Async IO або Fast API.

Асинхронність потрібна, щоб обійти проблемні місця, пов’язані з завантаженням процесора. При синхронній розробці користувач не зможе взаємодіяти зі сторінкою, поки не прийде відповідь від сервера. Асинхронність розв’язує цю проблему: один потік підвантажує інтерфейс, а другий — чекає відповідь від сервера.

  • Пристрій Unix-систем (хоча б на базовому рівні). Перед співбесідою попрацюйте з Linux, поекспериментуйте з командним рядком і спробуйте якийсь час користуватися тільки ним, без графічного інтерфейсу. Ймовірно, що коли ви прийдете на першу роботу, єдиним способом комунікації з сервером, на якому запущено ваш додаток, буде командний рядок. Ця навичка освоюється дуже швидко: день на те, щоб прочитати документацію, і буквально тиждень на те, щоб закріпити знання.
  • SQL і бази даних. Початківцю-розробнику не потрібні глибокі знання в цій галузі, але треба розуміти, що таке база даних і як в ній зберігається інформація. Буде добре, якщо перед першою співбесідою ви розгорнете якусь базу даних і спробуєте скласти до неї кілька запитів.

Аналіз даних

  • Математика. Перцентилі, нормальний розподіл, вектори і матриці — все це треба розуміти, щоб знати, що ви рахуєте. Зазвичай складні обчислювальні операції можна реалізувати за допомогою готових функцій, але без розуміння, що і навіщо використовується, висока ймовірність отримати на виході щось непотрібне замість корисних даних.
  • Pandas. Це бібліотека Python, яка часто застосовується в аналізі даних. Її використовують в роботі практично щодня, тому слід знати, як з нею працювати.
  • Візуалізація даних стане величезним плюсом для початківця-розробника. Наприклад, базова бібліотека — Matplotlib. Ще є Seaborn, яка розширює можливості першої та здебільшого служить для простіших даних, наприклад, кореляції або аналізу одновимірного або двовимірного масиву.

Soft skills

Хороші soft skills часом важливіші за hard skills. Найважливіше — вміння і готовність ставити запитання. У мене є алгоритм, яким я ділюся зі своїми студентами. Він допоможе підготуватися до обговорення проблеми зі старшим колегою і заощадити його час. Для цього потрібно відповісти на чотири питання.

  1. Що я хочу зробити? Коротко описати задачу і те, що саме ви хочете зробити. Наприклад: я хочу вивести середнє число по конкретному масиву.
  2. Як зараз працює програма? На якому етапі ви зайшли в глухий кут, яке повідомлення про помилку спливає або який результат замість очікуваного вона виводить.
  3. Що я вже намагався зробити, щоб виправити помилку? Наприклад, пошукав помилку в пошуковику або спробував написати іншу функцію.
  4. Конкретне запитання, чим може допомогти наставник або керівник: подивитися конкретний фрагмент коду або підказати, яку функцію краще використовувати.

Готовність вчитися і сприймати зауваження. Треба вміти почути позицію іншої людини і зрозуміти, чому досвідченіший розробник вважає так чи інакше. При цьому абсолютно нормально, якщо джуніор вступає в дискусію з такими аргументами: «Я чув, що …», а не «Я знаю, що треба так, і крапка». Потрібно показати свої знання і запитати, чому старший розробник думає інакше. Надалі це дозволить швидше набрати базу знань, дорости до middle-розробника і приймати більш зважені рішення.

Важливо, щоб з людиною було приємно працювати в одному кабінеті та поговорити не тільки про роботу.

Де вчитися професії Python-розробника

Вища освіта

Я ступаю на слизьку доріжку, але вважаю, що не всім буде корисна вища освіта в IТ. Вищий навчальний заклад корисний, якщо вирішите йти далі в Computer Science, щоб займатися програмуванням більш фундаментально: не створювати нові сервіси, а вивчати, яким чином писати ефективніше або програмувати більш низькорівневі системи. Наприклад, університетський курс корисний, щоби писати операційні системи, середовище розробки або бази даних.

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

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

Хороші поради про те, як проходити співбесіди на стажування у великі компанії, наприклад Google, Apple, Microsoft, Amazon, Facebook і Palantir Technologies, є в книзі Cracking the Coding Interview («Кар'єра програміста»).

Мінус в тому, що на це потрібно витратити як мінімум чотири роки і вас, швидше за все, не навчать продакшн-розробці. А ще не всі університети дозволяють поєднувати навчання та роботу.

Курси

Є багато курсів на Coursera, Stepik, EdX. Пошукайте лекції на YouTube, а питання ставте в коментарях. Ще можна читати Хабр. Щоправда, корисно там далеко не все. Але за тиждень можна знайти пару хороших статей, які розширять світогляд і можуть одного разу стати в пригоді на співбесіді.

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

Ментор

Ще варіант — робота з ментором. Поруч з вами буде людина, яка зацікавлена, щоб ви пройшли курс і отримали конкретні знання. Якщо пощастить і ви будете хорошим учнем, вам запропонують влаштуватися в компанію або, як мінімум, передадуть ваше резюме менеджеру.

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

Але ментора треба шукати так само уважно, як і психотерапевта. Навіть якщо наставник хороший фахівець, може виявитися, що вам з ним неприємно працювати. Через відсутність методиста отримані знання можуть виявитися однобокими та погано збалансованими. Наприклад, якщо ментор вважатиме неважливим вивчати unix, ви його не торкнетеся.

Платні курси. Я викладаю в Яндекс. Практикумі, де дається дуже багато теоретичного матеріалу і є навчальні проєкти, на яких можна тренуватися. Куратори і наставники дбають, щоб розробники отримали релевантний досвід, працевлаштувалися в компанію і почали кар'єру в ІТ. Вони завжди відповідають на питання і допомагають зорієнтуватися в невідомій темі. Але завдання однакові для всіх студентів. Тому якщо ви хочете щось конкретне, доведеться займатися цим додатково, а не замість проєктів курсу.

Мені подобається підхід, коли платні курси стають бейзлайном — основною лінією, по якій йде навчання. Але завжди будуть теми, які зрозумілі не до кінця або залишають нові питання. Щоб заповнити ці прогалини, можна знайти матеріали на YouTube, Хабр або в книзі, попросити поради у наставника, почитати й додатково розібратися.

Паралельно я викладаю на Learn Python. Тут не допомагають працевлаштуватися, але зате можна розібратися, чи підходить мені ця професія і чи захочу я займатися цим в майбутньому. Там є матеріали, які розраховані на всіх, а далі йдуть самостійні проєкти. Студент вибирає, що хоче реалізувати за умовні вісім тижнів, і паралельно з наставником працює над проєктом.

Як підготуватися до співбесіди

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

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

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

Хорошим показником готовності до співбесіди буде наявність працюючого проєкту на GitHub, який ви можете використовувати у своєму житті. Я вже писала на початку про бота, який допомагає скласти список покупок. Якщо є такий або інший аналогічний за складністю проєкт, ви його написали й самі користуєтеся, викладайте на GitHub і розсилайте резюме з супровідними листами. Це вже хороший старт.

Що почитати

Telegram-канали

  • Бібліотека програміста — публікують добірки книг і інструментів, інструкції, аналітику і все інше, що допомагає зануритися в IТ-сферу та освоїти розробку.
  • NOP:Nuances of programming — авторські матеріали та переклади статей, пов’язаних з програмуванням.

Книги

  • «Кар’єера програміста», Макдауелл Лакман». Автор пише про свій досвід співбесід в найбільших IТ-компаніях. У книзі 189 завдань і питань, які допоможуть заповнити прогалини в знаннях і підготуватися до інтерв’ю.
  • «Досконалий код», Макконнелл Стів. Багато порад і рекомендацій, які навчать писати код краще і чистіше, проєктувати з максимальною продуктивністю, швидко знаходити в проєкті проблеми і розробляти якісніше.
  • «Чиста архітектура», Мартін Роберт. Книга про архітектуру і дизайн-коди. Автор пояснює, що і чому слід робити, щоб стати успішним програмістом. Багато розповідається про об'єктноорієнтоване програмування, але всередині використовується Java.

Ще раджу пару раз на тиждень читати статті на Habr за будь-якими темами, щоб не випадати зі стану «я вивчаю програмування».

Онлайн-курси, щоб прокачати Python:

Хочете повідомити важливу новину? Пишіть у Telegram-bot.

А також підписуйтесь на наш Telegram-канал.