Codretreat je veľmi pekná programátorská udalosť, na ktorej sa stretnú programátori rôznych úrovní a celý deň spoločne programujú. Programujú v 45 minútových kolách a v každom kole riešia rovnaký problém – Conway’s Game of Life. Programujú v pároch a v každom kole sú dané obmedzenia na spôsob, akým sa bue písať kód. Cieľom coderetreatu je rozšírenie obzorov, otvorenie hlavy novým spôsobom programovania a hlavne naučenie sa niečoho nového. Tento článok však nie je o coderetrate všeobecne, ale o jednom konkrétnom, ktorého sme sa zúčastnili.
Coderetreat organizovala spoločnosť CN Group, o ktorej som dovtedy nikdy nepočul, ale organizovali coderetreat, takže asi je to super firma. Coderetreat sa konal 16. 11. 2019 v bratislavskom office tejto spoločnosti. Tento dátum bol zároveň aj svetový deň coderetreatu, čo znamená, že po celom svete ľudia robili to isté čo my.
Coderetreat začal prezentáciou o tom, prečo sa torobí, ako sa to robí a ako sa to bude robiť tu. Tiež bolo potrebné vysvetliť, čo to vlastne Conway’s Game of Life je. Všetko potrebné ku coderetreatu sa dozvieš na evente, ale odporúčam si “hru” pozrieť aj dopredu. Okrem toho spočívala príprava v tom, že sme si každý pripravili prázdny projekt v akomkoľvek jazyku spolu s testovacím frameworkom.
Ako som už spomínal, v každom kole sa robí Conway’s Game of Life. V každom kole sú však rôzne obmedzenia, ktoré u nás vyzerali takto:
1. kolo – iba Conway’s Game of Life
2. kolo – 4 rules of simple design
3. kolo – TDD Ping Pong
4. kolo – mute TDD Ping Pong
5. kolo – žiadna myš, žiadne if-y a for cykly
6. kolo – mute TDD Ping Pong s Kubom
Pred každým kolom prezentácia pokračovala a predstavovali nám v nej obmedzenia ďalšieho kola. Pred druhým kolom napr. bola prezentácia o 4 rules of simple design. Keď sa išlo riešiť TDD, tak nám povedali čo to je a prečo sa to robí. Príjemne ma prekvapilo, že prezentácia bola veľmi pekne spravená a dobre odprezentovaná.
V 1. kole sme to robili všetci podobne a to tak, že sme mali 4 triedy na pravidlá, nejaké hracie pole (2D pole) a potom niečo, čo to spájalo dokopy. S Kubom sme pracovali v C# a podarilo sa nám spraviť skoro celú hru. Mali sme tam však chybu a akurát keď sme si ju uvedomili, tak uplynulo 45 minút a museli sme všetko zmazať.
Po každom kole nasledovala retrospektíva, kde sme si povedali, čo kto robil. Na jej konci sa nám organizátori pokúsili dať rady, ako to robiť lepšie. V tomto prípade to bola rada, že sa máme sústrediť na slovesá (správanie) a nie na podstatné mená (triedy).
V 2. kole sme už mali každý iných parťákov. Môj pracoval s Javascriptom a tak sme sa rozhodli toto kolo robiť v Javascripte. Snažili sme sa dodržiavať 4 rules of simple design a tak sme robili aj TDD. Opäť sme začali štyrmi pravidlami. Potom sme podľa wikipédie prešli na reprezentáciu hracieho poľa ako zoznam živých buniek. Na všetko sme písali testy a až potom implementáciu. Išlo to samozrejme pomalšie ako bez testov, ale bolo vidno, že náš kód bol lepší.
V retrospektíve sme sa dozvedeli, že sme išli všetci o dosť pomalšie. Niektorí nerobili TDD, ale najprv písali implementáciu a až potom chceli písať testy. K písaniu testov sa však už nedostali a museli svoj kód zmazať a v ďalšom kole začať odznova.
3. kolo bolo o TDD. Museli sme robiť TDD Ping Pong a okrem toho sme nemohli mať funkcie, ktoré by boli dlhšie ako 4 riadky. Parťákov sme mali samozrejme opäť iných. Bolo veľmi zaujímavé vidieť, ako sa postupne dostávame k niečomu funkčnému. Aj teraz sme však začali so 4 pravidlami. Vytvárali sme ich však postupne spolu s testami. Na konci kola sme mali nejakých 20 testov a urobené iba 4 pravidlá a to je asi aj všetko.
Pri retrospektíve sme opäť zistili, že sme všetci išli ešte pomalšie. Nejde totiž len o to, že sa musíte zhodnúť v tom, čo chcete ísť robiť, ale ešte sa do toho musíte navádzať iba testami. Toto kolo bolo veľmi zaujímavé, ale dalo sa to ešte odkomunikovať. V ďalšom kole to už bolo horšie.
4. kolo bolo ako 3. kolo, no nemohli sme pri ňom vôbec rozprávať. To znamená, že sme mohli komunikovať iba cez testy a kód. Najprv nám to celkom šlo. S novým parťákom sme sa vykašlali na triedy pre pravidlá a spravili sme iba jednu funkciu, ktorá reprezentovala všetky pravidlá. Nakoniec táto funkcia mala asi 4 riadky a neboli potrebné žiadne triedy. Po napísaní tejto funkcie sa nám však myšlienky trochu rozišli a už sme sa nevedeli zosúladiť. Ja som sa parťáka snažil naviesť jedným smerom, on to nepochopil a ťahal ma iným smerom, ktorý som ja nepochopil a … . Zamotali sme sa.
Bola to však veľmi dobrá a bizarná skúsenosť. Ako sa ukázalo pri retrospektíve tak toto platilo pre všetkých. Samozrejme, že nikto sa nedostal veľmi ďaleko.
Keď sme si mysleli, že horšie to už nebude, tak prišlo kolo číslo 5. Nemohli sme používať myš, if-y a ani for cykly. Robili sme javascript vo web storme na macbooku. To znie ako zábava, až na to že sme ani jeden nepoznali klávesové skratky. Postupne sme sa do toho dostali a napísali sme najkratšiu funkciu na pravidlá. Myslím, že mala iba jeden riadok a robila všetko, čo mala. Vlastne to bol jeden ternárny operátor (nemohli sme používat if-y). Dokonca sa nám podarilo aj spraviť funkciu, ktorá počíta počet susedov danej bunky pomocou imperatívneho foreach-u. Potom nám však vypršal čas a ďalej sme sa nedostali. Kvôli tomu, že sme nemohli používať myš to išlo veľmi pomaly.
Z tohoto kola si všetci odniesli to, že sa musia naučiť používať klávesové skratky.
Do 6. kola sme išli s tým, že sme chceli byť s Kubom ešte raz spolu. Mali sme si vybrať 4 akékoľvek obmedzenia. Tak sme si vybrali mute TDD PingPong a maximálne 4 riadky na funkciu. Išli sme do toho ambiciózne a chceli sme toho čo najviac stihnúť. Zase raz sme však bojovali s tým, že jeden chcel ísť jedným smerom a druhý iným a moc sme to nevedeli spojiť dokopy. Úprimne, už sme toho mali asi aj dosť. Po šiesty krát robiť to isté už nebola taká sranda ako prvé kolá.
Človek si pri tom pripomenie, aké možnosti ponúka programovanie a že to nie je vôbec lineárne. V každom kole sme vytvárali iné riešenie, ktoré robilo to isté ako to predchádzajúce ale predsa len trochu inak. Keby hru programujem doma bez obmedzení, tak mám triedu pre každé pravidlo. Ako sa však ukázalo, tak sa to dá aj oveľa jednoduchšie. Jedným if-om, alebo ternárnym operátorom. Tiež som si nemyslel, že by som sa vedel zaobísť bez if-ov a for-ov. Ale aj to sa dá, pomocou imperatívnych prístupov. Človek si to ale za normálnych okolností nevyskúša, pretože na to nie je čas. Toto bol čas práve na to a my sme to podľa mňa využili, ale nie na 100%.
Tiež som čakal, že to bude väčšia zábava. Ku koncu to bolo už celkom monotónne a už nás to až tak nebavilo. Možno to bola ale aj naša chyba, že sme neboli dostatočne kreatívni a stále sme sa snažili čo najviac toho urobiť. Myslel som si, že obmedzenia nás dotlačia k iným riešeniam, no keď sa človek úplne nesústredí na skúšanie nových vecí, tak to aj napriek obmedzeniam môže robiť stále rovnako.
Každopádne to bola zaujímava skúsenosť a určite odporúčam každému si to aspoň raz vyskúšať. Či už si takýto event zorganizuješ s kamarátmi, v robote, alebo sa pripojíš k inému eventu, určite sa to aspoň raz oplatí. Ja by som to šiel vyskúšať ešte raz, ale Kubo tvrdí, že on by si to zopakoval jedine s kamarátmi.
Na záver by som ešte dodal, že event bol podľa mňa super zorganizovaný. Všetko prebehlo hladko, mali sme zabezpečené občerstvenie a aj obed. Prezentácia bola naozaj pekne spravená a k veci. Dúfam, že CN Group bude v coderetreate pokračovať a bude šíriť tento koncept.