Toto je český překlad článku Programming Sucks
This is czech translation of Programming Sucks
Všichni z mých známých, kteří v práci zvedají cokoliv těžšího než je laptop více než dvakrát týdně, si časem najdou způsob, jak v rozhovoru se mnou zmínit něco ve smyslu: “Kámo, tvoje práce není těžká. Tenhle týden jsem odpracoval 4 700 hodin, když jsem šroubovákem kopal tunel pod Mordorem.”
A něco na tom je. Mordor není příjemné pracoviště a výkop tunelu je fyzicky mnohem namáhavější než mačkat klávesy, pokud tedy nejste mravenec. Ale můžeme pro účely textu předpokládat, že stres a šílenství nejsou dobré věci? Výborně. Vítejte ve světě programování.
Představte si první den v práci jako inženýr. Jste optimistický, plný skvělých nápadů a nejspíš jste právě dokončili vysokou školu a opustili svět čistého, nádherného designu, vzbuzujícího údiv svou účelností, hospodárností a mohutností. Nejdříve se seznámíte s Mary, vedoucí projektu stavby mostu v hustě zastavěné městské oblasti. Mary vás představí Fredovi, samozřejmě až potom, co projdete patnácti bezpečnostními prověrkami vynucenými Davem, protože Davovi někdo kdysi ukradl svetr, který nechal na stole, ale nikomu se nikdy nic podobného už nestalo. Fred se specializuje na práci se dřevem tak se přirozeně zeptáte, k čemu je v týmu, protože most má zajistit, aby se veškerá váha dopravní špičky bezpečně dostala přes desítky metrů hlubokou rokli. -“Neboj, Fred má na starosti chodníky.” -“Jaké chodníky?” -“No, Fred udělal moc hezkou studii lávky pro pěší, tak jí chceme k mostu přidat.” Samozřejmě chodníky budou muset být bez zábradlí, protože jejich použití brání přísná firemní politika, kterou vymyslel Phil, který není inženýr. Nikdo si není moc jistý, co Phil vlastně dělá, ale je to velice synergické a má to co dělat s vyšším managementem a s tím se nikdo z inženýrů nechce obtěžovat. A tak prostě Phila nechají dělat si co chce. Mezitím Sara objevila několik revolučních způsobů dláždění a zapracovala je všechny do návrhu, takže musíte různě ohýbat a přizpůsobovat zbytek stavby kolem nich, protože každý má jiné strukturální nároky.
Tom a Harry spolu pracují už hodně let, ale pořád se přou, jestli mají používat metrické, nebo imperiální jednotky. To se samozřejmě rozsoudí podle toho, kdo se k návrhu té které součásti dostal jako první. To působilo lidem, kteří potom měli fyzicky šroubovat věci k sobě, takovou migrénu, že to vzdali a jen k sobě rvali, stloukali a svařovali všechno, co jim přišlo pod ruku.
Ještě k tomu byl most původně navržený jako visutý, ale nikdo nevěděl, jak vlastně správně postavit visutý most, tak když se dostali do poloviny stavby, museli přidat nosné sloupy, aby se most nezhroutil. Nosná lana ale nemohli odstranit, protože pořád tak nějak drží pohromadě některé části a nikdo neví přesně které. Všichni jsou si ale docela jistí, že jsou důležité.
Když je tedy představování u konce, zeptají se vás, zda máte nějaké skvělé nápady a připomínky, které ale nemáte, protože jste strojní inženýr a nevíte nic o stavění mostů.
A odvážili byste se přejet přes ten most? Ne. Kdyby, a jen kdyby, nakonec nějakým zázrakem ten most byl dokončen, všechny zúčastněné by museli popravit. I přesto byly takovýmito postupy napsány veškeré programy, které jste kdy používali: elektronické bankovnictví, webové stránky i všudypřítomný software, který měl chránit citlivé informace na internetu, ale dost dobře nefungoval.
Každý programátor jednou za čas, když nikdo není doma, vypne světla, nalije si sklenici skotské, pustí si lehkou německou elektronickou hudbu a otevře si na počítači soubor. Každý programátor má svůj. Někdy je to něco, co napsal, někdy na něj narazil a věděl, že si ho musí pro sebe uložit. Začne si číst jednotlivé řádky, plakat nad jeho krásou. Najednou slzy radosti zhořknou, když si vzpomene na všechny ostatní soubory a nevyhnutelný kolaps všeho, co je na světě dobré a poctivé.
Ten soubor je dobrý zdrojový kód. Jména funkcí a proměnných jsou účelně a konzistentně pojmenované. Je stručný. Neděje se v něm nic, co by bylo vyloženě blbé. Nikdy nemusel žít v divočině ani se zodpovídat marketingovému oddělení. Dělá přesně jednu, běžnou, konkrétní věc a dělá jí dobře. Napsal ho jeden autor a nikdy ho nikdo jiný neupravoval. Číst ho je jako číst poezii, kterou napsal někdo, komu je přes třicet.
Každý programátor začíná psát takovouhle nádhernou sněhovou vločku. A pak se v pátek dozví, že do úterý musí napsat šest set dalších, takže si trochu pomůže, některé zkopíruje a pokouší se je různě poslepovat dohromady nebo o pomoc s některými poprosí kolegu, kterému se roztečou v ruce a pak se vločky všech programátorů splácají do jednoho podivně beztvarého útvaru. Nakonec na to všechno někdo přilepí obraz od Picassa, protože nikdo nechce vidět, jak se kočičí moč vsakuje do všech rozbitých sněhových vloček tajících na denním světle. Příští týden se přisype pár lopat sněhu, aby se Picasso nepřevrhl.
Existuje teorie, která říká, že se tomu všemu dá vyhnout, pokud píšete podle standardů. Jenže existuje víc “standardů” než věcí, na které se dá počítač využít a všechny ty standardy se různě vylepšují a podléhají preferencím lidí, kteří je vytváří, takže žádný větší soubor zdrojových kódů se nedostal do skutečného světa, aniž by dělal tucty identických úkonů tucty velmi rozlišných způsobů. První týdny jakékoliv práce jsou jen seznamování se s programem, dokonce i když znáte všechny programovací jazyky, každý framework a standard, který je v něm použitý, protože standardy jsou jednorožci.
Když jsem vyrůstal, měl jsem v pokoji přístěnek. Byl to zvláštně udělaný přístěnek. Ne na první pohled, ale když jste do něj vešli, abyste udělali to co jste v přístěnku normálně dělali, všimli jste si, že napravo je výklenek tvořící nenápadnou poličku. A když jste se podívali nad ní, všimli jste si nad zdí výklenku, odkud bylo vidět do prostoru pod stropem skrývajícího úplnou nicotu chráněnou před světlem z místnosti. Tento prostor jste okamžitě identifikovali jako denní útočiště všech příšer a bubáků, před kterými jste se každou noc bránili baterkou a plyšovými zvířaty.
Přesně takhle to je, když se učíte programovat. Sžijete se s nástroji, rozhlédnete se a vidíte další šikovné nástroje. A právě ty nástroje vám odkryjí tu bezednou hrůzu, která vždy byla hned vedle vaší postele.
Kupříkladu řekněme, že jste průměrný vývojář webu. Rozumíte si s tuctem programovacích jazyků, tunou užitečných knihoven, standardů, protokolů a kdoví čeho ještě. I tak se ale musíte učit nové tempem zhruba jeden za týden a přitom musíte pravidelně kontrolovat, jestli pro některou ze stovek zbývajících prvků není aktualizace, jestli se nerozbila, jestli to pořád ještě všechno dohromady funguje a taky jestli někdo už neopravil bug, který jste vytvořili při pokusu o něco, co vypadalo jako dobrý nápad, když jste byli opilí o nedávném víkendu. Všechno je aktuální, což je skvělé, a najednou se všechno rozbije.
„WTF?“ si říkáte, přičemž začínáte nahánět zdroj problému. A objevíte, že jednoho dne se nějaký idiot rozhodl, že protože jiný idiot vymyslel, že 1/0 by se mělo rovnat nekonečnu, může tak prostě zkracovat pojem nekonečno při „vylepšování“ jejich kódu. Potom nějaký ne-idiot správně řekl, že tohle je idiotické, na což měl přijít ten první idiot, jenže nepřišel.A ten ne-idiot se rozhodl, že bude hajzlík a jeho nový kompilátor to bude vyhodnocovat jako chybu při překladu. A potom se rozhodl, že nikomu neřekne, že to je chyba, protože je hajzlík, a najednou jsou všechny vaše sněhové vločky kočičí moč a ani nemůžete najít kočku.
Na všechny ty technologie jste expert, což je dobrá věc, protože najít problém vám zabralo jen šest hodin místo toho, že by vás za to vyhodili. To je jen další z takových malých poznatků, který si musíte zapamatovat a kterých jsou miliony, protože je tolik programů, bez kterých se neobejdete, které napsali výhradně idioti a hajzlíci.
A to je jen váš zvolený obor, který představuje jen tak maličký zlomek veškerého vědění celého pole informatiky, že by nebyl moc velký rozdíl, kdybyste se taky nenaučili nic. Žádný člověk žijící, či mrtvý neví, jak všechno ve vašem pět let starém MacBooku vlastně funguje. A proč vám tedy říkáme, abyste to vypnuli a zapnuli? Protože nemáme sebemenší tušení, co tomu vlastně je. Ve srovnání s tím je velice snadné vyvolat v počítačích kóma a nechat jejich zabudovaný tým doktorů se s tím vypořádat. Jediný důvod, proč jsou na tom počítače programátorů většinou lépe než počítače běžných smrtelníků je, že programátoři a podobní vědí, že počítače jsou schizofrenické malé děti s poruchou imunitního systému a nemlátíme je, když se špatně chovají.
Pamatujete na tu věc s bláznivými lidmi a špatným kódem? Internet je přesně to, až na to, že je to miliardkrát horší. Webové stránky jsou jen zveličené nákupní košíky s možná třemi dynamickými stránkami udržovanými týmy lidí pracujících nonstop, protože pravda je, že všechno se neustále rozbíjí. Každému a vždy. Zrovna v tuto chvíli, někdo, kdo pracuje ve Facebooku je bombardován desítkami tisíců chybových hlášek a zoufale se snaží najít jádro problému dřív, než svět upadne v chaos. V Googlu je tým lidí, který tři noci nespal. Někde je programátorka databází obklíčena prázdnými lahvemi od Mountain Dew, o níž si manžel myslí, že je mrtvá. A když tihle lidé přestanou, svět začne hořet. Většina lidí ani neví co sysadmin dělá, ale věřte mi, kdyby si všichni dali pauzu na oběd ve stejnou chvíli, nedošli by ani do lahůdek než by vám došly kulky při snaze ochránit vaše konzervy před bandou mutantů.
Internet nemůžete restartovat. Biliony dolarů závisí na vratké pavučince nepsaných dohod a kódu psaném stylem "pro teď dobrý" s popisky jako "TODO: OPRAVTE TO JE TO NEBEZPECNY HACK ALE NEVIM CO JE SPATNE", který někdo napsal před deseti lety. Ani jsem nezmínil legie lidí napadající části internetu, kvůli průmyslové špionáži, čistému zisku, nebo protože se zrovna nudí. Slyšeli jste o 4chanu? 4chan vám může zničit život i živobytí, protože se rozhodli, že vás na jedno odpoledne nebudou mít rádi. A ani se nebojíme 4chanu, protože další atomová bomba už nemá v atomové zimě žádnou váhu.
Na internetu můžete říct "Víš, tohle trochu funguje, občas a pokud používáte správnou technologii." a BUM, najednou jste součást internetu. Kdokoliv s pár stovkami dolarů a počítačem může zabrat malý kousek internetu a vystavit jakýkoliv kus strašného kódu se jim zamane a pak ten jejich malý kousek propojí se spoustou velkých kusů a všechno je najednou o trošku horší. Ani opravdu dobří programátoři se neobtěžují pátráním po obskurních specifikacích nastíněných nějakou organizací, kterou založili lidi v naději, že vytvoří nějaké jednorožce, takže všichni musí strávit půlku jejich času vypořádáváním se s faktem, že nic s ničím nesouhlasí, nebo nedává smysl, a všechno by se mohlo kdykoliv rozbít a my se to jen snažíme zakrýt a doufáme, že si nikdo nevšimne.
Takhle nějak to chodí na internetu: pět minut po tom, co úplně poprvé otevřete prohlížeč nějaký spratek v Rusku už zná vaše číslo sociálního pojištění. Registrovali jste se někde? Počítač v NSA teď automaticky sleduje vaši polohu po zbytek života. Poslali jste někdy e-mail? Vaše adresa se právě zobrazila na bilboardu v Nigérii.
Tyhle věci nejsou pravda, protože se o ně nezajímáme nebo protože se nepokoušíme to zastavit. Tyhle věci jsou pravda, protože všechno je rozbité, protože neexistuje nic jako dobrý zdrojový kód, a všichni se jen snaží, aby se všechno nezastavilo. To je vaše práce, pokud pracujete s internetem: Doufat, že poslední věc, kterou jste napsali je dost dobrá, aby přežila několik hodin, abyste si mohli dopřát večeři a trochu se prospat.
Chyba při parsování html pomocí regulárních výrazů; systém vrátil Cthulhu.
Vtipné, že? Ne? A co říkáte na tuto konverzaci:
"Jmenuje se ten příkaz arrayReverse?"
"s/velbloud/_/"
"skvělý, dík."
Nebyla to jasná a užitečná rada? Ne? Ještě se můžete zachránit. Ještě jste nestrávili tolik z vašeho života čtením kódu, že byste jím začali mluvit. Lidský mozek nezvládá moc dobře strojovou logiku a dnes existuje celý obor, který není o ničem jiném, než hodně, hodně komplexní logice. Musíte se probírat nepřeberným množstvím nejasných podmínek a požadavků, jen abyste objevili chybějící tečku. Když tohle děláte celý den, octnete se v lehké afázii, zatímco se koukáte na tváře lidí, kteří na vás mluví, a nemáte ponětí, že přestali, protože nevyslovili středník. Ponoříte se do světa úplné nicoty a nesmyslnosti, ve kterém všechno, na čem záleží je, že krátká řada čísel prošla gigantickým labyrintem znaků a jiná řada čísel a obrázek koťátka vyšel na druhém konci.
Ničivý dopad na lidský mozek dobře znázorňují programovací jazyky, které lidé vytvářejí. Tohle je program:
#include <iostream> int main( int argc, char** argv ) { std::cout << "Hello World!" << std::endl; return 0; }
Ten program dělá úplně stejnou věc, jako tenhle program:
`r```````````.H.e.l.l.o. .w.o.r.l.di
A tenhle program:
>+++++++++[<++++++++>-]<.>+++++++[<++++>-]<+.+++++++..+++.[-] >++++++++[<++++>-] <.>+++++++++++[<++++++++>-]<-.--------.+++ .------.--------.[-]>++++++++[<++++>- ]<+.[-]++++++++++.
A tenhle:
Ook. Ook? Ook. Ook. Ook. Ook. Ook. Ook. Ook. Ook. Ook. Ook. Ook. Ook. Ook. Ook. Ook. Ook. Ook. Ook. Ook! Ook? Ook? Ook. Ook. Ook. Ook. Ook. Ook. Ook. Ook. Ook. Ook. Ook. Ook. Ook. Ook. Ook. Ook. Ook. Ook. Ook? Ook! Ook! Ook? Ook! Ook? Ook. Ook! Ook. Ook. Ook? Ook. Ook. Ook. Ook. Ook. Ook. Ook. Ook. Ook. Ook. Ook. Ook. Ook. Ook. Ook! Ook? Ook? Ook. Ook. Ook. Ook. Ook. Ook. Ook. Ook. Ook. Ook. Ook? Ook! Ook! Ook? Ook! Ook? Ook. Ook. Ook. Ook! Ook. Ook. Ook. Ook. Ook. Ook. Ook. Ook. Ook. Ook. Ook. Ook. Ook. Ook. Ook. Ook! Ook. Ook! Ook. Ook. Ook. Ook. Ook. Ook. Ook. Ook! Ook. Ook. Ook? Ook. Ook? Ook. Ook? Ook. Ook. Ook. Ook. Ook. Ook. Ook. Ook. Ook. Ook. Ook. Ook. Ook. Ook. Ook. Ook. Ook! Ook? Ook? Ook. Ook. Ook. Ook. Ook. Ook. Ook. Ook. Ook. Ook. Ook? Ook! Ook! Ook? Ook! Ook? Ook. Ook! Ook. Ook. Ook? Ook. Ook? Ook. Ook? Ook. Ook. Ook. Ook. Ook. Ook. Ook. Ook. Ook. Ook. Ook. Ook. Ook. Ook. Ook. Ook. Ook. Ook. Ook. Ook. Ook! Ook? Ook? Ook. Ook. Ook. Ook. Ook. Ook. Ook. Ook. Ook. Ook. Ook. Ook. Ook. Ook. Ook. Ook. Ook. Ook. Ook. Ook. Ook? Ook! Ook! Ook? Ook! Ook? Ook. Ook! Ook! Ook! Ook! Ook! Ook! Ook! Ook. Ook? Ook. Ook? Ook. Ook? Ook. Ook? Ook. Ook! Ook. Ook. Ook. Ook. Ook. Ook. Ook. Ook! Ook. Ook! Ook! Ook! Ook! Ook! Ook! Ook! Ook! Ook! Ook! Ook! Ook! Ook! Ook. Ook! Ook! Ook! Ook! Ook! Ook! Ook! Ook! Ook! Ook! Ook! Ook! Ook! Ook! Ook! Ook! Ook! Ook. Ook. Ook? Ook. Ook? Ook. Ook. Ook! Ook. Ook! Ook? Ook! Ook! Ook? Ook! Ook. Ook. Ook. Ook. Ook. Ook. Ook. Ook. Ook. Ook. Ook. Ook. Ook. Ook. Ook. Ook. Ook. Ook. Ook. Ook. Ook! Ook.
A jednou někdo napsal programovací jazyk, ve kterém někdo jiný mohl napsat tohle:
#:: ::-| ::-| .-. :||-:: 0-| .-| ::||-| .:|-. :||
open(Q,$0);while(){if(/^#(.*)$/){for(split('-',$1)){$q=0;for(split){s/|
/:.:/xg;s/:/../g;$Q=$_?length:$_;$q+=$q?$Q:$Q*20;}print chr($q);}}}print"n";
#.: ::||-| .||-| :|||-| ::||-| ||-:: :|||-| .:|
Podle autora tenhle program "jsou dvě řádky programu, které zpracují dvě řádky komentářů v kódu na mayské číslice, které představují jednotlivé ASCII znaky, které tvoří titulek časopisu, vykreslený v ASCII grafice otočené o 90 stupňů.
Ten program vyhrál nějakou soutěž, protože proč ne? Chcete žít v takovém světě? Ne. Je to svět, ve kterém vykouříte krabičku denně a nikomu to nepřipadá divné. "Jasně, že kouří krabičku cigaret denně, proč by nemohl?" Nevyhnutelně se každý programátor jednou probudí a než nabude plného vědomí, vidí svět kolem nich a každý vztah v něm jako bloky kódu, a baví se o tom mezi sebou jako by spánkem buzená extáze nebyla vůbec nic znepokojivého. Je to svět, ve kterém se lidé vzdávají sexu, aby mohli psát programovací jazyk pro orangutany. Všichni programátoři nutí své mozky dělat to, k čemu lidský mozek nebyl nikdy vhodný, v situaci, kterou nejsou schopni nijak zlepšit, deset až dvanáct hodin denně, pět až sedm dní v týdnu a všichni do jednoho pomalu přicházejí o rozum.
</výlev >
Takže ne, nemusím zvedat předměty vážící až dvacet kilogramů. Vyměnil jsem to za příležitost přistříhávat Satanovi jeho pubické ochlupení zatímco on vyjídá večeři z mé otevřené lebky, jen aby něco málo z internetu mohlo fungovat o několik málo dnů déle.