Получить доступ

Индивидуальный план развития: Backend-разработчик

Выберите текущий и целевой грейд — останутся темы, которые нужно освоить, с проверяемыми критериями, практическими заданиями и оценкой трудоёмкости. План можно скопировать в документ компании, скачать таблицей или распечатать.

1 этап База разработчика

Основы Git Основа

Junior
  • Создаёт ветку, делает осмысленные коммиты и отправляет их в удалённый репозиторий
  • Объясняет разницу между merge и rebase и не переписывает опубликованную историю
  • Отменяет изменения через revert, reset и restore в подходящих ситуациях
  • Разрешает конфликт слияния и проверяет результат тестами

Практика. Провести учебный проект через 10 веток с pull request, специально создать и разрешить 3 конфликта, откатить один неудачный коммит через revert.

Pull request и код-ревью Основа

Junior
  • Оформляет небольшой pull request с описанием, что и как проверить
  • Исправляет замечания ревью и поддерживает ветку в актуальном состоянии

Практика. Сделать 5 pull request в учебный или открытый проект с описанием и пройти ревью.

Middle
  • Ревьюит чужой код по существу — ошибки, поддержка, безопасность — а не по вкусу
  • Объясняет выбор между trunk-based и GitFlow для своей команды

Практика. Отревьюить 10 чужих pull request с письменными замечаниями и разобрать с автором самые спорные.

Командная строка Основа

Junior
  • Перемещается по файловой системе, создаёт, копирует и удаляет файлы без файлового менеджера
  • Находит строку в сотне файлов через grep и считает совпадения пайпом
  • Задаёт переменные окружения и объясняет, почему команда «не найдена» (PATH)
  • Заходит на сервер по SSH-ключу и смотрит логи сервиса через tail -f

Практика. Неделю работать с проектом только из терминала — запуск, тесты, Git, поиск по коду, просмотр логов — и записать 20 команд, которые пригодились.

Алгоритмы и сложность Основа

Junior
  • Оценивает сложность своего кода в O-нотации, включая вложенные циклы и операции со словарём
  • Объясняет, как работают быстрая сортировка и сортировка слиянием, и что такое устойчивость
  • Пишет бинарный поиск без ошибок на границах
  • Решает задачи на два указателя и скользящее окно уровня easy

Практика. Решить 30 задач уровня easy на массивы, строки, хеш-таблицы и бинарный поиск, у каждой записать сложность.

Middle
  • Решает задачи уровня medium на графы (BFS, DFS), рекурсию и динамическое программирование
  • Проговаривает решение вслух, оценивает сложность и проверяет граничные случаи до запуска

Практика. Решить 40 задач уровня medium и пройти 2 пробные алгоритмические секции по 45 минут с решением вслух.

Структуры данных Основа

Junior
  • Выбирает между списком, словарём и множеством по нужным операциям и их сложности
  • Объясняет устройство хеш-таблицы — хеш, коллизии, расширение — и почему ключ неизменяемый
  • Применяет стек и очередь в задачах (скобки, обход в ширину)

Практика. Реализовать с нуля хеш-таблицу с цепочками и расширением и сравнить скорость со встроенным словарём.

Middle
  • Использует кучу для топ-K и приоритетных очередей
  • Объясняет амортизированную сложность и устройство B-дерева в индексах баз данных

Практика. Решить задачу «топ-10 самых частых запросов из потока на миллион строк» с кучей, оценить память и время.

2 этап Как работает компьютер и сеть

Процессы, потоки и память Основа

Junior
  • Объясняет разницу процесса и потока и что у них общее
  • Объясняет, где хранятся локальные переменные и объекты — стек и куча

Практика. Запустить программу с несколькими потоками и посмотреть их в top -H или диспетчере задач, объяснить увиденное.

Middle
  • Объясняет виртуальную память, переключение контекста и цену системного вызова
  • Находит причину «Too many open files» и утечку дескрипторов

Практика. Воспроизвести исчерпание файловых дескрипторов в учебном сервисе, найти утечку через lsof и исправить.

Конкурентность Основа

Junior
  • Объясняет состояние гонки на примере счётчика и исправляет его блокировкой
  • Объясняет взаимную блокировку и как её избежать порядком захвата

Практика. Написать программу с гонкой на общем счётчике, показать неверный результат и исправить двумя способами.

Middle
  • Выбирает между блокировкой, атомарной операцией и неизменяемыми данными
  • Подбирает размер пула потоков для задач с вычислениями и с ожиданием ввода-вывода

Практика. Реализовать потокобезопасный кэш с ограничением размера и нагрузочный тест на 16 потоков.

Как работает интернет Основа

Junior
  • Рассказывает путь запроса от ввода адреса до отрисовки страницы — DNS, TCP, TLS, HTTP, разбор и отрисовка
  • Объясняет разницу между IP-адресом, доменом, URL и портом
  • Объясняет, чем TCP отличается от UDP и где применяется каждый

Практика. Открыть сайт с вкладкой Network в DevTools и письменно разобрать по таймингам один запрос — DNS, соединение, TLS, ожидание, загрузка.

TCP, UDP и TLS Основа

Junior
  • Объясняет трёхстороннее рукопожатие TCP и разницу TCP и UDP
  • Объясняет, что обеспечивает TLS и зачем нужен сертификат

Практика. Посмотреть рукопожатие TCP и TLS в Wireshark при открытии сайта и подписать шаги.

Middle
  • Объясняет повторную передачу, управление перегрузкой и состояние TIME_WAIT
  • Диагностирует сетевые проблемы утилитами ss, curl, dig и openssl

Практика. Найти причину таймаутов в учебном стенде (закрытый порт, DNS, сертификат) только сетевыми утилитами.

DNS Основа

Junior
  • Объясняет, как браузер находит IP по домену и что такое TTL
  • Проверяет записи домена через dig или nslookup

Практика. Посмотреть A, CNAME, MX и TXT записи трёх известных сайтов и объяснить, что означает каждая.

Middle
  • Планирует смену DNS-записей с учётом TTL без простоя
  • Использует dns-prefetch и preconnect для сторонних доменов

Практика. Описать план переезда сайта на новый сервер через смену DNS без простоя с учётом TTL.

Java · 1 этап Основы языка

Примитивы, строки и методы Основа

Junior
  • Объясняет разницу примитивов и обёрток, автоупаковку и ловушку == с Integer
  • Объясняет неизменяемость строк, пул строк и когда нужен StringBuilder
  • Объясняет, что Java всегда передаёт аргументы по значению, включая ссылки
  • Описывает порядок инициализации полей, static-блоков и конструкторов

Практика. Решить 20 задач «что выведет код» на примитивы, строки, передачу параметров и инициализацию, объяснив каждую.

