Автор: Виктор Свирский, Senior Python Developer
Прежде всего, хочу заметить, что в 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 ведем работу по расширению и развитию нашей градации специалистов, разрабатываем стратегию обновления грейдов в соответствии с текущими и будущими изменениями.
0 комментариев
Добавить комментарий