Що має знати Senior Python Back-end Developer. Аналіз вакансій в Україні та Каліфорнії
Це сьома стаття серії «Що має знати Senior». Цього разу йтиметься про Senior Python Back-end Developer.
Ми «вручну» проаналізували 50 вакансій, в тому числі 25 вакансій в Україні, розміщених на DOU та актуальних станом на
Для зручності сприйняття всі дані показано у відсотках.
Вакансії яких компаній потрапили в дослідження?
Україна: 4bill.io, AgileEngine, BCD TripTech, Bintime, Blackbird Lab, Brainberry Group LLC, CodeIT, Corva.AI, Daxx, Edvantis, FigLeaf, HealthJoy, Intel 471, ITRex Group, Lohika, Luxoft, Medstar, Mriyar, N-iX, OpenVPN, People.ai, Sailo, SciForce, Qubit Labs, WebiNerds.
Каліфорнія: AccountingSuite, Albert, ALTEN Calsoft Labs, Altitude Networks, AVANI, Averna, BigBear, Collabera, Decision Engines, eMoney Advisor, EPAM, Eventbrite, Freedom Robotics, Globality, LanceSoft, Monarch Money, Nirvana Enterprises, Obsydyan, Optello, Redolent, SurveyMonkey, Tech mahindra, The Dotcom Team, TrueAccord,
Освіта, база та стандартний стек
Вимогою номер один в Каліфорнії є профільний диплом бакалавра. Там він потрібен у більшості вакансій. В Україні ж 84% не згадують освіту взагалі.
Освіта
Наступна група технологій є стандартним стеком Python-розробника. Часто їх не пишуть у вакансіях, бо те, що це треба знати, є і так зрозумілим.
Django вказують як вимогу дещо частіше, ніж Flask, 36% проти 28% в Україні. 16% вакансій в Україні вимагають Python 3. 24% — знання будь-якої RDBMS. А як решта, спитаєте ви? Усе просто: такі знання здебільшого не вказують.
Конкретною базою даних, яку найчастіше вимагають у вакансіях, є PostgreSQL — 24% в Україні.
Стандартний стек Python-розробника
Знання, що визначають професіонала
Безсумнівно, знання лише стандартного стеку навряд чи зробить вас спеціалістом рівня Senior. Вакансії усипані згадками різноманітних технологій. Ті, що трапилися
На нижченаведених діаграмах зазначено як вимоги, так і побажання. Ми бачимо, що технології рівня Advanced часто вказують саме як «буде плюсом».
Технології персистентності та Big Data, search engines та message brokers
Контейнеризація та хмарна інфраструктура
Є ціла низка концептуальних знань та інфраструктурних інструментів, без яких неможливо уявити собі професійну розробку. 32% вакансій в Україні вимагають від розробника вміти протестувати свій код. 24% українських роботодавців вказали, що очікують знання Git. Для когось важливий Linux, для інших — знання мікросервісної архітектури або TDD. Нижченаведені діаграми слугують нагадуванням, без яких компетенцій не обійтися на серйозному комерційному проєкті.
Концептуальні знання
Інфраструктура
Знання «фронту» від Python-розробників очікують не так часто, як від їхніх колег, що спеціалізуються на PHP. В останніх JavaScript вимагали понад 50% вакансій. Але мати уявлення про Front-end Python-розробнику теж не завадить і часто буде конкурентною перевагою. Цікаво, що React виявився більш затребуваним, ніж Angular. А ще каліфорнійські вакансії частіше висувають саме вимогу знати Front-end, у вакансіях України ж це здебільшого побажання.
Front-end
Буде плюсом: AWS, JavaScript, React, Docker, Kubernetes, Machine Learning, Kafka, NoSQL
Технології, згадані у вакансіях як плюс, можна розглядати як найбільш перспективні для вивчення. Ці знання потрібні роботодавцям, але знайти спеціаліста, який ними володіє, не завжди можливо. Тому компанії готові не вимагати їх від кандидата, але однозначно віддадуть перевагу тому, хто ці знання вже має.
У 40% вакансій в Україні зазначено, що буде плюсом знання AWS. Далі йде JavaScript, вказаний як плюс у 24% вакансій, і React — 20%. Відтак Docker і Machine Learning, що мають по 16% згадок як плюс. А за ними, маючи по 12%, Kafka та NoSQL.
У Каліфорнії як плюс найчастіше вказували AWS і Docker — по 16%. Далі — Kubernetes і JavaScript, по 12%.
На цій групі технологій варто зосередити свою увагу розробнику, що прагне мати конкурентну перевагу на ринку праці.
Soft skills
Коли розробник досягає рівня Senior, стає ще більш важливо, як він взаємодіє з іншими людьми. Чи здатен він бути ефективним ментором для менш досвідчених колег. Серед так званих soft skills від Senior-пайтоніста найчастіше очікують комунікаційних, а в Каліфорнії ще й лідерських навичок.
Вимога номер 1 в Україні — англійська мова, або Як заробляти на 9k/рік більше
Роботодавці України завзято вказують у вимогах англійську мову. Ця тенденція повторюється від спеціалізації до спеціалізації протягом усіх випусків цієї серії. Як правило, їм потрібні два рівні володіння мовою: Intermediate та Upper-Intermediate. Те, що про це доводиться писати більшості учасників ринку, говорить про те, що з мовою у нас в країні проблеми. А отже, інвестиція в знання мови є одним із найбільш раціональних рішень, яке ви можете ухвалити.
Погляньмо на зарплати Senior Python Software Engineer залежно від рівня володіння англійською. На жаль, дані ще грудневі, докарантинні, але тенденцію за ними цілком можна побачити.
Intermediate. 20 анкет. $3757 на місяць після податків.
Upper-Intermediate. 29 анкет. $4062.
Advanced. 10 анкет. $4539.
Тож, інвестувавши в англійську, отримуємо чималий приріст у зарплатні. Зростання з Intermediate до Advanced дає (4539 — 3757) x 12 = $9384 на рік.
Досвід. 5 років — перепустка в сеньйори
Якщо дивитися на досвід, який вимагають у вакансіях, то, як правило, це
Цікавинки, знайдені у вакансіях
Україна
Компанія BCD TripTech (Київ), попри коронакризу, шукала розробника для створення програмного забезпечення, призначеного для бронювання ділових подорожей. Працювати можна віддалено.
People.ai шукає розробника з 10+ роками досвіду.
Каліфорнія
У вакансії EPAM сказано, що компанія серед іншого пропонує Pet Insurance.
Думки технічних експертів
Владислав Бондар, Python Tech Lead в Wargaming
Незалежно від мови програмування, Senior — це певний рівень компетенцій та досвіду. Насамперед йдеться про вміння брати відповідальність за свої рішення.
Безперечно, ця людина має володіти глибоким технічним бекграундом. Необов’язково досконало знати певний фреймворк, але важливо розуміти, як вони будуються і працюють, що таке ORM, коли й навіщо їх використовувати, і, безперечно, добре розумітися на Python (asyncio, concurrency, PEP8, stdlib тощо). Ба більше, компетенція Senior — це великий обсяг знань і технологій, з якими треба працювати, бо голі знання мови програмування мало чого варті. З того, що спадає на думку:
- Реляційні СУБД (PostgreSQL, MySQL, MariaDB тощо), вміння не тільки робити SQL-запити, а й «тюнити» їх, а ще краще вміти тюнити сам сервер. А ще проєктувати БД.
- NoSQL. У Python-середовищі знання Redis — це майже must have.
- Знання Linux, bash, Unix Socket.
- CI/CD.
- Вебсервери (Nginx, Apache тощо).
- Брокери повідомлень (RabbitMQ, Kafka тощо).
- Розуміння HTTP.
Узагалі все й не перерахуєш, технології невпинно змінюються та розвиваються. І щоб не пасти задніх, людина має постійно вчити нове та самовдосконалюватись, залишатися, так би мовити, на гребені хвилі. Це звичка вчитися та вчити інших.
І наостанок ще одна з надважливих якостей — вміння працювати з технічною документацією та вихідним кодом.
Александр Березовский, Lead Python Engineer в EPAM
Каждый разработчик проходит в своей карьере этапы взросления от Junior до Senior. Начинающий изучает технологии, фреймворки. У Middle акцент смещается на подходы к разработке, шаблоны проектирования. Senior — это разработчик, фокус внимания которого смещается от технологий к проектам, бизнесам и решениям конкретных задач и проблем.
На мой взгляд, Python — это не тот язык, где можно определить фреймворк или подход, который может не знать Middle, но обязан использовать Senior. Но есть несколько книг, на которые должен обратить внимание каждый. Я периодически просматриваю «Шаблоны корпоративных приложений» Мартина Фаулера и «Совершенный код» Стива Макконнелла и всегда нахожу для себя новые нюансы. Также рекомендую прочитать «Программист-прагматик» Эндрю Ханта и Дэвида Томаса. Эта книга стала для меня в некотором роде открытием: в ней сформулированы в четкой и выверенной форме навыки, которыми, по мнению авторов, должен обладать каждый высококлассный программист.
В целом невозможно стать сеньором просто штудируя документацию и вбивая в голову книгу «Банды четырех». Кроме глубины знаний, нужны опыт и широта взглядов. Вопрос «почему это сделано именно так?» должен постоянно витать в голове. Я уверен, что у каждого инженера мелькали мысли: «Да почему так плохо сделано?!», которые заканчивались часами исследований дебрей исходников. Часто там обнаруживалось просветление и понимание, что совсем неглупыми были люди, которые это писали.
На конференции PyCon в 2018 году прозвучала мысль: «Python — это второй лучший язык программирования для всего» (первый у каждой доменной области — свой). И я с этой мыслью согласен. Python-разработчик может понадобиться на любом проекте, в любой доменной области. Поэтому Senior должен уметь быстро учиться, находить общий язык с командой и заказчиком и не бояться открывать для себя новое: работая с Java, Go, C++ инженерами, невольно для себя почерпнешь нечто неизученное ранее, что однажды сможешь применить.
Вадим Заболотный, Python-разработчик в Beetroot
Любой Senior Developer — это в первую очередь человек с большим багажом опыта и знаний. Специалист, способный видеть перспективу и предвидеть возможные пути развития системы, разработать несколько решений и выбрать оптимальный.
Python применятся во многих областях: Web, DevOps, Machine Learning и так далее. Соответственно, список технологий и навыков специалиста — огромный. Но если мы остановимся только на Web Back-End, то речь пойдет обо всем — от обозревателя до баз данных:
- протокол передачи данных HTTP и все, что с ним связано: REST, SOAP, WebSockets и т.д.;
- фреймворки и ERP системы различных калибров, например: Django, Flask, aiohttp, odoo, PyTest, Locust;
- базы данных — как SQL, так и NoSQL: их плюсы и минусы, проектирование БД, оптимизация запросов;
- инфраструктура: Docker, Kubernetes, CI/CD.
Что касается технических умений, это лишь малая толика того, в чем должен хорошо ориентироваться Senior-разработчик. Но эта позиция требует быть не только хорошим специалистом в узкой области, но и обладать хорошими коммуникационными способностями, т.к. зачастую приходится доносить свои мысли команде, делиться опытом, иногда разрешать спорные моменты. Сюда также можно отнести умение быть лидером, нести ответственность за свои решения и команду, если потребуется.
Олексій Шевело, викладач курсу «Технології програмування» в КПІ, Python Software Development Lead у SoftServe
Вузьку експертизу та знання Python вимагають ще з рівня Middle+, а от Senior-розробник повинен мати ширше бачення, як виправити проблемні моменти на проєкті загалом.
Python + jack-of-all-trades. Senior Developer — це насамперед про готовність бути в ролі досвідченого Python-розробника, DevOps-інженера, архітектора та Lead’а команди одночасно.
Написання коду + broad vision і supervision. Senior-спеціаліст готовий відповідати на виклики не лише зміною коду (коли це потрібно), а й чітко поставленою комунікацією, розуміється на потребі заміни технічного обладнання чи зміні технологій. Тобто для цього рівня потрібно знати не лише технічну частину, а й можливості, вартість, складність завдання для команди та пріоритетність виконання.
Розуміння бізнесу. На жаль, багато розробників не розуміють прямого зв’язку між їхнім кодом і потребами бізнесу. Не завжди технологічно вдале рішення є оптимальним з погляду закриття бізнес-потреби. Часом після аналізу деякі клієнтські завдання виявляються непотрібними, бо насправді не закривають чи не повністю закривають бізнес-потребу.
Комунікація з нетехнічними стейкхолдерами. Щоб уникнути марної роботи та завдань для команди, потрібно вміти пояснювати складні технічні моменти нетехнічним спеціалістам. Розробницька команда очікуватиме, що саме Senior буде їх представляти в перемовинах з PM або ж замовником, до прикладу, у разі рефакторингу чи зміни технологій.
DevOps-практики як обов’язкова складова багажу Senior’a. Крім технічних знань з алгоритмів, структур даних, об’єктно-орієнтованого програмування тощо, спеціалісту потрібні знання DevOps: від розуміння того, як влаштовані серверні операційні системи, до CI\CD. Адже саме Senior Developer обиратиме методи розгортання програмного забезпечення та налаштування вебсерверу.
Розуміння архітектури та вміння застосовувати відповідні патерни. Senior Python Developer має розуміти, в яких випадках та які саме архітектурні патерни доцільно застосувати.
Серед прикладів:
- ситуації, коли потрібно змінити підхід з алгоритмічного для витіснення швидкодії з коду і перейти на C++ модулі, залишивши у Python тільки інтерфейси;
- ситуації, коли проєктування REST API повністю лягає на плечі бекенд-команди. Тоді саме Senior як представник розробницької команди вирішує доцільність використання патернів з огляду на бізнес-потреби та комунікує рішення фронтенд-розробникам.
Сергій Тарковський, Senior Python Developer у Svitla Systems
З власного досвіду скажу, що важливим є не лише вміння розв’язати задачу клієнта на обраному стеку технологій, а й побудувати рішення «під ключ» — від фронтенду (хоч і не феноменального) до деплойменту.
Опануйте свій основний стек досконало, глибокі знання одного із фреймворків та бази даних є обов’язковими на ринку.
Проте не забувайте про розвиток знань із супутніх стеків, хоча б до середнього рівня. У них обов’язково має входити JavaScript і React або інші бібліотеки. Оскільки інколи в проєкті виникає потреба працювати з кодом, написаним чужою мовою, жодні додаткові знання не будуть зайвими.
Робота в проєкті не обмежується лише кодом, часто потрібно спілкуватись із командою та замовником, отже, комунікативні навички теж цінні. Тому вчіться пропонувати рішення, оцінювати терміни виконання завдань (навіть якщо умови не до кінця визначені), звітувати про виконану роботу та розуміти різні акценти англійської. Загалом вміння підтримати розмову ніколи не завадить.
Ще один складник успіху — організована робота. Хоча б мінімальні управлінські знання та основи Scrum точно знадобляться.
І для загального розвитку раджу погуглити Dreyfus model of skill acquisition.
Володимир Головко, Senior Software Engineer в N-iX
Для будь-якого Senior-розробника першочерговими є вміння аргументувати свій вибір, правильно доносити «чому так, а не інакше» до замовників і колег. У сеньйорів уже є достатньо знань і досвіду, щоб робити вклад в екосистему навколо. Прояв цього — внесок в open source та наявність комітів у release notes відомих пакетів. Таке цінують (будь-де, і у нас, і в Каліфорнії), адже це показує ініціативу, спрямованість і компетентність фахівця.
Якщо вам стане цікаво, чим керувалися дизайнери мови Python (Guido & Associates), коли працювали над структурами даних, синтаксисом і семантикою, зможете дізнатися про всі аспекти та мотивацію з відповідних PEP’ів. Це одна з відмінних ознак Python від решти мов програмування. Є змога простежити філософію та метафізику, бачення авторів, щоб почерпнути багато для себе та своїх проєктів. Знання кількох важливих PEPs є неодмінною ознакою зрілих Python-розробників.
Динамічна типізація вимагає більшої дисципліни від програміста, ніж статична, адже потенційна кількість runtime-помилок є величезною. Тому для такої ліберальної мови, як Python, гостро стоїть питання наявності значної кількості тестів (unit, component, integration, E2E тощо) для production-grade коду. Відношення та напрацьовані підходи (типу TDD) до написання тестів (більш-менш) виділяють людей рівня Senior з-поміж мідлів та юніорів.
Поширеність в академічних колах, в ML для побудови нейронних мереж (TensorFlow), популярність серед системних адміністраторів та DevOps (Ansible), широке застосування в Embedded development (Arduino, Raspberry Pi) вказують на те, що Python з нами надовго. Вірю, що будь-які намагання підвищити свою компетентність і розширити кругозір (у вигляді pet-проєктів та контрибуції в затребувані пакети) повернуться сторицею.
Візуалізація даних: Ігор Яновський