ООП, интерфейсы и неизменяемость Основа

Junior
  • Объясняет принципы ООП на примерах кода
  • Выбирает между интерфейсом и абстрактным классом

Практика. Спроектировать иерархию фигур или платёжных методов с интерфейсами и полиморфизмом.

Middle
  • Проектирует неизменяемый класс и объясняет его преимущества для многопоточности
  • Предпочитает композицию наследованию и объясняет почему

Практика. Переделать изменяемый класс денежной суммы в неизменяемый с операциями и тестами.

Равенство и исключения Основа

Junior
  • Переопределяет equals и hashCode согласованно и объясняет, что сломается в HashMap без этого
  • Объясняет иерархию исключений и разницу checked и unchecked
  • Закрывает ресурсы через try-with-resources

Практика. Написать класс-ключ без hashCode, показать поломку в HashMap и исправить.

Middle
  • Проектирует обработку ошибок в сервисе — свои исключения, перевод в коды ответа, без проглатывания

Практика. Описать и реализовать единую обработку ошибок REST-сервиса с иерархией своих исключений.

Java · 2 этап Коллекции

ArrayList и LinkedList Основа

Junior
  • Объясняет устройство ArrayList и рост массива
  • Называет сложность основных операций ArrayList и LinkedList

Практика. Реализовать свой динамический массив с ростом и сравнить скорость с ArrayList.

Middle
  • Объясняет, почему LinkedList на практике проигрывает даже на вставках

Практика. Замерить JMH вставку в середину ArrayList и LinkedList на разных размерах и объяснить результат.

HashMap, HashSet и LinkedHashMap Основа

Junior
  • Объясняет устройство HashMap — хеш, бакеты, коллизии, расширение

Практика. Объяснить на листке, что происходит при put в HashMap с коллизией и при расширении.

Middle
  • Объясняет treeify, коэффициент загрузки и цену resize
  • Реализует LRU-кэш на LinkedHashMap

Практика. Реализовать LRU-кэш на LinkedHashMap и с нуля на хеш-таблице и двусвязном списке.

TreeMap, очереди и итераторы Основа

Junior
  • Использует TreeMap для диапазонных запросов и PriorityQueue для приоритетов
  • Объясняет ConcurrentModificationException и как удалять элементы при обходе

Практика. Решить задачи «топ-K элементов» на PriorityQueue и «ближайшее событие к моменту» на TreeMap.

Middle
  • Выбирает реализацию коллекции под набор операций и объясняет выбор

Практика. Для 5 сценариев выбрать коллекцию и обосновать по сложности операций.

Java · 3 этап Дженерики

Дженерики Основа

Middle
  • Пишет обобщённые классы и методы с ограничениями
  • Объясняет стирание типов и его последствия
  • Применяет PECS — extends для чтения, super для записи

Практика. Написать обобщённый кэш и утилиту копирования коллекций с правильными wildcards.

Java · 4 этап Лямбды и Stream API

Лямбды и Stream API Основа

Junior
  • Пишет лямбды и ссылки на методы и использует стандартные функциональные интерфейсы
  • Обрабатывает коллекции стримами — filter, map, collect, groupingBy

Практика. Переписать 10 циклов обработки списка заказов на стримы с группировкой и агрегацией.

Middle
  • Объясняет ленивость стримов и порядок выполнения операций
  • Использует Optional по назначению и не злоупотребляет им
  • Знает, когда параллельный стрим вредит

Практика. Написать собственный Collector и замерить последовательный и параллельный стрим на разных объёмах.

Java · 5 этап Современная Java

Современная Java Основа

Junior
  • Использует records для DTO и switch-выражения

Практика. Перевести DTO учебного проекта на records.

Middle
  • Моделирует варианты данных sealed-интерфейсами и обрабатывает их pattern matching
  • Знает, какие возможности появились в LTS-версиях 17 и 21

Практика. Описать результат операции (успех, ошибка валидации, ошибка системы) sealed-иерархией и обработать switch с pattern matching.

Java · 6 этап Многопоточность

Потоки и синхронизация Основа

Junior
  • Создаёт потоки и объясняет их состояния и корректную остановку через прерывание
  • Защищает общее состояние synchronized

Практика. Сделать потокобезопасный счётчик и банковский перевод между счетами без гонок.

Middle
  • Использует ReentrantLock, ReadWriteLock и Condition по назначению
  • Находит взаимную блокировку по дампу потоков

Практика. Воспроизвести взаимную блокировку, найти её через jstack и исправить порядком захвата.

Java Memory Model и атомарность Основа

Middle
  • Объясняет видимость и happens-before и когда нужен volatile
  • Использует AtomicInteger, LongAdder и CAS вместо блокировок там, где уместно

Практика. Показать проблему видимости без volatile и исправить тремя способами.

Senior
  • Объясняет безопасную публикацию объектов и ошибку double-checked locking без volatile

Практика. Разобрать реализацию ленивого синглтона с double-checked locking и объяснить, что гарантирует volatile.

Пулы потоков и CompletableFuture Основа

Middle
  • Создаёт пулы с ограниченной очередью и политикой отказа, подбирает размер под задачи
  • Строит асинхронные цепочки на CompletableFuture с обработкой ошибок и таймаутами
  • Объясняет утечку ThreadLocal в пулах потоков

Практика. Параллельно опросить 5 внешних сервисов через CompletableFuture с общим таймаутом и частичными результатами.

Конкурентные коллекции и координация Основа

Middle
  • Объясняет устройство ConcurrentHashMap и атомарные операции compute и merge
  • Использует BlockingQueue для производителей и потребителей
  • Применяет Semaphore, CountDownLatch и CyclicBarrier

Практика. Реализовать конвейер производитель — потребитель на BlockingQueue с корректным завершением.

Виртуальные потоки Основа

Middle
  • Объясняет, чем виртуальные потоки отличаются от платформенных и для каких задач подходят

Практика. Переписать сервис с пулом потоков для HTTP-вызовов на виртуальные потоки и сравнить пропускную способность.

Senior
  • Знает ограничения — закрепление при synchronized до JDK 24, пулы ресурсов, ThreadLocal — и оценивает переход сервиса

Практика. Оценить перевод Spring Boot сервиса на виртуальные потоки — узкие места, пулы соединений, риски.

Java · 7 этап JVM и сборка мусора

Память JVM Основа

Middle
  • Объясняет области памяти JVM и что хранится в каждой
  • Настраивает размер кучи для контейнера через MaxRAMPercentage
  • Снимает и анализирует дамп кучи при утечке

Практика. Создать утечку памяти в учебном сервисе, снять heap dump и найти причину в Eclipse MAT или VisualVM.

Сборка мусора Основа

