6 разных стилей парного программирования

0
1012
views

Перевод статьи «Compare 6 Different Pair Programming Styles».

Стили парного программирования

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

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

Все верно. Парное программирование это не просто свести вместе двоих людей и сказать им «Вперед!». С течением времени разработчики-практики выработали разные подходы для разных ситуаций. Эти подходы они создавали и совершенствовали путем проб и ошибок.

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

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

Имея в виду эти два уровня знаний, подумайте над такими возможными комбинациями пар:

  • эксперт-эксперт,
  • эксперт-новичок,
  • новичок-новичок.

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

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

Парное программирование без всякой структуры

Отсутствие определенной структуры

Представьте парное программирование, происходящее впервые. Элис заходит в кабинку к Бобу и говорит: «Ну, давай поработаем вместе над этим FORTRAN».

Ладно, эта маленькая история может быть и неправдой, но представьте, как это может быть на самом деле. Элис и Боб привыкли к программированию как к самостоятельной работе, и вот однажды решили поработать вместе. Они не обязательно знают какие-либо методы совместной работы, применимые для программистов, поэтому просто импровизируют, стараясь помогать друг другу.

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

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

Водитель-штурман

Пилот и штурман

Что касается уже сложившихся стилей, давайте сначала рассмотрим пару «водитель-штурман». Это, пожалуй, самый устоявшийся стиль.

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

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

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

Штурман на заднем сиденье

Навигатор

Следующий стиль парного программирования – штурман, сидящий сзади (в оригинале – backseat navigator. Так называют пассажира, который дает непрошеные советы водителю. – Прим. перев.). Это похоже на работу в стиле «водитель-штурман», но в данном случае «штурман», помимо стратегии, вмешивается еще и в тактику, что и вызывает ассоциации с непрошеными советами пассажиров машины.

Как и в паре «водитель-штурман», клавиатура находится у «водителя», он вводит код. Но инструкции по тактике ему дает его партнер. То есть, он говорит «водителю», когда создавать метод или открывать новый файл. Также «штурман» может указывать, как называть тесты или переменные.

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

Экскурсовод

Экскурсия в автобусе

Еще один стиль, лучше всего подходящий парам эксперт-новичок, это «экскурсовод». И снова нам поможет сравнение с вождением.

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

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

Это хорошо работает в паре, где «водитель» – эксперт, а «турист» – новичок, в частности, абсолютный новичок. Но и при обратном раскладе это тоже работает. Вы садите новичка за клавиатуру и предоставляете ему самостоятельно сражаться с проблемой (некоторое время), а эксперт наблюдает. Затем эксперт дает фидбэк, исправляет ошибки, и процесс повторяется.

Пинг-понг

Пинг-понг

Исследование стилей парного программирования было бы неполным без упоминания «пинг-понга». Этот стиль имеет интересную черту, отличающую его от остальных.

Чтобы понять этот стиль, примите ко вниманию, что парное программирование берет начало в движении экстремального программирования. Эти ребята любят парное программирование, а также некоторые другие практики, например, модульное тестирование. Так что, встречая экстремального программиста, вы можете смело предполагать, что ему нравится программировать в паре и практиковать разработку через тестирование (TDD).

Работает это довольно просто. Первый человек пишет тест, а второй пишет код, который сможет пройти этот тест. Затем второй пишет тест, а первый пишет код. И так далее. Похоже на игру в пинг-понг.

Этот стиль исключительно хорошо подходит двум экспертам (особенно, если они эксперты в TDD). Также его довольно неплохо можно применять в паре новичок-эксперт. И, что довольно интересно, лучше всего он может сработать в паре новичок-новичок, если ваша цель – приобретение новичками практического опыта. Парное программирование в стиле «пинг-понг» протекает гладко (даже несмотря на какие-то межличностные проблемы), поскольку участники меняются местами так часто, что им постоянно приходится думать совместно.

Распределенное парное программирование (на двух компьютерах)

Глобализация

В заключение рассмотрим несколько «неофициальный» стиль парного программирования. В нашем мире, где команды становятся все более глобальными и распределенными, именно этот стиль может стать ключевым. Я говорю о «распределенном» парном программировании.

Экстремальное программирование зародилось в 90-е. В то время для удаленной работы требовался Citrix и dial-up модемы. Другими словами, вы не могли заниматься парным программированием иначе, чем физически сидя у одного компьютера.

Но с тех пор пролетело 20 лет, и в связи с развитием технологий необходимость физического присутствия существенно уменьшилась. Используя что-то вроде Screen Hero, вы можете довольно плавно работать совместно. Естественно, просто работа вдвоем за одним компьютером по-прежнему более эффективна, но технологии быстро закрывают эту брешь. И нельзя отрицать, что, когда люди, физически находящиеся где угодно в мире, могут работать совместно, это большое преимущество.

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

ОСТАВЬТЕ ОТВЕТ

Please enter your comment!
Please enter your name here