Junior, Middle, Senior: чого ми очікуємо від кандидатів на позиції Python-розробників

9 листопада
Віктор Свірський, Senior Python Developer
Junior, Middle, Senior: чого ми очікуємо від кандидатів на позиції Python-розробників
Перш за все, хочу зауважити, що в DataArt ми дивимось на традиційну систему грейдів трохи по-своєму, використовуючи 6 рівнів: Junior, Strong Junior, Middle, Strong Middle, Senior, Expert. Проміжні грейди дозволяють дати більш точне уявлення про рівень професійної підготовки кандидата чи колеги. Наприклад, Strong Middle — розробник із 3–4 роками досвіду, якому до рівня Senior залишається зовсім небагато. Уважний читач одразу помітив і рівень Expert — це спеціаліст, який досяг певного дзену. Експерт почувається в темі, як риба у воді, та має величезний досвід. Він будував свою кар'єру, глибоко занурюючись у технологію та працюючи з кількома фреймворками в різних напрямках. Важливо, що він може успішно розв’язувати задачі й у суміжних технологіях.

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

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

JUNIOR

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

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

Кандидат має розуміти влаштування HTTP-протоколу та вебу загалом, мати принаймні теоретичне уявлення про REST API. Вкрай бажано мати досвід з одним із веб-фреймворків. Оскільки в інформаційному світі не можна обійтися без баз даних, ми обов'язково розмовляємо з кандидатами про основи SQL, обговорюємо JOIN, взаємозв'язки сутностей і запити. Якщо людина добре підготовлена й не спала на парах в університеті, можемо обговорити принципи розробки ПЗ. Певний досвід роботи з GIT ми вважаємо обов'язковим, досвід з HTML, CSS, JS і базами даних зараховуємо як плюс у карму.

MIDDLE

Із цим грейдом все трохи складніше — кандидат має володіти всіма знаннями, потрібними джуніору, але на більш глибокому рівні. До того ж ми чекаємо від нього навичок, які на початковому етапі кар'єри можна назвати необов'язковими. Приблизний досвід мідл-розробника становить 2–3 роки. Він готовий до зустрічей не лише всередині команди, а й із замовником. Як правило, в нього вже з'являється початковий досвід керівництва або наставництва. І звичайно, він уже готовий працювати самостійно та розв’язувати поставлені задачі, не вимагаючи детальної інструкції.

Щодо технічної частини, ми очікуємо базового досвіду роботи з паралельними обчисленнями, розуміння відмінностей і принципів роботи потоків і підпроцесів, знання, що таке GIL, навіщо він потрібен і як працює. На рівні Middle вже необхідно не лише теоретичне уявлення, а й практичний досвід роботи з серверами застосунків, юніт-тестуванням, алгоритмами і структурами даних. Кандидат має добре розуміти проблеми безпеки: CSRF, CORS, XSS, SQL-ін'єкція, та оптимізації: профілювання, EXPLAIN ANALYZE, N + 1.

Крім того, ми розраховуємо на базове розуміння життєвого циклу програми та уявлення про ключові компоненти: балансувальник навантаження, сервер застосунків (uwsgi, gunicorn), воркерів. Сподіваємось на деяку практику c контейнеризацією: Docker, Docker compose, і наявність досвіду роботи з системами моніторингу помилок і стану системи.

Механізм баз даних потрібно розуміти вже досить глибоко: знати просунуті запити та їхню механіку, розуміти, що таке нормалізація/денормалізація та транзакції (хоча б у теорії), мати практичний досвід з роботою індексів. Вітаються базові знання та досвід роботи з мікросервісною архітектурою, а також відкладеним виконанням задач: Celery, RQ, Airflow.

SENIOR

Зазвичай такі кандидати вже мають 4–5 років досвіду в розробці, вони мають впевнено почуватися на зустрічах із замовником і бути у змозі відстояти своє рішення. Сеньорні розробники можуть самостійно (або майже самостійно) працювати над задачами будь-якого рівня складності. В принципі така людина має бути у змозі без стороннього втручання реалізувати дизайн-рішення та провести аналітичну роботу, зокрема дослідження, потрібні для більш ефективного виконання проектних задач.

Щодо технічних навичок, претендент має добре знатися на внутрішньому влаштуванні Python, реалізації GC, мати досвід роботи з AsyncIO, синхронними й асинхронними фреймворками. Важливо мати глибокі знання у сфері оптимізації рішення, чи то веб, чи то ETL-рішення, чи то фреймворк для тестування.