Middle
  • Объясняет поколения, достижимость и как работает G1
  • Читает GC-лог и находит длинные паузы

Практика. Включить GC-логи у сервиса под нагрузкой и описать частоту и длительность пауз.

Senior
  • Выбирает сборщик (G1, ZGC, Parallel) под требования задержки и пропускной способности
  • Диагностирует проблемы GC по метрикам продакшена

Практика. Сравнить G1 и ZGC на одном сервисе под нагрузкой по p99 задержки и потреблению памяти.

Загрузка классов и JIT Основа

Senior
  • Объясняет делегирование загрузчиков классов и утечки метаспейса
  • Объясняет JIT, прогрев и почему микробенчмарки пишут на JMH

Практика. Написать JMH-бенчмарк для двух реализаций и объяснить ловушки (мёртвый код, прогрев).

Java · 8 этап Ввод-вывод и данные

Ввод-вывод и данные Основа

Junior
  • Читает и пишет файлы с буферизацией и правильной кодировкой
  • Работает с датами через java.time и часовыми поясами

Практика. Обработать большой CSV построчно без загрузки в память и посчитать агрегаты.

Middle
  • Объясняет неблокирующий ввод-вывод NIO
  • Выбирает формат сериализации (JSON, protobuf) и объясняет риски Java-сериализации

Практика. Реализовать хранение событий с датами в UTC и вывод в часовом поясе пользователя с тестами на переход времени.

Java · 9 этап Дизайн и паттерны

Дизайн и паттерны Основа

Junior
  • Объясняет принципы SOLID на примерах
  • Узнаёт в коде основные паттерны — фабрика, строитель, стратегия, наблюдатель, декоратор

Практика. Найти 5 паттернов в исходниках JDK или Spring и объяснить, какую задачу они решают.

Middle
  • Применяет паттерн для решения конкретной проблемы, а не ради паттерна
  • Находит нарушения SOLID в коде и рефакторит их

Практика. Отрефакторить класс на 500 строк с несколькими ответственностями по SOLID с тестами до и после.

Java · 10 этап Сборка, тесты и логирование

Сборка, тесты и логирование Основа

Junior
  • Собирает проект в Maven или Gradle и управляет зависимостями
  • Пишет тесты на JUnit 5 с Mockito и AssertJ
  • Логирует через SLF4J с правильными уровнями

Практика. Создать проект на Gradle с модулем бизнес-логики, тестами JUnit 5 и Mockito и отчётом о покрытии.

Middle
  • Настраивает многомодульную сборку и разрешает конфликты версий зависимостей

Практика. Разобрать конфликт версий транзитивных зависимостей в многомодульном проекте и зафиксировать версии через BOM.

Java · Spring · 1 этап Контейнер и бины

IoC, DI и бины Основа

Junior
  • Объясняет IoC и внедрение через конструктор и почему оно предпочтительнее
  • Объявляет бины стереотипами и методами @Bean
  • Описывает жизненный цикл бина и scopes singleton и prototype

Практика. Сделать приложение из трёх слоёв (контроллер, сервис, репозиторий) с внедрением через конструктор и тестом сервиса.

Middle
  • Решает конфликты при нескольких кандидатах — @Primary, @Qualifier
  • Объясняет, почему prototype внутри singleton не обновляется и как это исправить

Практика. Разобрать на примере проблему prototype-бина внутри singleton и исправить через ObjectProvider.

Конфигурация и контекст Основа

Junior
  • Настраивает приложение через application.yml, профили и переменные окружения

Практика. Вынести все настройки сервиса в application.yml с профилями dev и prod.

Middle
  • Связывает настройки в типизированные @ConfigurationProperties с валидацией
  • Использует события контекста и условные бины

Практика. Описать настройки внешней интеграции классом @ConfigurationProperties с валидацией и тестом.

AOP и прокси Основа

Middle
  • Объясняет, как Spring создаёт прокси и чем JDK-прокси отличается от CGLIB
  • Объясняет, почему самовызов обходит @Transactional и @Cacheable
  • Пишет аспект для сквозной логики (замер времени, аудит)

Практика. Воспроизвести самовызов метода с @Transactional, показать, что транзакции нет, и исправить.

Java · Spring · 2 этап Spring Boot

Spring Boot Основа

Junior
  • Создаёт приложение на Spring Boot со стартерами и запускает его
  • Подключает Actuator и проверяет health и метрики

Практика. Создать сервис на Spring Boot с REST-эндпоинтом, Actuator и сборкой в исполняемый jar.

Middle
  • Объясняет, как работает автоконфигурация и как её переопределить
  • Пишет собственный стартер с условной автоконфигурацией

Практика. Вынести общую интеграцию в собственный стартер с автоконфигурацией и тестами условий.

Java · Spring · 3 этап Веб-слой

Spring MVC и REST-контроллеры Основа

Junior
  • Пишет REST-контроллеры с правильными методами, кодами и DTO

Практика. Реализовать CRUD API заказов на Spring MVC с DTO и тестами через MockMvc.

Middle
  • Описывает путь запроса через фильтры, DispatcherServlet и перехватчики
  • Настраивает встроенный сервер и пул потоков под нагрузку

Практика. Добавить фильтр корреляции запросов с trace_id в MDC и перехватчик замера времени.

Валидация и обработка ошибок Основа

Junior
  • Валидирует входные данные аннотациями Bean Validation
  • Обрабатывает ошибки в @ControllerAdvice и возвращает понятный ответ

Практика. Добавить валидацию создания заказа и единую обработку ошибок с тестами.

Middle
  • Возвращает ошибки в формате Problem Details и пишет свои валидаторы

Практика. Перевести ответы об ошибках сервиса на ProblemDetail и написать валидатор согласованности полей.

Java · Spring · 4 этап Данные и транзакции

Spring Data JPA Основа

Junior
  • Создаёт сущности и репозитории, пишет запросы методами и @Query

Практика. Сделать слой данных для заказов и позиций на Spring Data JPA с тестами на Testcontainers.

Middle
  • Устраняет N+1 через fetch join и entity graph и видит SQL в логах
  • Использует проекции и пагинацию для больших выборок
  • Объясняет persistence context и dirty checking

Практика. Найти N+1 и лишние запросы в учебном проекте через логи Hibernate и сократить число запросов на странице до константы.

Транзакции в Spring Основа

Junior
  • Использует @Transactional на сервисном слое для связанных изменений

Практика. Сделать оформление заказа с резервом товара в одной транзакции и тестом отката.

Middle
  • Объясняет propagation REQUIRED и REQUIRES_NEW и откат при checked-исключениях
  • Находит причины, по которым транзакция не работает — самовызов, private, не тот менеджер
  • Не держит транзакцию во время внешних вызовов

