Programování je vlastně skoro jako vaření

Už je tomu pár let, co jsem napsal poměrně zdařilý článek srovnávající platformy Windows a „Linux“. Už pár měsíců se mi hlavou honil způsob, jak podobným způsobem běžnému smrtelníkovi popsat programování popř. obecně vývoj software. Píši proto tento článek, který by měl snad každému tátovi, každé babičce a dokonce i kdejaké knihomolce, která o programování ví asi jako křováci v Africe o Terrym Pratchettovi, co to vlastně to programování je.

Úvodem: programování vs. vývoj software

Na úvod mi dovolte jedno malé rozseknutí. Asi nikoho nepřekvapí, že jak programování, tak vývoj software jsou činnosti, na jejiž konci jsou počítačové programy, popř. software. Rozdíl mezi programováním a vývojem software však přece jen nějaký je.

Vrátíme-li se do kuchyně, můžeme říci, že programování je něco jako vaření, zatímco vývoj software příprava večeře. Příprava večeře obvykle obnáší vše od nákupu surovin, jejich přípravy (např. omytí zeleniny, rozmrazení masa), přes samotné vaření, až po úklid kuchyně a následně servírování.

Velmi podobně, vývoj software je proces, který se sestává z mnoha podkroků, mezi které patří například volba vhodných technologií, vytvoření zázemí (spuštění vývojářských serverů, instalace vývojových prostředí), přes samotné programování až po nasazení do provozu, uživatelské testování a údržbu.

V tomto článku se budu zabývat pouze samotným programováním, poněvadž fakt, že je s tvorbou software nějaká práce navíc asi nikoho až zase tak moc nepřekvapí. Naopak, programování je něco, co trápí nočními můrami už i leckteré studenty středních škol.

Vařila myšička omáčičku …

Máme tedy nachystány suroviny a jdeme vařit. Vezměme si učebnicový příklad: nějaká, téměř libovolná, omáčka. Rajská, koprovka či jakákoliv jiná. A, z druhé strany, takový typický elektronický obchod, e-shop. Ono bohužel i toto srovnání není úplně fér, vzhledem k tomu, že uvařit – byť sebepoctivější – omáčku nezabere víc, než pár hodin, zatímco nad e-shopem programátor může strávit dobrých pár týdnů. Pro ilustraci nám to ale bude stačit.

Když vidím, jakej jsem programátor, tak se bojím jít k doktorovi do kuchyně.

Jak takové vaření obvykle vypadá? Zde je první důležitý moment, protože stejně tak, jako se každá omáčka dá udělat jednoduše, rychle a obyčejně, tak i počítačový program se dá zkonstruovat méně či více propracovaně. Je rozdíl, jestli vaříte omáčku jako rychlou večeři nebo ke svátečnímu obědu pro celou rodinu. A stejně tak, e-shop prodávající jeden produkt s minimem dodatečných funkcí může být určitě vytvořen daleko snáze než propracovaný interaktivní systém s obrovským počtem uživatelů.

Jíška a vývar

Pokud omáčku budete začínat jíškou, bude vhodné si nejdříve jíšku připravit. Pokud ji budete zalévat vývarem, bylo by vhodné si nejdříve „uvařit“ vývar. Je tedy vidět, že i ve vaření se často setkáme s tím, že pro uvaření jednoho pokrmu je třeba mít uvařený nějaký/é další. Obdobně, pro vytvoření e-shopu je vhodné si nejdříve naprogramovat (samostatný/é) modul(y) – například pro připojení k databázi, přihlašování uživatelů, propojení se skladem a podob.

Stejně tak, jako se vývar dá nahradit bujónem, dá se obvykle propracovaný samostatný programový modul nahradit něčím jednodušším. Pokud si však vývar opravdu uvaříme, můžeme si část zamrazit a použít někdy příště. V oblasti vývoje software toto mívá mnohem větší význam – software se totiž nedělí ani nemrazí, ale prostě kopíruje. Takže „vývar“, který programátor jednou „uvaří“ může používat prakticky donekonečna.

