Jan Urban15.12.2016Zpět

Pište dlouhodobě udržitelný kód

Na konci září se v Paláci Lucerna v Praze uskutečnila konference WebExpo 2016. Jednalo se tradičně o dva dny věnované technologiím, vývoji, designu, a také byznysu okolo webových aplikací. Mimo úžasných přednášek si účastnící mohli vyzkoušet různé nové technologie jako například VR, či ovládání robotů. A samozřejmě nechyběl ani networking, nedílná součást každé konference. I když se přednášky  odehrávaly paralelně na třech místech, díky tématickému rozdělení  bylo možné  svou účast dobře naplánovat.

Byly to opravdu inspirující dva dny. Rachel Andrew ukázala jak používat layoutovací techniky jako Flexbox a CSS Grid Layout, a jak se vyrovnat s jejich nedostatečnou podporou u prohlížečů. Adrian Zumbrunnen předvedl jak animace mohou nerušeně vyprávět příběh a podporovat lidské prostorové vnímaní pro lepší navigaci na našich webech a aplikacích. Mark Boulton vysvětlil, že design je primárně o lidech, se kterými spolupracujeme, a že máme více času trávit pilováním návrhů a mluvením a nehrnout se brzy do samotné tvorby. Yovka Pencheva připomněla výhody přesunutí velké části testovacího procesu na produkci, jelikož v laboratorních podmínkách nelze efektivně odhalit vše. Všechny tyto úžasné přednášky jsou k dispozici ve formě záznamů a prezentací. Velmi doporučuji jejich shlédnutí.

Pro mne byly nejvíce inspirující  dvě přednášky zabývající se tvorbou z dlouhodobého hlediska.

Extremely defensive

Marco Pivetta, na internetu známý pod přezdívkou Ocramius, si pro téma své přednášky vybral Extremely defensive PHP. Defenzivní PHP je založeno na podobných principech jako defenzivní řízení. I sebelepší řidič udělá lépe, když bude opatrný. Nikdo z nás není stejným člověkem jako byl před půl rokem, nebo jakým bude za pět let.

Marco doporučuje používat principy jako Poka Yoke, neboli vyhnout se chybám. Příkladem špatného Poka Yoke je USB, které existuje ve čtyřrozměrném prostoru, ale zapojit jej správně  napoprvé, a často i na podruhé, téměř nemožné. Naopak jako dobré Poka Yoke uvádí konektor RJ45, který lze zapojit pouze jedním způsobem. Poukazuje také na mýtus o znovupoužitelnosti kódu. Konkrétní implementace abstrakcí nejsou dokonalé jako abstrakce samotné a statisticky vzato budou obsahovat chyby. Podíváme-li se na svůj dokonalý kód za pár let, sami uvidíme, že k dokonalosti má daleko. Znovupoužitelné jsou abstrakce jako interface a protokol, jednoduše myšlenky interakce a logiky. Protože implementace vždy obsahuje chyby, doporučuje při psaní neřešit veškeré problémy lidstva a soustředit se na náš daný problém.


Takhle to řeší začátečníci.
Zdroj: slide z prezentace http://www.slideshare.net/MarkNiebergall/data-types-in-php-63960131

Konkrétněji  důrazně doporučuje tvořit všechny možné stavy neměnné. Vyvarovat se používání setterů, vše potřebné přesunout do konstruktoru. Nepoužívat neinicializované proměnné, protože cokoliv, co může narušit neměnnost stavu, dříve či později způsobí problémy. Vyhnout se volitelným závislostem, tím se vyvarujeme zbytečným podmínkám a snížíme komplexitu kódu. Pokud očekáváme závislost, očekávejme ji vždy přímo v konstruktoru, a pokud ji v konkrétním případě nevyžadujeme, vložme falešnou závislost, která nic nedělá.