Практика. Записать журнал аудита в отдельной транзакции REQUIRES_NEW так, чтобы он сохранялся при откате основной.

Java · Spring · 5 этап Spring Security

Spring Security Основа

Middle
  • Настраивает SecurityFilterChain для REST API с JWT
  • Подключает вход через OAuth 2.0 и OIDC и сервер ресурсов
  • Защищает методы через @PreAuthorize с проверкой владельца ресурса

Практика. Защитить API заказов JWT-токенами внешнего провайдера, разграничить роли и проверку владельца.

Senior
  • Объясняет устройство цепочки фильтров и пишет свой фильтр аутентификации
  • Проектирует безопасность для нескольких сервисов и клиентов

Практика. Реализовать аутентификацию по API-ключу для партнёров отдельной цепочкой фильтров рядом с JWT для пользователей.

Java · Spring · 6 этап Тестирование Spring Boot

Тестирование Spring Boot Основа

Junior
  • Пишет тесты контроллеров через @WebMvcTest и MockMvc

Практика. Покрыть контроллер заказов тестами MockMvc на успешные ответы и ошибки валидации.

Middle
  • Пишет интеграционные тесты на Testcontainers с переиспользованием контейнеров
  • Подменяет бины через @MockitoBean и ускоряет тесты кэшированием контекста

Практика. Перевести интеграционные тесты с H2 на Testcontainers PostgreSQL и сократить время прогона за счёт общего контекста.

Java · Spring · 7 этап Сообщения в Spring

Сообщения в Spring Основа

Middle
  • Пишет продюсер и потребитель Kafka на Spring Kafka с обработкой ошибок и DLT
  • Настраивает подтверждения и повторы в Spring AMQP
  • Объясняет, когда уместна абстракция Spring Cloud Stream

Практика. Реализовать обработку событий заказа на Spring Kafka с повторами, DLT и интеграционным тестом в Testcontainers.

Java · Spring · 8 этап Микросервисы на Spring

Микросервисы на Spring Основа

Middle
  • Добавляет таймауты, повторы и circuit breaker через Resilience4j
  • Подключает трассировку Micrometer Tracing и метрики

Практика. Обернуть вызов внешнего сервиса в Resilience4j с circuit breaker и проверить поведение в тесте с медленной заглушкой.

Senior
  • Выбирает компоненты Spring Cloud против средств платформы (Kubernetes, service mesh) и обосновывает

Практика. Сравнить для своего проекта Spring Cloud Gateway и ingress-контроллер Kubernetes и описать выбор.

Java · Spring · 9 этап Reactive и WebFlux

Reactive и WebFlux Полезно знать

Middle
  • Объясняет Mono и Flux, backpressure и почему блокирующий вызов ломает реактивный сервис
  • Выбирает между WebFlux и MVC с виртуальными потоками

Практика. Реализовать агрегирующий эндпоинт на WebFlux, опрашивающий три сервиса параллельно, и сравнить с MVC на виртуальных потоках.

Java · Spring · 10 этап Spring Batch и Integration

Spring Batch и Integration Полезно знать

Middle
  • Строит пакетную обработку на Spring Batch с чанками, повторами и перезапуском

Практика. Реализовать импорт большого CSV в базу на Spring Batch с пропуском ошибочных строк и перезапуском с места падения.

Python · 1 этап Основы языка

Основы языка Основа

Junior
  • Объясняет изменяемые и неизменяемые типы и ловушку изменяемого аргумента по умолчанию
  • Выбирает между списком, кортежем, словарём и множеством по операциям
  • Обрабатывает исключения и пишет свои классы исключений

Практика. Решить 20 задач «что выведет код» на изменяемость, копирование и области видимости.

Middle
  • Объясняет устройство словаря и почему ключ должен быть хешируемым

Практика. Реализовать LRU-кэш на dict и сравнить с functools.lru_cache.

Python · 2 этап Функции, декораторы и замыкания

Функции, декораторы и замыкания Основа

Junior
  • Использует позиционные, именованные, *args и **kwargs
  • Пишет декоратор и объясняет замыкание

Практика. Написать декоратор замера времени и декоратор повторов.

Middle
  • Пишет декоратор с параметрами и functools.wraps
  • Использует functools — lru_cache, partial, singledispatch

Практика. Написать декоратор повторов с параметрами (число попыток, исключения, пауза), работающий и для async-функций.

Python · 3 этап Итераторы и генераторы

Итераторы и генераторы Основа

Junior
  • Пишет генераторы и объясняет экономию памяти по сравнению со списком
  • Использует list и dict comprehension и генераторные выражения

Практика. Обработать файл на гигабайт генератором построчно с фильтрацией и агрегацией.

Middle
  • Реализует протокол итератора и использует itertools
  • Объясняет send и yield from

Практика. Построить конвейер обработки логов из генераторов с itertools.

Python · 4 этап ООП и модель данных

ООП и модель данных Основа

Junior
  • Пишет классы со свойствами, наследованием и магическими методами
  • Использует dataclass для моделей данных

Практика. Сделать класс денежной суммы с операциями сравнения и сложения через магические методы.

Middle
  • Объясняет MRO и super при множественном наследовании
  • Объясняет дескрипторы, __slots__ и метаклассы на уровне назначения
  • Выбирает между dataclass, NamedTuple и Pydantic

Практика. Реализовать валидируемое поле дескриптором и сравнить с property и Pydantic.

Python · 5 этап Конкурентность и asyncio

Конкурентность и asyncio Основа

Junior
  • Объясняет GIL и разницу threading, multiprocessing и asyncio

Практика. Сравнить время загрузки 50 страниц последовательно, в потоках и в asyncio.

Middle
  • Пишет асинхронный код с TaskGroup, таймаутами и отменой
  • Выносит блокирующие вызовы из event loop
  • Защищает общее состояние в потоках, несмотря на GIL

Практика. Сделать асинхронный сборщик данных из нескольких API с ограничением параллельности, таймаутами и отменой.

Senior
  • Выбирает модель конкурентности под нагрузку сервиса и объясняет влияние free-threaded Python

Практика. Найти и устранить блокировку event loop в асинхронном сервисе под нагрузкой по профилю.

Python · 6 этап Память и устройство CPython

Память и устройство CPython Основа

Middle
  • Объясняет подсчёт ссылок и сборку циклических ссылок
  • Профилирует код (cProfile, py-spy) и ускоряет узкие места

Практика. Профилировать медленный скрипт, найти узкое место и ускорить минимум в 3 раза без смены алгоритма на C.

Python · 7 этап Аннотации типов

Аннотации типов Основа

Junior
  • Аннотирует функции и классы и проверяет код mypy или pyright

