Mirin webspace

Nejbohatší život má ten, kdo žije s minimem nároků

14. 11. 2016 - Komentáře (9) PHP Nette

Po sedmi letech s Nette

Nette, potažmo PHP jsem se věnoval posledních téměř 7 let. Aktuálně to vypadá, že se od PHP a Nette minimálně na nějakou dobu odpoutám. Takže budu trochu bilancovat a shrnul bych svoje zkušenosti s ním a trochu se pokusil zhodnotit jak to s Nette vypadá aktuálně a co si myslím o tom, jak to půjde dále.

Pozvolný vzestup

Před téměř deseti lety se mi už stávající špagetové programování v PHP nelíbilo. Sháněl jsem něco, co by mě umožnilo psát udržovatelnější aplikace. Dospěl jsem k tomu, že MVC framework je určitě ta správná cesta, ale psát nějaký svůj vlastní jsem zavrhl hned od počátku. Na to prostě nemám. V té době přicházelo v úvahu myslím CakePHP a právě začínal Zend Framewok. Je zajímavé, že o Symfony v té době moc slyšet nebylo. Začal jsem tedy se Zend Frameworkem, říkal jsem si, že Zend bude to správné řešení, když za ním stojí taková firma, která má zájem o samotné PHP. PHP samotné bylo někde kousek za 5.2. Se Zend Frameworkem to šlo dobře. Dokumentace a podpora ze strany Zendu a komunity byla už od počátku výborná. Na Internetu se začalo objevovat spousty návodů, článků.

Pak jsem nastoupil do firmy, kde se místo Zend Frameworku používalo Nette v nějaké úplně ranné verzi, ještě stažené ze SVN nebo bůh ví odkud. Proti tomu, co jsem znal ze Zendu to byl poměrně velký krok zpět. Bylo to dáno hlavně tím, jaká to bylo ranná verze. O nějaké podpoře jako bylo u Zendu se nám nemohlo ani zdát, v podstatě jsme se pořád jen přehrabovali ve zdrojácích a zkoumali, jak co funguje. Koncept komponent jsme v té době ještě ani pořádně nechápali, používali jsem v podstatě jen presentery a šablony a v nich dokonce nějaký svůj šablonovací systém. Takže funkčně mi to přišlo i dost za tím, co bylo aktuálně v Zend Frameworku.

Takhle to vypadalo asi tak nějak do doby, než se Nette přesunulo na GitHub. To jsme teprve pořádně pochopili koncept komponent a přešli na Latte. To nám přineslo možnosti, jaké v Zendu nebyly, nebo se v něm dosahovaly velmi těžko. To bylo někde okolo vydání Nette 2.0. O Zend už jsem se prakticky přestal zajímat, jednak bylo jasné, že technologicky jsou na tom oba frameworky dost podobně a pak jsem ani neměl příliš času navíc, přišli rodinné a jiné životní peripetie.

Zhruba nějak v té době se začalo více mluvit o Symfony, které se na poli frameworků začalo stávat hvězdou. Jeden z důvodů byl možná ten, že poměrně rychlo začalo adoptovat Doctrine jako modelovou vrstvu a vůbec se stavělo k integraci různých dalších částí od jiných frameworků celkem pozitivně. Ostatní frameworky šly spíše svou vlastní cestou a pokoušely se o nějaká vlastní řešení pro modely. Nette nebylo výjimkou, vymýšlelo vlastní databázovou vrstvu, testovací framework atp.

Pak přišla doba dependency injection a její nástup do PHP, potažmo frameworků. Tady opět udalo krok Symfony, Nette přišlo až později, kdy se z velké části nechalo právě Symfony inspirovat.

Dnes je situace taková, že v tom, co Nette umí, je technologicky v podstatě srovnatelné s konkurencí. Navíc si ponechalo celkem unikátní vlastnosti, které jinde nenajdete, zejména třeba právě komponenty, šablonovací systém Latte. Hodně pomáhá Tracy, která i bez IDE dokáže udělat práci s laděním aplikace poměrně pohodlnou a výrazně tak zlepšuje efektivitu práce v PHP. Teoreticky by tak Nette mělo být na špičce v nástrojích a frameworcích pro PHP, ale není to tak.

Stagnace

Světu PHP dnes jednoznačně dominuje Symfony, následováno Laravelem, pak možná Zend a dalšími. O Nette moc nezavadíte. Přitom práce např. s některými částmi Laravelu bez možnosti dependency injection je když ne přímo problematická, tak minimálně až moc magická. V Čechách je to přitom přesně opačně než ve světě, tady Nette zatím pořád dominuje. Ale i u nás doma se začínají karty obracet. O tom dále.

