Организация Code Retreat по Javascript в Яндексе.

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

Мне хотелось сделать что-то похожее для наших разработчиков. Чтобы каждый получил положительные эмоции, вышел из зоны комфорта, прокачался в чём-то новом, раскрыл свои сильные и слабые стороны. Так появилась идея внутреннего Code Retreat на Javascript для разработчиков.

29 июля в екатеринбургском офисе Яндекса я его провёл.

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

Ниже несколько слов о том, как это было.

Формат

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

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

  • каждая сессия длится 45 минут;
  • всё программирование идёт в парах;
  • каждую сессию пары перемешиваются — в нашем случае каждый участник успел пописать код с 5 разными участниками;
  • по окончании каждой сессии код удаляется (да, навсегда);
  • каждую сессию решается одна и та же задача, но с дополнительными ограничениями.

Во всех приглашениях и объявлениях я всячески скрывал основное задание и дополнительные ограничения и просто говорил, что будет классно и весело.

– Да, формат звучит необычно, но ты удивишься насколько это прикольно!

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


Задания

Чтобы бросить все силы на проработку дополнительных ограничений, в качестве основного задания я выбрал игру “Жизнь” (Conway’s game of life) — классическое задание для этого формата.

По формату Code Retreat может состоять из 4 — 6 секций. В нашем случае я решил остановиться на 5. Каждая сессия была посвящена определенной теме c уклоном в определённый навык. Я выбрал следующие темы:

  • TDD;
  • Архитектура;
  • Тайм менеджмент;
  • Чистый код.

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

Сессия 1. Простая реализация.

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

Ограничения:

  1. Реализовать игру “Жизнь” на поле 10 х 10 c двумя фигурами из предложенных;
  2. Смена человека за клавиатурой происходит каждые 10 минут.

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

Удаление написанного кода. Смена пар. Перерыв 10 минут на кофе с печеньками.

Сессия 2. TDD.

В качестве темы следующей сессии я выбрал TDD, чтобы участники прочувствовали плюсы и минусы этой методологии.

Ограничения:

  1. Игровое поле становится бесконечно;
  2. Каждый тест содержит одну проверку;
  3. Каждый новый тест сначала должен быть красным, максимально простым и просто реализуемым;
  4. Тайминги:

Первый получает 5 минут на написание теста. Второй 5 минут на реализацию метода для того, чтобы сделать тест зелёным. Если второй человек не успевает реализовать, то первый получает 5 минут, чтобы доказать, что это возможно — написать реализацию самому. Если и у него не удаётся, то тест нужно упростить.

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

По традиции, удаление кода, смена пар, перерыв 10 минут.

Сессия 3. Архитектура.

Продумывать архитектуру важно не менее, чем писать тесты.

Ограничения:

  1. Клетка живёт максимум 10 итераций;
  2. Первые 10 минут продумываем архитектуру на бумаге, код не пишем;
  3. Первый человек пишет код под диктовку второго (без обсуждений);
  4. Смена роли происходит каждые 10 минут.

На этой итерации стало гораздо веселее! Написание кода под диктовку показывает высокую вариативность решений, даже после продуманной архитектуры, даже в таком простом задании.

Удаление кода. Смена пар. Обед.

Сессия 4. Тайм менеджмент.

Учимся адекватно оценивать сложность задач и свои силы.

Ограничения:

  1. Участник, который приступает писать код, решает, что сможет сделать за 5 минут. Если не успевает достичь поставленной цели, удаляет написанный блок кода;
  2. Смена роли в паре происходит каждые 5 минут;
  3. Обязательно использовать, как минимум, что-то одно из списка:
  • нет условных операторов;
  • нет циклов;
  • методы не больше 5 строк;
  • нет переменных.

Сессия 5. Исправь это!

Рефакторинг — наше всё!

Эта сессия делится на 2 части:

  1. Первые 15 минут. 
    За это время нужно реализовать игру любым способом без оглядки на архитектуру и качество кода;
  2. Оставшиеся 30 минут.
    Через 15 минут в парах заменяется один участник и его задача — привести этот код за оставшееся время к идеальному, визуализировать алгоритм.

Впечатления

Было классно и весело! Ситуация накалялась тем, что участники не знали какие будут ограничения в следующий раз. Даже на первой итерации не представляли, что получится в конце.

Cтатистика

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

Конверсия

  • записалось 12 человек;
  • пришло 13 человек (108% 😅);
  • оставило обратную связь 11 человек.

Результаты опроса

Дополнительно ребята написали, что узнали некоторые шорткаты, полезные хаки, а ещё пришли к выводу, что продумывать архитектуру и использовать TDD для мелких задач не всегда полезно 🙈

Осмысление

Какую же пользу приносит Code Retreat?

  1. Обмен опытом;
    С каждой новой итерацией ты набираешься новых идей, перенимаешь опыт от нового партнера, а также передаешь свои знания другим людям. В нашем случае это было особенно актуально, потому что участвовали разработчики интерфейсов, разработчики мобильных приложений, бекендеры.
  2. Расширение сознания;
    Тебе не дают решать задачу каждую сессию одинаково. Экстремальные ограничения просто вынуждают выходить за рамки привычного.
  3. Море позитива и общения. 
    Приобретаешь опыт совместного решения поставленной задачи в паре с человеком, с которым не удавалось поработать в рамках проекта.

Code Retreat оказался очень интересным форматом, событием, которое бросает тебе вызов.

Это был мой первый опыт организации подобного мероприятия. Считаю, что он был удачным. За время проведения я усвоил несколько уроков и получил очень ценные знания, которые помогут мне в следующий раз сделать Code Retreat намного лучше.

Будьте целеустремлёнными и энергичными. Не бойтесь прийти к руководителю и предложить нечто подобное. Гарантирую, что он вас поддержит.

Придумывайте и реализуйте идеи!
До встречи!

UPD: Паша Егоров, спасибо тебе за советы по усложнениями некоторых сессий. Ты мне очень помог.

One clap, two clap, three clap, forty?

By clapping more or less, you can signal to us which stories really stand out.