Личный опыт одного инженера, его понимание и советы о том, как работать в паре.

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

Настройка

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

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

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

Вращение

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

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

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

Производительность

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

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

Об обретении и углублении знаний

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

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

[W] Если вы работаете в паре на постоянной основе, ожидается, что вы будете общаться со своей парой, поэтому с социальной точки зрения уместно спросить их о том, в чем они разбираются.

Но я чувствую, что это происходит за счет глубины знаний. До того, как я присоединился к Pivotal Labs, я многое узнал о Maven, и эти знания все еще окупаются в проектах, над которыми я работаю сегодня. К сожалению, мне трудно представить, что я смогу получить такую ​​глубину знаний во время работы в паре. Это цена, которую вы платите за постоянную продуктивность. Вы чувствуете, что зря теряете время, если медлитесь, чтобы прочитать, как работает плагин Maven, если он вам сегодня не нужен. Но иногда эти знания окупятся в будущем так, как вы не можете ожидать сейчас.

Когда делиться

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

  • У статьи есть две отдельные вкладки, и мы обе можем читать ее в своем собственном темпе. Тот, кто думает, что нашел решение, которое мы ищем, сначала прерывает чтение и объясняет его другому, а затем мы идем дальше.
  • Еще одно решение, которое я использовал, - просто разделить пару, перейти на разные машины и прочитать столько, сколько мы сможем, за 15 минут (или какое-то другое время, с которым вы согласны). Мы перегруппируемся, когда это окно истечет, чтобы посмотреть, нужно ли нам больше времени.

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

Личности

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

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

Мне нравится работать в паре с людьми, которые слишком общаются.

Общение

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

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

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