Další série rad se zabývá  použitím vytvořených objektů:

  • Redukovat počet public metod na absolutní minimum, pokud je metoda zbytečná, nebo má více využití a(?) neměla by vůbec existovat.

  • Odstranit veškeré logické přepínače v parametrech a vytvořit separátní metody.

  • Ve výchozím stavu  by měly být všechny atributy privátní a třídy finální. Omezením dědičnosti se vyhneme různým nešvarům jako masivní řetězení a porušování zapouzdření. Výhody a návod jak postupovat ukazuje Marco na svém blogu. Pokud chceme zjistit, jestli je opravdu nutné dědit třídu, nejprve ji převeďme na interface a ten poděďme. Pokud jsme žádnou novou logiku nepřidali, není důvod, aby se z naší třídy dědilo.

Marco nám ukázal jak můžeme sami snížit riziko problémů a poskytnout dalším programátorům čitelný a použitelný kód. Sám říká, že použití výše zmíněných principů je důležité pro kohokoliv, jehož kód bude využíván někým jiným, obzvláště důležité pro všechny, kteří mají veřejné repozitáře.

How to Successfully Grow a Code Review Culture

Řekli jsme si jak můžeme zlepšit sami sebe, ale co naše kolegy? S tím nám pomůže Nina Zakharenko s její přednáškou How to Successfully Grow a Code Review Culture. Revize kódu je jeden z nejefektivnějších způsobů jak zlepšit kvalitu kódu nejen v projektu, ale i v celé firmě. Pomáhá najít nedostatky, sdílet znalosti, zanechávat dohledatelnou stopu a výrazně snižovat bus faktor.

Způsob použití revize není jednotný pro všechny. Důležité faktory jsou velikost týmu, typ produktu a tolerance chyb. Není však žádný důvod proč ji nedělat.

Jak ale vytvořit zdravou kulturu je ta největší otázka. Nina doporučuje následující kroky a poučky.

  • Revize je univerzální, každý kód by měl podlehnout revizi bez ohledu na čas a člověka, který jej psal.

  • Revize by měla probíhat našimi přímými kolegy, je k ničemu když provádí revizi někdo, koho jsme v životě neviděli.

  • Používat code style.

  • Nevinit človeka z chyb, děláme je každý.

Pokud provádíme revizi, měli bychom mít empatii, být objektivní a neukazovat prstem. Dávat jasnou zpětnou vazbu, nebýt perfekcionisti a chválit za dobrý kód. Měli bychom revidovat okolo 200 až 400 řádků kódu v rozmezí 60 až 90 minut, poté naše pozornost výrazně klesá. Samotná revize by neměla probíhat déle než dva dny po předložení, pak účinnost poučení, kterou nám revize dává, není tak efektivní.

Rozfázování reviews v development flow.
Zdroj: slide z prezentace https://www.webexpo.cz/praha2017/prednaska/how-to-successfully-grow-a-code-review-culture/

Pokud předkládáme kód k revizi, měli bychom především brát ohled na čitelnost. Kód by měl být jako dobrý vtip, nepotřebovat vysvětlení. Měli bychom bránit svůj kód, pokud nesouhlasíme s hodnocením, ale také přiznat si, že děláme chyby.

První revize bývají pro juniory těžké až děsivé, proto doporučuje aby bylo prováděno v páru se zkušenějším kolegou.

Jakmile pozitivní review kultura poroste vyhnete se zbytečným nepříjemnostem.

Závěrem

Pokud se budeme držet principů, které nám Marco a Nina ukázali, budeme moci tvořit kvalitnější kód, bez zbytečných chyb a nepochopených použití, a to v přátelštějším a efektivnějším kolektivu, který nás bude neustále posouvat kupředu. To je velmi přínosné pro naši pracovní pohodu, i naše výsledky. U obou zmíněných výrazně doporučuji podívat se na jejich přednášky. Berte tento text jako ochutnávku, ne jako plné nahrazení. Děkuji, že jste se dočetli až sem.

Kompletní videozáznamy včetně slidů si můžete prohlédnout zde.

Jan Urban
urban@kurzor.net
Senior PHP developer