rebelské kódování

Většina programátorů ví, že objektové programování v php, je mnohem lepší než procedurální a nikdy by se k procedurálnímu stylu kódování nesnížili.
Většina kodérů ví, že oddělit od sebe php, html a css je zákonitě lepší, než kdyby bylo vše pohromadě v jednom souboru.
Většina programátorů už si nedokáže představit svět bez MVC (Model View Controller), kdy jsou oddělené nejen řídící skripty od šablon, ale také dotazy na databázi.

A já zatím za ty roky přišel na to, že v řadě případů jsem výrazně produktivnější, když všechny výše uvedené filozofie ignoruji a píšu skripty po svém. K velkému překvapení mi jde práce od ruky v 90% případů nejlépe, když dělám pravý opak, než co moudří zkušení vývojáři doporučují dělat.

Objektově orientované programování (oop) má hluboký logický základ. Svět popisuje hierarchicky a pomocí kategorizace; děje pomocí metod (funkcí). Svět a uspořádání světa lze nejlépe popisovat skrze objekty a jejich prostředky pro komunikaci s okolím. V oop je řada vychytávek, jako třeba konstruktory, statická volání metod, polymorfizmus, dědičnost a další prostředky a modelovací techniky. Zároveň se můžete doslova bahnit v nepřeberném množství návrhových vzorů – zobecněných postupů pro řešení často se opakujících úloh.

Jenže mně postupně po letech došlo, že nemá smysl cpát oop všude. Vlastně se hodí jen pro některé specifické oblasti. Nejlépe práce sviští, když hlavní větev je procedurální a oop využívám pouze k zapouzdření nebo ke vložení složitějších funkcí. Když je vše postavené výhradně na oop, potom ve srovnání s jinými postupy je extrémně časově náročné provádět zdokonalování skriptů, úpravy, hledání chyb a vlastně i samotný vývoj, protože naprogramovat třídy je časově dost nákladné. Jistě namítnete, že by měl každý mít třídy hotové a už je jenom používat, případně knihovny třetích stran. V tom je právě zakopaný pes. Tohle funguje jenom v říši pohádek. V reálném světě je vše příliš složité, než aby ideologie oop mohla být pro vývoj a údržbu produktivnější, než rebelské kódování.

Pár let jsem se snažil projekty stavět na frameworku CodeIgniter. Ten je jako většina frameworků založený na MVC. Myšlenka je to fantastická. Jenže … vyznat se v tom bylo peklo. Používáte-li MVC, musíte totiž neustále přepínat mezi třemi a více skripty. Člověk má přitom velmi omezenou kapacitu krátkodobé paměti (30s). Práce s objekty zákonitě vždy zabere více místa. Pomocí MVC vyjde kód na několik stovek řádků. Při posloupném procedurálním kódování přitom vždy stačí mnohem méně řádků a kód zvládne to samé co MVC. Čím větší projekt, tím výhodnější by měla být separace kódu na kontrolní, zobrazovací a osluhu databázových dotazů. Jenže když nekódujete pro stát (weby pro stát  nutně musí být ohromné, aby bylo možné naúčtovat si miliony), ani gigantické CMS redakční systémy typu Joomla či Drupal (protože těch už existuje víc než dost a hlavně jsou nakonec úplně k ničemu, protože se v tom guláši nedá vyznat), potom je to spíše kontraproduktivní. Dělal jsem zatím jen běžné weby, eshopy, erp, crm, fakturační systémy, komunikační moduly. Žádné mega projekty, kde by MVC mohlo ušetřit čas a zpřehlednit práci.

V mojí rebélii jsem zašel ještě dál. Přestal jsem oddělovat html od php a částečně už i css! Neuvěřitelné, že? Je ze mě kacíř. Možná si ťukáte na čelo, ale já díky tomu začal být velmi produktivní. Dříve jsem se držel běžných zásad, např. že skript by neměl mít víc než 100 řádků kódu. Dnes dělám pravý opak! Skripty slučuji dohromady! V jednom skriptu mám běžně přes 1000 řádků kódu a některé řádky mají i 300 nebo 400 znaků. Délka řádků je však dána možnostmi monitorů. Přirozeně neprogramuji na mobilu, ale na monitoru s vysokým rozlišením.

Do samostatného souboru dávám výhradně kaskádové styly, které se používají napříč všemi stránkami. Nikdy bych nevěřil, jak se zrychlí vývoj, ladění i vylepšování po delší době, když je pohromadě v jednom souboru php, html, css i javascript! Zvlášť dávám už jen skripty volané AJAXem, které prostě zvlášť být musí, jinak byste je nezavolali. A potom samozřejmě také třídy.

Pro snazší orientaci dělám v komentářích grafické značky. Kód, který tvořím, už není obyčejným kódem, ale mapou. Vizuální značkování jen za pomoci ASCII znaků je sice značně omezené, ale efektivní. Mozek začal pracovat trochu jinak, více graficky. Je to jiné. Je to rychlejší. Říká se, že obrázek vydá za tisíc slov. Já k tomu dodávám, že grafická značka či symbol, vydá za pětset slov. Mnohem větší důraz kladu na vymýšlení dobře zapamatovatelných názvů funkcí a proměnných. To je základ. Vyznat se v názvech a pamatovat si je. Potom stačí Ctrl+F a jste okamžitě tam, kde potřebujete kód upravit.

Jo a přestal jsem používat skripty, které vyžadují Kompostér, pardon, Composer. Musíte-li skutečně zahnojit kód, dělejte to. Čím složitější, tím více peněz si můžete naúčtovat a o to vyšší je pravděpodobnost, že správu aplikace nebude možné předat někomu jinému. Já jdu opačným směrem. Čím jednodušší kód, tím lépe se s tím pracuje a o to více stihnu naprogramovat. Jde jen o čas. Nic jiného pro mě nemá cenu.

Jisté je, že tento rebelský styl rozhodně není pro každého. Smysl má pouze tehdy, daří-li se tím urychlit a zkvalitnit vývoj kódu malých a středně rozsáhlých projektů. Pokud se cítíte dobře při dodržování mainstreamového stylu programování, radši kódujte tak, jak je doporučováno odborníky. Já se k rebelskému kódování propracoval postupně a intuitivně. Weby s procedurální páteří s jednoduchým minimalistickým kódem mi fungují již několik let bez sebemenších problémů a hlavně – velice rychle a snadno se dají upravovat a vylepšovat podle aktuálních potřeb, což se ani zdaleka nedá říct o monstrech typu WordPress, Laravel, Magento, Joomla, Drupal a spol. Ale je pravda, že třeba tento blog běží na WordPressu. Když není důvod, aby aplikace měla nějaké výjimečné fíčury (features) a nepotřebujete ani vyšší bezpečnost kódu, ani zajistit rychlost, potom samozřejmě nemá smysl vymýšlet něco, co již bylo vymyšleno a je to dostupné zdarma!