Практика. Аннотировать учебный проект и добиться прохождения mypy в строгом режиме.

Middle
  • Использует TypeVar, Generic и Protocol для обобщённого кода

Практика. Описать интерфейс репозитория через Protocol и сделать две реализации с проверкой типов.

Python · 8 этап Окружение, инструменты и тесты

Окружение, инструменты и тесты Основа

Junior
  • Создаёт виртуальное окружение и фиксирует зависимости
  • Пишет тесты на pytest с фикстурами и параметризацией

Практика. Покрыть учебный проект тестами pytest с фикстурами и отчётом покрытия.

Middle
  • Настраивает проект на uv или poetry с ruff и проверкой типов в CI
  • Подменяет внешние зависимости в тестах и тестирует асинхронный код

Практика. Настроить проект на uv с ruff, mypy и pytest в CI.

Python · 9 этап Веб-фреймворки

Веб-фреймворки Основа

Junior
  • Делает REST API на FastAPI или Django REST Framework с валидацией

Практика. Сделать API заказов на FastAPI с Pydantic-моделями, базой и тестами.

Middle
  • Использует внедрение зависимостей FastAPI и асинхронный доступ к базе
  • Работает с ORM (SQLAlchemy или Django ORM) без N+1 и с миграциями

Практика. Добавить асинхронный доступ к PostgreSQL через SQLAlchemy, миграции Alembic и устранить N+1 в списке заказов.

Go · 1 этап Основы языка

Основы языка Основа

Junior
  • Пишет программы со структурами, методами и указателями
  • Объясняет нулевые значения, область видимости по регистру имени и пакеты
  • Выбирает между приёмником-значением и приёмником-указателем

Практика. Сделать консольное приложение учёта задач со структурами, методами и сохранением в JSON.

Go · 2 этап Срезы, мапы и строки

Срезы, мапы и строки Основа

Junior
  • Объясняет len и cap среза и рост при append
  • Объясняет, почему срезы могут делить общий массив

Практика. Решить 10 задач «что выведет код» на срезы и append.

Middle
  • Избегает ловушек — изменение через подсрез, итерация по мапе, строки как байты

Практика. Найти и исправить ошибки с общим массивом в учебном коде обработки срезов.

Go · 3 этап Интерфейсы

Интерфейсы Основа

Junior
  • Объявляет маленькие интерфейсы и реализует их неявно

Практика. Сделать хранилище с интерфейсом и двумя реализациями — в памяти и в файле.

Middle
  • Объясняет, почему интерфейс с nil-указателем не равен nil
  • Применяет принцип «принимай интерфейсы, возвращай структуры»

Практика. Воспроизвести ловушку nil-интерфейса при возврате ошибки и исправить.

Go · 4 этап Ошибки

Ошибки Основа

Junior
  • Возвращает и проверяет ошибки, оборачивает их с контекстом через %w

Практика. Добавить обработку ошибок с контекстом во все слои учебного сервиса.

Middle
  • Использует errors.Is и errors.As и свои типы ошибок; panic — только для невозможных ситуаций

Практика. Ввести типизированные ошибки домена и переводить их в коды HTTP в одном месте.

Go · 5 этап Горутины, каналы и context

Горутины, каналы и context Основа

Junior
  • Запускает горутины и синхронизирует их через WaitGroup и каналы

Практика. Параллельно скачать 20 страниц горутинами и собрать результаты через канал.

Middle
  • Использует select, буферизованные каналы и пулы воркеров
  • Передаёт context для отмены и таймаутов
  • Находит гонки через -race и утечки горутин

Практика. Сделать пул воркеров с context, таймаутами и корректным завершением, проверить детектором гонок.

Senior
  • Проектирует конкурентные конвейеры с ограничением параллельности и корректным завершением

Практика. Реализовать конвейер обработки событий с backpressure и graceful shutdown под нагрузкой.

Go · 6 этап Память, инструменты и тесты

Память, инструменты и тесты Основа

Junior
  • Управляет зависимостями через go modules и пишет табличные тесты

Практика. Покрыть пакет табличными тестами и бенчмарками.

Middle
  • Профилирует сервис через pprof и снижает аллокации
  • Объясняет escape analysis и работу сборщика мусора Go

Практика. Найти через pprof горячее место и лишние аллокации в HTTP-сервисе и сократить их.

Go · 7 этап Сервисы на Go

Сервисы на Go Основа

Junior
  • Делает HTTP API на net/http с маршрутизацией и JSON

Практика. Сделать API заказов на стандартной библиотеке с тестами через httptest.

Middle
  • Пишет middleware для логирования, авторизации и восстановления после panic
  • Работает с PostgreSQL через pgx и делает graceful shutdown

Практика. Добавить middleware, работу с PostgreSQL через pgx, миграции и корректную остановку по SIGTERM.

4 этап Веб и API

HTTP и HTTPS Основа

Junior
  • Называет методы и коды ответа HTTP и выбирает подходящие для своего API
  • Читает запрос и ответ в curl и DevTools — заголовки, тело, коды
  • Объясняет разницу 401 и 403, 502 и 504

Практика. Описать API ассистента (5 эндпоинтов) с методами, кодами ошибок и примерами запросов в curl.

Middle
  • Настраивает кэширование ответов заголовками Cache-Control и ETag
  • Объясняет, что дают HTTP/2 и потоковая передача для ответов LLM

Практика. Включить потоковую выдачу ответа через SSE за nginx и проверить, что ответ не буферизуется.

Проектирование REST API Основа

Junior
  • Проектирует ресурсы и эндпоинты с правильными методами и кодами ответа
  • Описывает API в OpenAPI

Практика. Спроектировать и реализовать API заказов (создание, список, получение, отмена) с описанием в OpenAPI.

Middle
  • Делает пагинацию курсором, фильтрацию и единый формат ошибок
  • Обеспечивает идемпотентность создания через ключ идемпотентности
  • Отличает совместимые изменения API от ломающих

Практика. Добавить в API пагинацию курсором, ключ идемпотентности для создания заказа и единый формат ошибок.

Senior
  • Выстраивает версионирование и политику изменений публичного API для внешних клиентов

Практика. Описать политику версионирования и депрекации API для партнёров и провести изменение без поломки клиентов.

gRPC, GraphQL, WebSocket и вебхуки Полезно знать

Middle
  • Выбирает стиль API под задачу — REST, gRPC, GraphQL, WebSocket, вебхуки — и обосновывает
  • Реализует gRPC-сервис с protobuf-контрактом

Практика. Реализовать один и тот же сервис в REST и gRPC и сравнить размер сообщений, задержку и удобство эволюции контракта.

Аутентификация и авторизация Основа

