Выбрать направление в программировании — значит сопоставить три вещи: какой результат работы вам интересно видеть (интерфейс, данные, сервер, игра, железо), какая «сырая» работа внутри него вам не надоедает и какой первый проект вы готовы довести до конца. Ниже — таблица девяти специализаций, восемь вопросов-критериев, мини-тест на Python, который сводит ответы в топ-3, и способ проверить выбор пробным проектом за одну-две недели, а не угадывать.
Содержание
- Направление, язык, грейд: три разных выбора
- Сравнение специализаций: таблица
- Тест-критерии: 8 вопросов для самопроверки
- Мини-тест на Python: ответы -> топ-3 направлений
- Проверка практикой: пробный проект на 1-2 недели
- Дорожная карта после выбора
- Если не получилось
- Выводы
- Где применяется / связь с практикой
- FAQ
Важная граница сразу: никакой тест не выбирает профессию за вас. Он сужает список до двух-трех направлений, а решает практика — какая задача затянула, а какая оказалась скучной.
Направление, язык, грейд: три разных выбора
Новички часто смешивают три оси и из-за этого застревают. Разведем их до сравнения.
| Понятие | Что это | Пример | Когда выбирать |
|---|---|---|---|
| Направление (специализация) | Тип продукта и задач, за которые вы отвечаете | frontend, data science, DevOps | Первым |
| Язык и стек | Инструмент, которым решаются задачи направления | Python, Kotlin, C#, SQL | Вторым, под направление |
| Грейд | Уровень самостоятельности: intern, junior, middle, senior | junior backend-разработчик | Не выбирается, растет с опытом |
Порядок «сначала язык, потом решу» работает хуже: один язык ведет в разные направления (Python — в backend, данные и автотесты), а одному направлению нужно несколько инструментов.
Сравнение специализаций: таблица
Порог входа в таблице — моя качественная оценка для самостоятельного старта с нуля, а не измеренная величина. Она зависит от вашей базы: человеку с сильной математикой данные даются легче, чем верстка, и наоборот.
| Направление | Что создаете | Основной стек (2026) | Что должно нравиться | Порог входа | Первый артефакт |
|---|---|---|---|---|---|
| Frontend | Интерфейс сайтов и веб-приложений | HTML, CSS, JavaScript/TypeScript, React или Vue | Видеть результат сразу, доводить детали | Средний | Адаптивная страница с формой и запросом к API |
| Backend | Серверную логику, API, работу с базой | Python, Java, Go, C#, PHP или Node.js; SQL | Логика, данные, надежность без визуала | Средний | REST API с базой и тестами |
| Мобильная разработка | Приложения для Android и iOS | Kotlin (Android), Swift (iOS), Flutter/Dart | Интерфейсы плюс ограничения устройства | Средний; для iOS нужен Mac с Xcode, для Android хватает эмулятора в Android Studio | Приложение-список с сохранением данных |
| Gamedev | Игровую логику, механику, инструменты | C# и Unity 6 или C++ и Unreal Engine 5 | Игры, векторная математика, оптимизация | Выше среднего | Маленькая законченная игра на один уровень |
| Data science и аналитика | Модели и выводы из данных | Python, SQL, pandas, scikit-learn | Числа, статистика, проверка гипотез | Выше среднего из-за математики | Разбор открытого датасета с выводами |
| QA automation | Автотесты и проверку качества | Python или Java, pytest, Playwright | Искать, где сломается, граничные случаи | Ниже среднего для ручного QA, средний для автоматизации | Набор автотестов на учебный сайт |
| DevOps и SRE | Сборку, выкладку, инфраструктуру | Linux, Git, Docker, CI/CD, Kubernetes, Bash/Python | Системы, сети, автоматизация рутины | Высокий, обычно после опыта в разработке или админстве | Пайплайн: тесты и сборка контейнера по коммиту |
| 1С | Учет, склад, отчеты предприятия | Встроенный язык 1С, запросы 1С | Бизнес-процессы, общение с заказчиком | Средний | Доработка отчета в учебной конфигурации |
| Embedded | Программы для микроконтроллеров и устройств | C, C++, иногда Rust; схемотехника | Железо, память, работа «близко к металлу» | Высокий | Устройство на плате: датчик -> обработка -> вывод |
Зарплаты и спрос в таблицу не включены: они зависят от города, года и грейда сильнее, чем от направления, и сравнивать их стоит по свежим вакансиям своего региона.
Тест-критерии: 8 вопросов для самопроверки
Отвечайте про то, что нравилось делать на практике (учеба, работа, хобби), а не про то, что звучит престижно.
| Вопрос | «Да» указывает на |
|---|---|
| Хочу сразу видеть результат на экране | Frontend, мобильная разработка, отчасти gamedev |
| Нравится продумывать логику, API и хранение данных | Backend, отчасти 1С |
| Люблю числа, статистику и поиск закономерностей | Data science и аналитика |
| Интересно, как устроены серверы, сети и автоматизация | DevOps, отчасти embedded |
| Нравится искать ошибки и граничные случаи | QA automation, отчасти backend |
| Хочу делать игры, готов к векторной математике | Gamedev |
| Интересно железо: датчики, микроконтроллеры, память | Embedded |
| Хочу автоматизировать учет, склад, отчеты компании | 1С, отчасти аналитика |
Мини-тест на Python: ответы -> топ-3 направлений
Скрипт ниже сводит ответы 0/1/2 (нет / отчасти / да) в долю от максимально возможного балла по каждому направлению и печатает три верхних. Проверено на Python 3.14.7; нужен Python 3.10 или новее из-за zip(..., strict=True).
# Мини-тест: какие направления программирования проверить первыми
QUESTIONS = [
("Хочу сразу видеть результат на экране", {"frontend": 2, "mobile": 2, "gamedev": 1}),
("Нравится продумывать логику, API и хранение данных", {"backend": 2, "1c": 1}),
("Люблю числа, статистику и поиск закономерностей", {"data": 2}),
("Интересно, как устроены серверы, сети и автоматизация", {"devops": 2, "embedded": 1}),
("Нравится искать ошибки и граничные случаи", {"qa": 2, "backend": 1}),
("Хочу делать игры, готов к векторной математике", {"gamedev": 2}),
("Интересно железо: датчики, микроконтроллеры, память", {"embedded": 2}),
("Хочу автоматизировать учет, склад, отчеты компании", {"1c": 2, "data": 1}),
]
# Ответы: 0 - нет, 1 - отчасти, 2 - да (замените на свои)
ANSWERS = [2, 1, 2, 0, 1, 0, 0, 1]
def rank(answers):
got, maximum = {}, {}
for (_, weights), answer in zip(QUESTIONS, answers, strict=True):
if type(answer) is not int or answer not in (0, 1, 2):
raise ValueError(f"ответ {answer!r}: допустимы только 0, 1, 2")
for direction, weight in weights.items():
got[direction] = got.get(direction, 0) + weight * answer
maximum[direction] = maximum.get(direction, 0) + weight * 2
# доля от максимума: направление из 3 вопросов не обгоняет
# направление из 1 вопроса только за счет числа вопросов
share = {d: got[d] / maximum[d] for d in got}
return sorted(share.items(), key=lambda item: item[1], reverse=True)
for direction, value in rank(ANSWERS)[:3]:
print(f"{direction:<9}{value:.0%}")
С ответами из примера в консоли появится:
frontend 100%
mobile 100%
data 83%
Как читать результат: frontend и mobile делят первое место, потому что оба опираются на один и тот же вопрос и тест их не различает. Это граница инструмента: развести такую пару может только пробный проект (ниже).
Типовая ошибка — складывать баллы без нормировки. Если заменить строку с share на share = got, а в print формат {value:.0%} на {value}, скрипт выведет сырые суммы:
data 5
frontend 4
mobile 4
Data science оказался первым не потому, что мотив сильнее, а потому, что он встречается в двух вопросах и может набрать до 6 баллов, а frontend — только до 4. Исправление — делить на максимум, как в основном коде.
Вторая защита — strict=True: если забыть один ответ, скрипт не посчитает молча по неполным данным, а упадет с ValueError: zip() argument 2 is shorter than argument 1. Третья — проверка type(answer) is not int: без нее ответы True и 1.0 молча прошли бы условие answer not in (0, 1, 2), потому что в Python True == 1 и 1.0 == 1.
Проверка практикой: пробный проект на 1-2 недели
Возьмите два верхних направления из теста и сделайте по одной короткой задаче. Критерий «мое» — не «получилось без ошибок», а «хотелось вернуться и доделать».
| Направление | Пробная задача | Признак, что направление ваше |
|---|---|---|
| Frontend | Сверстать страницу-визитку и вывести на ней данные из открытого API | Цепляют отступы, анимации, поведение на телефоне |
| Backend | Написать API «список задач» на Python с сохранением в SQLite | Интересно, что будет при двух одновременных запросах |
| Мобильная | Приложение-счетчик в Android Studio на Kotlin | Нравится думать про экран, жесты и жизненный цикл |
| Data science | Взять открытый датасет и ответить на один вопрос графиком | Хочется проверить, не случайна ли закономерность |
| QA automation | Написать 5 автотестов pytest на свою же функцию | Радует найденный крайний случай, который все ломает |
| DevOps | Упаковать чужой учебный проект в Docker и запускать тесты по коммиту | Удовольствие от того, что рутина исчезла |
Дорожная карта после выбора
- Выучить базу основного языка направления: типы, условия, циклы, функции, коллекции, работа с файлами и ошибками.
- Освоить Git: коммиты, ветки, публикация репозитория.
- Сделать первый артефакт из таблицы и довести до состояния «можно показать»: README, инструкция запуска, тесты там, где они уместны.
- Сделать второй проект сложнее: с базой данных, внешним API или развертыванием.
- Прочитать 20-30 вакансий junior в своем регионе, выписать повторяющиеся требования и закрыть пробелы.
Честный срок назвать нельзя: он зависит от базы, часов в неделю и направления. Прогресс считайте артефактами, а не пройденными уроками.
Если не получилось
| Симптом | Вероятная причина | Что сделать |
|---|---|---|
| Тест выдает все направления поровну | Ответы «про престиж», а не про опыт | Ответить заново, вспоминая конкретные случаи, где было интересно |
| Нравится все, начать не можете | Выбор без ограничения по времени | Взять первое место теста и зафиксировать 4 недели на пробу |
| Застряли в бесконечных туториалах | Нет своего проекта | Начать артефакт из таблицы, туториалы — только под конкретную задачу |
| Пробный проект вызвал только скуку | Направление не ваше, и это полезный результат | Перейти ко второму месту теста |
Еще одна частая ловушка — совет «сначала выучить C++, потом разберетесь». Для embedded и части gamedev C++ действительно основа, но frontend, данные, QA и 1С без него обходятся, и такой старт только оттягивает первый артефакт.
Выводы
- Направление выбирают первым, язык — под направление, грейд растет с опытом и не выбирается.
- Таблица специализаций сужает выбор по типу результата и «сырой» работе, а не по престижу.
- Тест из 8 вопросов дает топ-3, но близкие направления (frontend и mobile) разводит только практика.
- При подсчете баллов нужна нормировка: иначе выигрывает направление, упомянутое в большем числе вопросов.
- Проверка выбора — пробный проект на 1-2 недели и критерий «хотелось вернуться и доделать».
Где применяется / связь с практикой
Освойте тему на практике
Python — один из немногих языков, который открывает сразу несколько направлений из таблицы: backend, анализ данных, автоматизацию тестов и скрипты в DevOps. Поэтому он удобен как первый язык, пока выбор еще не окончательный. Граница тоже есть: для frontend основной язык — JavaScript/TypeScript, для iOS — Swift. Структурно освоить базу и сделать первые проекты можно на курсе «Python-разработчик. Базовый уровень», а посмотреть, как выглядит работа в разных направлениях, — на открытых уроках Otus.
FAQ
Можно ли сменить направление через год-два?
Да, и база переносится: Git, алгоритмы, SQL, тестирование и умение читать документацию нужны почти везде. Проще всего переходы между соседними направлениями, например backend -> DevOps или QA automation -> backend.
Стоит ли сразу целиться в fullstack?
Обычно нет: fullstack — это backend и frontend на уровне самостоятельной работы, а для старта надежнее одна сторона, к которой потом добавляется вторая.
Нужна ли математика, чтобы стать программистом?
Зависит от направления: для data science, gamedev и embedded — заметно больше школьной программы, для frontend, QA и 1С обычно хватает логики и школьной базы.



