CodeRetreat na SEEK: Clean Code vs Comfort Zone

Je pondělí ráno. Toto není typický čas vhodný pro vývojáře, který vám umožní vyrazit se přímo z vaší zóny komfortu kódování a zamířit do eXtreme Learning na celý den.

Přesto se dne 20. dubna 2018 přihlásilo 20 odvážných softwarových inženýrů ve společnosti SEEK a 3 hostující kodéry z komunity #DevOpsGirls. Neměli tušení, do čeho se dostávají. Agilní a růstové smýšlení pro vítězství!

Dvojice kódující Conwayovu hru života podle postupů TDD a XP

"Cvičte a vylepšujte své řemeslo."

CodeRetreat je opakovatelná, celodenní událost, která je zaměřena na procvičování základů vývoje softwaru pomocí některých praktik XP (eXtreme Programming), jako je Test Driven Development (TDD), Párové programování a Jednoduchý design. Cílem je neustále zlepšovat snižování nákladů na změnu a psát kód, který změny otevřeně přijímá.

Zatímco cílem pro vývojáře je každý den dokončit další výstup, vývojáři se při ústupu kódu zaměřují na procvičování a učení - nikoli na dokončení.

Poté, co jsme si připomněli tyto základy čistého a přizpůsobivého kódu, skočili jsme přímo do kódovacích relací.

Dobrodružství, které na tým čekalo, se zabývalo Conwayovou hrou života ve čtyřech sezeních, kdy se začalo znovu, pokaždé se střídalo párování partnera, pokaždé s různými zábavnými výzvami (aka omezení). Chtěli jsme, aby naši inženýři vyhodili ze své zóny komfortu při kódování, aby se eXtreme Learning přece jen ukázalo!

Začněme!

Každá relace trvá 45 minut. Po každém sezení týmy smažou svůj kód. Často se jedná o začátek přísahy. Účelem vymazání jejich kódu je udržení silného zaměření na učení. Krátký časový rámec znemožňuje účastníkům dokončit Conwayovu hru života. Vzhledem k tomu, že každý mazá svůj kód po každé relaci, nezáleží na tom, zda je kód opravdu hrozný nebo opravdu dobrý. To vede k velké svobodě experimentovat s vyzkoušením různých přístupů k kódování a TDD.

Session # 1: Warm Up

Seznámení s problémem, TDD a párováním.

zahřát()
{
   timeRemaining = časovač (45, time.minutes)
   while (timeRemaining)
   {
     pracovat v párech()
     codeSolution ()
   }
   deleteAllCode ()
}

Session # 2: Ping Pong Pairing

Střídá se při psaní neúspěšného testu nebo implementace.

pingPongPairing ()
{
   timeRemaining = časovač (45, time.minutes)
   while (timeRemaining)
   {
     driver.writeFailingTest ()
     swapDriver ()
     driver.makeTestPass ()
     driver.refactor ()
   }
   deleteAllCode ()
}
Jeden z ping pongových párů TDD'ing

Session # 3: Mute Pairing

Během relace nemluví (výjimka: neznámé v jazyce / IDE).

mutePairing ()
{
  personA.canTalk = false
  personB.canTalk = false
  pingPongPairing ()
}

Session # 4: Baby Steps

Kódovací čas - boxy po dobu 4 minut pro psaní a provedení úspěšných testů.

dětské kroky()
{
  timeRemaining = časovač (45, time.minutes)
  while (timeRemaining)
  {
    stepTimer = časovač (4, time.minutes)
    Snaž se{
      writeFailingTest ()
      makeTestPass ()
      gitCommit ()
    }
    chytit (timeOut)
    {
      gitRevert ()
    }
  }
  deleteAllCode ()
}
Čas běží!

Iterativní učení na 3 úrovních

Cílem codeRetreat je maximalizovat učení tím, že páry jsou vystaveny složitému problému, zatímco vrhá omezení jako náročné formáty relací.

Učení na mnoha úrovních. Foto: Element5 Digital na Unsplash
CodeRetreat zlepšil mé dovednosti a svou kariéru více než jakákoli jiná činnost, kterou jsem kdy udělal. I jako facilitátor jsem se toho tolik naučil. (Jim Hurne, americký softwarový inženýr a zkušený zprostředkovatel kódu)

Učení lidí jsme zakotvili tím, že jsme si vzali čas na jejich reflexi a sdílení jako skupina: Iterativní učení = Session + Retro.

Tři úrovně učení po celý den byly na párování, TDD a opakování stejného problému:

  • Spárování s různými lidmi po celý den vede k mnohostranným poznatkům z různých přístupů ke stejnému problému - koncepčně i programově (programovací jazyky, návrh softwaru, IDE, nástroje, výzkum, komunikační styl).
  • Tím, že stejný problém kódoval znovu a znovu, si tým uvědomil, že neexistuje žádný způsob, jak začít navrhovat, kódovat a testovat řešení. Počáteční rozhodnutí začít venku (nejprve navrhnout prostředí) nebo dovnitř (nejdříve navrhnout pravidla hry) určovalo týmový TDD přístup a jak moc by se jim podařilo a jak rychle by se dozvěděli a validovali svůj design .
  • Prostřednictvím zaměření testů řízeného vývoje (TDD) byly týmy vyzvány, aby považovaly opravdu malé. O problémech této disciplíny bylo spousta „aha“ momentů, a co je důležitější, o výhodách plynoucích z tohoto přístupu, protože TDD pomáhá navrhovat řešení bez toho, aby bylo řešení nadměrně upraveno.
    V Agile and Lean spolupracujeme s týmy, abychom se zaměřili na snižování plýtvání po celý životní cyklus dodávek produktů. Rozdělujeme problémy na menší kousky a zaměřujeme se na dodání nejcennějších položek zákazníkovi, abychom zvýšili rychlost a hodnotu učení.
    TDD umožňuje snižování odpadu v softwarovém inženýrství neúprosným zaměřením pouze na budování toho, co je relevantní a cenné. To vše vede k čistšímu a přizpůsobivějšímu kódu. Toto je důležitá lekce pro softwarové inženýry ve světě, kde rychlost, přizpůsobivost a hodnota pro zákazníka dělají nebo narušují úspěch jednotlivců, týmů a podniků.