Junior
  • Объясняет разницу аутентификации и авторизации
  • Хранит пароли хешем bcrypt или Argon2 и реализует вход с сессией или токеном

Практика. Реализовать регистрацию и вход с хешированием паролей и защищённым эндпоинтом.

Middle
  • Реализует JWT с коротким временем жизни и обновлением токена, объясняет компромиссы
  • Подключает вход через OAuth 2.0 и OpenID Connect
  • Проверяет права на уровне объекта, а не только эндпоинта

Практика. Добавить вход через внешнего провайдера по OIDC, обновление токенов и проверку владельца ресурса.

Senior
  • Проектирует модель доступа (роли, атрибуты, владение) для системы с несколькими клиентами

Практика. Спроектировать модель прав для B2B-продукта с организациями, ролями и приглашениями и описать её в design doc.

5 этап Базы данных

SQL и реляционные базы Основа

Junior
  • Пишет запросы с фильтрами, сортировкой, JOIN и GROUP BY
  • Проектирует таблицы для пользователей, диалогов и сообщений с внешними ключами
  • Использует параметризованные запросы и объясняет, как они защищают от SQL-инъекций

Практика. Спроектировать схему БД для чат-ассистента (пользователи, диалоги, сообщения, оценки ответов) и написать 5 запросов для аналитики диалогов.

Middle
  • Находит медленный запрос через EXPLAIN и ускоряет его индексом
  • Объясняет транзакции и выбирает уровень изоляции для конкурентных обновлений
  • Хранит эмбеддинги в PostgreSQL с pgvector рядом с обычными данными

Практика. Добавить в схему pgvector-таблицу фрагментов документов с фильтром по правам доступа, замерить время поиска до и после индекса HNSW.

Индексы и производительность запросов Основа

Junior
  • Объясняет, как индекс ускоряет поиск, и создаёт индекс под частый запрос

Практика. Заполнить таблицу миллионом строк, замерить запрос до и после индекса.

Middle
  • Читает EXPLAIN ANALYZE и находит причину медленного запроса
  • Проектирует составные и покрывающие индексы с учётом порядка колонок
  • Объясняет, когда индекс не используется и чем вредят лишние индексы

Практика. Ускорить 5 медленных запросов учебной базы по EXPLAIN ANALYZE, для каждого описать причину и решение.

Senior
  • Организует поиск медленных запросов в продакшене (pg_stat_statements) и их системное исправление

Практика. Настроить сбор статистики запросов и провести разбор топ-10 тяжёлых запросов продакшен-подобной нагрузки.

Транзакции и изоляция Основа

Junior
  • Объясняет ACID и использует транзакцию для связанных изменений

Практика. Реализовать перевод денег между счетами в транзакции и показать, что происходит без неё.

Middle
  • Объясняет уровни изоляции и аномалии на примерах и выбирает уровень под задачу
  • Решает конкурентное обновление оптимистической блокировкой или SELECT FOR UPDATE
  • Объясняет MVCC в PostgreSQL

Практика. Воспроизвести потерянное обновление в двух сессиях psql и исправить двумя способами.

Senior
  • Разбирает взаимные блокировки в базе по логам и устраняет причину

Практика. Смоделировать взаимную блокировку в базе под нагрузкой, найти её в логах и устранить порядком обновлений.

Моделирование данных Основа

Junior
  • Проектирует схему со связями один ко многим и многие ко многим и внешними ключами
  • Использует ограничения NOT NULL, UNIQUE, CHECK для целостности

Практика. Спроектировать схему интернет-магазина (пользователи, товары, заказы, позиции, оплаты) с ограничениями.

Middle
  • Осознанно денормализует данные под нагрузку чтения
  • Пишет миграции схемы, совместимые с выкаткой без простоя

Практика. Переименовать колонку и разделить таблицу в работающей системе по схеме expand–contract без простоя.

ORM и доступ к данным Основа

Junior
  • Сохраняет и загружает сущности через ORM и пишет параметризованные запросы

Практика. Реализовать репозиторий заказов через ORM с тестами на реальной базе.

Middle
  • Находит и устраняет проблему N+1 жадной загрузкой или отдельным запросом
  • Объясняет жизненный цикл сущности и persistence context
  • Решает, когда писать SQL вручную вместо ORM

Практика. Найти N+1 в учебном проекте по логу SQL, исправить и замерить число запросов до и после.

NoSQL-хранилища Основа

Middle
  • Объясняет семейства NoSQL и выбирает хранилище под паттерн доступа
  • Использует Elasticsearch для полнотекстового поиска и понимает его согласованность

Практика. Добавить в сервис полнотекстовый поиск по товарам на Elasticsearch с синхронизацией из PostgreSQL.

Senior
  • Обосновывает выбор хранилища для системы по нагрузке, согласованности и эксплуатации
  • Объясняет компромиссы CAP и PACELC на примерах конкретных баз

Практика. Для трёх сценариев (лента событий, каталог, метрики) выбрать хранилища и обосновать письменно.

6 этап Кэширование

Кэширование Основа

Junior
  • Кэширует результат запроса в Redis с временем жизни

Практика. Добавить кэш карточки товара в Redis и замерить время ответа до и после.

Middle
  • Выбирает стратегию — cache-aside, write-through — и способ инвалидации
  • Защищает базу от лавины промахов и обрабатывает горячие ключи
  • Измеряет долю попаданий и пользу кэша

Практика. Реализовать cache-aside с защитой от одновременных промахов и инвалидацией при изменении цены.

Senior
  • Проектирует многоуровневое кэширование (локальный, распределённый, CDN) с требованиями к свежести

Практика. Спроектировать кэширование каталога с требованием «цена обновляется в течение минуты» и оценить нагрузку на базу.

7 этап Брокеры сообщений

Очереди, pub/sub и гарантии доставки Основа

Junior
  • Объясняет разницу очереди и pub/sub и зачем сервисам брокер

Практика. Связать два сервиса через очередь — один публикует заказы, второй их обрабатывает.

Middle
  • Объясняет гарантии доставки и делает обработчик идемпотентным
  • Настраивает повторы с паузой и очередь «мёртвых» сообщений
  • Проектирует события и команды с версионированием схемы

Практика. Сделать обработчик, устойчивый к дубликатам и падениям, с повторами и DLQ, и проверить, убивая его посреди обработки.

Kafka Основа

Middle
  • Объясняет топики, партиции, смещения и группы потребителей
  • Настраивает продюсер (acks, идемпотентность) и потребитель (коммит смещений) под нужные гарантии
  • Объясняет порядок сообщений в пределах партиции и выбор ключа

Практика. Поднять Kafka в Docker, сделать продюсер и группу из трёх потребителей, проверить перебалансировку и повторную обработку при падении.