Proto je víc, než jasné, že každý programátor se snaží tyto znovupoužitelné programové suroviny vytvářet jak jen to jde. Ve velkém množství případů však tyto suroviny ani nevytváří sám, ale – prostě si je koupí (popř. stáhne, pokud jsou zdarma). Na tom vlastně také není nic překvapivého: Kdo by se dnes doma mlel se strouhankou? Nebo si doma vyráběl vlastní majonézu?

Eintopf? Nein, danke!

Mimochodem, dnešní programování se dělí na dva hlavní (znepřátelené) směry: funkcionální a procedurální. Podíváme-li se na to pohledem přípravy omáčky, tak funkcionální programování vypadá asi takto: Programátor si nejdříve velmi pečlivě přichystá vše potřebné pro přípravu omáčky. Tedy jíšku i vývar, obě důkladně ochutí tak, aby s nimi pak při samotné přípravě omáčky měl minimum práce a současně nehrozilo, že mu výslednou omáčku zkazí. K tomu pak už jen přidá něco na ochucení omáčky, velmi jednoduše to smíchá dohromady a má zaručeno, že omáčka bude velmi pravděpodobně poživatelná.

Oproti tomu omáčka vařena procedurálně vypadá jako takový jeden velký eintopf. Procedurální vaření totiž připomíná spíše přípravu kouzelného lektvaru. Procedurální přístup znamená provádění jednotlivých dílčích kroků postupně za sebou. V praxi tedy jeden hrnec, do kterého se postupně přisypávají jednotlivé ingredience. I vývar by se nějak prapodivně měl vařit v hrnci, ve kterém se zvesela převaluje právě usmažená jíška. Postupným přidáváním dalších surovin by na závěr vznikla požadovaná omáčka.

Je jasné, že takovýto přístup je v praxi naprosto nepoužitelný. Funkcionální programování se zde zdá mnohem použitelnější. Z různých důvodů se však neprogramuje ani funkcionálně (protože to by například znamenalo, že jíška by se musela uvařit v kompletně svém vlastním hrnci a pak se zbytečně přelít do hrnce na omáčku), ale oba tyto přístupy se kombinují.

Málo slaná, co?

Nedílnou součástí každého vaření je ochutnávání. (Poznámka: bavíme se o ochutnávání, ale u pokrmu samozřejmě záleží také na vůni, barvě, konzistenci, palčivosti, teplotě…) Dokážete si představit, že uvaříte omáčku a ani jednou jste ji neochutnali? Bohužel, programátoři, kteří něco naprogramují a za celou dobu si nezkontrolují, že udělali všechno naprosto správně, jsou víc než běžnou záležitostí.

Zde nám trošku nahrává funkcionální programování. Pokud smícháme ingredience, které jsme důkladně ochutnali a ověřili si tak, že opravdu chutnají, jak mají, výsledný pokrm nám nezkazí. Naopak, při čistě procedurálním vaření vlastně až do poslední chvíle nemáme něco, co by stálo za to ochutnávat („není ta jíška s vývarem a kořením málo slaná?“).

Zkrátka a dobře, ochutnávání je pro vaření klíčové – a stejně tak i pro programátory. Chybička (nebo obecně cokoliv, co nezvykle ovlivní chuť) se totiž může stát vždycky. Tři malé místo dvou velkých cibulí, nezvykle silný česnek, či obvyklé „ups, asi mi trošku ujela ruka“.

Pokud se nám zdá omáčka málo slaná, dosolíme ji. Pak ji, pochopitelně, přesolíme, takže ji musíme doředit. Pak ovšem musíme přidat další koření, protože by byla slabá. Zkrátka, při každém takovém ochutnání často zjistíme, že je s omáčkou něco špatně a je potřeba to spravit. Tomu se v programování říká testování a ladění. Problém s testováním a laděním, s věčným ochutnáváním a dochucováním, je však ten, že se může opakovat velmi dlouho a pořád to není ono. Ve výsledku nám tak může vzniknout nějaký nepoživatelný paskvil, který tak akorát „za stálého míchání lijeme do hajzlu“. Bohužel i programátor se často setkává s tím, že pořád není spokojen, pořád to není ono, a tak neustále upravuje a upravuje, až mu nakonec stejně nezbude nic jiného, než to celé smazat a začít nanovo.

