pondělí 21. března 2005

Rozjímání nad úsporou a psaním kódu

Kdysi dávno jsem četl, že programátor je od přírody tvor líný. Když občas někde zaslechnu a nebo si přečtu, co by bylo dobré mít v Jave, protože to má ten a ten jazyk a nebo protože to zjednoduší kód ze třech řádek na jednu, vyvolává to ve mě mírné chvění. Stejně tak citlivý jsem na jakékoliv podněty týkající se rozšíření sémantiky vlastního jazyku, ale to je na jinou diskusi.

Opravdu netuším jestli si všichni ti novátoři uvědomují, jaká je cena úspory kódu? Odpovím si sám, asi těžko. Největší problém vidím v čitelnosti lépe řečeno srozumitelnosti kódu a vždycky si vzpomenu na zlaté pravidlo, že kód se jednou dvakrát píše, ale osmkrát čte. Proto například nesdílím orgastické chrochtání nad anonymní vnitřní třídou implementovanou na jednom řádku. Není vůbec sranda takový kód po někom luštit nebo nedej bože trasovat. Právě trasování je při jedno-dvou řádkových komprimacích problém.

Každý z nás má nějaký rukopis kódu, možná ještě jinak, zápis kódu každého z nás se mění postupem času a zkušenostmi, samozřejmě v závislosti na daném programovacím jazyku. Nováčci v týmu mají většinou kód odpovídající jejich zkušenostem, nesprávné odsazení, dlouhé řádky, otevírací závorky na novém řádku apod. Kapitolou samou pro sebe jsou emigranti z jiných jazyků, přeučit takového člověka, aby dodržoval konvence daného jazyku je jako s tím pověstným házením hrachu na zeď a nebo jako v pohádce o starém psovi a nových kouscích.

Možná se vám to zdá jako prkotina, ale konzistence těchto relativních drobností, tvoří minimální základ pro sdílení kódu mezi skupinou vývojářů. Některé projekty mají vlastní standardy pro psaní zdrojového kódu, což považuji za známku jisté profesionality. Každý kdo zkoušel merge, diff a nebo patch na "heterogenním" kódu mi dá jistě za pravdu. Pokud se to dobře podá a vývojáři pochopí, že společné konvence nejsou zavedeny pro jejich terorizování, je napůl vyhráno.

Vždycky když se řeč stočí na téma základní konvence psaní kódu, nedá mi to a připomenu, že existuje velice kvalitní dokument Java Code Conventions, který by si měl pročíst každý kdo chce v Jave programovat déle než jeden semestr na vysoké škole.

Na závěr bych se rád zmínil o mém postoji k nástrojům pro automatické formátování kódu. Ač se jedná o nástroje velice užitečné, nesdílím optimismus některých kolegů v přístupu, kdy se před commitem do CVS provede autoformát těmito nástroji. Zastávám názor, že kód by se měl psát z hlediska čitelnosti na první pokus. Uplatnění pro nástroje jako Jaloppy vidím v rovině zkultivování nekonvečně zapsaného kódu.