Coderetreat – Praha 2011

Přinutit programátora vstát o víkendu v 5:00? Zadat mu úkol, který nemůže splnit? Mluvit mu do toho, jak to má dělat a očekávat, že on sám to bude vidět na konci dlouhého a náročného dne jako zábavně a účelně strávený čas? Pro někoho to může znít jako sci-fi, případně jako sen každého manažera, ale přesně to se povedlo v sobotu 3. prosince na Coderetreat-u, který se konal v Praze v rámci Global Day of Coderetreat.

coderetreat

Akce zaměřená na procvičování základů návrhu a vývoje software, ohlášená na osmou hodinu ranní, mohla přilákat jen lidi, kteří jsou nadšení pro své řemeslo. Něco málo po osmé byli již všichni zabydlení v hezkých prostorách pražského Hubu. V 8:45 proběhlo  rychlé intro, kde jsme si řekli, že dnešek je dnem, kdy se můžeme pokusit psát perfektní kód tak, abychom pak v zaměstnání pod tlakem termínu zvládli odvést za stejný čas lepší práci. Dále bylo zmíněno to, že den bude rozdělen do šesti časově ohraničených bloků, práce bude probíhat formou párového programování a na konci každého z bloků bude nutné vymazat veškerý napsaný kód.

V 9:00 si každý rychle našel partnera pro první blok a tak jsme se mohli pustit do zkoumání problému, kterým byla Conway’s Game of Life. Jedná se o hru, která nemá hráče. Jediné, co může člověk ovlivnit je počáteční nastavení světa, který se skládá z nekonečné 2D mřížky obsahující buňky. Každá z buněk může být v jednom ze stavů – živá/mrtvá a její další osud se řídí několika jednoduchými pravidly:

  • Pokud má živá buňka méně než dva živé sousedy, umírá v důsledku nedostatku obyvatel.
  • Pokud má živá buňka dva nebo tři živé sousedy, zůstává naživu do dalšího kola.
  • Pokud má živá buňka více než tři živé sousedy, umírá v důsledku přemnožení.
  • Pokud má mrtvá buňka přesně tři živé sousedy, stává se v dalším kole buňkou živou.

Cílem prvního bloku bylo seznámení se s mechanikou hry tak, abychom se mohli ve zbytku dne soustředit na procvičování různých programátorských postupů. Po 45 minutách ohlásil zvonek konec bloku a následovala první krátká retrospektiva, na které jsme si během nekolika málo minut řekli, co nás zaujalo nebo překvapilo. Spousta lidí zjistila, že třičtvrtě hodiny je příliš krátká doba na dokončeni řešení. Opět jsme proto zdůraznili, že dnešním cílem není problém vyřešit, ale že cílem je tréning základů návrhu a vývoje software.

     

Miroslav Bajtoš pak představil 4 pravidla jednoduchého návrhu, která jsou hlavním tématem všech Coderetreat-ů.

  1. Prochází všechny testy.
  2. Kód neobsahuje žádné duplicity.
  3. Kód vyjadřuje záměr programátora (proměnné/metody jsou dobře pojmenované).
  4. Kód neobsahuje žádné nadbytečné části.

Dopoledne jsme zvládli ještě další 2 bloky. Spousta lidí byla pořád v módu snahy o vyřešení problému a někteří ještě bojovali s pochopením Game of Life. Většina začínala s 2D polem, které obsahovalo boolean flagy případně instance třídy Buňka. V retrospektivách jsme se proto zaměřili právě na poukázaní problémů, které přináší tyto přístupy.

2D pole

  • Problém se splněním podmínky zadání, které říká, že svět je nekonečný.
  • Co když přijde požadavek na změnu topologie?

Buňka

  • K čemu ji člověk potřebuje?
  • Pokud má v sobě příznak živá/mrtvá, znamená to, že musíme mít všechny mrtvé? Máme pak stejný problém s nekonečnem jako při použití 2D pole?
  • Kolik odpovědností má tato třída? Neporušuje SRP? Pozice, znalost topologie – sousedé, znalost pravidel přežití

Aleš Roubíček pak ještě zdůraznil, že pravidla čistého kódu platí i pro testy. Po krátké diskusi nasledoval výborný oběd spojen s dlouhou pauzou, během které jsme si stihli všichni odpočinout před tím, co na nás čekalo v následujících hodinách.

V týmu facilitátorů jsme se shodli, že odpoledne trochu přitvrdíme a přinutíme lidi vystoupit z jejich komfortní zóny, ve které jsou zvyklí programovat. Tématem prvního odpoledního bloku proto bylo psaní krátkých, dobře pojmenovaných tříd a metod.

  • Maximum 5 řádek v jedné metodě.
  • Maximum 3 metody v jedné třídě.

