Co to je Code Retreat? Jaký byl letošní ročník pořádaný v Praze? Co od toho čekat a proč se této akce vlastně účastnit? Pokusím se trochu shrnout svoje dojmy a hlavně si udělat poznámky pro sebe pro případ, že dokážeme nadchnout dostatečné množství programátorů u nás na jihu a uspořádat Code Retreat příští rok v Českých Budějovicích.

 

Co to je Code Retreat?

Code Retreat se koná pravidelně jednou ročně po celém světě a jeho cílem je vytrhnout programátory z denní rutiny a tlaku na rychlé doručování výsledků a umožnit jim soustředit se na procvičování jejich schopností.

Proč je vůbec potřeba cvičit? Vždyť programuju každej den!

Třeba houslista cvičí na housle každej den a jednou za měsíc jde předvést na koncert, že je fakt dobrej. My, programátoři, máme naše malý koncerty každej pracovní den, ale vlastně vůbec na ty naše housličky netrénujeme. A protože ne každej je geniální programátor hned od narození, je fajn občas trochu potrénovat a posunout se kousek dopředu.

 

Jak to probíhá?

Den je rozdělenej do zhruba hodinových sessions, během kterých se řeší pořád to samé zadání – Game of Life. Stručně, máte nekonečnou dvourozměrnou mřížku – svět, v každém bodě sedí buňka, která je ve stavu živá / mrtvá. Svět se pravidelně překresluje a mění se stavy buněk podle toho, v jakém stavu jsou sousední buňky.

Programuje se v páru a jede se podle TDD. Po každé session probíhá retrospektiva, mírná úprava zadání a hlavně – výměna partnerů. Cílem CR je poznat co nejvíc možných pohledů na věc a tohle tomu dost pomáhá. Když je dost lidí, je ideální programovat s někým, koho vůbec neznáte. (joke po první session: “kolik lidí zná jméno svého partnera?” – polovina rukou dole :-D).

Během session není cílem úlohu dokončit. Obrovský rozdíl od běžného života a mě osobně trvalo celou první session zbavit se nepříjemného pocitu, že nestíhám.

Každá session začíná od nuly, to znamená, že na konci každé session svůj kód smažete. Proč? Protože ho nepotřebujete :-).

Vložka – víc pohledů na TDD

  • První napíše failující test, předá klávesnici druhému. Ten napíše implementaci a další test a předá klávesnici zpět prvnímu. Opakujte do vypršení času / splnění zadání / času oběda :-)
  • První píše pouze testy a druhý pouze implementaci

K implementaci – je potřeba napsat opravdu co nejmenší možné řešení, které failující test dostane do stavu, kdy bude procházet. Na to je potřeba taky trochu jinej mindset, člověk nesmí myslet ani trochu dopředu (zkuste si to! je to fakt těžký!). Příklad:

// původní - test neprochází
function willBeAlive($currentState, $amountOfNeighboursAlive) {
return false;
}

// "naimplementovaná" - test prochází
function willBeAlive($currentState, $amountOfNeighboursAlive) {
return true;
}

Všimněte si, že vůbec neřeším proměnné. Prostě v danou chvíli to není vůbec potřeba.

Důležité také je, že pokud píšete failující test, měl by test opravdu selhat na tom, čem chcete, tzn. na nějakém konkrétním assertu. Ne na tom, že voláte metodu, která vůbec neexistuje. To znamená, že kromě testu, ve kterém voláte novou metodu, byste měli napsat i její prázdnou implementaci tak, aby to nemusel řešit váš partner.

Jak vypadaly jednotlivé session 15. 11. 2014 v Praze?

1. – cílem bylo seznámit se pořádně se zadáním Game of Life, klidně si to nakreslit na papír, možná i trochu programovat. Žádná další omezení nejsou. Vyzkoušel jsem si C#.

2. – vlastně nevím, co bylo cílem nebo jestli byla nějaká omezení. Dost jsme se s kolegou Michalem zasekli na tom, že se hodně rozcházeli naše představy o tom, jak budeme problém řešit. Sedli jsme si a rovnou začli programovat aniž bychom si třeba nakreslili na papír, jak to bude vypadat. Taky důležitá zkušenost. Java.

3. – cílem bylo eliminovat ify a foreache. Martin mi ukázal TDD tak, jak to má být a zajímavou konstrukci v Ruby, jak se obejít bez ifů (pět minut googlování a pak jednoduchá otázka – chápeš? ne :-D).

4. – silent disco. S parťákem se akorát představíte a potom už nesmíte mluvit. Komunikujete pouze skrze kód. S člověkem, se kterým se vidíte poprvé v životě. Pecka. Musím říct, že mě hodně překvapilo, že jsme si s Marianem dost rozuměli :-). Plus v půlce session přišla změna zadání. Php.

5. – point of no return. Nesmíte používat returny ani primitivní typy jako int atd. S tímhle jsme se s Martinem moc nepoprali. Ale nevadí, aspoň vím, na co se podívat trochu víc. Plus v půlce změna parťáka, který přijde k něčemu rozdělanému. Opět php.

6. – zkus si znova to, co tě nejvíc bavilo. Tady už jsem chyběl, protože jsem chvátal na TEDxPrague Youth.

 

Závěry

Code Retreat je super akce. Během jednoho dne jsem měl možnost zjistit, jak by stejný problém řešilo víc než šest lidí, díky párovému programování jsem měl většinou instantní feedback na kód, který jsem psal, zkusil jsem si psát ve třech dalších jazycích, které nejsou mým denním chlebem. Za mě můžu rozhodně doporučit.

Velké díky patří organizátorům, kteří během sessions chodili kolem nás a často pokládali správné otázky, které nás dál posouvali (např. potřebujete artificial tests na vytvoření instance objektu? k čemu to je? není lepší začít nějakým scénářem, který zákazníkovi přináší nějakou business value?).

Zajímavej prostor je taky Pracovna, kde se akce konala. Pokud přes den pracujete doma v pyžamu a nemáte to daleko na Žižkov, doporučuju vyzkoušet.

A co vy? Přijdete si Code Retreat zkusit příští rok? Pokud to nemůžete vydržet, zkuste se mrknout na akce Coding DOJO, což by podle všeho měly být takové menší code retreaty pořádané každé dva týdny.

 

Poslední tři poznámky pod čarou

Něco vám tu chybí nebo je špatně? Budu rád, když to mě a ostatním čtenářům napíšete v komentářích.

Rozložení klávesnice: zjistil jsem, že spousta lidí ještě nezná super programátorský layout klávesnice od Davida Grudla, ve kterém nemusíte přepínat mezi českou a anglickou klávesnicí a máte najednou k dispozici diakritiku i programátorské znaky. Mrkněte na něj a pokud chcete nějaký výchozí bod, jak to zprovoznit pod linuxem, zkuste si základ, který jsem si zprovoznil a dal na github.

Některé jména parťáků ze sessions nemusí odpovídat realitě, asi jsem si je nezapamtoval všechny správně :-).