Процесс и методологии
Большая часть разработки — это не код, а согласование с командой. Какой стандарт стиля. Кто и что проверяет на ревью. По какому циклу планируется работа. Это редко главный блок собеседования, но базовая ориентация ожидается на любом уровне.
Карта темы
- Agile-методологии — Scrum, Kanban, и где между ними разница.
- Code conventions — стиль кода, линтеры, форматтеры; зачем единый стандарт.
- Code review — что искать на ревью, как давать и принимать обратную связь.
Agile-методологии
Agile Manifesto (2001) — четыре ценности: люди важнее процессов, работающее ПО важнее документации, сотрудничество с заказчиком важнее контракта, реакция на изменения важнее плана. Agile — не методология, а зонтик.
Scrum — фиксированные итерации (sprints), обычно 2 недели. Артефакты: Product Backlog, Sprint Backlog, Increment. Роли: Product Owner, Scrum Master, Development Team. Церемонии: Planning, Daily, Review, Retrospective. Подходит для продуктов с понятным roadmap и регулярной поставкой.
Kanban — без фиксированных итераций. Доска с колонками (To Do / In Progress / Done) и WIP-лимитами. Задачи протягиваются по мере освобождения. Подходит для поддержки, ops, и команд с непредсказуемым потоком запросов.
Hybrid / Scrumban — в реальности большинство команд миксует. Например, спринты + WIP-лимиты, или спринты без полного Scrum-набора церемоний.
⚠️ Scrum не про «daily standup и burndown chart». Это про эмпирический процесс с тремя столпами: прозрачность, инспекция, адаптация. Команды, которые делают «scrum-ритуалы» без рефлексии и адаптации, — это карго-культ.
Code conventions
Зачем нужен стандарт стиля:
- Читаемость — код пишут раз, читают сотни. Единый стиль уменьшает когнитивную нагрузку.
- Меньше холиваров —
tabs vs spacesрешается один раз в.clang-format. - Автоматизация — линтер ловит ошибки, форматтер ставит пробелы. Время на ревью — на логику, не на отступы.
Для C++ де-факто стандарты:
.clang-format— формат кода. Базовые стили:LLVM,Google,Mozilla,WebKit,Microsoft.clang-tidy— статический анализатор, ловит баги и стилевые проблемы. Чеки отbugprone-*доmodernize-*.- Google C++ Style Guide, Core Guidelines (Stroustrup/Sutter) — фундаментальные документы.
⚠️ Внутренний стиль ≠ всегда хорошо. Не пишите свой 80-страничный документ — возьмите Google или LLVM style и кастомизируйте 5–10 правил под команду.
Code review
Цели ревью:
- Найти баги — особенно те, что компилятор и тесты пропустили (race conditions, ownership, UB).
- Поделиться знаниями — автор учится из комментариев, ревьюер — из чтения чужого кода.
- Поддержать стиль и архитектуру — единый код стиль и согласованные паттерны.
Что искать:
- Корректность. Учитываются ли edge cases? Что с обработкой ошибок? Утечки памяти, гонки, висячие указатели?
- Дизайн. Подходящая ли абстракция? Не дублируется ли существующий код?
- Читаемость. Понятные имена? Сложная функция разбита на меньшие? Комментарии объясняют почему, не что?
- Тесты. Покрыта ли новая функциональность тестами? Не сломаны ли старые?
- Производительность. Нет ли O(n²) там, где не нужно? Есть ли лишние аллокации в горячем пути?
Как давать обратную связь:
- Конкретно: «
std::moveтут не нужен, аргумент уже rvalue», а не «можно улучшить». - С обоснованием: ссылайся на гайдлайн, измерение, инцидент.
- Уважительно: критикуем код, не автора. Различай "must fix" и "nit / suggestion".
Как принимать:
- Не защищай эго. Комментарий ≠ нападение.
- Спорь по существу. Если ревьюер не прав, объясни почему — с фактами, не «у нас так принято».
- Не игнорируй nit'ы. Тысяча мелочей превращается в неконсистентный кодовый стиль.
Частые ошибки и ловушки
| Ошибка | Последствие |
|---|---|
| Scrum без retrospective | Команда не учится; одни и те же проблемы повторяются |
| Daily превращён в статус-репорт менеджеру | Теряет смысл синхронизации внутри команды |
| Свой 80-страничный style guide | Никто не помнит; реальный стиль — кто что недавно дописал |
| Code review = «выглядит ок, LGTM» | Ревью бесполезен; баги попадают в main |
| Только negative review | Автор теряет мотивацию; пропускают и хорошие решения |
| Авторитарный ревьюер | Команда боится PR'ов, итерации замедляются |
Сборка без clang-format в CI | Стиль расползается; на ревью спорят про пробелы |
Игнор clang-tidy warnings | Накапливается технический долг и потенциальные баги |
Значение для собеседований
Process-вопросы редко решающие, но провалить их легко. Интервьюер хочет услышать, что:
- Ты понимаешь, что Scrum — про эмпирический процесс, не про церемонии.
- Знаешь разницу между Scrum и Kanban и когда какой применять.
- Понимаешь, что code review — это не про «найти ошибку у джуна», а про обмен знаниями.
- Умеешь дать ревью конкретно и без агрессии.
Типичный неправильный ответ: «Scrum — это когда каждый день daily, спринты по две недели и burndown chart». Это атрибуты, не смысл. Смысл — короткие циклы с инспекцией и адаптацией.
Популярные направления:
- Чем Scrum отличается от Kanban? Когда какой выбирать?
- Что ты делаешь, если на code review с тобой не соглашаются?
- Что ищешь, когда смотришь чужой Pull Request?
- Зачем нужен единый style guide и
clang-formatв CI? - Как ты даёшь обратную связь — конкретный пример?