neděle 9. prosince 2012

1. Vsetínský Code Retreat

... aneb Trávit celou sobotu psaním kódu, který každou hodinu stejně zahodíte? Jste blázni! :)

Podobné reakce manželek, přítelkyň a okolí zaznamenali účastníci 1. Vsetínského Code Retreatu, když se snažili doma vysvětlit proč jedou na celou sobotu někam na Vsetín. Popsat základní koncept celosvětově populární akce Code Retreat není totiž úplně jednoduché. Ani programátorům, natož "nevyvolenému" zbytku populace. Sami účastníci možná také úplně netušili, do čeho se to vlastně pouštějí. Přál bych vám však vidět nadšení, které v průběhu akce narůstalo rychlým tempem. Na konci již nikdo nepochyboval, že investovat celou sobotu do akce tohoto typu, byl výborný nápad.

Vsetínský Code Retreat byl jednou ze stovky akcí, které proběhly během soboty 8.12.2012 po celém světě v rámci Global Day of Code Retreat. K již tradiční pražské akci se letos premiérově přidal právě Vsetín. A jaké to u nás vlastně bylo?

Socializing

Úspěšnost akcí tohoto typu je velmi závislá na přístupu jednotlivých účastníků. Na jejich ochotě experimentovat, uvolnit se, spřátelit se s ostatními a podporovat pozitivní atmosféru. Za proaktivní přístup jsou po právu odměněni novými zážitky, zkušenostmi a změnou paradigmat programátorské profese. Koncept CR je postaven tak, aby maximálně podporoval sociální rozměr akce. Úvodní seznámení, střídání partnerů během párovém programování, oběd a afterparty, přispívají k tomu, že mezi lidmi vznikají trvalejší přátelství. Je to i jeden z důvodů, proč lidé jezdí na své třetí a čtvrté Code Retreaty, proč vstávají ve tři hodiny ráno a jedou přes celou republiku v -10°C.

Na Vsetín přijeli kluci z Brna, Uherského Brodu, Frenštátu a dokonce i jeden Pražák! Viděl bych to jako začátek pěkné tradice, kdy z hlavního města budou jezdit programátoři k nám na vesnici. ;) Pro všechny kódující účastníky to byla premiérová účast na CR. Pro mě zase premiéra v roli facilitátora.

Languages

Akce není omezena na konkrétní programovací jazyk ani platformu. Tato pestrost je dokonce silnou stránkou konceptu CR. Programátoři se díky párování seznámí s jazyky, ke kterým se do té doby báli už jenom přiblížit. Ztratí zbytečné zábrany a předsudky. A naopak získají chuť vyzkoušet nový jazyk a tím si rozšířit znalosti a technologický přehled. Pozorovat kolegu, který hbitě píše kód v "exotickém" jazyce, je velmi inspirující.

Na Vsetíně se kódovalo v jazycích C#, Java, JavaScript, Python, PHP, CoffeeScript, F#. Ohlášený experiment napsat část Game Of Life pomocí uložených databázových procedur MS SQL Serveru se nakonec nekonal. :)

Sessions

Kódovacích bloků je celkem šest (tři dopoledne, tři odpoledne), trvají 45 minut, vždy se začíná od prázdného projektu, řeší se Game of Life a každý blok je specifický výběrem aktivit a rozvíjí jiný druh dovedností. Pro vsetínský CR jsem aktivity namíchal takto:

Session #1

Game of Life Basics
Navigator - Driver

První blok byl určen k seznámení s pravidly Game of Life. Programátoři si zvykali na párové programování, kdy jeden z dvojice psal kód (driver) a druhý spolupracoval na analýze a návrhu řešení a dělal průběžné review (navigator). Bezprostřední reakce při následné krátké retrospektivě byly velmi pozitivní. Partneři vzájemně konfrontovali své styly nahlížení na problém a návrhy řešení. Někteří si poprvé přičichli k neznámému jazyku. Tak jako později pokaždé, na konci bloku se veškerý kód zahodil. Mám však tajné informace, že někteří si kód uložili do archivu, aby se s ním mohli pochlubit doma svým přítelkyním. :)

Session #2

Simple Design
Baby Steps
English

Před druhým blokem byly účastníkům připomenuta 4 pravidla jednoduchého návrhu. Byli také seznámeni s konceptem testy řízeného návrhu, který byl ztěžejní po zbytek dne. Aktivita Baby Steps nutí psát testy a implementaci po nejmenších nutných krůčcích definovaných metodikou TDD.

Programový kód musel být kompletně anglicky, bez českých elementů.

Pro někoho byl požadavek na test-first přístup nový a nezvyklý. Častým problémem, který jsme pak rozebrali v následné retrospektivě, byly názvy testů. Objevovaly se názvy testovacích metod, ze kterých nebyl zřejmý účel testu. TDD metodika chápe psaní testů jako akt návrhu. Je tedy nutné si uvědomit, že dobrým názvem vše začíná. Každý test řeší obecně tři základní věci: 1. operaci, která se testuje, 2. kontext před provedením operace, 3. očekávaný výsledek (testovaný stav po operaci). Tyto informace by měly být zakódovány do dobrého názvu testu. V další části dne se ukázalo, že vymyslet správný název testu je poměrně náročná záležitost.