Podle mě je to pořád o tom samém, jak jsem už psal před 7 lety. Za tu dobu se nepodařilo najít žádný model, který by Nette dal jasný výhled do budoucna a záruku současného stabilního stavu, což je to, co firma potřebuje, když si volí na čem postaví svůj produkt. Všechno si pořád dělá z velké části David Grudl jako hlavní autor sám a nikoho moc nepustí ke slovu, všechno pak začíná a končí na tom, co posvětí on a co ne. K čemu se nějak zásadně nepřihlásí, to tak nějak skomírá na okraji. Za tu dobu se nepodařilo okolo frameworku vybudovat nějaký ekosystém firem, přispěvatelů, školení, autorů komponent. Osoba autora sama o sobě je podle mě také dost kontroverzní a problematická, což také adopci frameworku nepomáhá. Když autor opakovaně vyhlašuje - mám být někde ale jsem někde úplně jinde a v neidentikovatelném stavu - tak pokud je někdo takový tím, kdo je jediný zodpovědný za osud frameworku, tak takový framework si dost možná nezvolím do firmy pro svůj nový produkt. A je celkem jedno, jestli ty hlášky jsou myšleny jako humor nebo ne.

Existuje sice Kdyby, Nextras jako sady komponent. Jsou srazy Posledních sobot, ale nějak to Nette nepomáhá k tomu, aby se prosadilo mimo svou hlavní doménu, což jsou freelaceři a web agentury. Už jsme viděli několik pokusů o to řešit různé komerční způsoby podpory, placené verze atp. Všechno vyšumělo, což opět posiluje chápání frameworku jako one man show a bere mu body při rozhodování o budoucím frameworku pro firemní projekt.

Hlavní problémy, které jsem Nette vytýkal - nedostatečná dokumentace, špatná zpětná kompatibilita, nepředvídatelnost budoucího vývoje - se podařilo vyřešit jen částečně. Hodně se toho zlepšilo, zejména dokumentace je už alespoň nějaká. Ale je na tom hrozně vidět, že tohle jsou oblasti, které autora nebaví, nedělá je tedy rád a nevěnuje jim pozornost, jakou zasluhují. Jediné, co ho baví je programovat a vymýšlet nová vylepšení frameworku. Bohužel nikdo ale do poslední chvíle pořádně neví, co zrovna vymyslí, kdy to vymyslí a kolik toho tím rozbije. Poslední aktualizace - verze 2.4 - měla být původně jen malá aktualizace s ohledem na budoucí dopřednou kompatibilitu a vyklubal se z toho ohromný interní update, který např. komplet překopal Latte, takže pokud má někdo svá vlastní složitější makra tak se bude asi dost divit.

Budoucnost

Jak jsem napsal na začátku, sám se aktuálně nejen od Nette, ale i od PHP samotného chystám minimálně na nějakou dobu vzdálit. Ohlížel jsem se na trhu práce a je vidět sílící trend, že větší projekty často staví na Symfony, případně Laravelu jako základu a z Nette využívají tak možná Tracy, občas DI. Takže Nette ztrácí body už i v Čechách, kde je tradičně nejsilnější. Pokud se tedy Nette za chvíli nemá smrsknout na pár šikovných nástrojů, které jsou sice fajn, ale dá se bez nich obejít, tak by to chtělo něco s tím udělat.

Pořád si myslím, že bez komerční podpory, tedy zaštítění nějakou firmou, se Nette neobejde. Je celkem jedno, jestli firmu založí nějaká skupina lidí okolo frameworku, nebo se toho ujme nějaká stávající firma, která má do Nette hodně nainvestováno. Jisté je, že se do toho bude muset zapojit i sám autor. Je ale velkou otázkou jak. Manažerskou a řídící roli evidentně dělat nechce. Pokud to ale bude dělat někdo jiný, tak z Davida by se v podstatě měl stát zaměstnanec, který se bude muset podřídit tomu, co chce management a držet se něčeho, na čem se s managementem minimálně shodne. Něco takového si ale moc nedokážu představit, že po těch letech "zábavy" s programováním bude schopen dělat.

Nedávno jsme se na Twitteru mohli dočíst, že Nette konečně po letech hledání čeká něco nového, tak se nechme překvapit jestli to Nette pomůže zabránit v pomalém vyklízení dalších pozic nebo ne.


