Парное программирование

Парное программирование #

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

Мой опыт невелик: чистое парное программирование я вёл только с двумя людьми, в обоих случаях был более опытным в паре.

Зачем нужно парное программирование? #

Это самый быстрый способ передачи знаний. По личному опыту работы со стажёрами:

  • для передачи знаний по проекту через Code Review потребуется от 6 до 12 месяцев
  • а через парное программирование это займёт 1-2 месяца, при этом само парное программирование займёт менее 50% рабочего времени

Другими словами: хотите передать знания или исправить подход коллеги максимально быстро — используйте парное программирование.

Дополнительные бонусы, если вести процесс правильно:

  • во время парного программирования достигается максимальная вовлечённость в работу с кодом
  • более опытный напарник тоже узнаёт новое, даже в мелочах
  • качество и читаемость кода, написанного совместно, скорее всего будет выше

Модель Driver-Navigator #

Единственная модель, по которой я работал, причём только в очном формате.

В этой модели есть две роли:

  1. «Водитель» (Driver)
    • Получает клавиатуру и печатает код
    • Стремится закрыть задачу
    • Мыслит тактически, «здесь и сейчас»
    • Отметает всё, что не нужно прямо сейчас (максимальный принцип YAGNI)
    • Проговаривает вслух свои мысли и действия
  2. «Навигатор» (Navigator)
    • Не печатает код
    • Добивается высокого качества
    • Мыслит стратегически — как решение вписывается в общий дизайн?
    • Напоминает, если забыты важные вещи
    • Может призвать замедлиться, чтобы сделать всё правильно
    • Пишет на листочке замечания, идеи и следующие шаги, чтобы потом к ним вернуться — это нужно, чтобы не прерывать состояние потока «Водителя»

Менее опытный разработчик всегда должен быть в роли «Водителя» (driver), иначе от парного программирования нет пользы: обмен знаниями не случится, а качество кода не изменится.

Советы для Навигатора #

Все практики описаны исходя из моей цели парного программирования: передать знания менее опытному. В паре с равным по опыту я никогда не писал код.

Советы:

  1. Обязательно нужен блокнот/лист и ручка/карандаш.
    • Навигатор выписывает всё, о чём надо напомнить Водителю позже
    • Навигатор выписывает и заполняет план выполнения задачи
    • Навигатор также пишет схемы и рисунки, когда надо что-то рассказать или объяснить Водителю
  2. Делайте паузы, чтобы заполнить пробелы в знаниях у Водителя
    • Допустим, вы дошли до синхронизации потоков и оказалось, что напарник не знает базы в этом вопросе
    • Стоит потратить время, чтобы рассказать и записать кратко базу: ABA-проблему, проблемы спекулятивного выполнения и когерентности кэшей, понятия mutex/atomic/spinlock и так далее
    • Даже 1-2 часа, потраченные на короткие объяснения сейчас, окупятся в течение нескольких месяцев или года
  3. Если вы не понимаете решения, попросите напарника объяснить
  4. Используйте единый язык — уделяйте внимания терминам и общему понятийному аппарату
  5. Соблюдайте правило 5 секунд
    • Допустим, Водитель допустил ошибку в коде
    • Считайте в уме 5 секунд, прежде чем сказать об этом
    • Часто бывает, что Водитель и сам знает про ошибку и просто хочет дописать пару строк кода, а потом вернуться к ошибке и исправить её
    • Если сказать об ошибке слишком рано, вы прервёте состояние потока и демотивируете Водителя
  6. Будьте готовы учиться, даже будучи опытнее — не отметайте с порога советы, предложения и замечания менее опытного напарника

Также для Навигатора работают общие принципы наставничества, например:

  1. Задавайте правильные вопросы, которые помогут напарнику самому найти решение
  2. Избегайте стремления дать напарника готовый ответ
  3. Объясняйте причины и предысторию, а не только выбранное решение
  4. Объясняйте последствия отвергнутых неудачных решений

Советы обоим участникам #

Подготовьтесь к парному программированию #

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

Перед парным программированием надо:

  • хорошо выспаться
  • обеспечить тишину в помещении
  • проверить самочувствие — своё и напарника

если вы или напарник не в форме — отложите парную работу либо сократите её до минимума.

Следите за фокусом внимания #

  1. Вместе следите за фокусом внимания
    • не позволяйте себе отвлекаться на уведомления
    • возвращайте внимание напарника к задаче вежливо — например, вопросом по коду
    • если надо отвлечься, сделайте честный перерыв
  2. Чередуйте периоды работы и отдыха
    • делайте перерывы как минимум один раз в час
    • во время перерыва полностью отвлекайтесь от кода
  3. Если обстоятельства мешают — прервите сессию парного программирования
    • стоит проговорить, кто и что делает дальше

Правильно работайте с разногласиями #

При разногласиях важно помнить про цель задачи:

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

Уважительное отношение к напарнику принесёт больше пользы, чем победа в споре. Разумеется, это не повод допускать проблемы, которые помешают проекту в будущем.

Оставляйте обратную связь #

  • Хвалите коллегу искренне за реальные достижения
  • Стоит просто сказать «спасибо» в конце парного программирования

Плохие практики #

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

Антипаттерн: более опытный за клавиатурой #

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

Антипаттерн: слишком быстрые действия #

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

Антипаттерн: микро-менеджмент #

Не опускайтесь до уровня мелких инструкций, если этого не требуется.

Пример мелких инструкций:

Нажми Ctrl+P, теперь введи Change Language Mode… теперь стрелку вниз, вниз, ещё раз вниз

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

Возможно ли парное программирование с AI? #

Для евангелистов AI было бы очень удобно сказать «да». Но верный ответ — «нет», без вариантов.

  • Работа в паре с ИИ-агентом не является аналогом парного программирования, это совершенно иной процесс
  • Цель парного программирования — передача знаний, прежде всего от более опытного к менее опытному
  • В 2026 году ИИ-агенты используют модели с архитектурой GPT (generative pre-trained transformer), что исключает возможность передачи знаний в темпе, доступном человеку

ИИ-модель просто учится слишком медленно, чтобы учить её методом парного программирования. Обучение ИИ — это огромные дата-сеты и медленное обратное распространение ошибки, выполняемое параллельно на большом числе GPU.

Тот, кто работает с AI-агентом и называет это «парным программированием», попросту подменяет понятия и поступает неэтично.


Сайт atdd.ru — блог разработчика.