Ми зробили скорочену розшифровку з головними думками з Python Junior Podcast: у ньому ми обговорили, з чого починати і куди податися розробнику-початківцю на Python. Останнім часом у нас багато контенту для міддлів та сеньйорів, але цей випуск – точно для джунів.

Головні теми:
- Які знання потрібні програмісту-початківцю, щоб займатися
веб-розробкою? - На що чекають роботодавці від розробників?
- Що робити, щоб знайти роботу без досвіду?
- Як може розвиватися Python-розробник?
Python Junior Podcast - подкаст про програмування для тих, хто хоче краще розбиратися в Python. Ефіри ведуть євангелісти спільноти та викладачі курсів .
У розмові брали участь:
- Валентин Домбровський,співзасновник MoscowPython
- Злата Обухівська, тимлід NVIDIA
- Григорій Петров, євангеліст MoscowPython
- Олексій Штирняєв, розробник у FinEx, викладач курсів Learn
Python
Чому Python хороший для веб-розробки
Валентин Домбровський: Чому Python підходить для веб-розробки? Чому не PHP чи JavaScript, наприклад?
Григорій Петров: Адже вибору особливо немає. Незважаючи на те, що в сучасному Інтернеті можна фактично без бекенда - суто на фронтенд-технологіях, на JavaScript - зібрати собі single page application або progressive web application, все одно це занадто складно, погано індексується і вимагає крутих розробників.
Якщо ми хочемо зробити сайт чи сервіс, ми використовуємо комбінований підхід: у нас якийсь бекенд здійснює логіку та створює веб-сторінки та якийсь фронтенд малює ці веб-сторінки у браузері. І коли нам треба швидко це все чимось зібрати, то вибору особливо немає.
Розгляньмо можливі варіанти.
- C#. Microsoft дійсно молодці, вони зробили .NET Core і всіляко її просувають. Але, по-перше, це нова кросплатформова технологія, і там ще не все гладко. По-друге, це справді дорого, розробників C# мало - просто тому, що вона непопулярна.
- Java. Це складно. Зробити нормальний сайт на Java – це не 10 рядків коду, як на Python. Це багато коду, це фреймворки і потрібно знати специфіку налаштування Java-серверів. Загалом, суцільні біль та страждання.
- PHP. В останніх версіях він чудовий. Я навіть так скажу: PHP 7.2 не гірший за Python. Але не можна просто так взяти та використовувати PHP 7.2. Якщо звичайний, не топовий розробник робить сайт на PHP, він не писатиме тільки на 7.2: все одно доведеться читати якісь підручники, туторіали, скрізь купа legacy-коду, і це не дуже добре.
- JavaScript та Node.js. Це чудово і дуже сучасно, коли одна мова і на фронтенді, і на бекенді. Лише не дуже стабільно. Node.js - хороша штука, але проблематично розгорнути її в продакшені так, щоб вона не падала і працювала стійко. Плюс, якщо ми хочемо писати якісний код JavaScript, нам потрібен не JavaScript, а TypeScript. А ось TypeScript несподівано складний, побачивши його у рядового розробника закипають мізки.
Давайте опустимо Ruby, Haskell, Erlang та інші нішові штуки, і ми залишаємось… Python. Мова з консистентним синтаксисом, єдиною стандартною бібліотекою, найкращою документацією, популярними легкими фреймворками, мегапопулярним комбайном Django.
Виходить, що, незважаючи на широкий вибір, якщо у нас звичайні, не топові розробники, ми звичайний бізнес, який хоче робити звичайні сайти, у нас немає відділу розробки на 50 осіб, то ми беремо Python.
Які знання потрібні для входу до професії
Злата Обухівська: Я вважаю, що один фреймворк треба знати добре — і знати, які ще бувають і коли використовуються. Де Tornado, де Django, де Flask, де aiohttp і так далі.
Знадобиться знати, що є така штука, як протоколи. Зокрема, знання протоколу http – центральне для побудови веб-додатків.
Ще потрібно хоча б приблизно уявляти, як у веб-проектах влаштований фронтенд: що є HTML, CSS, JS.
Олексій Штирняєв: І знати де лежить документація. Це найголовніше.
Григорій Петров: Тут ми ступаємо на дуже хиткі ґрунти. Якщо нам не пощастило і ми почали якось серйозно вивчати сучасний фронтенд, то він буде приблизно раз на 10 складніший, ніж бекенд на Python. Розробнику, що починає, потрібно обмежити свій фокус так, щоб почати вивчати HTML, але щоб не провалитися у всі ці div, span, float, як там все вирівнюється і вибудовується.
Олексій Штирняєв: Потрібен базовий курс з Bootstrap. І основи HTML.
У перший рік не варто заглиблюватися в JS-фреймворки (якщо ви фокусуєтеся на бекенді). У базовому курсі по Bootstrap вже є готові модулі: хочеш слайдер – роби слайдер, хочеш плаваюче меню – зроби плаваюче меню.
Злата Обухівська: Думаю, що за вивченням фронтенду можна поринути, зокрема, в те, як взагалі статика віддається веб-додаткам. Так розробник плавно переходить до того, щоб почати дізнаватися, як у принципі влаштована архітектура веб-додатків та як вони живуть на продакшені.
Григорій Петров: Так, порекомендую відразу на той випадок, якщо ви вибрали Python як мову бекенд розробки і, наприклад, Django як фреймворк: у Django є документація в Django Book, вона реально кльова, в ній все те, про що сказала Злата, вона і правда хороша для початківця.
Олексій Штирняєв: Ще для швидкого старту підійде якийсь Django Girls, якщо мета – вивчити саме Django. Це такий туторіал, де за один день можна пройти верхи, зрозуміти основи і те, на що здатний фреймворк.
Валентин Домбровський: Готуючись до запису подкасту, ми склали список того, що потрібно програмісту на Python для веб-розробки, чим і резюмуємо сказане раніше.
Що входить до базису для веб-розробки на Python
- Веб-фреймворки Django, Flask, aiohttp, Tornado і т. д. (і знати про існування інших).
- Протоколи та API: насамперед http, JSON-RPC, Protocol Buffers, gRPC.
- ORM та міграції, реляційні бази даних, SQLAlchemy, SQL, PostgreSQL, MySQL.
- Основи HTML, CSS, Bootstrap, а також JS-фреймворки та JQuery.
- Принципи роботи програм на продакшені, тестування, юніт-тести, автотести, системи контролю версій, git.
Чи потрібні джуніору алгоритми
Злата Обухівська: Спочатку не потрібно знати алгоритми, вони самі поступово з'являться в голові, якщо розробляти досить довго. Я знаю купу хороших інженерів, які не мали хорошого формального курсу алгоритмів.
Григорій Петров: Я хочу підлити олії у вогонь. Ось звідки взагалі береться наша тяга до алгоритмів?
У нас зараз немає фундаментальної освіти за алгоритмами, у нас не вміють навчати програмістів, немає технічної бази.
Це намагаються робити, але тут у нас історія Гоґвортсу: ми не можемо зробити школу чарівників, поки ми не маємо жодного чарівника. Тому що робити університету, до якого приходять і просять: «Почніть навчати програмістів», а програмістів у них немає, бо всі працюють у Mail.ru, Rambler та «Яндексі», їм там добре?
В університеті дивляться та кажуть:
- О'кей, програмування. Давайте знайдемо якусь суміжну галузь знань та запросимо фахівців звідти. Давайте запросимо журналістів, які вміють писати текст, інженерів-електриків, які вміють робити електричні схеми та математиків, які вміють в алгоритми.
У результаті виходить, що це настільки ж доцільно, як навчати будівельника фізики елементарних частинок лише тому, що цегла і цемент складаються з елементарних частинок.
При цьому про сам цемент і цеглу не розповідають, бо фізик, який намагається навчити будівельника, будувати не вміє. У результаті отримуємо будівельника, який може чудово розписати, як «працює цемент», але жодного разу його не бачив і робити з нього нічого не вміє.
Алгоритми та структури даних – це дуже добре, але це дуже маленька прикладна область. Вони гостро потрібні, наприклад, якщо ти пишеш ігровий движок, компілятор, мережевий протокол.
Більшість програмістів вирішують бізнес-завдання, де не потрібні алгоритми та структури даних.
Там найскладніша математика — це двічі скласти, та був розділити. Там потрібні зовсім інші знання. Для вирішення бізнес-завдань потрібні в основному прикладні, а не фундаментальні знання.
Розробнику-початківцю краще мати уявлення про бізнес і про те, як правильно і швидко збирати з готових блоків потрібні конструкції, як їх налагоджувати, як робити так, щоб вони не розвалювалися, знати, чому вони розвалюються, що відбувається, коли змінюються вимоги і програма починає «Сідати на фундаменті», як будинок після дощу.
Ось ці прикладні штуки та розуміння того, як писати софт. Йому треба знати, що, крім відладчика, у нього є набір інструментів, який покаже, де саме програма гальмує.
Валентин Домбровський: Мені таке порівняння спало на думку: це переклад з мови бізнесу на мову, якою можна спілкуватися з комп'ютером. Тобто програміст — такий собі специфічний лінгвіст.
Григорій Петров: Бізнесу потрібний письменник, а не лінгвіст. Письменнику не треба знати, чому тисячу років тому це слово трансформувалося ось у те. Йому треба вміти застосовувати ці слова.
Що потрібно, щоб знайти першу роботу розробником
Олексій Штирняєв: Напевно, немає універсального рецепту, за яким потрібно готувати джуніор.
Якщо ви приходите до якоїсь компанії, вас візьмуть не за те, що ви знаєте Django, JSON та трохи алгоритмів. Вас швидше за все візьмуть за ті скіли, які тут і зараз потрібні цій компанії.
Компаній багато, і всі різні вимоги. Немає такого універсального обсягу знань, які потрібно отримати, щоб далі підготувати резюме та йти працевлаштовуватись.
Григорій Петров: Коли ми у VoxImplant шукали кількох джунів, наш технічний директор сформулював базову вимогу так: людина має вміти вирішувати завдання. Зрозуміло, що джун це робитиме не завжди ефективно, не найкращим способом і не завжди правильно, але в ідеалі ти ставиш людині завдання, він напружується та вирішує його. Це той скілл, який насамперед шукають роботодавці.
Злата Обухівська: Люди, які шукають роботу, переходячи з інших областей, мають з погляду бізнесу певну перевагу, бо вже пройшли якийсь шлях і вміють вирішувати завдання швидко. Це soft skills, я б це назвала навіть трудовою культурою. Найчастіше у випускників вишів ця трудова культура ще не напрацьована.
Але мені хотілося б таки спробувати дати якийсь рецепт початківцям.
Перші кроки для розробника-початківця
Злата Обухівська: Перше — це якийсь свій проект, бо в резюме треба щось написати, показати мінімальне портфоліо. Круче, коли ці проекти зроблено не для себе, а на фрілансі — для когось.
Після перших проектів вже можна робити резюме та розсилати його у всі компанії, де є джунівські позиції. Співбесіди дадуть розуміння того, що потрібно компаніям. Рано чи пізно вас хтось візьме, хоч би в маленьку компанію. Згодом цей досвід роботи дасть вам можливість потрапити в компанію якомога більше і цікавіше.
Валентин Домбровський: До речі, ми на курсах готуємо учнів до того, щоби у них з'явився свій проект за 10 тижнів навчання. Плюс тренуємо навичку командної розробки. Це якраз ті soft skills, про які говорила Злата.
Олексій Штирняєв: На досвід скажу, що першу роботу можна шукати дуже довго. Коли ви шукаєте місяць-два – це нормально. Якщо ви подаєте резюме у всі компанії, ходите на співбесіди, на третій місяць ви обов'язково знайдете щось.
Валентин Домбровський: Можна пиляти свої проекти або брати прості проекти на фрілансі та паралельно займатися розсилкою резюме.
Які перспективи є у Python-розробника
Злата Обухівська: Python-розробник може піти будь-куди. Можна піти у тестування, продовжити розвиватися до senior-архітектора. Або навіть у менеджмент. Технічні менеджери бувають різні, і можна зрости до топ-менеджменту. Можна розвиватися в data science, DevOps, піти до автотестів або machine learning.
Валентин Домбровський: Загалом варіантів маса, можливостей також, у тому числі наші курси. Знань на вході потрібно не так багато, але бажано потім охопити широкий спектр, тому що чим більше ви зможете, тим краще для вас.
***
Це лише частина випуску . Повну версію епізоду можна .
Або навіть подивитися:

Дякую, що прочитали, послухали чи подивилися.
Джерело: habr.com
