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

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

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

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

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

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

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

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

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

Наконец, прежде чем начать писать какой-либо код, мы посмотрим на карту и убедимся, что она имеет смысл. Есть ли у нас вся информация, необходимая для прохождения каждой контрольной точки? У нас они в правильном порядке?

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

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

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

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

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

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

Оригинальная версия этой статьи была опубликована на steve.codes.