Senior
  • Рассчитывает число партиций и следит за отставанием потребителей
  • Объясняет репликацию, ISR и поведение при отказе брокера

Практика. Провести нагрузочный тест с отказом брокера и измерить потери и дубли при разных настройках acks и min.insync.replicas.

RabbitMQ Основа

Middle
  • Объясняет exchange, очереди, привязки и типы маршрутизации
  • Настраивает подтверждения доставки и повторы через DLX
  • Выбирает между RabbitMQ и Kafka под задачу

Практика. Реализовать отложенные повторы обработки через очереди с TTL и dead letter exchange.

Согласованность между сервисами Основа

Middle
  • Объясняет проблему двойной записи и реализует transactional outbox

Практика. Реализовать outbox — запись заказа и события в одной транзакции и отдельный публикатор — и проверить отсутствие потерь при падениях.

Senior
  • Проектирует сагу с компенсациями для бизнес-процесса из нескольких сервисов
  • Использует CDC (Debezium) для публикации изменений

Практика. Спроектировать сагу оформления заказа (резерв, оплата, доставка) с компенсациями и описать сценарии отказов.

Очереди и фоновые задачи Основа

Middle
  • Выносит долгую обработку (индексация, пакетные вызовы модели) в фоновую очередь
  • Делает обработчик идемпотентным и настраивает повторы с паузой
  • Сообщает клиенту статус долгой задачи (опрос или уведомление)

Практика. Перенести индексацию загруженных документов в фоновую очередь со статусом задачи, повторами при ошибках модели эмбеддингов и защитой от двойной обработки.

Senior
  • Проектирует ограничение параллельности под лимиты провайдера модели
  • Выбирает между очередью задач и брокером сообщений с обоснованием

Практика. Спроектировать конвейер обработки 100 тысяч документов в сутки с лимитом провайдера 500 запросов в минуту, посчитать время и стоимость.

8 этап Тестирование

Тестирование Основа

Junior
  • Пишет юнит-тесты на бизнес-логику с понятными сценариями
  • Подменяет зависимости там, где это уместно

Практика. Покрыть юнит-тестами сервис расчёта стоимости заказа со скидками, включая граничные случаи.

Middle
  • Пишет интеграционные тесты с настоящей базой и брокером в Testcontainers
  • Тестирует API сервиса и обработку ошибок
  • Вводит контрактные тесты между сервисами

Практика. Написать интеграционные тесты репозитория и обработчика сообщений на Testcontainers с PostgreSQL и Kafka.

Senior
  • Выстраивает стратегию тестирования сервиса — что и каким уровнем покрывать, как держать тесты быстрыми и стабильными

Практика. Провести аудит тестов сервиса — время прогона, нестабильные тесты, пробелы покрытия — и план улучшений.

9 этап Контейнеры и выкатка

Docker Основа

Junior
  • Пишет Dockerfile для Python-сервиса и запускает его с переменными окружения
  • Поднимает сервис вместе с PostgreSQL через docker compose
  • Объясняет разницу между образом и контейнером, томом и bind mount

Практика. Упаковать FastAPI-сервис с RAG в контейнер, поднять вместе с PostgreSQL и pgvector через compose.

Middle
  • Уменьшает образ multi-stage сборкой и кэшем слоёв зависимостей
  • Настраивает корректную остановку (SIGTERM) и healthcheck
  • Не допускает секретов в образе и запускает контейнер не от root

Практика. Уменьшить образ сервиса минимум вдвое, добавить healthcheck и graceful shutdown, проверить, что незавершённые запросы к модели дорабатывают при остановке.

CI/CD и выкатка без простоя Основа

Junior
  • Настраивает CI со сборкой, тестами и линтером для своего сервиса

Практика. Настроить GitHub Actions или GitLab CI для сервиса со сборкой образа.

Middle
  • Собирает образ один раз и продвигает его по окружениям
  • Выкатывает изменения без простоя, совместимые со старой версией
  • Проводит миграцию схемы по схеме expand–contract

Практика. Выкатить переименование колонки в работающем сервисе тремя релизами без простоя.

Senior
  • Выбирает стратегию выкатки (rolling, blue-green, canary) с автоматическим откатом по метрикам

Практика. Внедрить canary-выкатку с автоматическим откатом по доле ошибок.

Kubernetes для разработчика Основа

Middle
  • Описывает Deployment, Service и пробы для своего сервиса
  • Задаёт requests и limits и объясняет OOMKilled и троттлинг
  • Находит причину CrashLoopBackOff по событиям и логам
  • Обеспечивает корректную остановку по SIGTERM

Практика. Развернуть сервис с базой в локальном кластере (kind или minikube) с пробами, ресурсами и конфигом, проверить rolling update без ошибок.

Senior
  • Настраивает автомасштабирование и согласует его с ограничениями зависимостей (база, лимиты)

Практика. Настроить HPA по нагрузке и провести тест, показывающий, где масштабирование упирается в базу.

10 этап Наблюдаемость

Наблюдаемость Основа

Junior
  • Пишет структурированные логи с уровнями и идентификатором запроса

Практика. Перевести логи сервиса в JSON с trace_id и уровнем.

Middle
  • Экспортирует метрики RED (запросы, ошибки, задержки) и строит дашборд
  • Подключает распределённую трассировку через OpenTelemetry
  • Объясняет, почему задержку измеряют перцентилями

Практика. Добавить в сервис метрики Prometheus, трассировку OpenTelemetry и дашборд в Grafana; найти по трассе самый медленный участок запроса.

Senior
  • Определяет SLO сервиса и настраивает алерты по скорости сжигания бюджета ошибок

Практика. Определить SLO для двух эндпоинтов, настроить алерты по burn rate и проверить их на учебном инциденте.

11 этап Безопасность приложения

Безопасность приложения Основа

Junior
  • Защищается от SQL-инъекций параметризованными запросами и не хранит секреты в коде

Практика. Найти и исправить SQL-инъекцию и захардкоженный пароль в учебном сервисе.

Middle
  • Проверяет сервис по OWASP Top 10, включая доступ к чужим объектам и SSRF
  • Хранит секреты в хранилище и ротирует их
  • Отслеживает уязвимости зависимостей в CI

Практика. Проверить свой сервис по OWASP Top 10, исправить найденное и добавить сканирование зависимостей в CI.

Senior
  • Проводит моделирование угроз для нового сервиса и вводит практики безопасной разработки в команде

Практика. Провести моделирование угроз для сервиса платежей и составить план мер.

12 этап Системный дизайн

Масштабирование и оценка нагрузки Основа

Middle
  • Объясняет вертикальное и горизонтальное масштабирование и почему сервис делают stateless
  • Оценивает RPS, объём данных и трафик по требованиям

