В субботу 25 января прошёл «Код-ретрит» в офисе «Лемана ПРО» в Москве. Код-ретрит — мероприятие, проводимое с целью продвижения и оттачивания инженерных практик. Оно бесплатное для участия и организуется волонтёрами по всему миру. Канонический код-ретрит сосредоточен на парном программировании и разработке через тестирование и использует игру «Жизнь» в качестве упражнения. Наш активист побывал на мероприятии.

Знакомство

Прибыл на место в 10 утра, назвал фамилию на ресепшене офиса организаторам — получил пропуск. Офис находится в здании магазина «Леруа Мерлен», но вход отдельный: организаторам пришлось скидывать фотку в чат, чтобы участники не потерялись.

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

Затем двое организаторов показали короткое демо на 10 минут, с пояснением, как работать в паре, чем занимается драйвер, чем навигатор. И вот к 11 часам мы приступили к первой задаче.

Первый подход

Первым заданием было написать марсоход. Он должен уметь реагировать на команды: поворачивать вправо-влево и ехать вперёд-назад. Также было дано описание acceptance-теста: набора действий, после которого марсоход должен оказаться в координате (0,-1) лицом на восток.

Первый заход пишется без дополнительных ограничений, просто чтобы все освоили практики в первом приближении. На задачу даётся 1 час. Мы с товарищем оба были уже на опыте и начали быстро «пинг-понгом» накидывать решение. Задержались мы лишь на действии поворота налево — уж очень хотелось сделать без «ифов». Но так и не придумали, как это написать.

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

Мы с напарником так и вовсе забыли про acceptance-тест, но тут решили исправиться. Написали быстро тест, запустили — и вправду, марсоход смотрит на запад, а не на восток, как в тексте приёмочного кейса.

Затем ведущие дали несколько минут провести в паре «ретро»: обсудить, что понравилось, что нового узнали, что было интересного. Мы с напарником время для ретро потратили как раз на написание acceptance-теста.

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

Второй подход

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

Одна пара, писавшая на Go, показала после упражнения такой подход: они сделали метод `IsRoverFacing(Direction) error` и в возвращаемой ошибке писали, куда марсоход смотрит и куда должен смотреть. Таким образом, в тестах в случае ошибки сразу можно было увидеть и ожидание, и фактическое значение, соблюдая при этом ограничение на геттеры-сеттеры.

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

Третий и четвёртый подходы

На третьей сессии задание поменяли. Теперь нужно было реализовать алгоритм получения победителя в игре в кости. Это уже было посложнее. Плюс каждая пара получила своё ограничение, а некоторые и по два. «Все методы должны быть void» или «не использовать циклы» — попробуйте из интереса как-нибудь покодить с такими ограничениями!

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

На обсуждении подняли несколько интересных тем: как внедрять изменения в команде, что делать, когда рефакторить страшно, как рефакторить лучше — постепенно или сразу всё одним волевым усилием. Одна из организаторов рассказала про инструмент Value Stream Mapping, который позволяет обнаружить «бутылочные горлышки» в процессах. Уже обнаруженные «горлышки» можно пытаться закрывать, внедряя инженерные практики.

Завершение

После четвёртой сессии организаторы попросили поделиться, что мы открыли для себя сегодня. Я в этот момент отвлёкся, но несколько человек что-то накинули. Затем мы все сфоткались на память.

После завершения и благодарности приютившей нас компании-спонсору часть людей отправилась на экскурсию по офису «Лемана ПРО», а кто не захотел — по домам.

Организаторы были правы: код-ретрит — и правда очень весёлое мероприятие. Я ещё больше проникся работой в парах, и, честно говоря, захотелось внедрить эту практику на работе. Спасибо команде организаторов за это мероприятие! С удовольствием пойду ещё.