Карта компетенций Flutter-разработчика
Шесть направлений, сорок восемь тем, и по каждой: что это такое, что здесь важно понимать, как выглядит компетенция на уровне junior, middle и senior, что стоит попрактиковать и где уже лежат хорошие материалы.
Это карта, а не курс. Здесь ничему не учат — другие сделали это лучше и подробнее, и каждая страница ведёт к их работам. Карта даёт очертания всей территории, чтобы стало видно, куда вы ещё не заглядывали.
Пригодится, чтобы трезво оценить, где вы находитесь, найти следующее, что стоит изучить, выстроить разговор с ментором или написать ревью, которое опирается на навыки, а не на впечатления.
Уровни
Одни и те же четыре уровня применимы ко всем направлениям. Они описывают зону ответственности, а не выслугу лет.
| Уровень | Зона ответственности | В технике | В работе с людьми |
|---|---|---|---|
| Junior | Задача | Хорошо делает работу, когда есть понятные примеры и шаблоны. | Следует полученным инструкциям. |
| Middle | Фича | Решает обычные задачи и собирает фичи внутри существующей структуры. | Организует себя сам и работает в команде. |
| Senior | Продукт | Проектирует архитектуру, решает сложные задачи, находит нестандартные решения. | Замечает проблемы, поднимает их рано, ведёт обсуждения, помогает другим делать их работу. |
| Lead | Команда | Задаёт методологию на команду и несколько проектов, видит последствия решений до того, как они наступят. | Ведёт процессы команды и ведёт за собой людей. |
На странице каждой темы есть своя таблица junior/middle/senior для конкретного навыка: ни у кого не бывает одного уровня сразу по всем шести направлениям.
1. Основы
Инженерное мышление, которое переживёт любой язык и любой фреймворк.
- Алгоритмы и структуры данных — как выбрать способ хранить и обрабатывать данные, чтобы всё продолжало работать, когда их станет больше
- Архитектура и организация кода — где лежит код и чему разрешено зависеть от чего
- Моделирование данных — как превратить предметную область в сущности, связи и ограничения, которые не развалятся
- Сеть и HTTP — что на самом деле происходит между приложением и сервером и как это ломается
- Отладка и решение проблем — искать причину, а не менять код, пока не заработает
2. Dart
Язык и всё, что работает на сервере.
- Система типов и null safety — как с помощью типов делать некорректные состояния невозможными, а не просто отлавливать их
- Асинхронность, Future и Stream — однопоточная конкурентность и баги с порядком выполнения, которые к ней прилагаются
- Изоляты и параллелизм — настоящий параллелизм и когда он того стоит
- Коллекции и функциональный стиль — писать преобразования понятно и не прятать их стоимость
- Кодогенерация — пусть шаблонный код пишет сборка
- Dart на сервере — backend на том же языке, что и приложение
- API и контракты — спроектировать границу так, чтобы её можно было менять, ничего не ломая
- Базы данных и миграции — эффективные запросы и изменение схемы, в которой уже лежат настоящие данные
- Аутентификация и авторизация — подтвердить, кто перед вами, и решить, что ему можно
- Realtime — доставлять изменения клиентам по соединению, которое постоянно рвётся
- Фоновые задачи и расписания — работа, которая идёт без запроса и падает молча
- Файлы и загрузки — перемещать байты, не прогоняя их через свой сервер дважды
3. Flutter
Всё, что происходит на клиенте.
- Виджеты и композиция — как на самом деле устроено дерево виджетов
- Layout и рендеринг — constraints вниз, размеры вверх и откуда берётся unbounded height
- Навигация и роутинг — где сейчас пользователь и что должна делать кнопка «назад»
- Темизация и дизайн-системы — внешний вид решается один раз, чтобы в коде фич не встречалось ни одного цвета
- Адаптивный и отзывчивый UI — от телефона до десктопа без четырёх вёрсток
- Анимация — движение, которое объясняет, что произошло, и укладывается в бюджет кадра
- Доступность — чтобы приложением могли пользоваться те, кого вы ни разу не позвали на тестирование
- Состояние и поток данных — где живёт состояние, кто его меняет и как об этом узнаёт UI
- Работа с данными — загрузка, кеширование и достойное поведение без сети
- Платформа и устройство — разрешения, уведомления, deep links, нативный код
- Производительность — сначала измерить, потом оптимизировать
- Тестирование Flutter-приложений — какие поломки реально ловит каждый уровень тестов
4. Инженерные практики
Как работа доходит от идеи до пользователей — и делает это повторяемо.
- Git и рабочий процесс — история, которую можно прочитать
- Code review и договорённости — ревью, которое находит настоящие проблемы и не превращается в узкое место
- Статический анализ и линтеры — пусть анализатор следит за тем, что иначе приходится повторять из ревью в ревью
- Стратегия тестирования — что тестировать, на каком уровне и что не трогать вовсе
- CI/CD — каждое изменение собирается и выкатывается одинаково, машиной
- Релиз и дистрибуция — как довести сборку до пользователей и что делать, если она оказалась плохой
- Мониторинг и отчёты о сбоях — узнавать раньше, чем расскажут пользователи
- Безопасность — исходить из того, что клиент враждебен
- Планирование и оценка — ошибаться дешевле
5. AI в разработке
Уже полноценное направление — со своими приёмами и своими способами всё сломать.
- Работа с кодовыми агентами — что делегировать, а что оставить себе
- Контекст и договорённости для AI — как сделать кодовую базу, в которой агент сможет работать
- Ревью сгенерированного кода — как читать изменения, написанные тем, кто никогда не сомневается
- Границы и типовые сбои — где эти инструменты ошибаются стабильно
- AI в ревью и тестировании — направить его на проверку, туда, где второй читатель обходится дёшево
6. Продукт и команда
Чем тот, кто закрывает тикеты, отличается от того, кто выпускает продукты.
- Требования и скоуп — понять, что нужно, прежде чем решать, как это строить
- Основы UX — сотня мелких решений, которых нет ни в одном описании задачи
- Аналитика и влияние — понимать, помогло ли то, что вы выпустили
- Работа с дизайнерами — превратить макет в продукт, не занимаясь угадыванием
- Техническая коммуникация — писать так, чтобы решения принимались
Как этим пользоваться
- Выберите одно направление, которое мешает работе прямо сейчас. Не самое интересное, а то, которое стоит вам времени в этом месяце.
- Прочитайте таблицу уровней по этой теме и честно найдите себя. Разрыв между вашей строкой и следующей — это и есть ближайшая работа.
- Возьмите одну задачу из раздела «Практика». Это продуктовые задачи, а не упражнения: тему легче освоить там, где она реально встречается.
- Ответьте на вопросы из раздела «Проверьте себя». Ценны те, на которые ответить не получается.
- Прочитайте одну вещь из «Материалов» целиком — это лучше, чем пять наполовину.
- Вернитесь через несколько недель и идите дальше. Никто не senior по всем шести направлениям, а попытка им стать — верный способ остаться middle везде.
Вдвоём — с ментором, лидом или коллегой — вопросы из «Проверьте себя» работают лучше как разговор, а не как самопроверка. Они и написаны для того, чтобы их задавали вслух.