Nette, a proč není tak dobré
autor: PetrTentokrát, po dlouhé době, to bude něco z mojí práce co mně živí. To je programování, a momentálně především programování webů v PHP. Pracovní nutnost mně postupně dostrkala k frameworku Nette, a právě tomu se budu věnovat. Nikoli technickým detailům a "jak se co dělá", ale frameworku jako takovému a především jeho obrovským problémům. Aby si lidé, kteří třeba zvažují že s Nette začnou, měli představu co je čeká. A do jisté míry taky proto, abych ventiloval svoje rozčarování.
Hned na začátku musím říct ty pozitivní věci. Nette framework je bezpochyby kvalitně napsaný kus kódu. Možná udělal nějaké designové volby co mi nesedí, možná má problémy v mnoha jiných oblastech, ale napsaný je kvalitně. Rozhodně kvalitněji než tolik populární Wordpress, například. Dokonce i razí a do značné míry prosazuje dobré programátorské návyky a doporučuje dobré konstrukce, což je opět něco, o čem si Wordpress může nechat zdát. Navzdory těmto nesporným kladům má Nette velké problémy, kvůli kterým jde o hodně rozporuplný framework. Představím tady s čím by měl začátečník v Nette počítat.
Nette - ryze český framework
Nette bylo vytvořeno jediným člověkem - ten se jmenuje David Grudl, a je Čech. „Českost" frameworku je pro našince velkým lákadlem. Nemusíte být nutně patrioti, stačí když si nejste úplně jistí v angličtině. Člověk si tak nějak představuje, že když zvolí český framework, naučí se ho z českých manuálů, bude se ptát českých vývojářů, a nedostatky v angličtině nebudou najednou problém.
Jenže bohužel to tak nefunguje, a problémem je dokumentace (ke které se ještě dostanu). Jednoduše řečeno to, co je na Nette česky, vám k plnohodnotnému programování nestačí. Při prvním skutečném použití Nette na skutečný úkol se velmi rychle dostanete k PHPDoc dokumentaci generované ze zdrojového kódu (která je online a dá se v ní hledat), a přes ni k samotným zdrojákům. Jedině tam najdete skutečné odpovědi, po kterých vám to začne dávat smysl. Jenže právě tam už je Nette výhradně anglické. Názvy tříd, metod, proměnných a podobně jsou anglické, a krátké popisky připojené k jednotlivým metodám či třídám jsou také striktně psané anglicky.
Dále existují česká diskuzní fóra, kde se můžete česky zeptat na to co vás trápí, případně si přečíst jak se česky ptali jiní. V takových diskuzích narazíte na poněkud problematický přístup Nette komunity, ke kterému se také ještě vrátím. Až příliš často diskuze proběhne zhruba takto:
Dotaz - chci docílit toho a toho, takže jsem si tady vytvořil třídu jako presenter, támhle jinou třídu, do šablony jsem něco napsal a ono to nefunguje. Proč?
Odpověď - No protože takhle se to nedělá, lepší použít DI, na tohle musíš mít továrničku, kterou si hodíš do BasePresenteru, a támhleto vyrazíš z contextu. Nevymýšlej nic nového, dělej to tak jak chce Nette.
Dotaz - No, já jsem s Nette teďka začal a moc nechápu jak jsi to myslel. Můj návrh mi původně připadal docela dobrý.
Odpověď - Dyk tomu vůbec nerozumíš, to nemá smysl tohleto, nejdřív si o Nette něco přečti. Tenhle problém se tady probíral už stokrát.
Dokumentace - Achillova pata Nette
Nette má pověst složitého frameworku, do kterého se musí dlouho pronikat. Nepočítejte s tím, že si přečtete pár návodů a za týden začnete sekat fungující weby jak na běžícím pásu. Programování v Nette zabere zpočátku moře času, z větší části vyplněného vztekáním se, lamentováním, a bezvýsledným hledáním na googlu. Není to tím, že by Nette provádělo tak složité a komplikované věci, nebo že by bylo složité ze své podstaty. Je to tím, že vám informace o sobě dává pomalu, neochotně, a většinou je spíš jenom nakousne, než aby je vysvětlilo. Je to tak, za "složitost" Nette může z velké části zoufale mizerná dokumentace.
Pro Nette existuje sada česky psaných tutoriálů, které vás do principu frameworku uvedou. Jsou psané jakýmsi budovatelsko-optimistickým stylem, takže máte občas pocit, jakobyste četli spíš reklamu než manuál. Jsou prokládány větami jako „Vidíte jak je to jednoduché?", občas v nich narazíte na vtipy na adresu neNettovských programátorů, abyste mohli pocítit jak nad nimi Nette ční. Pravda, takových poznámek není zase tolik, ale po přečtení pár textů mi začaly spolehlivě brnkat na nervy. Čtu kurník přeci manuál, ne? Nezajímá mně samochvála tvůrců, chci vědět jak věci fungují. Tutoriály svůj úkol (uvést do organizace frameworku a vysvětlit jak se věci dělají) splní, ale ne natolik, abyste v Nette mohli začít plnohodnotně programovat. V takovém případě během půl hodiny narazíte na problém, který tutoriál nevysvětlil (nebo tak, že jste to nepochopili), a vy absolutně nevíte jak ho řešit. Vymyslíte řešení které vám na základě znalostí z tutoriálu připadá dobré, a ono nefunguje. Netušíte proč, odpověď se nikde nedá najít.
Existují také sady příkladů a instruktážních videí. Příklady jsou vytržené z kontextu, a jsou spíše určené pro lidi, kteří to už v Nette umějí, a hledají vhodné řešení konkrétního specifického problému. Videa jsou problematická, protože i když v nich odpověď na to, co vás trápí, může být, tak je to schované někde v hodinách povídání, a z podstaty věci se v tom nedá hledat.
Nakonec tedy skončíte u zdrojových kódů. Nette má PHPDoc dokumentaci vygenerovanou z kódu, ta je na netu a dá se v ní online hledat podle tříd a namespaců, což je užitečné. U tříd a metod bývá krátce a stručně napsáno co dělají. Je to dostatečné pokud víte jak na to, a jen jste zapomněli jak se která metoda jmenuje. Nevyřeší to časté situace kdy to celé vůbec nefunguje a vy naprosto netušíte proč. V takových situacích nezbývá než si překliknout přímo do zdrojáku, a právě tam je jediná konečná Pravda; ze zdrojáků nakonec vyluštíte odpovědi na všechny otázky. Jenže za jakou cenu? Číst cizí zdrojáky nikdy není žádný med, a i kdyby byl, tak to trvá neúnosně (a hlavně zbytečně) dlouho.
Nette komunita - elita národa
Jeden by řekl, že na komunitě kolem softwarového produktu přeci nezáleží. I když jde o opensource který ta komunita tvoří, tak jde hlavně o to aby dala dohromady funkční kus programu, ne? Jinak si můžou být s pánembohem ti neotravnější lidi pod sluncem, vy s nimi přece nepřijdete do styku.
No, není tomu tak, a problematičnost komunity má na těžké stravitelnosti Nette značný podíl. Aby bylo jasno, Nette je už hodně staré, ale zpočátku bylo tvořené jediným člověkem. Ten toho před asi třemi lety nechal a projekt předal komunitě, která se kolem něj postupem času vytvořila. Lidé z Nette komunity se teď starají o vlastní program, ale i právě o dokumentaci, propagaci, a vůbec všeho kolem. Setkáváte se s nimi tedy přinejmenším prostřednictvím dokumentace a diskuzních fór.
Přiznám se, že jsem měl zpočátku problémy tomu uvěřit, ale komunita považuje nepochopitelnost Nette za klad. Je složena z lidí, kteří věří, že programování má být složité. Že když sednu k frameworku a během několika dnů ho jsem schopný plnohodnotně používat, tak to znamená, že framework je špatný. V jejich vidění světa má programátor trávit desítky hodin zkoumáním tajemných zákoutí zdrojového kódu Nette prostě proto, že se chce stát Mistrem, a právě jen takový je hodný jejich podpory.
Ne že by snad neodpovídali na otázky na fórech. Naopak, rádi se podělí o všechny ty úžasné věci v Nette světě. Ale když se budete příliš detailně ptát na základy frameworku, odkážou vás ať se o něm nejdřív něco naučíte, a pak teprve ať přijdete řešit konkrétní situace. Dozvíte se že "tohle je přeci v tutoriálech a tamto zase najdete na fóru" - jinými slovy po našich webech jsou roztříštěny zlomky informací, a když je budeš trpělivě sbírat a dávat dohromady, tak to nakonec pochopíš. Když ale ne, tak si Nette nezasloužíš, protože na něj prostě nemáš. Nette je prostě jen pro ty opravdové super programátory, ostatní ať si klidně používají cokoli jiného, a tiše se krčí ve stínu těch opravdových Mistrů.
Dnešní závěr
Jak vidno, u tohoto frameworku vůbec nezáleží na tom jestli je dobrý nebo špatný, protože jeho hlavní slabiny leží mimo vlastní program. V designu frameworku ovšem je taky pár bodů které mi nesedí, a snad se k nim zase někdy dostanu. Ovšem není to nic, co by se nedalo zkousnout, kdyby nebylo problémů co jsem popsal dnes.
Komentáře