Python-разработчик (Python developer) — это программист, у которого Python основной рабочий язык: на нем он пишет и сопровождает серверную часть сервисов, обработку данных, автоматизацию и внутренние инструменты. Важная граница: Python используют многие роли (аналитики, тестировщики, DevOps-инженеры), но в вакансиях «Python-разработчиком» чаще всего называют бэкенд-разработчика на Python, остальные направления обычно имеют свои названия должностей.
Содержание
Ниже — чем такой специалист занимается по направлениям, какой стек нужен в каждом, как выглядит типичная задача с кодом и тестом и как выбрать свой вход в профессию.
Python-разработчик и соседние роли: не путать
Язык один, а работа разная. Если в вакансии написано «Python», сначала смотри, какой результат ждут от человека.
| Роль | Где Python | Основной результат работы |
|---|---|---|
| Python-разработчик (бэкенд) | Основной язык сервиса | Работающий API или веб-сервис, код с тестами |
| Data engineer | Основной язык пайплайнов наряду с SQL | Регулярная загрузка и очистка данных |
| ML-инженер | Обучение и выкладка моделей | Модель, встроенная в продукт |
| QA automation на Python | Язык автотестов | Набор тестов, которые запускаются в CI |
| DevOps / SRE | Язык скриптов и утилит | Автоматизированная инфраструктура, а не продукт |
Во всех строках нужен уверенный Python, но в последних трех он инструмент, а не профессия. Поэтому человек, который «знает Python», еще не выбрал направление — и вакансии, и учебные программы для них заметно различаются.
Чем занимается Python-разработчик
Типичный день бэкенд-разработчика на Python складывается из нескольких повторяющихся задач. Порядок ниже примерный: в маленькой команде один человек делает все, в большой часть отдана другим ролям.
- Разбор задачи. Читает требование, выясняет у аналитика или владельца продукта граничные случаи: что вернуть, если заказа нет, какие поля обязательны.
- Код. Пишет обработчик API, модель данных, запрос к базе, фоновую задачу.
- Тесты. Покрывает логику автотестами (pytest или unittest), чтобы изменения не ломали старое поведение.
- Ревью. Отправляет изменения в Git на код-ревью, правит замечания коллег.
- Выкладка и поддержка. Следит, чтобы изменение прошло CI и доехало до сервера; разбирает ошибки из логов и мониторинга.
Заметная часть времени уходит не на новый код, а на чтение чужого, отладку и поддержку. Это нормально для профессии, а не признак плохой команды.
Направления и стек
Стек ниже — частый ориентир по вакансиям, а не обязательный список: конкретная компания может использовать другие фреймворки.
| Направление | Типичные задачи | Частый стек | Что показать в портфолио |
|---|---|---|---|
| Бэкенд | API, личные кабинеты, интеграции с платежами и CRM | Django, FastAPI, Flask; PostgreSQL, Redis; Celery; Docker | Сервис с API, базой, тестами и инструкцией запуска |
| Данные (data engineering) | Сбор, очистка и загрузка данных по расписанию | SQL, pandas, Airflow, PySpark | Пайплайн: источник -> очистка -> таблица, с повторным запуском |
| Анализ данных и ML | Исследование данных, обучение и проверка моделей | NumPy, pandas, scikit-learn, PyTorch, Jupyter | Ноутбук или сервис с моделью и честной метрикой качества |
| Автоматизация тестирования | Автотесты API и интерфейса | pytest, requests или httpx, Playwright | Набор автотестов, который запускается одной командой |
| DevOps-скрипты | Утилиты для серверов, облака, выкладки | стандартная библиотека, Click, Ansible, SDK облака | CLI-утилита с аргументами, логами и тестами |
Как выбирать: если нравится делать продукт, которым пользуются люди, — бэкенд; если интереснее, откуда берутся цифры и как они считаются, — данные и ML; если хочется ловить ошибки системно — автоматизация тестирования; если ближе серверы и надежность — DevOps.
Где Python обычно не основной язык
- Интерфейс в браузере. Там работает JavaScript или TypeScript. Проекты вроде Pyodide запускают Python в браузере, но для типового фронтенда это редкость.
- Нативные мобильные приложения. Основные языки — Kotlin и Swift; Python-фреймворки для мобильных существуют, но в вакансиях встречаются нечасто.
- Игровые движки и тяжелые вычисления на чистом Python. Интерпретатор CPython медленнее компилируемых языков на циклах «по одному числу». Поэтому библиотеки вроде NumPy и PyTorch держат вычисления в коде на C, C++ или CUDA, а Python управляет ими. «Медленный язык» — упрощение: узкое место обычно в конкретном цикле, а не в выборе Python для всего проекта.
Пример типичной задачи: код и тест
Задача, похожая на реальную: по строкам журнала запросов посчитать ответы по группам статусов и найти медленные запросы. Так выглядит мини-скрипт, который бэкенд- или DevOps-разработчик пишет для разбора инцидента. Формат строки учебный: IP МЕТОД ПУТЬ СТАТУС МС.
from collections import Counter
def parse_line(line):
"""Строка формата: IP МЕТОД ПУТЬ СТАТУС МС. Чужой формат -> None."""
parts = line.split()
if len(parts) != 5:
return None
_ip, _method, path, status, ms = parts
# isascii() обязателен: isdigit() пропускает, например, полноширинные цифры "200"
if not (status.isascii() and status.isdigit() and ms.isascii() and ms.isdigit()):
return None
return {"path": path, "status": int(status), "ms": int(ms)}
def build_report(lines, slow_ms=500):
statuses = Counter()
slow = []
skipped = 0
for line in lines:
rec = parse_line(line)
if rec is None:
skipped += 1
continue
statuses[rec["status"] // 100 * 100] += 1 # 201 -> группа 200
if rec["ms"] >= slow_ms:
slow.append(rec["path"])
return {"statuses": dict(sorted(statuses.items())), "slow": slow, "skipped": skipped}
LOG = """\
203.0.113.5 GET /api/orders 200 35
203.0.113.9 POST /api/orders 201 120
198.51.100.7 GET /api/orders/42 404 8
203.0.113.5 GET /api/orders 500 950
- - - обрыв строки при ротации лога
198.51.100.7 GET /health 200 2
"""
if __name__ == "__main__":
print(build_report(LOG.splitlines()))
Если сохранить код в report.py и запустить python report.py, в консоли появится (проверено на Python 3.14.7):
{'statuses': {200: 3, 400: 1, 500: 1}, 'slow': ['/api/orders'], 'skipped': 1}
Три успешных ответа (200, 201, 200), одна ошибка клиента, одна ошибка сервера, один медленный запрос и одна пропущенная битая строка.
Почему нужна проверка формата
Первая версия, которую часто пишут новички, разбирает строку без проверки:
def status_counts(text):
counts = Counter()
for line in text.splitlines():
ip, method, path, status, ms = line.split()
counts[int(status)] += 1
return counts
На том же LOG она падает на строке-обрывке:
ValueError: too many values to unpack (expected 5, got 8)
Исправление — функция parse_line выше: строка чужого формата не роняет весь отчет, а считается в skipped. Число пропусков видно в результате, поэтому битые данные не теряются молча.
Тест, который закрепляет поведение
import unittest
from report import build_report, parse_line
class ReportTest(unittest.TestCase):
def test_broken_line_is_skipped(self):
self.assertIsNone(parse_line("- - - обрыв строки"))
def test_fullwidth_digits_rejected(self):
self.assertIsNone(parse_line("192.0.2.1 GET / 200 5"))
def test_report(self):
r = build_report(["a GET /x 200 10", "a GET /y 503 700", "мусор"])
self.assertEqual(r, {"statuses": {200: 1, 500: 1}, "slow": ["/y"], "skipped": 1})
if __name__ == "__main__":
unittest.main()
Если сохранить тест в test_report.py рядом с report.py, команда python -m unittest test_report выводит Ran 3 tests и OK. Второй тест не надуман: без isascii() строка с цифрами 200 проходила бы проверку, потому что "200".isdigit() возвращает True, а int("200") дает 200. Именно такие граничные случаи и ловят тесты в повседневной работе.
Уровни: чем junior отличается от senior
| Уровень | Типичная ответственность |
|---|---|
| Junior | Небольшие задачи по готовому описанию, код под ревью старших |
| Middle | Фича целиком: от разбора требований до выкладки, самостоятельные решения в своей части кода |
| Senior | Архитектура модулей, выбор технологий, ревью, наставничество, ответственность за надежность |
Названия уровней и требования у компаний отличаются, поэтому таблица — ориентир. Зарплаты сильно зависят от города, компании и направления; актуальный диапазон честнее смотреть по свежим вакансиям в момент поиска работы.
Как стать Python-разработчиком: дорожная карта до портфолио
Список того, что учить новичку, подробно разобран в отдельной статье что должен знать разработчик на Python без опыта. Здесь — порядок шагов до конкретного результата.
- База языка. Типы, функции, коллекции, исключения, модули, виртуальное окружение. Результат: 20-30 решенных небольших задач.
- Инструменты команды. Git, терминал, pytest, форматирование кода. Результат: репозиторий с историей коммитов и тестами.
- Выбор направления по таблице выше. Не обязательно навсегда: переход между бэкендом, данными и автоматизацией возможен и позже.
- Стек направления. Для бэкенда — HTTP, SQL, один фреймворк (FastAPI или Django) и Docker.
- Проект-артефакт. Один законченный проект из колонки «что показать в портфолио», с README и инструкцией запуска.
- Выход на рынок. Резюме с ссылкой на проект, тестовые задания, собеседования.
Сроки у всех разные: они зависят от стартовой подготовки и числа часов в неделю, поэтому обещания «за N недель» стоит воспринимать скептически.
Если не получилось
- Прочитал курс, но не можешь написать программу с нуля. Мало практики: решай задачи без подсказок и доводи их до запуска.
- Проект не запускается у другого человека. Добавь
requirements.txtилиpyproject.toml, инструкцию в README и проверь запуск в чистом окружении. - Нет откликов на резюме. Проверь, что в резюме есть ссылка на проект и описано, что именно он делает; подгони описание под направление вакансии.
- Заваливаешь тестовые задания. Перечитай замечания проверяющего и перепиши решение по ним — это самая короткая обратная связь из доступных.
Выводы
- Python-разработчик — программист с Python как основным языком; в вакансиях так чаще всего называют бэкенд-разработчика.
- Кроме бэкенда, Python — основной инструмент в данных и ML, автоматизации тестирования и DevOps-скриптах, но там у ролей свои названия и свой стек.
- Работа — это не только новый код: тесты, ревью, отладка и поддержка занимают большую часть времени.
- Входить в профессию удобнее через выбор направления и один законченный проект, а не через бесконечное изучение теории.
Где применяется / связь с практикой
Освойте тему на практике
Разбор логов, API, автотесты и скрипты из статьи держатся на одной базе: уверенном Python, умении писать тесты и работать с Git. Пройти эту базу последовательно, с практикой и проверкой заданий, можно на курсе «Python-разработчик. Базовый уровень», а посмотреть, как разработчики разбирают отдельные темы, — на открытых уроках Otus.
FAQ
Нужно ли высшее образование, чтобы работать Python-разработчиком?
Формально требуется не везде: многие компании смотрят на навыки, тестовое задание и проекты. Для части ролей в ML и исследованиях математическая подготовка заметно важнее.
Какую версию Python учить в 2026 году?
Актуальную стабильную ветку 3.x. На сентябрь 2026 это Python 3.14, а выход Python 3.15 запланирован на 1 октября 2026 года (PEP 790); для учебы разница между соседними версиями несущественна. Python 2 не поддерживается с 2020 года и встречается только в старом коде.
Можно ли писать на Python мобильные приложения и игры?
Можно: для игр есть Pygame, для мобильных — отдельные фреймворки. Но коммерческие проекты в этих областях чаще делают на других языках, поэтому для работы Python обычно выбирают ради бэкенда, данных или автоматизации.



