Когда работает парное программирование? Когда этого избежать?

51

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

  • Усиление новых членов команды в проекте (вместо того, чтобы позволить им самостоятельно просматривать документацию или код).
  • Совместная работа младших и старших сотрудников (помогает продемонстрировать некоторые навыки и приемы более опытных разработчиков, а также позволяет старым собакам иногда изучать новые приемы).
  • Когда кто-то пытается отследить дефект, это часто помогает сочетаться со свежим взглядом.

Когда использовать парную программу и почему?

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

Paddyslacker
источник
11
Попытка понять ценность и логику закрытия этого вопроса через три года после того, как на него был четко дан объективный ответ со ссылками на эмпирические исследования. Из всех практик, общих для Agile, это одна из наиболее изученных и документированных. Нужно ли каким-либо образом изменить формулировку вопроса? Изменились ли ожидания / стандарты за три года с момента их публикации?
Майкл

Ответы:

44

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

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

Исходя из своего личного опыта, я обнаружил, что моя команда XP тратит в среднем около 60% нашего времени на программирование. Остальная часть времени уходит на индивидуальное развитие. Нередко объединяются для создания первоначального проекта, работают в течение одного часа над дизайном в одиночку, а затем собираются вместе, чтобы закончить сложные или сложные части кода.

Я также обнаружил, что парное программирование наиболее эффективно в блоках длительностью от 1,5 до 2,5 часов. Все, что намного меньше, как правило, требует слишком много накладных расходов на настройку, в то время как гораздо больше, и пары, как правило, раскачиваются и устают. Измотанный и уставший означает, что вы плохо общаетесь и, возможно, допускаете попадание дефектов в систему.

Майкл
источник
Отличный ответ Майкл. Принятие этого из многих хороших ответов, так как в нем было правильное сочетание личного опыта и отличной связи с исследованиями.
Paddyslacker
Хотя, как ни странно, хотя ссылка работала, когда вы опубликовали свой ответ, теперь это 404, дох!
Paddyslacker
Я исправил гиперссылку в вашем ответе Майкл, так что все снова хорошо.
паддислакер
«сложная» часть очень важна. Если вы выполняете обычную печатную работу, вашему партнеру будет очень скучно.
Дейв О.
3
@DaveO .: Я могу делать только простые вещи, используя парное программирование. Для сложных задач мне нужно подумать, а парное программирование является лишь источником отвлечения (см. Ответ Уилла Сарджента). Я все еще считаю очень полезным обсуждать сложные проблемы с коллегами, но это отличается от написания всего кода вместе.
Джорджио
29

Парное программирование работало для меня в очень, очень немногих ситуациях.

Где парное программирование терпит неудачу для меня

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

Это печальная история, но забавно то, что теперь я так счастлив, как все закончилось. Я с удовольствием работаю по контракту, когда работаю дома или в кафе, и у меня появились новые друзья, и я познакомился с Сан-Франциско больше, чем когда-либо думал. У меня есть велосипед и ноутбук, и пока я соблюдаю свои сроки и регулярно проверяю код, мое время остается моим.

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

  1. Сплит фокус.
  2. Нет экспериментов.
  3. Никаких высоких нот.
  4. Нет гордости за владение.
  5. Побег невозможен...

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

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

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

Не один

Я написал это не только для того, чтобы понять это, но и чтобы иметь возможность говорить об этом. Было предположение, что парное программирование работает для большинства людей и намного проще и быстрее, чем программирование в одиночку. Это может или не может иметь место, но, как долгосрочная практика, парное программирование не работает для меня. Есть много других людей, для которых парное программирование тоже не работает. Мы тоже важны ...

Уилл Сарджент
источник
2
Я тоже. В значительной степени только в отслеживании дефектов, и даже тогда это больше мозговой штурм и философия, чем реальное программирование.
hplbsh
4
+1 Проницательный ответ. Иногда кажется, что защитники парного программирования забывают нас, одиночек и интровертов. По совпадению, многие люди, интересующиеся программированием, тоже интроверты ...
Андрес Ф.
6
@AndresF .: Помимо одиночек и интровертов, есть люди, которые независимы и им просто нужно свое место, чтобы организовать свои мысли. Для распространения знаний среди членов команды обзоры кода по крайней мере так же эффективны, как парное программирование.
Джорджио
2
@ Джорджио Согласен. Я на самом деле поддерживаю частичное парное программирование: решение некоторых сложных проблем в парах. Но некоторые сторонники считают, что большую часть времени следует использовать для большинства задач программирования, с чем я не согласен.
Андрес Ф.
4
@AndresF .: Я согласен с тобой. «Частичное парное программирование» или, используя менее модные слова, «совместное обсуждение какой-то сложной проблемы, когда это необходимо» - очень разумный подход, используемый не только для программирования, но и для обучения в школе и т. Д. Однако я не рассматриваю эту практику серебряная пуля, которая должна использоваться все время.
Джорджио
10

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

