Привет, Хабр! В своей работе мы используем парное программирование и сегодня хотим поделиться с сообществом советами, которые помогают нам повысить эффективность этого метода.

image

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

Почему мы используем в работе парное программирование?


Парное программирование имеет целый ряд достоинств:

  • В сравнении с одиночным программированием оно позволяет программистам успешнее противостоять стрессу. Члены пары поощряют друг друга поддерживать высокое качество кода даже в напряженных условиях, когда может возникать желание написать «грязный» код для ускорения выполнения задачи.
  • Парное программирование повышает качество кода, благодаря тому, что наблюдатель постоянно проверяет, следит за качеством и понятностью кода и задает уточняющие вопросы. Таким образом, удобочитаемость и понятность кода всех разработчиков повышаются до уровня кода лучшего программиста группы.
  • Парное программирование ускоряет разработку системы. Как правило, пары пишут код быстрее, и большинство ошибок можно обнаружить сразу в процессе кодирования, а не тестирования. Соответственно в конце проекта группе приходится тратить намного меньше времени на исправление дефектов.
  • Парное программирование усиливает взаимодействие внутри команды. Во время работы над проектом пары рекомендуется перемешивать, чтобы каждый разработчик в команде к моменту окончания проекта обладал глубокими знаниями о каждой из его частей.
  • Парное программирование обеспечивает все остальные общие преимущества совместного конструирования, такие как распространение корпоративной культуры, обучение начинающих программистов и содействие совместному владению результатами работы.

Как сделать парное программирование более успешным


Чтобы извлечь из всех преимуществ парного программирования еще большую пользу, нужно соблюдать несколько простых правил:

№1. Поддерживайте парное программирование стандартами кодирования


Парное программирование теряет эффективность, если члены пары тратят время на споры о стиле кодирования. Чтобы избежать разногласий, нужно стандартизировать «несущественные атрибуты» программирования, чтобы разработчики могли сосредоточиться на стоящей перед ними «существенной» задаче и не отвлекались на согласование стилей.

№2. Не превращайте парное программирование в наблюдение


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

№3. Определяйте задачи, которые целесообразно решать в парах


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

№4. Постоянно меняйте состав пар и назначаемые им задачи


Как и при использовании других методик совместной разработки, одно из главных преимуществ парного программирования в том, что каждый из разработчиков изучает разные части системы. Регулярная смена состава пар помогает стимулировать обмен опытом и знаниями между всеми членами команды. Некоторые эксперты рекомендуют менять состав пар ежедневно.

№5. Старайтесь объединять в пару людей с одинаковым темпом работы


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

№6. Оба члена пары должны хорошо видеть экран


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

Не стоит забывать и об эргономике — когда при передаче клавиатуры от одного члена пары другому, она остается в центре стола и каждому приходится наклоняться, оба быстро устанут и начнут терять концентрацию.

№7. Не объединяйте в пару людей, которые не нравятся друг другу


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

№8. Не составляйте пару из людей, которые ранее не имели опыта в парном программировании


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

№9. Выбирайте лидера группы


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

А вы используете парное программирование? Поделитесь своими секретами в комментариях!

Комментарии (20)


  1. andrewzhuk
    05.10.2017 13:02
    +1

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


    1. Harr
      05.10.2017 16:02

      вот это очень здравая мысль!


    1. Nerlin
      06.10.2017 12:22

      У нас в институте все так и работало — всю группу разбивали по 2-3 человека на практических и лабораторных занятиях. Люди учились работать вместе над одной проблемой, анализировать задачу и оценивать код, делясь почему так надо или не надо делать. Более опытный студент помогал развиваться отстающим, если им конечно было это интересно.


  1. MadJackal
    05.10.2017 13:21

    Вот меня всегда интересовал вопрос — если парное программирование эффективнее одиночного, то, по-идее, программирование в тройках должно быть еще более эффективным?
    Никто не пробовал?


    1. remzalp
      05.10.2017 13:34
      +1

      Я не представляю, чем должен будет при этом заниматься третий, больше всего это будет напоминать ПМа.


      Плюс сложнее будет составить команду из троих, чтобы работали с похожей скоростью и не было трений. Сбалансировать двоих проще :)


      <шутка>сопьются же в поисках пика Балмера</шутка>


    1. Desprit
      05.10.2017 14:23

      Ну это как про ту яму — одному копать медленно, вдвоем быстрее, а если вдесятером, то уже и лопат на всех не хватает.
      Где-то явно есть предел, вероятно, как раз таки на втором человеке имхо.


    1. Danik-ik
      05.10.2017 19:25

      Программирование — это настолько интимный процесс, что втроём — это, извините, извращение...


      Никогда не работал в паре (так уж сложитось, ни в одном месте работы кроме меня вопрос организации техпроцесса разработки никого не волновал). Однако уверен, что для эффективной работы есть только два варианта: либо один партнёр, либо ни одного. Иначе это будет совещание, а не разработка.



  1. Dmitry88
    05.10.2017 13:35
    +4

    А вот если сзади будет стоять грузин с усами и трубкой

    p.s. вы серьезно? а я люблю подумать, в носу поковыряться, музло слушать в процессе и т.д. И ненавижу, когда смотрят в мой экран


    1. kraidiky
      05.10.2017 14:14
      +4

      Вот ещё парное программирование очень мешает ковыряться в носу, и раздумья длинной в 5 минут растягивать на часы. За это его и любят те, кто не любит чтобы программисты в носу ковырялись. :)


    1. vildulv
      05.10.2017 18:54

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


  1. lpre
    05.10.2017 14:46
    +5

    В сравнении с одиночным программированием оно позволяет программистам успешнее противостоять стрессу.

    Вот это вряд ли. Скорее, парное программирование само является дополнительным источником стресса.


  1. VMichael
    05.10.2017 16:00
    +4

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


  1. dirkar
    05.10.2017 16:01

    Если задача типовая и несильно сложная то смысла в этом нет.
    А вот в сложных и нестандартных задачах это то что надо.


  1. kopol76
    05.10.2017 16:01
    -2

    Интересная тема!


  1. General_Failure
    05.10.2017 16:02

    №8. Не составляйте пару из людей, которые ранее не имели опыта в парном программировании
    Интересный совет. А где брать людей с таким опытом? Переманивать из других организаций, которые не следуют вашим советам?


  1. tmn4jq
    05.10.2017 16:06
    +2

    Все же ожидал дельных советов, а не очевидных вещей типа:

    №6. Оба члена пары должны хорошо видеть экран


    Сам я не особо люблю парное программирование, так как меня всегда сбивал с толку темп другого человека. Так что совет номер 5 нахожу хорошим.

    Для меня работал такой хак: если вы работаете на ноутах, то можно просто сесть рядом каждый со своим ПК и изучать проблему. Когда у кого-то появляется дельная мысль, он ее озвучивает и показывает. Ведь необязательно же смотреть в один монитор, главное думать над одной задачей и делиться мыслями.


  1. betauser
    05.10.2017 18:32
    +4

    №10. Выдайте уже второй компьютер


  1. buldo
    05.10.2017 18:59

    Стоит отметить сложности парного программирования в распределённой команде:

    • При разнице часовых поясов в 2 часа время в паре всего 4 часа(пересечение рабочего дня 6ч + по часу на обед). При разнице поясов в 4 часа уже не может идти речи о сидении в паре.
    • Сложно сконцентрироваться на коде, когда напарник не рядом, а в скайпе. Проблема №2 проявляется ярче.


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


  1. Mishok8
    05.10.2017 18:59
    +1

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