Tento text vyšel na blogu Funkatron, jehož autorem je Ed Finkler. Český překlad zveřejňujeme s laskavým autorovým souhlasem.
Tradovaný příběh o vzniku punku je, že šlo o reakci na výstřelky tehdejšího rocku, především tzv. „progresivní“ větve. Reálné události byly nepochybně o něco komplikovanější, ale mám podezření, že na tom bude něco pravdy. Rokenrol začal být, zásluhou velkých jmen konce 60. a 70. let, nepřístupný pro průměrného posluchače. Kontrast třeba mezi skupinami Rush na straně jedné a Black Flag na straně druhé, ačkoli obě hrály „rock“, byl propastný.
Schválně, podívejte se na bicí soupravu Neila Pearta, bubeníka Rush:
A tohle jsou Black Flag na koncertu v Los Angeles v roce 1979:
Celí Black Flag by se vešli do prostoru, který zabírá bicí souprava Neila Pearta. A přesto hráli skvělej nářez, ze kterýho jste si sedli na prdel.
V posledních letech jako by se duch PHP pohyboval směrem k Neilu Peartovi. Spousta práce spousty chytrých lidí stvořila komplexní řešení. Spousta souborů, spousta vnořených adresářů a spousta pravidel. Často vídám PHP knihovny nebo komponenty, co vypadají nějak takto:
<?php chdir(dirname(__DIR__)); require_once (getenv('ZF2_PATH') ?: 'vendor/ZendFramework/library') . '/Zend/Loader/AutoloaderFactory.php'; ZendLoaderAutoloaderFactory::factory(array('ZendLoaderStandardAutoloader' => array())); $appConfig = include 'config/application.config.php'; $listenerOptions = new ZendModuleListenerListenerOptions($appConfig['module_listener_options']); $defaultListeners = new ZendModuleListenerDefaultListenerAggregate($listenerOptions); $defaultListeners->getConfigListener()->addConfigGlobPath('config/autoload/*.config.php'); $moduleManager = new ZendModuleManager($appConfig['modules']); $moduleManager->events()->attachAggregate($defaultListeners); $moduleManager->loadModules(); // Create application, bootstrap, and run $bootstrap = new ZendMvcBootstrap($defaultListeners->getConfigListener()->getMergedConfig()); $application = new ZendMvcApplication; $bootstrap->bootstrap($application); $application->run()->send();
Všechno tohle jen kvůli spuštění aplikace.
Neznamená to, že tenhle přístup je špatný per se. Ale když to vidím, zažívám vnitřní odmítavou reakci. Můj mozek křičí:
TOHLE.
KURVA.
ANI.
OMYLEM.
Nemůžu takhle psát. Nechci tak psát. A nemyslím si, že je nezbytně nutné psát právě takhle, abych mohl dělat skvělé věci a tvořit úžasné programy.
Postup, o kterém píšu, je začít s co nejmenším základem, nejlépe v podobě „mikroframeworku“. Pár jich pro PHP existuje – Slim, Epiphany, Breeze, Limonade a další. Když pak potřebuju další funkce, stáhnu si lehkou knihovnu, která mi pomůže vyřešit přesně ten úkol, co potřebuju řešit. Přehlednost a stručnost jsou pro mne nejdůležitější kritéria.
Dalším důležitým kritériem je fakt, že pokaždé, když použiju kód, který jsem nenapsal, beru na sebe závazek. Většinou nemám čas provádět audit celého kódu knihovny, takže její použití je spojené s určitou důvěrou. A každá další závislost znamená věřit víc. Nejen v to, že v knihovně nejsou chyby, ale taky v to, že pokud nějaké jsou, že budou opravené. Dozvím se o tom z mailing listu? Jak dlouho budou bugfixy zpětně kompatibilní? Budu muset upgradovat všechny své knihovny, když povýším verzi PHP? A tohle všechno za předpokladu, že autor bude mít stále čas a motivaci tyto problémy řešit. Pokud nebude, tak jsem právě do svého kódu zanesl technologický dluh.
Najít malou lehkou knihovnu, která nepotřebuje spoustu dalšího kódu, je těžší, než by se zdálo. Myslím si, že se vývojáři v PHP zajímají mnohem víc o vývoj frameworků a věcí pro ně. Je pravda, že některé zavedené frameworky udělaly velký krok k tomu, aby nebyly tak monolitické, a mnoho vývojářů na Twitteru mi doporučovalo jako řešení třeba komponenty ze Symfony. Bohužel to vypadá, že moje definice „lehkého“ není shodná s jejich.
Podívejte se na výstup cloc pro komponentu HTTP Kernel ze Symfony 2:
Mon Dec 26 19:42:23 EST 2011 coj@PsychoMantis ~/Sites > cloc HttpKernel 94 text files. 93 unique files. 12 files ignored. http://cloc.sourceforge.net v 1.53 T=0.5 s (164.0 files/s, 18736.0 lines/s) ------------------------------------------------------------------------------- Language files blank comment code ------------------------------------------------------------------------------- PHP 72 1175 3440 4290 Bourne Shell 10 56 155 252 ------------------------------------------------------------------------------- SUM: 82 1231 3595 4542 -------------------------------------------------------------------------------
Teď totéž pro celý framework Slim:
Mon Dec 26 19:42:27 EST 2011 coj@PsychoMantis ~/Sites > cloc Slim 54 text files. 51 unique files. 13 files ignored. http://cloc.sourceforge.net v 1.53 T=0.5 s (82.0 files/s, 17752.0 lines/s) ------------------------------------------------------------------------------- Language files blank comment code ------------------------------------------------------------------------------- PHP 31 660 4473 3280 Bourne Shell 10 56 155 252 ------------------------------------------------------------------------------- SUM: 41 716 4628 3532 -------------------------------------------------------------------------------
a nakonec pro framework Epiphany
Mon Dec 26 19:42:30 EST 2011 coj@PsychoMantis ~/Sites > cloc Epiphany 83 text files. 70 unique files. 31 files ignored. http://cloc.sourceforge.net v 1.53 T=0.5 s (102.0 files/s, 5246.0 lines/s) ------------------------------------------------------------------------------- Language files blank comment code ------------------------------------------------------------------------------- PHP 40 218 309 1632 Bourne Shell 10 56 155 252 HTML 1 0 0 1 ------------------------------------------------------------------------------- SUM: 51 274 464 1885 -------------------------------------------------------------------------------
Když je víc souborů a řádků kódu v jedné komponentě než v celém frameworku, co používám, tak ji opravdu nemohu nazvat „lehkou“.
Neznamená to, že ten kód je špatný, že je bezcenný nebo že snad tenhle přístup je obecně zlý. Je špatný pro mne. A myslím si, že nejsem sám.
Nechci být programátorská rocková superstar, co tvoří pompézní rockovou operu. Chci zmáčknout pár prostých akordů v punkové skupině, co zahraje v rockovém klubu bez šatny a bude to takový nářez, že vylezete ven a půjdete si založit vlastní kapelu. Takový chci být kodér.
Nechci být Neil Peart. Chci být Gregg Ginn.
Tak jsem napsal tohle. „MikroPHP manifest“, jestli chcete. Chci se jím řídit při vývoji v PHP. Možná se s ním ztotožníte.
Jsem vývojář v PHP
- Nejsem vývojář v Zend Frameworku, Symphony nebo CakePHP
- Myslím, že samotné PHP je komplikované dost
Rád dělám malé věci
- Rád tvořím malé věci s prostými cíli
- Rád dělám věci, co řeší problémy
- Rád dělám malé věci, co spolupracují na řešení větších problémů
Chci psát co nejmíň
- Chci psát co nejmíň kódu
- Chci udržovat co nejmíň kódu
- Chci dělat podporu co nejmenšímu kódu
- Potřebuju si být jistý každým kusem kódu, co do svého projektu dám
Mám rád jednoduchý, čitelný kód
- Chci psát kód, kterému snadno porozumíte
- Chci psát kód, který je snadno testovatelný
PS: Začal jsem sbírat odkazy na malé PHP knihovny a frameworky. Jestli nějaké znáte, dejte mi vědět.
Redakční poznámka: Text je na první pohled radikální, jako většina manifestů a provolání. Když se začíná vývoj příliš vychylovat jedním směrem, přicházejí extrémní a záměrně zjednodušující provolání, která vzbuzují diskusi. A právě v diskusi je možné dobrat se podstaty problému. Na první přečtení si většina vývojářů pomyslí: Ten člověk se zbláznil, vždyť on volá proti všemu, co je v posledních letech bráno jako „vývojářský standard“ – používání knihoven, standardizovaných frameworků apod. Vždyť to je návrat do dob, kdy si každý vývojář znovuvynalézal kolo a bastlil kód, jak se mu to hodilo… Velké projekty přeci nelze takhle stavět, udržovat…
Jenže tak to není. Skutečné jádro Edova sdělení je někde jinde. Dalo by se shrnout do klasického rčení: „Použijte odpovídající nástroj“. Když chcete, jako Ed, psát „malé a chytré aplikace“, tak se přece nemusíte stydět za to, že nepoužijete velký framework, co je právě „v kursu“. A pokud při vývoji uděláte nějakou šikovnou mikroknihovnu pro řešení jednoho konkrétního problému, nestyďte se ji zveřejnit. Není přece ostuda, že jste nepoužili velký framework, když ho nepotřebujete!
K tématu: diskuse na Hacker News, diskuse na Reddit, polemika Anthonyho Ferrary.
Přehled komentářů