Как стать Python-разработчиком: путь от нуля до первого оффера
Не «стань разработчиком за 3 месяца» — реальный путь входа на основе данных по 224 вакансии.
Можно ли стать Python-разработчиком с нуля
Да. По данным SkillStat, 9% вакансий Python-разработчика — уровня junior или стажёр. Это 20 вакансий прямо сейчас.
«С нуля» у Python-разработчика — формулировка обманчивая. Python почти всегда чей-то первый язык, и к моменту первого отклика человек уже что-то писал: скрипт, домашку с курса, парсер. Опыта это не даёт, потому что вакансия просит другое — прикладную логику, которая живёт в платформе рядом с чужими сервисами и не разваливается, когда сосед отвечает через раз. Рынок это подтверждает: 20 вакансий уровня junior из 224, на одного новичка — 4.9 senior-вакансии.
Под одним названием тут два разных рынка. Первый — сервисный: FastAPI (58.9%), PostgreSQL (69.6%), Apache Kafka (34.4%), Kubernetes (35.7%), Microservices (33%) — Python пишет логику внутри платформы из десятка сервисов. Второй — вокруг моделей: LLM стоит в 29.9% вакансий Python-разработчика, и работа там тоже питоновская, только предмет другой — вызов модели, очередь, кэш, разбор ответа, который каждый раз новый. Трудно не выучить язык: он прощает почти всё. Трудно ровно то, что он прощает. Интерпретатор не остановит тебя на опечатке в редкой ветке, ORM молча сходит в базу двести раз подряд, а один блокирующий вызов внутри асинхронного обработчика останавливает весь сервис. Всё это показывает прод.
Как стать Python-разработчиком: короткий план
Порядок важнее скорости: Python отвечает так быстро, что соблазняет пропустить всё остальное.
Что учить Python-разработчику первым
Не всё сразу. Вот очерёдность по частотности в вакансиях — от самого нужного к менее срочному.
| Навык | Все вакансии |
|---|---|
| Python | 99.6% |
| PostgreSQL | 69.6% |
| Docker | 63.4% |
| FastAPI | 58.9% |
| REST | 47.3% |
| Git | 42.4% |
| SQL | 41.5% |
| CI/CD | 37.1% |
| Redis | 37.1% |
| Kubernetes | 35.7% |
«Все вакансии» — доля из 224 вакансии. Обновлено 12 августа 2026.
Полный список навыков с частотностью, связками и зарплатной премией — навыки Python-разработчика →
Roadmap Python-разработчика: от нуля до junior
Порядок опирается на частотность навыков по данным вакансий. Первые 4–5 этапов — минимум для первого оффера.
- 01Основной язык и рантайм 99.6% вакансий
Синтаксис, ООП, обработка исключений, стандартная библиотека, async-основы.
Подробнее → - 02Git 42.4% вакансий
Git обычно ожидается на любом грейде, даже если не всегда явно указан в вакансии.
Подробнее → - 03
- 04HTTP и REST API 19.6% вакансий
Протокол HTTP, методы запросов, статусы, проектирование RESTful-интерфейсов.
Подробнее → - 05Веб-фреймворк 58.9% вакансий
Один веб-фреймворк — тот, что доминирует в вакансиях по вашему языку. Он даёт маршрутизацию, обработку запросов и первый рабочий сервис.
Подробнее → - 06Тестирование 25% вакансий middle+
Юнит-тесты, фикстуры, мок-объекты — ожидается даже на junior.
Подробнее → - 07Docker и Linux 63.4% вакансий middle+
Контейнеризация и базовые навыки Linux — стандарт серверной разработки и CI/CD.
Подробнее → - 08Очереди и кэш 37.1% вакансий middle+
Redis, RabbitMQ, брокеры сообщений — актуальны на middle.
Подробнее → - 09CI/CD и production-практики middle+
GitLab CI / GitHub Actions, деплой, мониторинг. Востребованы на middle/senior.
Подробнее → - 10Kafka, Kubernetes — senior/infra 34.4% вакансий middle+
Не входят в junior-минимум. Востребованы в масштабируемых системах и инфраструктурных ролях.
Подробнее →
Junior-вакансии Python-разработчика: что реально требуют работодатели
Срез построен на 224 активных вакансии.
Какие проекты сделать для портфолио
Питоновское портфолио страдает от того же, от чего страдает язык: рабочее собирается за вечер, и репозитории похожи один на другой. Различает не тема проекта, а видно ли по коду границы модулей, тесты и поведение сервиса в тот момент, когда сломался кто-то другой.
Как оформить GitHub и резюме
- Pinned: сервис на FastAPI и обработчик очереди. Скрипты с курса, решения задачек и заготовки уроков — убрать
- Файл зависимостей с зафиксированными версиями и виртуальное окружение: без них проект поднимется только у тебя, и проверять его никто не будет
- README: запуск одной командой через Docker Compose, .env.example, отдельная строка про то, что делает сервис при недоступной базе
- Тесты на pytest лежат в репозитории и гоняются в сборке: pytest — в 25% вакансий, CI/CD — в 37.1%
- Аннотации типов по всему коду: на ревью питоновского проекта по ним судят раньше, чем по логике
- Указывай контур, а не язык: «сервис на FastAPI в платформе из десятка сервисов» и «обвязка вокруг модели» — это отклики на разные вакансии
- На каждый проект три строки: где данные, где асинхронность, что происходит при отказе соседа
- Django пиши, только если делал на нём проект. FastAPI (58.9%) и Django (28.1%) спрашивают по-разному, и подмена вскрывается первым же вопросом про админку или миграции
- Kubernetes (35.7%) в навыках — если правда открывал: проверят вопросом про перезапуск пода, а не строчкой в резюме
- Python как второй инструмент в другой роли — тестирование, аналитика, администрирование — не прячь в конце. Переход из смежной роли рынок читает лучше, чем чистый старт с курса
«Уверенное владение Python, опыт работы с фреймворками и базами данных, писал парсеры и телеграм-ботов»
«Сервис выдачи документов на FastAPI: PostgreSQL с миграциями через SQLAlchemy, фоновая обработка в RabbitMQ с ключом идемпотентности, кэш в Redis. Убрал N+1 в списке заказов — 240 запросов свернул в 2, ответ с 1.9 с до 180 мс. Тесты на pytest, прогон в CI/CD, поднимается одной командой в Docker Compose. GitHub: [ссылка]»
Самостоятельно, курсы или вуз — какой путь выбрать
Курсы для Python-разработчика
Сопоставили программы с реальным стеком из 224 вакансии — оценка соответствия рассчитана автоматически, это не реклама.
Когда начинать искать первую работу
Сервис поднимается у постороннего одной командой, у него есть тесты на pytest и внятное поведение при отказе базы или внешнего источника, и ты объясняешь, почему обработчик асинхронный и что ты из цикла вынес, — откликайся. Docker (63.4%) и Kubernetes (35.7%) к этому моменту достаточно понимать: собрать образ, поднять, прочитать логи.
- → hh.ru: ищи «Python» и «Backend» отдельными запросами — часть вакансий Python-разработчика названа по контуру, а не по языку, и по одному запросу выдача их теряет
- → Отдельно смотри вакансии вокруг моделей: LLM — в 29.9% вакансий Python-разработчика. Они часто озаглавлены иначе, хотя работа там питоновская — обвязка, очередь, кэш
- → Стажировки и школы крупных продуктовых компаний: Яндекс, ВК, Т-Банк, Озон, Авито. На Python у них массовый набор — это самый частый вход без коммерческого опыта
- → Небольшие продуктовые команды и студии: там чаще берут Django-монолит целиком (28.1%) и охотнее смотрят на новичка, чем платформенная команда с Kubernetes
- → Внутренний переход: пишешь скрипты в тестировании, аналитике или администрировании — попроси задачу в сервисной команде. Этот путь короче отклика с улицы
- → Медиана 15 навыков в вакансии Python-разработчика — это среда сервиса, а не входной экзамен: половина списка про эксплуатацию, а не про язык
- → Apache Kafka (34.4%) и Microservices (33%) в требованиях — вакансия про сервис внутри платформы: спросят про повторную доставку и про границы ответственности
- → LLM (29.9%) в описании обычно не значит «обучать модели». Чаще это Python вокруг чужой модели: вызов, очередь, кэш, оценка ответа
- → Django (28.1%) вместо FastAPI (58.9%) — другой тип работы: монолит с админкой и своей экосистемой, а не сервис в платформе. Читай по фреймворку, что за команда
- → «От трёх лет опыта» при перекосе в 4.9 senior-вакансии на одного junior часто написано буквально. Откликаться стоит, но ставку делай на вакансии, где грейд назван явно
Что спрашивают на собеседовании
Язык и его подвохи
- ·Что произойдёт, если поставить изменяемый список значением аргумента по умолчанию
- ·Чем генератор отличается от списка и когда эта разница видна на практике
- ·Зачем аннотации типов, если интерпретатор их всё равно не проверяет
- ·Как менеджер контекста гарантирует, что соединение закроется при исключении
Свой сервис: покажи, где стоит генератор и почему, и как расставлены аннотации
Асинхронность
- ·Что случится, если внутри асинхронного обработчика вызвать блокирующую функцию
- ·Чем асинхронность отличается от потоков и когда нужен каждый
- ·Как отменить задачу, которая уже запущена
- ·Почему сервис держит тысячу соединений, но встаёт на одном тяжёлом вычислении
Сервис на FastAPI: покажи, что ты вынес из событийного цикла и куда именно
PostgreSQL и ORM
- ·Что такое N+1 и как он появляется в SQLAlchemy незаметно для автора
- ·Где границы транзакции в твоём сервисе и что откатится при ошибке
- ·Как понять, что запрос идёт мимо индекса
- ·ORM или запрос руками: как выбираешь и где ORM мешает
Замер до и после: план выполнения и число запросов на одном списке
Сервис в платформе
- ·Событие из очереди пришло дважды — как не создать вторую запись
- ·Что делает сервис, если соседний отвечает дольше таймаута
- ·Redis как кэш: что делаешь при расхождении с базой
- ·Как поменять контракт REST, не сломав существующих клиентов
Обработчик очереди: покажи ключ идемпотентности и тест на повторную доставку
Тесты и эксплуатация
- ·Что подменяешь заглушкой в тестах на pytest, а что оставляешь настоящим
- ·Что смотришь первым, когда сервис в Kubernetes перезапускается по кругу
- ·Как воспроизвести дефект, который виден только на проде
- ·Почему проект поднимается у тебя и не поднимается у коллеги
Docker Compose и прогон в CI/CD: покажи, что сборка падает на красном тесте
Сколько времени нужно, чтобы стать Python-разработчиком
«Python учится за три месяца» — правда, которая ничего не решает. Язык короткий, синтаксис действительно уходит за недели. Только вакансия Python-разработчика собрана вокруг другого: PostgreSQL (69.6%), Docker (63.4%), FastAPI (58.9%), CI/CD (37.1%), медиана 15 навыков в вакансии. Три месяца — срок до первого работающего скрипта, а не до первого оффера.
Срок решают три вещи: был ли Python рабочим инструментом раньше; есть ли проект, который ломается не по твоей вине; выбран ли контур. Того, кто полтора года учит «Python вообще» и так и не выбрал между сервисом и моделями, рынок читает как человека без специализации — и это дороже любого пробела в стеке.
Ошибки новичков
Учат Django, потому что курсов по нему больше
Почему мешает: Django — в 28.1% вакансий Python-разработчика, FastAPI — в 58.9%. Это не «оба сгодятся»: монолит с админкой и сервис в платформе — разная работа, разные вопросы на собеседовании и разные команды
Как исправить: Открой десяток вакансий, на которые целишься, и учи то, что стоит в них. Второй каркас добирается за пару недель, когда первый понят по-настоящему
Ставят блокирующий вызов в асинхронный обработчик
Почему мешает: Событийный цикл один на всех. Один синхронный поход в базу или к внешнему источнику — и сервис не отвечает никому, пока вызов не вернётся. Локально на одном запросе это выглядит нормально
Как исправить: В асинхронном коде — асинхронные библиотеки. Тяжёлое и синхронное выносится в отдельный поток или в очередь
Доверяют ORM на слово
Почему мешает: SQLAlchemy и ORM в Django молча превращают цикл по списку в двести запросов к PostgreSQL. Код при этом выглядит чисто, и проблема всплывает на объёме, которого нет на твоей машине
Как исправить: Включи журнал запросов на своём проекте и посчитай, сколько их уходит на одну страницу. Пятиминутная проверка, которая меняет отношение к ORM навсегда
Пишут скрипт и называют это сервисом
Почему мешает: Python позволяет собрать работающее за вечер, и проект растёт одним файлом на тысячу строк без границ между слоями. На ревью это видно с первого экрана
Как исправить: Раздели обработчик, логику и доступ к данным. Проверка — можно ли поменять базу, не трогая логику
Игнорируют окружение и версии зависимостей
Почему мешает: «У меня работает» — питоновская классика: пакеты стоят глобально, версии не зафиксированы, у проверяющего проект не поднимается. Отклик закрывается ровно здесь, до чтения кода
Как исправить: Виртуальное окружение и файл зависимостей с версиями — с первого коммита. Проверь на чистой машине или в Docker (63.4%)
Считают LLM отдельной профессией
Почему мешает: LLM — в 29.9% вакансий Python-разработчика, и работа там питоновская: вызвать модель, положить в очередь, закэшировать, обработать отказ, проверить ответ. Обучают модели в других ролях и другими руками
Как исправить: Тянет в этот контур — собери обвязку вокруг готовой модели. Это ближе к сервису, чем к науке, и на входе спросят про таймауты и кэш
Учат Kubernetes раньше, чем появился сервис
Почему мешает: Kubernetes — в 35.7% вакансий, но новичку в нём нужны три вещи: посмотреть логи, понять перезапуск, найти конфигурацию. Без своего сервиса в кластер просто нечего класть
Как исправить: Docker и Docker Compose — сначала. Kubernetes читается за неделю, когда есть что запускать
Не пишут тесты, потому что «код же простой»
Почему мешает: В Python нет компилятора, который поймает опечатку в имени поля на ветке, куда ты не заходил. pytest — в 25% вакансий: тесты здесь закрывают то, что в строгих языках делает сборка
Как исправить: Тесты на граничные случаи: пустой ответ, ошибка внешнего сервиса, повторный запрос. Прогон в CI/CD (37.1%) с первого дня
Как SkillStat считает данные
Источник: 224 вакансии в московском сегменте. Навыки и грейды извлекаются автоматически из текста каждой вакансии.
Грейды: определяются по требованиям вакансии — уровню опыта, упоминанию «junior», «intern», «стажёр». Это рыночная оценка объявления.
Сложность входа: рассчитывается по доле junior-вакансий и медиане навыков на junior-уровне. Это индикатор, а не гарантия.
Обновление: данные пересчитываются регулярно. Текущий срез — 12 августа 2026.