Tým se schází, aby se podělil o své poznatky a postřehy

Co říkali naši softwaroví inženýři?

Ping Pong Pairing: Hledání děr

Bylo užitečné sledovat, jak někdo jiný píše kód, jen aby složil testy na mé jednotce, protože bez předpokladů a kontextu zapečatěného do jejich řešení se ukázalo, že v mých testech byly díry, které jsem si možná nevšiml. (J. J.)

Silent Pairing: Expressive Code for Future Self

Z relace 3, kde jsme nemohli mluvit s našimi partnery - To je velmi relativní k tomu, že musíme psát sebeprezentativní kód, protože naše budoucí já nebo někdo jiný by byl podobný našemu tichému partnerovi, který prostě musel dát smysl, co kód znamená . (A.K.)

TDD: Dělá to špatně

Tato relace nás přiměla přemýšlet / přehodnotit způsob, jakým děláme TDD. Pracovali jsme na případové studii o TDD a předem jsme navrhli všechny naše testovací scénáře, vždycky jsem přemýšlel, proč nemáme hmatatelný výstup (kód) ani po tolika dnech práce. Teď mám odpověď, udělali jsme TDD špatně. Nejedná se o první testy, nyní jsme to refactored a začali psát jeden test implementovat a pak jít vpřed. (P.S.)
Koncentrace je hmatatelná během složité relace „ztlumení“

Poučení o usnadnění

Také se pro nás učili jako facilitátoři.

Připravenost na TDD
Jednou z větších výzev našich týmů bylo počáteční nastavení jejich prostředí TDD. Požádali jsme lidi, aby přišli připraveni na svůj notebook, nastavili si IDE podle svého výběru, připravili TDD a nainstalovali git. Nebylo to však dostatečně explicitní. Některým týmům se nepodařilo zúčastnit cvičení, protože celou dobu nastavovaly své prostředí.

Až příště nabídneme našim týmům podporu předem. Zejména pro interní kódRetreat. Pro externí kódRetreat bychom byli jasnější, co znamená prostředí připravené pro TDD a jak mohou otestovat, že je připraven pro kódRetreat :)

Náhodné párování
Myšlenkou, která se nám po dni vznášela, bylo najít hry pro náhodný párování. Lidé samozřejmě mají tendenci se spárovat s lidmi kolem sebe nebo s lidmi, s nimiž jsou zvyklí pracovat, takže nalezení zábavných způsobů, jak tomu zabránit, je prospěšné.

Usnadnění v akci - čas zastavit a odstranit kód

Rozmanitost & #DevOpsGirls

Účastnili jsme se rozmanité skupiny lidí. Od našich nejvýznamnějších přidružených vývojářů softwaru po naše nejvýznamnější hlavní vývojáře (také známé jako Tech Leads v jiných společnostech). Měli jsme skvělý poměr žen v technice s 8 z 20 účastníků. To je mnohem vyšší než obvyklý poměr <10% v každém týmu.

Interpreti CodeRetreat Victoria Schiffer, Michelle Gleeson s našimi #DevOpsGirls softwarovými inženýry Edit, Padmavathi a Natalia

S potěšením jsme podpořili komunitu Melbourne #DevOpsGirls otevřením našeho interního školení 3 externím softwarovým inženýrům. Užili jsme si, že jim pomohli přispět svými designovými a inženýrskými dovednostmi a aby se naše dvojice učily společně se svými zkušenostmi a zpětnou vazbou.

V místnosti byla úžasná atmosféra a několik fantastických rozhovorů, když se všichni pokusili vyřešit stejný problém a zároveň čelit stejným omezením.

Závěr

Na konci dne byli všichni vyčerpaní, když se zamýšleli nad svými výzvami a zkušenostmi. Rovněž doufáme, že nám náš kódRetreat pomohl dosáhnout cíle společnosti SEEK tím, že pomohl našim softwarovým inženýrům žít naplňujícím a produktivnějším pracovním životem a pomáhat naší vlastní organizaci uspět.

Zájem o kódVytvoření - tady je více!

www.coderetreat.org
Zjistěte více o kóduReformace, jejich historie, o tom, jak hostit nebo usnadnit a kde najít další událost ve vašem okolí.

Příští globální den CodeRetreat #gdcr je naplánován na 17. listopadu 2018. Uložte datum, zkontrolujte, zda ve vaší oblasti bude #gdcr událost, a sledujte @coderetreat na twitteru nebo se připojte k týmu slack cracks.

Chcete-li si přečíst další interní CodeRetreat běžící na REA, podívejte se na tento blogový příspěvek: http://rea.tech/tdd-in-bash-aka-our-1st-internal-code-retreat-rea/

Zvláštní poděkování patří Michelle Gleesonové za spoluorganizování dne se mnou a zábavu při párování na pseudokódu relací. Také Jo Piechotovi za interní šampionát této akce. Děkujeme také společnosti SEEK - Tim Smart & Craig Penfold za sponzorování akce pro naše softwarové inženýry. A v neposlední řadě díky Theresii Neate, že nám pomohla podpořit #DevOpsGirls tím, že pozvala 3 externí #DevOpsGirls softwarové inženýry.