Привет! Это команда Яндекс Практикума. В первой половине года мы провели исследование рынка Python-разработки и узнали, как меняются требования работодателей и к чему стоит готовиться джуниору при трудоустройстве. Рассказываем самое важное.
Что мы делали
Мы выяснили актуальные требования работодателей к джуниорам, проанализировали рынок вакансий и узнали у выпускников и нанимающих разработчиков, как проходят собеседования.
Для этого мы:
провели интервью с экспертами — CEO, руководителями и синьор-разработчиками из 12 компаний, включая стартапы, средние продуктовые компании и больших игроков в ретейле, кибербезопасности и других сферах;
провели интервью с выпускниками — девятью трудоустроенными Python-разработчиками, окончившими курс «Python-разработчик»;
изучили вакансии на hh.ru — обращали внимание на количество предложений и требуемые навыки.
Так мы собрали информацию от работодателей и джуниоров и узнали, чего ждут от новичков с небольшим количеством опыта на старте.
Большинство вакансий для Python-разработчиков относится к бэкенд-разработке, поэтому статья ориентирована в основном на такой профиль специалистов. Но мы считаем, что материал будет полезен любому Python-разработчику вне зависимости от направления.
Что мы узнали
Устроиться на первую работу сложно, но возможно
Действительно, нанимающие эксперты прямо заявляют, что нанимают джуниоров нечасто. Главная причина — разный уровень кандидатов, что усложняет и так ресурсозатратный процесс отбора. Поэтому джуниоров стараются нанимать под конкретные проекты и несложные задачи, с которыми точно справится человек без большого опыта.
«Если джун приходит не из разработки, а “из поля”, то его очень тяжело оценить. И по итогу приходится тратить ресурсы на какое-то время его работы, в которое ты смотришь, тянет он или не тянет», — основатель и техлид в MedTech-проекте
Также работодатели отмечают ресурсы, которые тратятся на процесс найма. Из-за разного уровня соискателей им приходится отсматривать большое количество резюме и тестовых и тратить время на собеседования, которые не всегда приводят к результату.
«Джунов на самом деле нанимать просто, потому что к ним небольшие требования. Сложность скорее в объёме резюме. Даже в последний набор мне пришлось обработать где‑то сотню», — тимлид в EdTech-проекте
Поэтому работодатели часто выбирают более опытных специалистов или берут новичков на стажировки, неоплачиваемые или с минимальной оплатой. Программы для стажёров открываются раз в полгода или год. При наборе работодатели могут обращать внимание на образование, некоторые предпочитают брать на стажировки выпускников технических специальностей.
Выпускники отмечают сложности с поиском работы без опыта коммерческой разработки. Время поиска работы у опрошенных джуниоров в среднем занимало от двух до шести месяцев. Хотя были и те, кто устраивался сразу или даже в процессе обучения, но это скорее исключения.
Устроиться на старте сложно, но перспективы для джуниоров на рынке есть. Выпускники Практикума получают карьерную поддержку на протяжении шести месяцев после обучения — в это время они готовят резюме, учатся проходить собеседования, откликаются на партнёрские вакансии и усиливают портфолио реальным опытом в Мастерской. 73% выпускников, получивших поддержку, нашли работу за шесть месяцев. |
FastAPI — уже must have
Выбор фреймворка зависит от компании, но FastAPI действительно становится популярнее и его знание уже входит в число требуемых навыков на старте — это отмечают и работодатели, и джуниоры, и результаты исследования hh.ru.
«FastAPI потихоньку становится таким стандартом индустрии, как раньше Flask был, именно в качестве микрофреймворка», — тимлид в EdTech-проекте
Также понимание FastAPI проверяют по портфолио, на собеседованиях и в тестовых заданиях.
«Опять же, учитывая то, что джуны чуть завышают свои скилы, я бы FastAPI оставил must have… Хорошо, если пример уже есть у соискателя в GitHub», — CEO в компании-разработчике цифровых решений
Даже если в компании не используют FastAPI, знание фреймворка будет плюсом.
«Ну, сам FastAPI для нас не так важен, у нас Django и немножко Flask. Но если человек знает FastAPI, это хорошо», — ведущий бэкенд-разработчик в крупном IT-интеграторе
Устроиться без знания FastAPI пока ещё возможно, если в компании используют только Django, но это сильно ограничивает возможности джуниора в поисках работы. Поэтому, чтобы стать универсальным специалистом, рекомендуется освоить и Django, и FastAPI. Тем более, нанимающие отмечают, что разобраться с FastAPI не так сложно.
Асинхронное программирование — почти must have
Требования у работодателей различаются. У одних понимание основ асинхронного программирования пока в числе nice to have навыков. Его отсутствие не мешает найму.
«У нас такого требования нет. Для общего понимания это, конечно, нужно, но это не стоп‑фактор, поскольку у нас асинхронность особо не используется», — ведущий бэкенд-разработчик в крупном IT-интеграторе
У других работодателей, особенно использующих асинхронные паттерны, — это уже обязательный скил для трудоустройства.
«Современные фреймворки уже почти все используют асинхронные паттерны, и это уже must», — тимлид в EdTech-проекте
Общий вывод можно сформулировать примерно так: асинхронное программирование — must have для компаний, в которых оно активно используется. В других его понимание, как правило, не требуется, но добавляет очков при найме, помогает выделиться и говорит о более глубоком понимании кода.
Pytest — однозначно must have
Джуниор должен уметь писать тесты с помощью Pytest и Unittest. При этом достаточно базовых знаний тестовых фреймворков.
«Ну хотя бы написать тест, обвязку‑то ладно. Продемонстрировать умение работать с Pytest — это важно!» — тимлид в EdTech-проекте
На собеседовании у джуниора могут спросить, какие есть виды тестов и чем они различаются, использовал ли он Pytest и может ли что-то написать с его помощью. Об этом говорят работодатели — выпускники про такие вопросы не упоминали. Также навык могут проверить при просмотре портфолио.
«Он [джуниор] должен был это хотя бы попробовать. Проект в портфолио с парочкой тестов — это минимум», — разработчик в компании, которая занимается обработкой данных для ИИ
Если навыки тестирования не проверят на собеседовании, они могут понадобиться на первых этапах работы.
Работа с нейросетями — не must have
Умение работать с ChatGPT, Copilot и другими моделями не требуется, но иногда нанимающие спрашивают про опыт работы с нейросетями, так как в будущем это может сэкономить время на выполнение некоторых задач.
Пул таких задач неширокий — ИИ доверяют рутинную работу, такую как рефакторинг и оптимизация кода, объяснение новых тем (вместо Stack Overflow) и написание тестов.
«Нейросети можно использовать в работе. В первую очередь, чтобы отрефакторить или оптимизировать код, потому что какой-нибудь Claude с этим достаточно неплохо справляется. Ну и самое главное для джуниора — закидывать код и писать “объясни”, то есть использовать нейросеть как справочник», — разработчик в компании, которая занимается обработкой данных для ИИ
Иногда работодатели интересуются опытом использования нейросетей не в разработке, а на бытовом уровне.
«Если сказать по‑простому, нейросети сейчас — это как Google раньше. Причем тут тоже требуется не просто вбить запрос и увидеть какой-то ответ, а уметь находить именно нужный ответ точно и быстро. Это тоже своего рода навык. Умение “гуглить” нового поколения», — синьор-разработчик в IT-компании в ретейле
Есть и противники использования ИИ в работе. Некоторые работодатели считают, что сначала джуниору важно закрепить знания на практике и выстроить причинно-следственные связи, а для этого нужен самостоятельный опыт написания кода. Кроме того, важно помнить о безопасности данных, которые джуниоры передают нейросети.
Что ещё не нужно: match/case, WebSocket, GraphQL, Kubernetes и gRPC
В рамках исследования также проверялись гипотезы, связанные с рядом неочевидных навыков в работе начинающего Python-разработчика.
Вот какие требования не подтвердились.
match/case. Единицы работодателей считают знание конструкции необходимым, но большинство с ними не согласны. Некоторые нанимающие эксперты и сами не знают, что это такое.
WebSocket. Неплохо, если джуниор знаком с протоколом, но навык тянет скорее на nice to have, а его отсутствие не является барьером при найме.
GraphQL. По мнению работодателей, достаточно специфичная и редкая технология. Знать её джуниору необязательно. В вакансиях также не упоминается.
Облачные технологии. Скорее, лежат в области DevOps. Джуниоры, как правило, с ними не работают. Но понимание контейнеризации и умение работать с Docker — must have.
Kubernetes. Не требуется, Docker важнее. Но если в компании работают с Kubernetes, знание основ будет плюсом.
gRPC. Нанимающие эксперты считают фреймворк слишком специфичным для джуниора.
Скилсет джуниора: на что рассчитывают работодатели
Набор основных навыков, необходимых любому джуниору, включает шесть пунктов.
Python
Django (или FastAPI)
Базы данных (SQL)
Docker
Git
Linux
Если есть база из навыков выше, всё остальное можно доучить в процессе.
Более широкий и близкий к требуемому в большинстве вакансий скилсет выглядит так.
Язык программирования: Python (важно понимание ООП)
Фреймворки: Django, FastAPI, реже Flask и aiohttp
Работа с API: REST API, HTTP, Django REST Framework
Linux: терминал в Unix и Mac
Контейнеризация: Docker (Docker Compose)
Архитектура: базовое понимание серверов и сетевых интерфейсов
Базы данных: SQL, ORM (например, SQLAlchemy или Django ORM)
Контроль версий: Git, GitHub или GitLab
Трекеры задач: Jira или аналоги
IDE: PyCharm
Написание тестов: Pytest или Unittest
Ниже — навыки из числа nice to have, которые могут заинтересовать работодателя как дополнительные или требуются только в некоторых компаниях.
Асинхронное программирование: понимать, как работает и когда применять asyncio, знать, что такое event loop
Кэширование и очереди: Redis, Celery, RabbitMQ
Не менее важны софтскилы.
Адекватность
Ответственность
Инженерное (техническое) мышление
Способность к обучению
Заинтересованность в самообучении и развитии
Коммуникабельность, умение работать в команде
Мотивация и «горящие глаза»
Самостоятельность
Проактивность, инициативность
Совпадение по ценностям, идеям и «вайбу» с командой, в которую устраивается джуниор
Как устроен наём джуниоров
Обычно процесс состоит из трёх этапов: скрининга резюме, тестового задания и собеседования. Разберём каждый из шагов подробнее.
Скрининг резюме
Резюме изучают не только HR-менеджеры, но и сами нанимающие разработчики, так как по резюме они строят дальнейшее собеседование. Поэтому джуниорам не рекомендуется приписывать навыки, которых у них на самом деле нет, и упоминать инструменты, которые они знают поверхностно. Как правило, обман всплывает на собеседовании и становится главным красным флагом.
Нанимающие эксперты смотрят проекты в GitHub, обращают внимание на оформление и стилистику кода, актуализацию и прогресс, учитывают применяемые технологии. Хорошо, если проекты близки к тем, которыми занимается компания-работодатель.
«Я смотрю на GitHub. Не особо разбираюсь, что конкретно человек писал, так как на это нет времени, но если проект хорошо оформлен, есть “рюшечки”, статистика, интересные коммиты, документация — это всё равно выделяет человека», — техлид в компании в сфере кибербезопасности
Выпускники жалуются, что в вакансиях часто требуют опыт коммерческой разработки. И отмечают низкую конверсию в собеседования. Лучше ситуация у тех, у кого есть профильное образование, опыт работы в схожей сфере или максимально совпадающий со стеком в вакансии набор навыков.
Тестовое задание
Этап с тестовым заданием есть не всегда, так как не все работодатели готовы тратить время на их проверку. В тестовых обычно дают небольшие задачи, приближенные к реальным из рабочей практики компании.
Задачки могут быть совсем простые, чтобы отсеять совсем ничего не знающих новичков. Например, «напишите программу, которая делает ZIP-архив».
«Первое задание чисто на знание базы Python. Что такое декораторы, как работать с типами. Прям вот entry level», — тимлид в EdTech-проекте
Это подтверждают и выпускники.
«Первое было совсем простое — поднять в FastAPI приложение. А второе — реализовать в нём бизнес-логику. Купи, продай, положи в корзину, удали из корзины. Самое обычное», — выпускник Практикума
При проверке задач также смотрят на логическое мышление, сообразительность, стилистику кода, аккуратность.
«Прикольно давать задания, связанные с Википедией. Там всегда есть два варианта решения: либо парсить странички, либо воспользоваться API. Кандидат, который нам подходит, возьмёт API», — тимлид в EdTech-проекте
Самая распространённая ошибка на этом этапе — это неправильный расчёт времени и сил. Джуниоры часто просят мало времени на выполнение тестового, а потом не успевают. Или хотят показаться лучше и берут сложный фреймворк, в котором не разбираются, хотя задачу можно решить более простыми методами.
Выпускники говорят, что сталкивались со сложностями, только когда задание было не под вакансию — например, на уровень мидл-разработчика или вовсе для системного администратора. Или когда приходилось сталкиваться с чем-то совсем незнакомым, например, Redis или WebSocket.
Собеседование
Собеседование также можно поделить на три условные составляющие: теория, практика и проверка софтскилов.
Теория
Нанимающий разработчик может исходить из технологического стека, указанного в резюме, много импровизировать и вести дискуссии «под настроение». Другими словами, заготовленный список вопросов почти никогда не используется. Тем не менее, есть темы, которые точно будут затронуты в этой части интервью.
-
Python и ООП. Работодатели «копают» в глубину, поэтому важны не заученные ответы, а понимание языка. Спрашивают про декораторы и генераторы, алгоритмическую сложность операций с различными структурами данных, классы, наследование, работу с атрибутами, статические методы, принципы SOLID. Могут открыть «100 вопросов по Python» и спросить что-то оттуда.
«Я люблю спрашивать про копирование объектов и вообще управление памятью в Python, про контекстные менеджеры, как они создаются и что там внутри, как работает... Это мои вопросы со звёздочкой. Я их задаю, чтобы понять глубину. Вот человек знает про абстрактные классы, а знает ли он про протокол? Потом спрашиваю про инкапсуляцию в Python и вообще в целом ООП», — синьор-разработчик в IT-компании в ретейле
Фреймворки. Задают вопросы по Django, FastAPI.
API. Проверяют понимание принципов построения API, знание HTTP.
Docker. Спрашивают про опыт работы с Docker, проверяют понимание его работы, умение запустить Docker Compose.
Базы данных. Проверяют знание синтаксиса SQL, основ нормализации, индексов. Спрашивают про опыт работы с SQL и ORM.
Также спрашивают про технологии, применяемые в конкретной компании.
Практика
Практическая часть часто касается тестового задания или проектов в GitHub — например, нанимающий разработчик может попросить джуниора поискать более оптимальное решение. Так проверяется и навык работы с кодом, и умение принимать обратную связь.
Также практические навыки проверяют, спрашивая о предыдущем опыте: какие проекты выполнял кандидат, над какими продуктами работал, чем именно занимался самостоятельно и в команде.
Иногда дают задание: написать декоратор или SQL-запрос, предсказать результат и объяснить работу фрагмента кода.
Софтскилы
Софтскилы проверяются по ходу всего интервью — нанимающий разработчик оценивает поведение и настроение кандидата, его мотивацию и вовлечённость, способность рассуждать и искать альтернативные решения, принимать обратную связь. Иногда дополнительные вопросы не требуются, в иных случаях работодатель может спросить кандидата о ситуациях (например, конфликтах) на прошлых местах работы.
Выводы
Подводим итоги.
Работодатели отмечают, что наём джуниоров — ресурсозатратный процесс, поэтому он происходит не часто. Предпочитают нанимать опытных разработчиков или открывать стажировки с периодичностью раз в полгода или год.
Выпускники говорят, что поиск работы занимает 2–6 месяцев, а самый сложный этап — прохождение скрининга резюме. Компании требуют опыт коммерческой разработки, но не очень понятно, где начинающему специалисту его взять.
FastAPI — обязательный фреймворк для работы, это отмечают и нанимающие, и выпускники. Навык часто упоминается в числе требований в вакансиях.
Джуниорам важно понимать, как Python работает «под капотом», так как нанимающие требуют глубоких знаний, а не заученных ответов.
Главные навыки — это Python, базы данных (SQL), Docker, Git и Linux. Если вакансия на бэкенд-разработку, дополнительно Django (или FastAPI). Это базовый минимум, который проверяется и без которого не возьмут на работу. Остальные навыки в целом нормально доучить в процессе, если есть хорошая база из навыков выше.
Кроме глубины, важна широта знаний — многие инструменты, например Celery, Kubernetes, Redis, RabbitMQ, стоит знать хотя бы на уровне «слышал(а)», «знаю, для чего применяется».
В компаниях всё чаще используют асинхронное программирование, поэтому важно понимать, что это такое. Растёт спрос на асинхронные фреймворки (FastAPI) и инструменты (Asyncio, Celery).
Важно не завышать свой уровень, так как нанимающие разработчики задают вопросы по информации в резюме. Каждый упомянутый скил, скорее всего, будет проверен.
Работодатели смотрят проекты в GitHub. Важно, чтобы они были хорошо оформлены, так как портфолио могут оценить вместо тестового задания и обсуждать на собеседовании.