«Младший / старший» не единственный путь. «Средний / младший» полезен; это помогает парню среднего уровня синтезировать знания, которые он получил, заставляя его передать это кому-то еще. Задачи «Средний / Средний» два человека работают вместе, чтобы делиться своими знаниями, общаться и работать в команде. И даже если у вас есть два действительно старших парня, скорее всего, они имеют разные области знаний и могут предложить разные подходы. Аспекты обмена знаниями не заканчиваются, когда кто-то смутно «набирает скорость» в проекте. Скорее, парное программирование является воплощением обучающейся организации . Новые методы и лучшие практики быстро распространяются.

Парное программирование также помогает поддерживать качество кода (меньше дефектов) и здравый смысл кода (он не просто делает то, что намеревается, но делает то, что должен ... в идеале, не отказываясь от многонедельного кролика. дыра, делающая неправильную вещь, или две разные правильные вещи, которые будут дико конфликтовать). Это помогает программистам сохранять свое внимание: здесь, в сердце Силиконовой долины, где находится 80-часовая рабочая неделя, мы можем работать всего 40 часов в неделю, потому что мы интенсивно программируем по восемь часов в день, переключая вещи друг с другом (Кроме того, если бы вы занялись парным программированием дольше, вы, вероятно, перевернулись бы. Или, по крайней мере, сгорели.) Это отлично подходит для баланса между работой и личной жизнью, а также помогает вашей организации, когда важно иметь быстрый оборот (в частности, оборот с малой задержкой).

Это не все, полностью, 100% персики и сливки; Я считаю, что парное программирование иногда является препятствием для моего применения интуитивных мозговых процессов, которые полезны при определенных проблемах. Совсем недавно, на задачу утечки памяти, я провел некоторое время с парами и без; без этого я чувствовал себя свободнее возиться и пробовать эксперименты, не зная точно, как объяснить, что я делал в любой момент. Есть также некоторые преимущества в работе синглтона, когда он может работать по касательной и выполнять определенные дикие рефакторинги (оцениваемые в методологии XP) по прихоти.

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

(Мы разрабатываем программное обеспечение на Perl, ~ 4000–40 000 долл. По прейскуранту.)


источник
4

Я никогда не работал в настройке «парного программирования», и все же я могу утверждать, что был частью трех перечисленных вами обстоятельств. Сценарий, который вы упоминаете, кажется более «обычным программированием» с добавлением этапов помощи / обучения. Разве мы не делали все это до появления «парного программирования»? Я полагаю, что парное программирование потребовало бы более преданного подхода, когда процесс совместного использования в команде не останавливается в ту минуту, когда вы решаете непосредственную задачу или проблему под рукой. Но тогда это то, что я «думаю», а не то, что я «знаю».

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

Preets
источник
Вы правы, мы могли бы разрешить обстоятельства, о которых я говорил, без парного программирования, но мы используем методы парного программирования, когда один человек управляет другим, наблюдая и отключая их через равные промежутки времени. Это немного более формально, чем просто помощь / обучение. Многие магазины XP делают гораздо больше парного программирования, чем это - мне интересно, какое «правильное» количество пар было для людей.
Paddyslacker
Да, я тоже хотел бы услышать от людей, которые работали с PP в течение длительных периодов времени. Я могу понять, как консультанты, работающие с несколькими компаниями или командами, могут извлечь выгоду из PP, но эти задания обычно длятся пару месяцев. Было бы интересно узнать, как работает PP в типичной фирме по разработке программного обеспечения, где проекты обычно длятся больше года.
Улицы
2

Последние несколько месяцев мы экспериментировали с парным программированием в нашей команде. Я чувствую, что это очень полезно, когда вы работаете над чем-то новым (новые технологии, новые функции и т. Д.), Поскольку вы можете быстро обмениваться идеями с другим сотрудником команды и проверять их / аннулировать. Кроме того, параллельная рецензия помогает избежать ошибок.

Другой товарищ по команде пытался использовать парное программирование с тестом для выполнения ATDD, и они были очень довольны результатами (согласно его расчетам, увеличение стоимости разработки на 20% привело к сокращению времени тестирования примерно на 50%).

Амит Вадхва
источник
1

Доброй ночи

Мы много раз обсуждали практики экстремального программирования и парного программирования . В свое время мы понимаем, что программирование - это занятие соло, потому что программистам нужна концентрация и изоляция. Программисты в то время находились в зоне психического состояния, где они могли эффективно сосредоточиться на коде и принимать приятные и креативные решения.

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

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

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

Младший М
источник
1

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

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

JB King
источник