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

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

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

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

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

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

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

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