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

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

Моббинг во время блокировки

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

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

  1. Используйте встроенные предложения Slack или Zoom для демонстрации экрана
  2. Используйте дополнительный инструмент совместной разработки, который интегрируется с IntelliJ (например, Code With Me или CodeTogether).

Почему нам нужно больше, чем демонстрация экрана

У всех нас уже был опыт парного программирования с использованием инструментов совместного использования экрана. В целом работает неплохо, но есть пара минусов.

  • Смена драйвера обычно не дается легко. Текущий драйвер должен остановить демонстрацию экрана, прежде чем новый сможет занять его. Код должен быть синхронизирован с помощью VCS, и новый драйвер должен найти место для продолжения кодирования. Из-за этого «бремени» смена ролей будет происходить не так часто. Водители устают, а штурманы теряют сознание.
  • Трудно перемещаться, когда кто-то другой управляет экраном. Как навигатору, обычно нелегко просто указать на то место на экране, о котором вы хотите сделать замечание. Любой, кто раньше делился кодом с помощью совместного использования экрана, например во время сеанса проверки кода распознает яростные крики: «МОЖЕТЕ ПОЖАЛУЙСТА, ПРЕКРАТИТЬ ПРОКРУТКУ».
  • Совместное использование экрана обычно истощает ресурсы, такие как ЦП и пропускная способность сети.

Давайте перейдем на новый уровень

Упомянутые выше недостатки заставили нас выйти за рамки инструментов совместного использования экрана. Кто-то из моей команды упомянул Code With Me, и мы решили попробовать это для разнообразия. Code With Me - это плагин для IntelliJ, разработанный JetBrains, который предлагает одновременное редактирование. Один разработчик проводит сеанс и делится ссылкой, чтобы другие могли присоединиться к нему. При присоединении к сеансу (в фоновом режиме) клиент IntelliJ загружается и запускается, что позволяет просматривать и редактировать код в IDE хоста.

Пять разработчиков, один редактор

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

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

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

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

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

Было бы здорово попробовать альтернативы Code With Me, например CodeTogether, чтобы посмотреть, как они сравниваются. Если у вас есть предложения по использованию инструментов, оставьте их в комментариях!

Вывод

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

Этот опыт заставил нас понять, что мы хотели бы делать это чаще. Было здорово увидеть, что мы смогли достичь такого уровня сотрудничества во время блокировки COVID-19.

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