Зазвичай ми обговорюємо досвід кандидата в побудові SPA-застосунків, роботу з SQL і NoSQL базами даних, досвід оптимізації та роботи з транзакціями. Вітаються практичні навички роботи з безсерверною архітектурою та інтеграції з хмарними провайдерами, горизонтального/вертикального масштабування. Добре, якщо людина здатна оцінити ризики рішення до початку реалізації. Плюсом буде досвід роботи з фронтенд-фреймворком, наприклад, React, Angular чи Vue.js.

РЕКОМЕНДАЦІЇ

Варто пам'ятати, що інтерв'ю не є іспитом. Це бесіда, що дозволяє виявити, наскільки компанія та кандидат підходять один одному. Зазвичай ініціатива та найкаверзніші запитання виходять із боку потенційного роботодавця, але й кандидату не варто соромитися питати та відстоювати свою точку зору. Будьте готові, що хвилин десять потрібно буде витратити на написання коду — наприклад, розв’язати невелику задачу на знання мови чи баз даних.

Основні рекомендації прості:

  • Проробіть резюме так, щоб воно відображало ваш реальний досвід. Не варто згадувати технології, яких ви не знаєте, навіть якщо колеги використовували їх в одному проекті з вами. Перерахуйте все, з чим самі працювали на практиці.
  • Повторіть теорію, структуруйте знання, щоб не плутатися з відповідями. Якщо ви не знаєте відповіді на якесь запитання, краще відразу прямо сказати про це.
  • LeetCode — наше все! Практика, практика і ще раз практика. Багато кандидатів, навіть добре знаючи теорію, відразу губляться при розв’язанні задач. Пам'ятайте, ніхто не намагається вас завалити, а рівень задач на співбесідах зазвичай легкий. Причин для надмірного хвилювання тут немає.
  • Співбесіда — перевірка і спосіб розкритися не лише для вас, а й для роботодавця. Підготуйте запитання та сміливо їх ставте. Як мінімум, це покаже вашу зацікавленість. При вдалому перебігу інтерв'ю ви дійсно зрозумієте, чи цікавий вам проект та чи влаштовує вас оточення, в якому доведеться працювати.

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

МАЙБУТНІ ОНОВЛЕННЯ ГРЕЙДІВ

Підходи до градації, які я описав вище, спрямовані більше на класичних web-розробників. Раніше Python здебільшого використовувався для побудови web-застосунків і, скажімо, аналізу даних торкався меншою мірою. Наразі ситуація змінилась: на ринку затребувані і ETL-розробники, і дата-саєнтисти, і DevOps, що як головну мову використовують Python.

Визначити грейди таких розробників за існуючою системою може бути досить проблематично. Наприклад, розробник, який добре знає Python, але займається здебільшого обробкою Big Data, може зіткнутися з деякими дискомфортом, якщо оцінювати його будуть як web-розробника — адже в його випадку йдеться про дещо інші технології, підходи та уявлення. Такого фахівця варто було б назвати швидше Senior Python-розробником з упором на ETL. Те саме стосується дата-саєнтистів.

Нещодавно до мене звернулися HR-фахівці з проханням перевірити, чи виріс Python-левел колеги, який займається Data Science. Поспілкувавшись з ним, я зрозумів, що рівень знання Python за 10 місяців у нього виріс з Junior до Strong Junior. Зазвичай такі зміни відбуваються швидше. Але пізніше ми зустрілися з цим колегою в іншому проекті, де він відмінно справлявся з задачами як дата-саєнтист рівня Strong Middle. Зрозуміло, що числити його Strong Junior Python-розробником неправильно. Том наразі ми займаємося системним рішенням, яке усуне подібні невідповідності.

Python зростає і вже став третьою за популярністю мовою програмування. Він розвивається та охоплює все більше доменних зон. У зв'язку з цим ми в DataArt ведемо роботу з розширення і розвитку нашої градації фахівців, розробляємо стратегію оновлення грейдів відповідно до поточних і майбутніх змін. Щойно оновлення будуть готові, ми обов'язково поділимося з вами новим баченням. Залишайтеся на зв'язку!

  • Україна, Дніпро; Україна, Київ; Україна, Львів; Україна, Одеса; Україна, Харків; Україна, Херсон
    3 грудня