Практика. Оценить нагрузку для сервиса коротких ссылок на 100 млн переходов в день — RPS, хранилище, кэш.

Senior
  • Находит узкое место системы по расчёту и предлагает масштабирование с оценкой стоимости

Практика. Провести полный разбор задачи системного дизайна с расчётами и записать решение.

Согласованность и CAP Основа

Middle
  • Объясняет CAP и PACELC и сильную и итоговую согласованность на примерах

Практика. Для пяти функций маркетплейса определить, где нужна сильная согласованность, а где достаточно итоговой.

Senior
  • Выбирает модель согласованности для частей системы по требованиям бизнеса
  • Объясняет CQRS и Event Sourcing и когда они оправданы

Практика. Спроектировать модуль с CQRS (запись и проекции для чтения) и описать задержку согласования и её влияние на пользователя.

Микросервисы Основа

Middle
  • Объясняет плюсы и минусы микросервисов по сравнению с модульным монолитом
  • Выбирает между синхронным вызовом и событием для взаимодействия

Практика. Разобрать учебный монолит на модули с явными границами и описать, какой модуль и почему стоит выделить первым.

Senior
  • Определяет границы сервисов по предметной области и планирует выделение сервиса из монолита

Практика. Спланировать выделение сервиса из монолита — данные, API, миграция трафика, откат.

Надёжность Основа

Middle
  • Ставит таймауты на все внешние вызовы и делает повторы с паузой только для идемпотентных операций
  • Применяет circuit breaker и изоляцию ресурсов (bulkhead)

Практика. Добавить вызову внешнего сервиса таймаут, повторы с jitter и circuit breaker и проверить поведение при медленной зависимости.

Senior
  • Проектирует деградацию функций и защиту от каскадных отказов
  • Проводит учения по отказам и разбирает инциденты

Практика. Провести учение — отключить зависимость в стенде, проверить деградацию и описать найденные слабые места.

13 этап Highload

Репликация и шардирование Основа

Senior
  • Объясняет синхронную и асинхронную репликацию и последствия лага реплик для чтения
  • Выбирает ключ и стратегию шардирования и планирует решардинг
  • Объясняет consistent hashing и виртуальные узлы

Практика. Спроектировать шардирование таблицы заказов на 10 млрд строк — ключ, запросы по разным измерениям, решардинг без простоя.

Балансировка и перегрузка Основа

Senior
  • Выбирает алгоритм балансировки и уровень L4 или L7 под нагрузку
  • Реализует ограничение частоты запросов (token bucket) в распределённом виде
  • Объясняет, почему при утилизации около 90% резко растут задержки

Практика. Реализовать распределённый rate limiter на Redis и проверить его под нагрузкой с несколькими экземплярами сервиса.

Задержки и производительность Основа

Senior
  • Объясняет хвостовые задержки и приёмы их снижения (hedged requests, таймауты)
  • Настраивает пулы соединений к базе и сервисам под нагрузку
  • Применяет вероятностные структуры (фильтр Блума, HyperLogLog) для экономии памяти

Практика. Найти причину роста p99 в учебном сервисе под нагрузкой (пул соединений, GC, блокировки) и подтвердить исправление замером.

14 этап Командные и лидерские навыки

Технические решения Основа

Middle
  • Предлагает минимум два варианта решения задачи с плюсами и минусами
  • Проверяет спорное решение прототипом или замером, а не мнением

Практика. Для ближайшей задачи средней сложности описать два варианта реализации с критериями выбора и обсудить с тимлидом до начала работы.

Senior
  • Пишет design doc для крупной задачи и проводит его обсуждение с командой
  • Фиксирует архитектурные решения (ADR) с причинами и условиями пересмотра
  • Различает обратимые и необратимые решения и тратит время пропорционально

Практика. Написать design doc для крупной задачи (контекст, варианты, расчёты, риски, план), провести ревью с командой и зафиксировать итог в ADR.

Ведение задач до результата Основа

Middle
  • Разбивает задачу на части по 1–3 дня и даёт оценку диапазоном с допущениями
  • Сообщает об отставании сразу, с причиной и вариантами

Практика. Для задачи на 2–3 недели составить декомпозицию, оценку диапазоном и список рисков, по завершении сравнить план и факт.

Senior
  • Ведёт проект из нескольких задач и людей до выкатки и измерения эффекта
  • Снимает главные риски в начале проекта и выпускает результат частями
  • Сам доводит неясную задачу до понятной постановки вместе с заказчиком

Практика. Провести проект на 1–2 месяца с 2–3 участниками — план с контрольными точками, еженедельный статус заказчику, выкатка по частям, разбор итогов.

Рост коллег и менторство Основа

Middle
  • Вводит в работу нового сотрудника и объясняет на ревью не только что, но и почему
  • Поддерживает документацию по своей части системы в актуальном виде

Практика. Провести онбординг нового сотрудника или стажёра и обновить по его вопросам документацию для новичков.

Senior
  • Ведёт подопечного по плану развития с измеримым результатом
  • Распространяет знания на команду — внутренние доклады, разборы, гайды
  • Снижает зависимость команды от себя как единственного эксперта

Практика. Полгода наставлять младшего коллегу по письменному плану с ежемесячными встречами и измеримой целью; провести 2 внутренних доклада.

Коммуникация с бизнесом и командой Основа

Middle
  • Объясняет техническую проблему и её последствия неспециалисту без жаргона
  • Решает рабочие разногласия обсуждением фактов, а не позиций

Практика. Подготовить для продакта одностраничное описание технического долга в своей области — что это стоит бизнесу и что предлагаете.

Senior
  • Влияет на решения продукта аргументами о стоимости, рисках и пользе
  • Выполняет принятое решение, с которым не согласен, зафиксировав риски
  • Представляет результат работы руководству в цифрах эффекта

Практика. Подготовить и провести презентацию результатов проекта для руководства — эффект, затраты, риски, следующие шаги.

Участие в найме Полезно знать

Senior
  • Проводит техническое собеседование по заранее заданным критериям и задаче
  • Пишет отзыв по критериям с примерами из ответов кандидата
  • Участвует в калибровке оценок с другими интервьюерами

Практика. Провести 5 собеседований в паре с опытным интервьюером, затем 5 самостоятельно, сравнить свои оценки с итоговыми решениями.

← Карта «Backend-разработчик»

Закрытая бета

План есть — пора на собеседование

sotto слышит вопрос интервьюера и показывает короткий ответ и план. Оставьте контакт — пришлём доступ и промокод.

  • Промокод на 2 часа — сверх пробных 30 минут
  • Программа для Windows — скачать сразу, войти — через Яндекс ID или VK ID
  • Прямая связь с разработчиком: что улучшить — сделаем