Podle zdrojáku poznáte je aneb desatero stylů zápisu programátora
Uměli byste si představit, jak by vypadalo, kdybychom zdroják přirovnali k literárnímu dílu? A mohli bychom ze zdrojáku vyčíst i něco o jeho autorovi, jeho vnitřních pocitech a duševním rozpoložení? Pojďme se ponořit do literárních artefaktů vytvářejících most mezi světem lidí a světem strojů. Pojďme se ponořit do jejich tajů a poodhalit temná zákoutí programátorovy duše.
1. Odborník
Literární styl: Jan Neruda - Povídky malostranské
Číst zdroják vyprodukovaný odborníkem je jako číst dobře napsanou povídku. Odborník vás nebude zatěžovat objemem a složitostí. Dostanete-li odborníkův zdroják do ruky, snadno se do něj začtete. Je krátký a svižný, zároveň plně funkční a efektivní. Poznáte na první dobrou, co má každá komponenta dělat a jak má program fungovat jako celek.
2. Začátečník
Literární styl: maturitní slohovka ala Cermat
Ze zdrojáku začátečníka poznáte, že se začátečník pohybuje v časoprostoru "tady a teď" a že mu prozatím chybí zkušenosti:
- Když jeho zdroják čte někdo jiný.
- Když čte svůj vlastní zdroják po deseti letech. Což je stejné, jako byste četli zdroják někoho jiného. Už si nepamatujete, co a jak jste naprogramovali.
Začátečník se při programování soustředí především na to, aby program fungoval. Jeho zdroják bude především funkční a možná i efektivní. Čitelnost a strukturovanost však může pokulhávat. Názvy proměnných se zřejmě staly inspirací pro moderní progresivně levicovou terminologii typu "rodič 1" a "rodič 2." Občas dojde i ke splynutí uživatelského rozhraní a funkční logiky, čímž vznikne něco mezi kočkopsem a kvadraturou kruhu.
Každý jsme nějak začínali. Nechme proto začátečníka uzrát, aby se z něj mohl stát odborník.
3. Nerd
Literární styl: Ordinace v růžové zahradě 2
Na první pohled by se zdálo, že nerdi budou úzce zaměření odborníci. Detailnějším zkoumáním zjistíte, že se jedná především o určitou subkulturu. Subkulturu, která striktně dodržuje dané konvence, aby byla nekonvenční. O tom však někdy jindy.
Nerda neskutečně přitahuje, ba přímo rajcuje, když jsou věci složité. Pokud jsou věci jednoduché nebo snad dokonce triviální, nerd si je složitými udělá. O svém řešení pak prohlásí, že "je to" návrhový vzor, který dostane dokonce vznešené jméno. Třeba
- Hierarchical
- Observable
- Virtual
- Native
- Object
Výsledkem nerdova snažení je zdroják, který má oproti běžnému zdrojáku asi desetinásobný objem. Má-li nerd své řešení prezentovat, hemží se jeho řeč výrazy typu "je to" moderní, "je to" budoucnost, "je to" (dosaďte cokoli vznešeného). Zeptáte-li se nerda, jaké že přinese jeho vícepráce benefity, jeho odpověď bude všeříkající: "eee ... eee ... eee ..."
Také vám připadá, jako by moderní informatika spočívala v tom, že na čím dál rychlejším hardware běží čím dál pomalejší software? Cherchez la merde. Pardón, cherchez la nerd.
4. Génius
Literární styl: Filippo Tommaso Marinetti - Zang Tumb Tumb
Vyždímal na maximum možnosti, které mu mohou poskytnout šablony v C++, čímž se mu podařilo zredukovat zdroják z 1 000 řádků na 100. Úžasné.
Do doby, než géniův zdroják musel převzít kolega a najít v něm memory leak. Těžké.
5. Machr
Literární styl: črta na sáčku od svačiny
Velmi rád vedl vznešené technické řeči, jak to či ono budoucnost. Šéf mu zobal z ruky. Kolegové uznale pokyvovali hlavami. Já na něj žárlil.
Jednou mi šéf zavolal: "prosím tě, Jirko, běž mu pomoct, on už se s tím patlá několik týdnů a nehne s tím."
Kouknu na to. Zdroják bez ladu a skladu, žádná struktura, žádná logika, žádná funkcionalita. Na můj tázavý pohled odpověděl machr ukňouraným hláskem: "víš, já se na tom teprve učím."
6. Prase
Literární styl: (Ať hledám, jak hledám, představitele vogonské poezie se mi nepodařilo najít.)
Něco jako vývojové a produkční prostředí bylo pod jeho rozlišovací schopnost. Všechno mastil do jednoho. Která verze se má zrovna spustit, to rozlišoval složitou strukturou IF.
Stejně tak když potřeboval novou položku do databáze, lípnul do tabulky nový sloupec. Výsledkem byla tabulka o sto dvaceti sedmi sloupcích.
A také si evidentně nepotykal s něčím, jako je struktura programu.
Když jsem po kolegovi projekt přebíral a chtěl jsem udělat očistu od mrtvého zdrojáku a mrtvých databázových položek, vězte, že jsem záviděl práci bájnému Heraklovi. Vyčistit pověstný Augiášův chlív byla oproti tomuhle zprasku procházka růžovou zahradou.
Tímto se omlouvám všem prasatům ...
7. Programoval v časovém presu
Literární styl: Mein Kampf
Tohle nechcete. Produkťák systematicky ignoruje dotazy programátora. Projekťák má vývojové úkoly zredukované pouze na "effort estimation" a "status update." Zdá se, jako by pojmy "big picture" a "cíl" byly pro projektáka sprostá slova. Pak se přiblíží termín dokončení. Produkťák zjišťuje, že věci nejsou úplně podle jeho představ a popadá ho emoční únos. Hysterák. Co má chudák programátor dělat.
A chudák programátor, který měl v takovém zdrojáku pokračovat. Ono sice všechno fungovalo a fungovalo to dobře. Potíž však byl na takovém zdrojáku vystavět novou funcionalitu. Kupa závislostí rozházená všude možně, jako když exkrement narazí do větráku na stropě. Původní časový odhad patnáct minut včetně záchodové pauzy se zvrtnul na dva týdny intenzivních přesčasů.
8. Měl to na salámu
Literární styl: diplomka z plzeňských práv
Potřeboval jenom opravit chybu a zbavit se protivného tasku. Bylo mu jedno jak, hlavně že to bude fungovat. Tak prostě opravu lípnul na první vhodné místo ve zdrojáku a hodil to za hlavu. Že se k tomu hodil i kousek zdrojáku odvedle? No problemo, copypaste to vyřeší. Funguje to, tak jaképak copak.
Zdroják úspěšně bobtnal.
9. Zdroják na draka
Literární styl: dveře kabinky veřejného WC
Pokud by mě dotyčný kolega požádal, abych mu na linkáči endorsoval nějaký skill, endorsnul bych mu "lezení do zadku." Vskutku, kolega naprosto neomylně poznal, do kterého zadku má vlézt, aby mu z toho kápnul maximální užitek. To jenom tak pro zajímavost.
Psal se rok 2002. Nerdí subkultura prožívala teprve stádium embrya, možná i zygoty, a už tenkrát vykazovala jeden ze svých klíčových znaků: technologie coby fetiš.
Fetišem té doby bylo objektové programování, respektive jeho vlastnost zvaná "dědičnost." Takový OO-nerd byl schopen objekty cpát i do vzorových úkolů z různých školení, kde šlo především o to sfouknout úkol třemi řádky kódu a odporoučet se za účelem požírání baget. Že to mělo řádků třicet a čitelnost zdrojáku pokulhávala? Ale vždyť "je to" hezky naobjektované.
OO-nerd zadkolezec vymyslel nádhernou objektovou strukturu, které dominoval prapředek všech objektů zvaný "Adam." Fakt že nekecám, skutečně se základní třída jmenovala "Adam." Od "Adama" byly odvozeny objektové třídy "ZobrazitelnýAdam" a "SpustitelnýAdam," aby se vzápětí mohly spojit a vytvořit třídu "ZobrazitelnýSpustitelnýAdam." Pak přišel kolega za mnou, že mu kompilátor hlásí nějaké potíže.
Poučení: pokud objektová struktura vypadá jako dráček na dveřích veřejného WC, bude výsledek nejspíš na draka.
10. Nerd interviewer
Literární styl: Pes jitrničku sežral
Jako perličku na závěr ukážu zdroják, který jsem dostal k analýze coby test u pracovního pohovoru. Tak schválně, za jak dlouho poznáte, co prográmek dělá?
public class Example {
private void process(String in, int i) {
if(i != in.length() - 1) {
process(in, i + 1);
}
System.out.print(in.charAt(i));
}
public static void main(String[] args) {
Example e = new Example();
e.process("This is test", 0);
}
}
Nebudu daleko od pravdy, když prohlásím, že i odborníkovi bude trvat delší dobu, než pozná, že prográmek má napsat text obráceně. Nerd totiž při kódění použil rekurzi. Tedy funkci, která volá sebe samotnou, jen s jinými parametry. Když jsem prohlásil, že by stačila úplně jednoduchá smyčka a výsledek by byl jednodušší, čitelnější i efektivnější, objevily se v nerdových očích otazníky.
Dalším zkoumáním jsem zjistil, že program obsahuje skrytou chybu. Pokud se funkce volá s nesprávnými parametry, vzniklou nekonečnou smyčku zastaví až pád programu poté, co program spotřebuje celou paměť. Odhalení chyby nesl nerd velmi nelibě.
Nakonec jsem se neubránil poznámce, že kdyby mi programátor odevzdal takový kód do produkce, urazil bych mu pazoury. Čímž jsem definitivně urazil nerdovu citlivou dušičku.
Hádejte, jak se jmenovala pozice, které se pohovor týkal. Správně, projektový manažer.
Post scriptum
Při přípravě materiálů jsem zcela náhodou narazil na výraz mouche à merde, což by měla být moucha masařka. Co myslíte, jak by vypadala mouche à nerd? Snad se o vás při čtení nepokusila příhoda faire caca dans sa culotte. To by byla pěkná emmerde. Přirozené jazyky mají svůj půvab.