A to ani neříkám, že když jídlu něco schází, dá se docela snadno určit co. Sůl, koření, zahustit. Ale programátor má dost často jen informaci „je to dobrý“ a „není to dobrý“. Teprve studiem toho, co tam všechno nasypal může vyhodnotit, co asi udělal špatně.

Supermáma

Při programování se občas setkáme i s dalšími pojmy, které najdete i v kuchyni. Například synchronní a asynchronní programování. Pokud byste vařili synchronně, a věřte mi, že to tak občas určitě děláte, znamená to, že než se vám dokončí určitá část vaření, do které není potřeba zasahovat, tak stojíte u sporáku a čekáte. Až se voda ohřeje, až se máslo rozpustí, až to vychladne. Prostě stojíte a čekáte.

Oproti tomu, asynchronní programování znamená, že dáte vařit vodu, a jdete dělat něco jiného. Až bude voda uvařená, vrátíte se k ní. Logické, ne? No, bohužel, pro programátora je snažší si počkat. Už jen proto, že v momentě, kdy se voda dovaří, tak dost možná může být přerušen z nějaké činnosti, u které by neměl být rušen. Člověk při vaření na to myslí, ale – programátor za počítačem má poměrně omezené možnosti.

Spoustu legrace si také každý programátor užije při paralelním programování. Tedy, že v kuchyni není sám. Velmi často se totiž poštěstí, že se lidí po kuchyni potuluje více. A zkuste se ubránit situacím typu: „Cože, tys tu omáčku taky solil?“, „Ale já ten nůž potřebuju teď hned!“, nebo „Teď, teď jsem si tu solničku sem položil. Kdo mi ji vzal?“. Opět – v kuchyni docela humorné situace, avšak pro programátora noční můra. Omáčku osolí sotva špetičkou soli – a je přesolená. Nebo chce něco ukrojit a zjistí, že nůž na stole neexistuje. A hledejte chybu, kterou jste nezpůsobili vy.

Noční můra každého programátora? Kdyby Láďa Hruška začal programovat …

Obdobně, jako v kuchyni, i většina programátorů občas používá tzv. „hacky“. Tedy něco, co je naprosto nepřípustné, ale – ono mu to prostě extrémně zjednoduší práci. Mezi takové „hacky“ patří například zahušťování omáčky moukou namísto jíšky, nahrazení vývaru bujónem či tomatové omáčky kečupem. Ano, přesně tak, takový Jirka Babica. (Opravdu si nedokážu představit, jak by vypadal jako programátor.) Jsou to prostě věci, kterým se každý slušný programátor snaží vyhýbat jak jen to jde. Bohužel, ne vždy to jde (nebo je to vyloženě nutné).

Dobrou chuť!

Pomalu se blížíme ke konci, omáčka je téměř hotova, poslední přisolení, zamíchání a je hotovo. Můžeme servírovat, chutná skvěle. Náš e-shop je hotov a může být spuštěn. Někdo nám ale hned první den píše, že se do něj nedá přihlásit. A další. A další. Jak je to možné? Jednoduše – i ta omáčka, která nám chutnala (nebo to s ní naše chuťové pohárky prostě vzdaly a začaly našemu mozku tvrdit, že je opravdu skvělá), nemusí chutnat všem. To se tak bohužel stává. U programátora to může být tím, že po všem tom ladění a testování je prostě jen něco úplně obyčejně přehlédl. A nebo – prostě je tam něco, mezi židlí a klávesnicí, co způsobilo, že to funguje jen jemu a nikomu jinému.

Věřím, že mé srovnání programování s vařením někomu nemusí být po chuti. Je fakt, že by se dalo najít hned několik disciplín, kde se to k sobě hodí asi jak vegan a řízek. Nicméně, stále platí, že i programování, obdobně jako vaření, je prostě věda. Opravdu velká věda. Avšak pro programátora je i docela obyčejná omáčka práce na dlouhé týdny či měsíce. Tak tedy dobrou chuť všem programátorům!

Napsat komentář

Vaše e-mailová adresa nebude zveřejněna. Vyžadované informace jsou označeny *

Tato stránka používá Akismet k omezení spamu. Podívejte se, jak vaše data z komentářů zpracováváme..