Komentáře (9)

  1. martin prokes - 14. 11. 2016 18:37

    Take je dobre obcas vylezt z bubliny a podivat se, co se aktualne resi jinde. Rails naprikad umi spoustu skvelych veci, na poli js frameworku zuri neskutecny vyvoj, pythoni komunita take neni pozadu. zustat u php a nette znamena tak 5 let zpozdeni a predevsim mit zoufalou produktivitu - a na to nesmime zapominat, programator ma rychle resit zadani a ne rozjimat nad depndency injection a podobnymi implementacnimi detaily, které zakaznika nezajimaji.

  2. Roman Skála - 15. 11. 2016 09:08

    Vždy si rád a s chutí přečtu další článek ze ságy "Nette". Dýchne na mě úžasná atmosféra devadesátek. Jen pro zajímavost - víte jaké věci aktuálně řeší frameworky, které každodenně používám pro webový vývoj? WebSockets, GraphQL, automatické JSON API, isomorphic apps, immutable objects...

    Jestli pořád řešíte Nette a čekáte, až to Grudl všechno vymyslí, tak něco děláte špatně. Ale já vás podporuji. Čím více českých programátorů zamrzne u Nette, tím více práce pro mě :)

  3. MK - 15. 11. 2016 10:09

    Produktivita je v Nette dobrá, Tracy hodně pomáhá. WebSockets, GraphQL, React/Redux a s ním spojené immutable objects jsou pokud se nepletu technologie převážně frontendu.
    PHP a Nette mají svou business doménu u klasických obsahových webů s nějakou administrací - a fungují tam dobře. Jak jsem psal o trhu práce, pro PHP programátory je práce více jak dostatek, jen je znát že firmy se od Nette začínají odklánět k jiným PHP frameworkům, ale PHP je na našem trhu práce pořád převládající webová technologie.

  4. Pitrsonek - 15. 11. 2016 14:02

    Roman Skála: Co byste tedy doporučil a na jaký framework směřovat studium vývoje?

    Děkuji

  5. Franta Bednář - 15. 11. 2016 14:35

    Roman Skála: Já myslím, že se nemusíte bát. Koneckonců vzhledem k poločasu rozpadu závislostí na kterých své projekty stavíte, tak se užívíte už jen přepisováním na aktuální "hot" frameworky, které zrovna z js světa vypadnou. Třeba jen, když časem budete transpilovat do něčeho podobného PHP, ale k tomu je ještě potřeba pár let vývoje.

  6. Miloslav Ponkrác - 15. 11. 2016 17:30

    Problém českého prostředí je, že ztratilo sebereflexi. Kromě vlastního plácání se po ramenou, jak jsou dobří - a dštění ohně a síry na ty, kteří tento pocit narušovali, se ostatní pomalu ztrácelo. Kdokoli narušoval pohodičku u píva, tak byl vyvrhel, na kterého bylo třeba plivat - a často jsem to také schytal.

    Sám se do PHP scény nepočítám, mé zájmy i profesní směr jsou úplně jinde. Jel jsem si svou cestou, vydal knihu o PHP, napsal si svůj vlastní framework, atd. - dělal jsem si věci po svém.

    Českou PHP scénu ovládly jako celebrity zejména dvojice lidí, kteří nemají zkušenosti s většími sw projekty ani se sw inženýrstvím. Dokud byl framework malý, nebylo to znát. Oba se chytali do začátečnických pastí jako je past "optimalizace na minimální velikost PHP skriptů" nebo past "všechno si udělám sám po svém" nebo past "na zpětné kompatibilitě nezáleží, oni si programátoři rádi v nové verzi všechno přepíší". A oba pak často padali do pastí (a třeba Nette jí má dost velkou) "budeme trikovat namísto psaní nudného kódu".

    Ve své podstatě se zmenšil prostor samotnému PHP, jak píše příspěvek nade mnou. PHP samo je v zásadě zoufalý neproduktivní jazyk. Velké projekty už to nebaví. Vždyť PHP nemá ve svých základních datových typech ani řetězec (typ string je ve skutečnosti bajtové pole), řešení kontextu mezi requesty a nebo třeba překladu do byte kódu - je vyřešeno extrémně špatně a nevýkonně. PHP samo neví co chce, je to nekonzistentní jazyk. Velké projekty si mohou jazyk vybírat, malé projekty se musí držet toho, co je k dispozici třeba od webového hostingu.

  7. Raminko - 15. 11. 2016 19:25

    [6] Rozesmály mě ty "hostingy". Myslíš ty české hostingy typu ignum, u nichž se deset let nic nezměnilo? Mysql, přístup přes ftp a tady to máš? Očividně v těch devadesátkách nezamrzli jen programátoři :)
    Proč by malý projekt nemohl být v cloudu, one click git deploy a všechny ty věci kolem, které jsou dnes standard?

  8. Miloslav Ponkrác - 15. 11. 2016 20:12

    Raminko: Přesně tak. A pak se čeští programátoři/hosteři a další diví, že zahraničí válcuje.

    V českých zemích jednoduše programátoři usnuli na vavřínech. Projekt Nette psal programátor, který byl v té době začátečník, nejen v PHP, ale především v sw inženýrství, štábní kultuře, a vůbec vedení projektů. A to vůbec nemluvím o databázích, kde dvojice Grudl - Vrána byla schopna psát a doporučovat vysloveně špatné návyky, že profesionálům (zdaleka nejenom mě) z toho vstávaly vlasy hrůzou. (Např. pan Vrána hodnotil kvalitu SQL dotazů podle délky SQL dotazu v počtech znaků; nebo Doporučoval klientským programům za běhu měnit strukturu tabulek.)

    Jinak řečeno, celebritami se stali programátoři, kteří neměli zkušenosti, a teprve se učili. To mohlo být unositelné v českém prostředí, kde se případní nesouhlasící (jako já, stejně jako mnozí další) dali seřvat, vysmát se jim, případně psát posměšné tvíty a komentáře na všechny strany. Ale v konkurenci se světovým prostředím se pravda začíná ukazovat - co šlo v českém rybníčku seřvat a pomluvit a vysmát se případné kritice. To ale nelze v žádném případě aplikovat vůči světovému prostředí.

    Jinak řečeno, došlo trochu ke svatořečení některých lidí, stejně jako projektu Nette - a dotyční nepříjímali zpětnou vazbu, jak na tom skutečně jsou. Projekt Nette byla hračka na hraní pro pana Davida Grudla - a proto je tak těžké jej předat někomu jinému. A proto je tak těžké jej překlopit do seriózně (a tedy i suše a konzervativně) vedeného projektu - protože tím autorovi berete jeho hračku.

    Tedy základní problém projektu Nette není technický, ale lidský.

    Kdybych měl dát radu, co udělat pro projekt Nette, který mezi tím trochu vyspěl. Za prvé začít konzervovat jeho API - a začít v dokumentaci psát: toto API je betonově neměnné, toto je experimentální a může se změnit. Napsat pořádný manuál pro začátečníky. Udělat a zavést formální proces pro spolupráci, achvalování, pluginy, rozšíření a zapojení druhých lidí.

    Budovat projekt od API, ne od kódu.

    Vykašlat se na dualitu český/anglický projekt - a udělat pořádně jeden jazyk.

    Snažit se napojit na standardy a interoperabilitu a přechod z jiných frameworků. A spolupráci s jinými věcmi. Zejména databázová vrstva je v Nette velice slabá a nepružná. Ale i řada dalších věcí.

    Atd.

    Zkrátka, z Nette se udělalo trochu zlaté tele, ke kterému se modlili čeští programátoři. A pokud jej nevrátíte zpátky na zem, a neuděláte z toho technický projekt se všemi náležitostmi a procesy - tak vám umře pod rukama. Nic jiného nepomůže. Řemeslně ten projekt dodělat, ne inovativně.

  9. MK - 16. 11. 2016 09:54

    [8] V něčem s vámi lze souhlasit - jak postrčit Nette dopředu a co v něm změnit. Ve spoustě věcí z Vás ale mluví uražené ego z minulosti.

    Když J. Vrána i D. Grudl začínali a vybudovali si jméno, tak je pravda že to byla doba špagetového kódu a zejména Jakub jel v rovině "tipy a triky". Nicméně oba jsou špičkoví programátoři, a postupně se určitě jejich přístup k věcem jako štábní kultura, vedení projektů, trikování apod. změnil. Rozhodně neusnuli na vavřínech.

    Jakub byl ve Facebooku a teď je v Google, což jednak mluví o tom že jeho programátorské schopnosti jsou na dost vysoké úrovni a pak rozhodně má spousty zkušeností s tím, co je štábní kultura, udržovatelný kód velkého projektu.

    Stejně tak D. Grudl, kdyby se neposunul v oblastech jako vedení projektu, dodržování standardů, udržovatelný kód tak by dnes Nette bylo dávno zapomenuté a přitom je to jeden z komerčně nepoužívanějších PHP frameworků u nás.

Komentáře jsou uzavřeny.