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

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

Что такое парное программирование?

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

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

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

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

Почему парное программирование полезно?

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

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

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

Как работает одна парная программа?

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

Сопряжение ролей

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

Практика сопряжения

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

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

Что мне нужно для тренировочного сопряжения? Практика сопряжения может принимать разные формы, но, как правило, единственный инструмент, который вам нужен, помимо подключения к Интернету, — это программное обеспечение для голосовых или видеозвонков, в идеале такое, которое позволяет вам делиться своим экраном. Я использовал Slack, Google Meet и Zoom в прошлом и думаю, что все они отлично справляются с обеспечением дешевого и простого способа подключения. Если вы находитесь в том же месте, что и ваш сверстник, забудьте о программном обеспечении и приступайте к делу!

Как мне потренироваться в паре? Благодаря небольшому списку необходимых ресурсов, Практикующую пару легко настроить! Конечно, вам также понадобится идея, что делать. По моему опыту, Практика спаривания наиболее успешна, когда деятельность сосредоточена вокруг чего-то веселого. У Эбби Фихтнер есть отличная статья, написанная Моссом Колумом и Лаурой Дин, о некоторых забавных способах кодирования с другим человеком. В статье рассматриваются некоторые способы создания игр, призванных помочь в процессе обучения.

Я обнаружил, что интересно найти для решения небольшую проблему, которую можно решить в течение часа, установив ограничение по времени, в течение которого вы попытаетесь решить ее в паре, поменявшись ролями на полпути. Места, где я нашел интересные задачи для решения, это Leetcode, CodeWars и CSSBattle. Leetcode и Codewars больше ориентированы на ответы на вопросы, которые могут возникнуть на собеседовании, тогда как CSSBattle — это место, где можно попрактиковаться в воспроизведении изображений с помощью чистого CSS. Все три — отличные места для отработки навыков в среде, созданной для обучения. Одно важное замечание: не бойтесь обращаться за помощью к поисковой системе. Если вы выполняете навигацию и не уверены в методе массива или свойстве CSS, попросите своего водителя найти его! Помните, все дело в обучении.

Цель Пейринг

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

Если вы не знаете, как что-то сделать — я буду честен. Это случается часто. Совсем недавно я работал над созданием перетаскиваемой карусели с настраиваемой полосой прокрутки с использованием Vanilla JS и потратил больше дней на изучение технического задания, чем на кодирование чего-либо, прежде чем понял, что парное программирование — это решение. Что замедляло меня, так это то, что я чувствовал, что есть много движущихся частей, все из которых включают темы, с которыми я не был знаком, и это заставляло меня откладывать или погружаться в цикл тупиковых исследований. Когда я, наконец, начал работать с партнером, мы смогли разделить задачу на части и медленно работать над каждым компонентом. Иногда мы работали сами по себе, и в видеочате не было ничего, кроме щелчков клавиатуры. В других случаях мы собирались вместе, разделяясь на роли Водителя и Навигатора, и позволяли нашим общим знаниям преодолевать препятствия, которые мы чувствовали бы бессильными в одиночку. Мы сделали карусель за несколько часов, что до сих пор кажется мне чудом. В этой ситуации наши совместные знания Vanilla JS смогли сделать производственный процесс намного проще, чем если бы мы взялись за него самостоятельно.

Когда вы хотите, чтобы что-то было сделано правильно. Мы все были в ситуации, когда задача или проект приближались к завершению, и вы чувствовали, что мотивация и внимание к деталям начинают ослабевать. Будь то из-за потери внимания, интереса или уверенности, нередко обнаруживаешь, что делаешь небольшие ошибки по мере завершения задачи. Иногда эти ошибки случаются на раннем этапе, а иногда вы даже не осознаете, что совершили ошибку с самого начала. В любом случае, подобные ситуации требуют свежего взгляда со стороны коллег, чтобы предоставить корректуру и обратную связь. Код-ревью — типичный способ предоставления упомянутой обратной связи. Прежде чем любой код будет объединен в производственную ветку, член команды должен просмотреть код. Этот член команды следит за ошибками кода и общими способами улучшения кода. Здесь в игру вступает спаривание, когда Code Review может происходить лицом к лицу. Рецензент в этой ситуации берет на себя роль навигатора, а автор кода - место водителя. Рецензент прочитает код и попросит автора внести изменения в режиме реального времени. Асинхронная командная работа позволяет членам команды работать в своем собственном темпе и по собственному расписанию, но иногда это означает менее эффективный рабочий процесс. Сопряжение во время проверки кода обеспечивает более синхронный рабочий процесс, в котором ошибки могут быть исправлены сразу после их возникновения.

Если вы хотите, чтобы что-то было сделано быстро, скажем, вы находитесь в середине спринта и чувствуете, что перед вами стоит еще целый мир работы. Самостоятельно взобраться на эту гору может быть непросто. Парное программирование, общение с кем-то еще — отличный способ оставаться сосредоточенным и мотивированным, а также не допустить попадания в цикл сомнений и вопросов. Я использовал этот метод парного программирования во время хакатона, во время которого мы с моим партнером разбили проект (лендинг) на блоки и одновременно работали над одними и теми же файлами. Я также работал над сложными частями проектов, где один партнер работал над CSS, а другой работал над HTML. В любом случае, две головы лучше, чем одна, а четыре руки быстрее, чем две.

Что мне нужно для создания пары целей? Помимо подключения к Интернету, некоторые программы для обмена видео. Вам нужно как место для совместного написания кода, так и место для просмотра кода.

Написание кода.Есть несколько способов написать код в одном месте. Самый доступный способ, который я нашел, — использовать встроенную в браузер интегрированную среду разработки (IDE), такую ​​как Repl.it. Этот метод не требует загрузки и установки дополнительного программного обеспечения и относительно прост в настройке. Недостатком является то, что если вы надеетесь работать над проектом, который уже написан в другом месте, есть дополнительный (довольно сложный) шаг копирования необходимого кода до и после сеанса парсинга.

Чтобы избежать таких хлопот, я предпочитаю использовать Live Share, плагин, созданный для Microsoft Visual Studio Code, распространенной IDE. Использование Live Share позволяет партнерам, использующим одну и ту же IDE, одновременно работать над одним и тем же кодом и просматривать изменения в режиме реального времени. Организатор сеанса также может совместно использовать локальный сервер с командой, что позволяет партнерам видеть изменения в проекте в режиме реального времени в браузере, а также в коде. Преимущество использования подключаемого модуля, такого как Live Share, заключается в том, что вам не нужно учиться работать с другой системой. Вы можете оставаться там, где вы знакомы, и работать так быстро, как вы привыкли.

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

Проверка кода. Все, что вам нужно для проверки кода коллеги, — это платформа, на которой размещен ваш исходный код. Присоединяйтесь к видеозвонку после того, как вы или ваш партнер отправляете запрос на вытягивание, и вы находитесь на пути к парному обзору кода. Если случайно вы используете Github для размещения исходного кода и Visual Studio Code в качестве IDE, есть еще одно фантастическое расширение, которое вы можете использовать для проверки кода в знакомой обстановке.

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

Вывод

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

Найдите друга, создайте пару и получайте удовольствие!