Mile mě překvapilo, že všichni výzvu přijali, o čem jsem se mohl přesvědčit i na mé pravidelné pochůzce, kdy jsem pozoroval, jak to lidem jde. Tam kde byli dopoledne metody o délce 20 a více řádek jsem teď viděl krátké metody, jejichž názvy lépe odůvodňovali jejich existenci a přehlednost kódu se tím výrazně zlepšila.

     

Při následovné retrospektivě se několik lidí přiznalo, že měli metodu o délce 6 řádek a to z důvodu vnořených for cyklů a podmínek. S úsměvem na tváři jsme jim proto zdělili výzvu pro další blok:

  • Nepoužívat podmínky (IF, WHILE)
  • Nepoužívat cyklus FOR

U některých lidí zavládlo zmatení následované sérií otázek jestli to myslíme vážně. S klidným výrazem na tváři jsme odpověděli, že ano a nadhodili jsme několik návrhů:

  • Použití polymorfizmu.
  • Funkcionální konstrukty map/filter.

Výzva byla nakonec přijata a po rychlém vyhledání nových partnerů mohl začít pátý blok, který se nakonec ukázal jako nejnáročnější z celého dne. Páry bojovali hlavně s odstraňováním podmínek. Použitím funkce filter se některým povedlo zabít 2 mouchy (podmínku i cyklus FOR) jednou ranou a výsledný kód vypadal výrazně lepe než ten, který se objevoval na obrazovkách dopoledne. Po 45 minutách přišlo vysvobození v podobě zvonění, nasledované retrospektivou, během níž jsme si opět popovídali o zajímavostech zjištěných v průběhu posledního bloku.

Na účastnících již byly znát náznaky únavy a tak jsme se s Mirem a Alešem shodli, že den zakončíme blokem, ve kterém může každý popustit uzdu své fantazie a zkusit cokoliv. Poskytli jsme několik nápadů pro inspiraci:

  • Napište nejhorší kód jaký umíte.
  • Mute – komunikace jen skrze kód.
  • Find the Loophole – ten kdo píše produkční kód se ho snaží napsat evidentně nesprávně, ale zároveň tak, že splňuje všechny napsané testy.
  • Pokud jste psali testy, teď to zkuste bez nich.
  • Nepoužívat myš.

Páry se rychle domluvili na způsobu, kterým budou pracovat a mohlo se začít. Nejzajímavějším bylo pozorovat páry, které si zvolili „Mute“ (někteří dokonce zároveň s „Find the Loophole“). Kombinace frustrace s radostí byla očividná. Několik párů si take vyzkoušelo práci bez použití myši a zjišťovali, co všechno umí jejich editor bez toho, aniž by sundali ruce z klávesnice.

I poslední blok byl nekompromisně ukončen zvonkem a my jsme se tak dostali k finální retrospektivě celého dne. Každý měl možnost zodpovědět 3 otázky:

  • Co jsem se dnes naučil?
  • Co mě dnes překvapilo?
  • Co budu dělat v budoucnu jinak?

Zazněla spousta zajímavých odpovědí, ze kterých jsem vybral:

  • Získal jsem motivaci.
  • Budu trénovat, trénovat, trénovat.
  • Hodně jsem se toho naučil.
  • Čekal jsem, že lidi budou mít chladnější přístup, ale mýlil jsem se a atmosféra byla skvělá.
  • Na první pohled absurdní omezení (nepoužívat IF) může vést k zajímavým pohledům na problém.
  • V pondělí řeknu šéfovi, že v Praze již testují, že bychom taky měli začít.
  • I JavaScript může vypadat dobře.
  • Překvapilo mě, jak někteří zvládají svůj editor – zkusím se zdokonalit v tom svém.
  • Poprvé jsem si vyzkoušel párové programování – byla to zábava.

Nezbývá než doufat, že účastníkům vydrží získaná energie a poznatky co nejdéle a že alespoň část z nich je využije pro další rozvoj svých schopností.

Jako facilitátoři jsme získali spoustu nových zkušeností a věřím, že je využijeme při organizaci dalších Coderetreat-ů, které na sebe nenechají dlouho čekat.

Za tým organizátorů bych moc rád poděkoval všem účastníkům za to, že si díky svému přístupu vytvořili super akci a zároveň i našim partnerům – firmám GMC a Think-Forth, které přispěli nemalou částkou na pokrytí našich potřeb.

Reklamy

Zanechat Odpověď

Vyplňte detaily níže nebo klikněte na ikonu pro přihlášení:

WordPress.com Logo

Komentujete pomocí vašeho WordPress.com účtu. Odhlásit / Změnit )

Twitter picture

Komentujete pomocí vašeho Twitter účtu. Odhlásit / Změnit )

Facebook photo

Komentujete pomocí vašeho Facebook účtu. Odhlásit / Změnit )

Google+ photo

Komentujete pomocí vašeho Google+ účtu. Odhlásit / Změnit )

Připojování k %s

%d bloggers like this: