CodeRetreat в SEEK: Clean Code vs Comfort Zone

Понеделник сутринта. Това не е типично удобно за разработчиците време да се изритате направо от зоната си на комфорт на кодиране и да се насочите към eXtreme Learning за цял ден.

И все пак, това е, което 20 смели софтуерни инженери в SEEK и 3 гост кодери от общността #DevOpsGirls се регистрираха на 16 април 2018 г. Те нямаха представа в какво се впускат. Agile & mindsetse за победа!

Двойки, кодиращи играта на живота на Conway, следвайки TDD & XP практиките

„Практикувайте и усъвършенствайте своя занаят.“

CodeRetreat е повтарящо се ежедневно събитие, което е фокусирано върху практикуване на основите на разработката на софтуер, като се използват някои от практиките на XP (eXtreme програмиране), като тестове за управление на тестове (TDD), програмиране на двойки и прост дизайн. Целта е да продължите да ставате по-добри в намаляването на разходите за промяна и да напишете код, който открито приема промяната.

Въпреки че целта на разработчиците всеки ден е да завършат следващото изпълнение, фокусът на разработчиците при оттегляне на код е да практикуват и да учат - да не завършват.

След като си припомнихме тези основи на чистия и адаптивен код, скочихме направо в сесиите за кодиране.

Приключението, очакващо екипа, се справи с Играта на живота на Конуей в 4 сесии, като всеки път започва отначало, всеки път сменяйки партньора за сдвояване, всеки път с различни забавни предизвикателства (известни като ограничения). В крайна сметка искахме да изгоним нашите инженери от тяхната зона за комфорт на кодиране за eXtreme Learning!

Да започваме!

Всяка сесия продължава 45 минути. След всяка сесия екипите изтриват кода си. Често това става, когато псуването започва. Целта на изтриването на техния код е да се запази силен фокус върху ученето. Краткият период от време го прави невъзможно за участниците да завършат Играта на живота на Conway. Като се има предвид, че всички изтриват кода си след всяка сесия, няма значение дали кодът е наистина ужасен или наистина добър. Това води до много свобода да експериментирате с опитите на различни подходи към кодирането и TDD.

Сесия №1: Загряване

Запознаване с проблема, TDD и сдвояване.

загрявка()
{
   timeRemaining = таймер (45, time.minutes)
   докато (timeRemaining)
   {
     работете по двойки()
     codeSolution ()
   }
   deleteAllCode ()
}

Сесия № 2: Сдвояване на Ping Pong

Вземете редове, за да напишете неуспешен тест или изпълнение.

pingPongPairing ()
{
   timeRemaining = таймер (45, time.minutes)
   докато (timeRemaining)
   {
     driver.writeFailingTest ()
     swapDriver ()
     driver.makeTestPass ()
     driver.refactor ()
   }
   deleteAllCode ()
}
Един от пинг понг двойките TDD

Сесия № 3: Безшумно сдвояване

Не се говори по време на сесията (изключение: неизвестни на езика / IDE).

mutePairing ()
{
  personA.canTalk = невярно
  personB.canTalk = невярно
  pingPongPairing ()
}

Сесия № 4: Стъпки за бебето

Време за кодиране - кутии от 4 минути за писане и извършване на преминаващи тестове.

бебешки стъпки()
{
  timeRemaining = таймер (45, time.minutes)
  докато (timeRemaining)
  {
    stepTimer = таймер (4, time.minutes)
    опитвам{
      writeFailingTest ()
      makeTestPass ()
      gitCommit ()
    }
    улова (изчакване)
    {
      gitRevert ()
    }
  }
  deleteAllCode ()
}
Времето тече!

Итеративно обучение на 3 нива

CodeRetreat има за цел да увеличи максимално обучението чрез излагане на двойките на сложен проблем, като същевременно хвърля ограничения като предизвикателни формати на сесията.

Учене на много нива. Снимка от Element5 Digital на Unsplash
CodeRetreat подобри уменията и кариерата ми повече от всяка друга дейност, която някога съм правил. Дори като фасилитатор научих толкова много. (Джим Хърн, базиран в САЩ софтуерен инженер и подправен кодПредаване на улеснение)

Закрепихме учението на хората, като отделихме време да ги размислим и споделим като група: Итеративно обучение = сесия + ретро.

Трите нива на обучение през целия ден бяха на сдвояване, TDD и повтаряне по същия проблем:

  • Сдвояването с различни хора през целия ден води до многостранно обучение от различни подходи към един и същ проблем - концептуално и програмно (езици за програмиране, софтуерно проектиране, IDE, инструменти, изследвания, стил на комуникация).
  • Кодирайки един и същ проблем отново и отново, екипът разбра, че няма един начин да започне да проектира, кодира и тества решение. Първоначалното решение да започнете навън (първо да проектирате средата) или отвътре навън (първо да проектирате правилата на играта) определят TDD подхода на екипа и колко ще се справят и колко бързо ще научат и ще валидират своя дизайн ,
  • Чрез фокуса на тестовата разработка (TDD) на сесиите екипите бяха предизвикани да мислят за наистина малко. Имаше много „аха“ моменти за трудностите на тази дисциплина и по-важното за ползите от следването на този подход, тъй като TDD помага да се ръководи дизайна на решението, без да се прекалява с решението.
    В Agile and Lean работим с екипи, насочени към намаляване на отпадъците за целия жизнен цикъл на доставка на продукти. Разделяме проблемите на по-малки парчета и се фокусираме върху доставянето на най-ценните предмети на клиента, за да увеличим скоростта и стойността на обучението.
    TDD дава възможност за намаляване на отпадъците в софтуерното инженерство чрез безмилостен фокус върху изграждането само на това, което е релевантно и ценно. Всичко това води до по-чист и по-адаптивен код. Това е важен урок за софтуерните инженери в свят, в който бързината, адаптивността и стойността на клиентите правят или нарушават успеха на хора, екипи и предприятия.
