Парное программирование #
В этой статье — моя памятка о том, как вести парное программирование, плюс личный опыт и некоторые рассуждения.
Мой опыт невелик: чистое парное программирование я вёл только с двумя людьми, в обоих случаях был более опытным в паре.
Зачем нужно парное программирование? #
Это самый быстрый способ передачи знаний. По личному опыту работы со стажёрами:
- для передачи знаний по проекту через Code Review потребуется от 6 до 12 месяцев
- а через парное программирование это займёт 1-2 месяца, при этом само парное программирование займёт менее 50% рабочего времени
Другими словами: хотите передать знания или исправить подход коллеги максимально быстро — используйте парное программирование.
Дополнительные бонусы, если вести процесс правильно:
- во время парного программирования достигается максимальная вовлечённость в работу с кодом
- более опытный напарник тоже узнаёт новое, даже в мелочах
- качество и читаемость кода, написанного совместно, скорее всего будет выше
Модель Driver-Navigator #
Единственная модель, по которой я работал, причём только в очном формате.
В этой модели есть две роли:
- «Водитель» (Driver)
- Получает клавиатуру и печатает код
- Стремится закрыть задачу
- Мыслит тактически, «здесь и сейчас»
- Отметает всё, что не нужно прямо сейчас (максимальный принцип YAGNI)
- Проговаривает вслух свои мысли и действия
- «Навигатор» (Navigator)
- Не печатает код
- Добивается высокого качества
- Мыслит стратегически — как решение вписывается в общий дизайн?
- Напоминает, если забыты важные вещи
- Может призвать замедлиться, чтобы сделать всё правильно
- Пишет на листочке замечания, идеи и следующие шаги, чтобы потом к ним вернуться — это нужно, чтобы не прерывать состояние потока «Водителя»
Менее опытный разработчик всегда должен быть в роли «Водителя» (driver), иначе от парного программирования нет пользы: обмен знаниями не случится, а качество кода не изменится.
Советы для Навигатора #
Все практики описаны исходя из моей цели парного программирования: передать знания менее опытному. В паре с равным по опыту я никогда не писал код.
Советы:
- Обязательно нужен блокнот/лист и ручка/карандаш.
- Навигатор выписывает всё, о чём надо напомнить Водителю позже
- Навигатор выписывает и заполняет план выполнения задачи
- Навигатор также пишет схемы и рисунки, когда надо что-то рассказать или объяснить Водителю
- Делайте паузы, чтобы заполнить пробелы в знаниях у Водителя
- Допустим, вы дошли до синхронизации потоков и оказалось, что напарник не знает базы в этом вопросе
- Стоит потратить время, чтобы рассказать и записать кратко базу: ABA-проблему, проблемы спекулятивного выполнения и когерентности кэшей, понятия mutex/atomic/spinlock и так далее
- Даже 1-2 часа, потраченные на короткие объяснения сейчас, окупятся в течение нескольких месяцев или года
- Если вы не понимаете решения, попросите напарника объяснить
- Используйте единый язык — уделяйте внимания терминам и общему понятийному аппарату
- Соблюдайте правило 5 секунд
- Допустим, Водитель допустил ошибку в коде
- Считайте в уме 5 секунд, прежде чем сказать об этом
- Часто бывает, что Водитель и сам знает про ошибку и просто хочет дописать пару строк кода, а потом вернуться к ошибке и исправить её
- Если сказать об ошибке слишком рано, вы прервёте состояние потока и демотивируете Водителя
- Будьте готовы учиться, даже будучи опытнее — не отметайте с порога советы, предложения и замечания менее опытного напарника
Также для Навигатора работают общие принципы наставничества, например:
- Задавайте правильные вопросы, которые помогут напарнику самому найти решение
- Избегайте стремления дать напарника готовый ответ
- Объясняйте причины и предысторию, а не только выбранное решение
- Объясняйте последствия отвергнутых неудачных решений
Советы обоим участникам #
Подготовьтесь к парному программированию #
Не используйте парное программирование в дни релиза, во время дежурства и в другие периоды, когда вашу концентрацию внимания могут сбить и нарушить
Перед парным программированием надо:
- хорошо выспаться
- обеспечить тишину в помещении
- проверить самочувствие — своё и напарника
если вы или напарник не в форме — отложите парную работу либо сократите её до минимума.
Следите за фокусом внимания #
- Вместе следите за фокусом внимания
- не позволяйте себе отвлекаться на уведомления
- возвращайте внимание напарника к задаче вежливо — например, вопросом по коду
- если надо отвлечься, сделайте честный перерыв
- Чередуйте периоды работы и отдыха
- делайте перерывы как минимум один раз в час
- во время перерыва полностью отвлекайтесь от кода
- Если обстоятельства мешают — прервите сессию парного программирования
- стоит проговорить, кто и что делает дальше
Правильно работайте с разногласиями #
При разногласиях важно помнить про цель задачи:
- При разногласиях вспомните про общую цель и подумайте, как ваши действия помогут её достигнуть
- Учитесь смотреть на проблему глазами напарника
- Избегайте стремления доказать свою правоту в ущерб общей цели
Уважительное отношение к напарнику принесёт больше пользы, чем победа в споре. Разумеется, это не повод допускать проблемы, которые помешают проекту в будущем.
Оставляйте обратную связь #
- Хвалите коллегу искренне за реальные достижения
- Стоит просто сказать «спасибо» в конце парного программирования
Плохие практики #
Некоторые антипаттерны могут испортить парное программирование, превратив его в источник проблем вместо способа передачи знаний.
Антипаттерн: более опытный за клавиатурой #
Если в паре есть более опытный напарник — он абсолютно точно должен быть навигатором. Ему придётся запастись терпением и не рваться к клавиатуре.
Антипаттерн: слишком быстрые действия #
Если напарник не успевает сориентироваться, то надо снизить темп работы и/или лучше проговаривать свои действия.
Антипаттерн: микро-менеджмент #
Не опускайтесь до уровня мелких инструкций, если этого не требуется.
Пример мелких инструкций:
Нажми Ctrl+P, теперь введи Change Language Mode… теперь стрелку вниз, вниз, ещё раз вниз
Это подходит, только если человек в первый раз делает какое-то действие. В остальных случаях надо говорить абстрактно и кратко — с учётом уровня напарника.
Возможно ли парное программирование с AI? #
Для евангелистов AI было бы очень удобно сказать «да». Но верный ответ — «нет», без вариантов.
- Работа в паре с ИИ-агентом не является аналогом парного программирования, это совершенно иной процесс
- Цель парного программирования — передача знаний, прежде всего от более опытного к менее опытному
- В 2026 году ИИ-агенты используют модели с архитектурой GPT (generative pre-trained transformer), что исключает возможность передачи знаний в темпе, доступном человеку
ИИ-модель просто учится слишком медленно, чтобы учить её методом парного программирования. Обучение ИИ — это огромные дата-сеты и медленное обратное распространение ошибки, выполняемое параллельно на большом числе GPU.
Тот, кто работает с AI-агентом и называет это «парным программированием», попросту подменяет понятия и поступает неэтично.