Na každou otázku existuje jednoduchá, snadno pochopitelná, nesprávná odpověď.
2. Murphyho zákon
Asi znáte ten pocit, kdy programujete a tušíte jak by ten kód měl správně vypadat. Chvíli třeba i vzdorujete, ale něco vás pořád tlačí do toho správného řešení. Obvykle vyplave na povrch nějaký problém a vy si říkáte: „Jó, kdybych já to tenkrát udělal dobře. To bych tenhle problém neměl.“ Ještě to třeba nějak ošulíte a ono to za nějakou dobu vyhřezne jinde. Nakonec svoji lenost přemůžete a uděláte to tak, jak to mělo být od začátku. Jste odměněni úžasným zážitkem. Máte před sebou jednoduché a elegantní řešení problému. Cítíte že je to dobře, že na tom není moc co zlepšovat. Zase jste jednou něco udělali dobře. Je to úžasný pocit.
Takovému výsledku říkám stabilní řešení. Nejen že je to očividně dobře, ale stejně jako kuličku táhne gravitace na dno důlku, tak i vás k tomuto řešení něco táhne. Stačí jen dávat pozor. Včera jsem to v opilosti někomu vykládal a přišlo mi to úplně mystické. Takhle za střízliva to není ono, ale moc daleko to k tomu nemá. Je to asi něco podobného, jako když fyzici hledají elegantní matematické vyjádření fyzikálních zákonů. Když je zákon ošklivý, tak mu nevěří. Příroda ale přeci nemá důvod generovat hezké rovnice. Stejně tak nemají problémy v programování důvod generovat hezký kód. Ale přesto to tak často je.
No jo, jenže pak tu máme další množinu problémů, která je naprosto opačná. U ní vybíráte jen ze špatných řešení. Ať děláte co děláte víte, že to bude tak či tak špatně. Volíte mezi jednoduchým a rychlým, mezi testovatelným a kompaktním, mezi robustním a čitelným. Když takový kód někomu ukazujete, tak se trochu stydíte. Víte, že to je špatně, ale alternativy jsou ještě horší. Je to takové vratké. Stačí malá změna požadavků a musíte to celé předělat. Stačí další zádrhel a předěláváte to znovu. Prostě ne a ne najít to správné východisko.
Zajímalo by mě čím to je. Je to tím, že to správné řešení někde je a já ho jen nevidím? Nebo pro daný problém hezké řešení neexistuje? Nebo je špatně navrženo všechno kolem, takže mi tam to případné elegantní řešení nepasuje? Nebo je to nevyzrálostí nástrojů? Třeba je špatně programovací jazyk, v kterém se to snažím vyřešit. Jako kdybych se snažil popsat fyzikální zákony a neuměl bych násobit. Pak by také některé rovnice vypadaly neelegantně a hloupě. Nevím. Asi jsem jako ti fyzici, myslím si, že by ke každému problému mělo být elegantní řešení. Tak proč se mi ho sakra tak často nedaří najít?
Moderní (analytická, podotýkám) filozofie má k onomu hledání elegantních řešení poznámku, že matematické vyjádření přírodních zákonů se nám jeví “estetické” proto, že v našich mozcích je evolucí zadrátovaný jak smysl pro estetiku, tak samotná podstata (našeho) matematického myšlení. (Ergo, matematické zákony mimo naše mozky neexistují, ale to je jiná odbočka, než do které mířím.) S programováním to myslím bude podobné – (podvědomě) hledáme takové vyjádření, které bude pro naše abstraktní myšlení dobře uchopitelné; elegance tohoto vyjádření pak nemusí být jen průvodním jevem, ale nutnou podmínkou k tomu, abychom problém dovedli pochopit.
To, že se nedaří najít elegantní řešení, prostě znamená, že jsme zvolili špatnou abstrakci. Často proto – aspoň ve fyzice –, že tu vhodnou ještě nikdo nevymyslel.