Екипът се събира, за да сподели своите знания и наблюдения

Какво казаха нашите софтуерни инженери?

Сдвояване на Ping Pong: Намиране на дупки

Беше ценно да гледам как някой друг пише код, само за да премина моите тестови единици, тъй като без предположенията и контекста, включени в тяхното решение, това показа дупки в моите тестове, които може би не съм забелязал да работя соло. (J. J.)

Безшумно сдвояване: Изразителен код за бъдещото себе си

От сесия 3, където не можахме да разговаряме с нашите партньори - Това е много относително към това да се налага да пишем самоекспресивен код, тъй като бъдещото ни аз или някой друг би било подобно на нашия мълчалив партньор, който просто трябваше да има смисъл от това, което означава кодът , (А.К.)

TDD: Правя го неправилно

Сесията ни накара да мислим / преосмисляме начина, по който правим TDD. Работехме върху казус за TDD и бяхме проектирали всички наши тестови сценарии предварително, винаги се чудех защо нямахме осезаем изход (код) дори след толкова дни работа. Сега имам отговор, направихме TDD грешно. Първо не са тестове, сега го реконструирахме и започнахме да пишем един единствен тест, а след това да продължим. (P.S.)
Концентрацията е осезаема по време на сложната сесия „заглушаване на сдвояването“

Поуки за улесняване

Имаше и обучения за нас като фасилитатори.

Готовност за TDD
Едно от по-големите предизвикателства на нашите екипи беше първоначалната настройка на тяхната TDD среда. Помолихме хората да идват подготвени с техния лаптоп, настройка с IDE по техен избор, TDD готов и инсталиран git. Това обаче не беше достатъчно ясно. Някои отбори дори не успяха да участват в учение, тъй като отделиха цялото време за създаване на обстановка.

Следващия път ще предложим повече подкрепа на нашите екипи напред. Специално за вътрешен codeRetreat. За външен codeRetreat бихме били по-ясни какво означава среда, готова за TDD и как те могат да тестват, за да бъде codeRetreat готова :)

Случайно сдвояване
Идея, която ни беше представена след деня, беше да намерим игри, които да рандомизират сдвояването. Естествено хората са склонни да се сдвояват с хора около тях или с хора, с които са свикнали да работят, така че намирането на забавни начини за противодействие на това е полезно.

Улеснение в действие - време за спиране и изтриване на кода

Разнообразие & #DevOpsGirls

Имахме разнообразна група хора, присъстващи на събитието. От нашите най-млади асоциирани разработчици на софтуер, до нашите най-старши главни разработчици (известни също като Tech Leads в други компании). Имахме страхотно съотношение на жените в технологичното присъствие с 8 от общо 20 участници. Това е много по-високо от обичайното съотношение <10% във всеки отбор.

CodeRetreat фасилитатори Виктория Шифър, Мишел Глийсън с нашите #DevOpsGirls софтуерни инженери Edit, Padmavathi и Natalia

Бяхме щастливи да подкрепим общността на Melbourne #DevOpsGirls, като открихме вътрешното си обучение за 3 външни софтуерни инженери. На нас ни беше приятно, че те допринасят за своите дизайнерски и инженерни умения и нашите двойки да се учат заедно със своя опит и обратна връзка.

В стаята имаше невероятна вибрация и някои фантастични разговори, докато всички се опитваха да разрешат същия проблем, докато бяха предизвикани от същите ограничения.

заключение

До края на деня всички бяха изтощени, тъй като отразиха своите предизвикателства и преживявания. Надяваме се също, че codeRetreat ни помогна да постигнем целта на SEEK, като помогна на нашите софтуерни инженери да живеят по-пълноценно и продуктивно в живота и помагайки на нашата организация да успее.

Интересувате се от codeRetreats - ето още!

www.coderetreat.org
Научете повече за codeRetreats, тяхната история, как да хоствате или улеснявате едно и къде да намерите следващото събитие близо до вас.

Следващият Глобален ден на CodeRetreat #gdcr е насрочен за 17 ноември 2018 г. Запазете датата, проверете дали ще има събитие #gdcr във вашия район и следвайте @coderetreat в twitter или се присъединете към отбора на софтуерните крафтери.

За да прочетете в друг вътрешен CodeRetreat, пуснат в REA касата на този блог: http://rea.tech/tdd-in-bash-aka-our-1st-internal-code-retreat-rea/

Специални благодарности на Мишел Глийсън за съвместния домакин на деня с мен и забавлението за сдвояване на псевдокода на сесиите. Също и на Джо Пиечота за вътрешно първенство в събитието. Също така благодаря на SEEK - Tim Smart & Craig Penfold за спонсорирането на събитието за нашите софтуерни инженери. И не на последно място благодаря на Тереза ​​Ниат, че ни помогна да подкрепим #DevOpsGirls, като покани 3 външни #DevOpsGirls софтуерни инженери.