Session #3

Paper Only (10 min)
No Mouse (No Touchpad)

Programátoři byli přinuceni prvních 10 minut pracovat pouze s papírem. Promýšlení návrhu bez hurá stylu okamžitého kódování, se stalo velmi oblíbeným. Papír byl tak nezbytnou pomůckou po zbytek dne.

Pro někoho se stala extrémně náročnou aktivita No Mouse. Časté sahání na myš je pro programátora kontraproduktivní. Většina IDE má velmi dobrou podporu pro ovládání z klávesnice. Mnoho programátorů však neumí dostatečně efektivně této podpory využívat. Jeden z výrazných přínosů párového programování je právě v tom, že se učíte od drivera jeho efektivní postupy v ovládání z klávesnice. Objevujete nové možnosti a finty, které zařazujete do vašeho profesního portfolia. Na konci bloku jsme diskutovali o výhodách znalosti code snippetů, šablon, klávesových zkratek, různých doplňků do IDE a nástrojů obecně. Naše produktivita roste v závislosti na tom, jak dobře se naučíme ovládat nástroje, které ke své práci používáme.

Session #4

Ping Pong
Mute

Během prvního odpoledního bloku se hrál pingpong s vypnutým zvukem. Jeden z dvojice psal failující test, druhý musel dopsat procházející implementaci. A protože se nesmělo mluvit, jedinou komunikací byly prostředky kódu a především názvy metod, proměnných a pojmenovaných konstant. Programátoři si uvědomili důležitost expresivity kódu. A nakonec jsme se shodli, že tento blok byl jeden z nejzajímavějších v rámci celé akce.

Session #5

Only 4 Lines per Method
No Conditional Statements
No Naked Primitives

Začalo přituhovat a ukázalo se, že tento blok byl hodně náročný. Psát krátké metody není zas takový problém. Je nutné si pouze uvědomit, že krátké bloky kódu jsou mnohem čitelnější a udržovatelnější. S využitím refaktorizačních technik je navíc strukturování kódu efektivní.

Problémem ale bylo omezení na nepoužívání rozhodovacích příkazů. Vynechat switch nás nutí více přemýšlet o polymorfismu. Nepoužívat if je však hardcore technika. V této aktivitě nebyly dvojice příliš úspěšné. Každý však ocenil, že No Ifs vás přinutí se na četnost rozhodovacích bloků v kódu podívat jiným pohledem. Pro zájemce přikládám link na GitHub s řešením GoF v Javě bez ifů.

Nepoužívání holých primitiv (např. int, bool) v rozhraní tříd bylo také inspirativní. Použití výčtového typu namísto boolean hodnot zlepšuje čitelnost kódu. Obecně byla tato aktivita zaměřena na vhodnější používání abstrakcí namísto zveřejňování implementačních detailů.

Session #6

Changing Requirements
Configurable Rules
Cell Age

Poslední blok byl již více odpočinkový. Účastníci se párovali tak, aby si ještě vyzkoušeli neznámé jazyky. Dvojice zkoušely implementaci dalších pravidel. Přibylo pamatování věku živé buňky (počet iterací, které přežila) a vznikaly experimenty jako "superdůchodce" (pokud buňka přežila alespoň tři iterace, byla nezničitelná).

Closing Circle

Závěrečná retrospektiva byla pro mě osobně nejinspirativnější částí celé akce. Každý z účastníků měl za úkol shrnout, co se během akce naučil, co ho překvapilo a co využije ve své praxi. Bylo velmi zajímavé poslouchat, co si kdo z akce odnášel, co jej inspirovalo a kde objevil své slabší stránky. Atmosféra akce a složení lidí (kamarádů) přispělo k tomu, že výpovědi byly velice upřímné a tudíž zajímavé. Bylo více než zřejmé, že se všem akce líbila. Věřím, že se s většinou lidí setkám i příště a že budou myšlenky Code Retreat sami dále propagovat.

Acknowledgement

Rád bych na tomto místě poděkoval těm, kteří mně pomohli s organizací akce:

  • Firmě Magion system, a.s., která akci podpořila finančně.
  • Alešovi Roubíčkovi za nakopnutí k uspořádání Code Retreatu, za pomoc s propagací a za poskytnutí organizačního know-how.
  • Panu Romanu Mlýnkovi z Agentury pro ekonomický rozvoj Vsetínska, o. p. s., díky jehož ochotě a pomoci s přípravou vše proběhlo technicky hladce.
  • Links

    5 komentářů:

    1. Konečně bych se na nějaký Code Retreat měl přihlásit.

      OdpovědětVymazat
    2. Šupa akce!
      Zbytek fotek: http://www.facebook.com/media/set/?set=a.10200245403004818.2199766.1445112118&type=1&l=bf3abc0027

      OdpovědětVymazat
    3. Ahoj Roberte, ještě jednou díky za super akci!
      Přikládám odkaz na zajímavou implementaci, která vypíše sebesama (a to přesto, že se nenese moc v duchu TDD :-)
      http://igoro.com/archive/self-printing-game-of-life-in-c/

      OdpovědětVymazat
    4. Jů, i Vsetín! To je podstatně blíž než Praha :) Nebo že bych si zorganizoval Ostravský? :)

      OdpovědětVymazat