NVOLVIEW s Milanem „Felixem“ Šulcem - (Contributte/Nette mág): Čeští vývojáři patří mezi top vývojáře na světě
Zdeněk Kaipr
Milan „Felix” Šulc je výraznou osobností v českém PHP (Nette) vývojářském ekosystému. Je jedním z hlavních členů vývojového týmu okolo Nette, zakladatelem Contributte balíčků, spoluorganizátorem školení od „Akademie 42”
Pracuješ primárně s Nette frameworkem. Proč sis vybral právě Nette a ne třeba Symfony nebo Laravel, které jsou ve světě mnohem populárnější?
PHP byl můj první programovací jazyk, když nepočítám HTML a CSS. Začínal jsem na PHP 4, alespoň co si pamatuju. Po sérii jednoduchých webíků jsem se dostal k projektu, který už byl o dost větší. Chtělo to něco, co bude organizovat kód, tehdy jsem poprvé slyšel o něčem, čemu se říká framework. A protože jsme v Čechách, tak to bylo právě Nette.
Celkem jsem na začátku tápal. Ale hrozně mě to bavilo. Bylo super, že existovalo místo, kde se člověk mohl zeptat (Nette fórum), existovaly srazy, ze kterých jsem teda viděl jen fotky, ale i tak jsem měl pocit, že nejsem sám. Byla a je kolem toho taková aura.
O Symfony a Laravelu jsem tehdy vůbec neslyšel. Možná kdybych bydlel ve Francii, bylo by to jinak. Myslím, že to místo a jazyk rozhodly, že to bude právě Nette.
Občas na internetu na Nette slýchám dle mého neopodstatněnou kritiku. Co ty si myslíš o současném stavu Nette ekosystému? A je ta kritika alespoň někdy oprávněná?
Já si myslím, že kritika tu bude vždy a na všechno. Jen jsem ji na začátku tolik nevnímal, protože se mě netýkala. V minulosti jsem ji bral vcelku osobně, i když vím, že to je špatně a neměl jsem to dělat. Dnes už se to snažím ignorovat. Ne vždy mi to jde.
Dalo by se říct, že my Češi jsme hrozně kritičtí a nic nám není dobré. Ale to mi přijde jako reakce na cokoli, co se nám nelíbí. Konstruktivní kritiku, obzvlášť v IT, považuji za dobrou věc. Věřím, že třeba 70 % kritiky by mohlo být konstruktivních, kdyby se použila lepší formulace.
Např. místo „Tohle mohl vymyslet jenom debil, to se nedá používat,” říci “Ahoj. V našem projektu tvoji knihovnu používáme a schází nám funkce X a Y. Šlo by to tam doplnit?”
Z mého pohledu je na tom Nette ekosystém aktuálně velmi dobře. Lidé mi přijdou nápomocní, ať na Nette fóru, nebo třeba Slacku Pehápkařů
Jsi známý tím, že jsi nad Nette postavil Contributte — balíčky, které výrazně rozšiřují základní funkcionalitu, kterou Nette nabízí. Co tě vedlo k založení projektu? Můžeš Contributte krátce představit?
Contributte je organizace na Githubu, která má pod sebou přes 150 repozitářů a přes 20 členů. Podle statistik na Packagistu mají naše balíčky více než 13 000 000 stažení.
Věřím, že se nám daří dodávat profesionální řešení, na které se dá dlouhodobě spolehnout a které slouží jako základní toolset pro řadu firem.
Nette vnímám jako rock-solid balíčky, ze kterých lze postavit jakoukoli webovou aplikaci. Contributte rozšiřuje Nette balíčky o funkcionalitu, která se opakuje na řadě projektů. Např. volání příkazů přes terminál, správa e-mailů a šablon, DataGridy, události, RabbitMQ, Redis, Doctrine a spousta dalších komponent.
To byla prvotní myšlenka.
Nově bych k tomu doplnil, že se celkem daří pomáhat firmám a jednotlivcům. Ať se jedná o placené konzultace, vývoj komponent a rozšíření pro dané firmy, nebo obecně poradenství s webovým vývojem. Ať to jsou tedy jednotliví vývojáři, vývojové týmy, či celé firmy, vždy se snažím vymyslet cestu jak pomoci.
Martin Valas je jednou z osobností českého webařského trhu. Grafik, visual designer, art director, ale také konzultant s přesahem do brandingu a UX.
ZKZdeněk Kaipr
8 min
Proč by měly firmy včetně té naší kupříkladu chtít používat Contributte balíčky? A jsou nějaké, které se používají výrazně více než ostatní?
Snažím se Contributte budovat tak, aby se na něj mohly firmy spolehnout. Aby to byla jejich volba před drahým a časově náročným in-house vývojem komponent. Aby ho vnímaly jako partnera, který jim ušetří čas, případně inspiruje a ukáže cesty, které neznaly. Společně se tak můžeme posouvat rychleji dál.
Nejpoužívanější balíček je contributte/datagrid, má přes 800 000 stažení. Je to velmi komplexní komponenta, kterou vyrobil Pavel Janda a po nějakém čase se přidal ke Contributte. Od té doby na tom pracujeme společně.
Hojně využívané balíčky jsou Nettrine (integrace pro databázovou vrstvu Doctrine), Apitte (API s podporou PSR-7 a middlewares) a pak Symfony integrace (console, event-dispatcher, translation, atd.).
Kdybych to měl shrnout, Contributte je ideální pro:
Ty, kteří se chtějí soustředit na business logiku a ne framework.
Ty, kteří nechtějí vyvíjet znovu kolo.
Ty, kteří se rádi společně posouvají dál.
Ty, kteří mají rádi OSS.
Ty, kteří na věcech nedělají sami.
Jednou z tvých aktivit jsou IT konzultace přímo ve firmách. S jakými situacemi jim obvykle pomáháš? Opakují se některé problémy napříč firmami, nebo je to vždy individuální a každá firma řeší něco jiného?
Musím se přiznat, že jsem z konzultací měl velké obavy. Neuměl jsem si sám sebe představit, jak někomu radím. Vlastně jsem ani nevěděl, jestli by moje rady byly správné, nebo ne. S tímhle pocitem mi hodně pomohl OSS vývoj, Nette & Contributte. Po pár konferencích se na mě začaly obracet firmy, že mě někde viděly a líbilo se jim, co dělám, že řeší ten a ten projekt a mají tam ten a ten problém. Jestli bych se nemohl zastavit. No, a tak to začalo…
Pomáhám nebo jsem pomáhal s:
Vyčištěním a revitalizací projektu;
Použitím Codesnifferu, Phpstanu, Linteru a dalších nástrojů;
Aktualizacemi Nette na novější verze;
Přechodem na Doctrine (např. z Nette\Database, Dibi, PDO);
Tvorbou API v Nette;
Návrhy architektury v Nette;
Zjednodušením stylů (např. pomocí TailwindCSS);
Zbavením se jQuery (např. přechod na Alpine.js);
Propojením Vue.js a Nette;
Static Site Generator (s, nebo bez Nette);
Dockerizací prostředí;
Nastavením a automatizací GitLab CI;
Nastavením konvencí ve vývoji.
Mezi opakující se problémy, které lze poměrně jednoduše vyřešit, patří:
Chybějící codestyle;
Chybějící statická analýza;
Chybějící CI.
U těch firem je minimálně 50 % problémů velmi podobných a řešení je dost často velmi jednoduché a přímočaré. Naráží se ale na to, že firmy nemají čas na refactoring, vývojáři se nedokážou shodnout, vývojáři neví kde začít anebo jsou přehlcení informacemi a hledají donekonečna best practice.
Zbytek problémů je pak individuálních. A i řešení problému je časově náročnější.
Jak bys zhodnotil současný stav českých firem, které vyvíjí software? Setkáváš se často se špatnou kvalitou kódu? Používají firmy například zastaralé technologie nebo nepoužívají best practices? Jak velký technologický dluh leží na českém IT rybníčku?
Těžká otázka. Já se zaměřuji hlavně na segment PHP firem. Tak to berme s nadhledem…
Myslím, že čeští vývojáři patří mezi top vývojáře na světě. To potvrzuje i spousta zahraničních článků. Máme tedy výborné předpoklady, aby projekty, na kterých pracujeme, byly po technické stránce super.
Jsou firmy, které mají vše v pořádku a jsou viděny jako trend setters (určovači trendů). K takovým firmám většinou nechodím, protože tam nemám s čím pomoci. 🙂
Pak jsou ty ostatní, kde spolupráci navazuji s tím, že mi např. řeknou: „Potřebujeme pomoci s architekturou.“ Problém je, že k architektuře se ani nedostaneme. Alespoň ne na začátku.
Příklad: Projekt má za sebou několik let vývoje, vystřídaly se na něm i desítky vývojářů, každý si tam udělal zářez, ale jinak projekt není v dobré kondici. Dost často neexistuje codestyle, na vše existuje několik složek (třeba 4 složky pro temp a cache). Testy nejsou, anebo jsou, ale nespouští se. PHPStan by všichni chtěli, ale neví kde začít. O poslední verzi PHP ani nemluvě.
Takový projekt navenek nemusí působit atraktivně, i když třeba dává smysl, firma je fajn a vývojáři také. Firma může mít kvůli tomu problémy nabrat nové lidi a ani ti stávající na projektu nechtějí pracovat. Dobrá věc je, že s tím firmy chtějí něco dělat. A tam nastává moje role.
Obecně bych tedy řekl, že firmy nechtějí usnout na vavřínech a hledají cestičky, jak ty projekty udržet. Vše smazat a začít znovu není pro většinu reálné.
Best practices chápu jako něco, co funguje v daný čas, pro danou firmu, s daným týmem na daném projektu. Zní to komplikovaně, já vím. Chci tím říct, že podle mě není důležité hnát se za best practices. Spíš bych navrhoval, aby si tým zvolil, co mu vyhovuje, tak, aby byl efektivní. Postupně iterovat, vylepšovat, konzultovat.
Dokázal bys odhadnout, jaké faktory stojí za špatným stavem IT ve firmách? Dokážu si představit například rozpočtové důvody, tlak na termíny anebo prostě jen fakt, že management nechápe a nedokáže si spočítat dlouhodobé přínosy čistého kódu, automatizovaných kontrol a tak dále.
Osobně si myslím, že je to kombinace všech těch věcí, které jsi vyjmenoval.
Nedokážu přesně určit daný problém, většinou je to složitější jádro pudla. Nemyslím si ale, že by to byl problém jenom managementu. Spíš se setkávám s tím, že management chce, ale problém je u developmentu, u vývojářů. V dnešní době, kdy se práce z domu stává poměrně standardem, firma, která bude bránit v odstraňování technologického dluhu, je podle mě odepsaná. A myslím, že si to uvědomují i samotné firmy.
Ještě bych přidal, že dnes se na nás valí opravdu hodně informací horem dolem. Jeden článek radí používat tohle, druhý to nedoporučuje, třetí mluví o jiné technologii. Vývojáři pak můžou být zmatení, a i když by měli prostor na vylepšování, zejména zbavení se technologického dluhu, neví kde začít. Jestli tým potřebuje nakopnout (jaké dnes jsou nástroje, postupy, možnosti), doporučil bych vytipovat někoho z komunity, kdo jim je sympatický a v dané problematice zkušený. Pár takových seancí pomůže nabudit tým a ušetřit spoustu času a trápení do budoucna.
Zpět ke Contributte. Důležitým kamenem pro Contributte je sponzoring. Mohl bys ho krátce představit? Jak tě tato myšlenka napadla? Jak se firmy mohou zapojit do sponzoringu? V jaké výši mohou firmy přispívat? Dostává pak firma za měsíční sponzoring fee od Contributte nějakou přidanou protihodnotu? (Pozn. Contributte balíčky jsou v základu zdarma.)
Sponzoring je pro Contributte relativně nová možnost, jak mu zajistit stabilní a udržitelný vývoj.
Je to cesta, jak z Contributte udělat projekt, na který se každý, kdo dělá v PHP, může spolehnout, může se zeptat a dostane se mu odpovědi, najde tam mraky hotových řešení, ve kterých se může inspirovat a v neposlední řadě se může soustředit na své business požadavky a ne na framework.
Aby toto fungovalo, musím najít fungující business model. Už jsem se vydal tento business model hledat, zatím jsem na začátku. Nejsem obchodník, tak je to pro mě o to těžší. Odhodlal jsem se a oslovil několik firem a s některými navázal spolupráci. Například Involve, kterým moc děkuji.
Důležité je, aby to bylo přínosné pro obě strany. Tomu přikládám polovinu úspěchu. Aby firmy viděly, že nemusí vyvíjet všechno samy, že není špatné sdílet balíčky s ostatními, že je tu někdo, kdo se soustředí na vývoj těchto knihoven, má v tom mnohaleté zkušenosti, dokáže poradit nebo jim doprogramovat něco na míru.
Partnerství s Contributte jsem rozdělil na 4 úrovně:
Platinum — 20 000 měsíc
Gold — 15 000 měsíc
Silver — 10 000 měsíc
Bronze — 5 000 měsíc
Každý partnerství je unikátní a má konkrétní domluvu, která je napasovaná na konkrétní firmu. Tak, aby to bylo přínosné pro obě strany.
Každá úroveň má v sobě uveřejnění loga na webu contributte.org, na profilu organizace github.com/contributte. Pokud se jedná o konkrétní balíček, je možnost vložit svůj banner do ReadMe.
Příklad: Reálná situace ze života byla, že balíček už neměl podporu pro Nette 2.4, pouze Nette 3. Firma o to stála a ptala se, zdali by to šlo v rámci partnerství. Tak se udělal backport a balíček opět podporoval Nette 2.4. Win-win.
Snad brzy se na webu contributte.org objeví i inzeráty od podporujících firem.
Moje vize je uzavřít takové partnerství s několika firmami, které dostanou každý měsíc alokaci hodin na support dotazy, budou si moci zvolit klíčové knihovny v Contributte, na kterých staví aplikace. Jednou, dvakrát do roka uspořádat soukromou akci čistě pro tyto firmy, kde se představí novinky, zaškolí nováčci, nastaví vize na další roky. Přinášet inside notes z českých IT firem podporujících Contributte formou blogpostu, podcastu a jiných castů. Uvidíme. Nápadů je spousta.
Mohou firmy nějak ovlivnit směřování vývoje Contributte? Předpokládám, že pokud ano, bude se jednat primárně o ty, které Contributte sponzorují, že? Pokud ano, tak jak? Jak zjišťuješ, které balíčky by uživatelé Nette mohli ocenit a využívat?
Aktuálně firmy vývoj Contributte neovlivňují a rád bych to tak nechal. Uvědomuji si, že je to vcelku odvážné to takto nastavit, ale nerad bych, aby se ze mě stal externí vývojář, který musí splňovat požadavky té a té firmy.
Není ale problém vytipovat klíčové komponenty v Contributte, které budou mít detailnější dokumentaci, ukázkové projekty, delší podporu pro starší verze Nette. To je něco, co bych rád s každou firmou řešil individuálně.
Zároveň mi přijde jako celkem dobrý koncept nějaký společný cíl. Jedna firma něco potřebuje, další o tom také uvažuje a skrze Contributte si obě zlevní vývoj. Pro takovou věc je potřeba, aby se firmy nebály zapojovat a byly tomu otevřené. Pak to není problém realizovat. Takovou ukázkou je např. podpora Doctrine 3, kde se podílí více firem.
A co dlouhodobá vize? Kde vidíš Contributte za 5 a 10 let?
Za 5 let vidím Contributte jako organizaci, která má 30 zapojených firem, udržitelný a stabilní vývoj. Já se tomu věnuji na full-time. Pořádáme pravidelné akce. Vyškolili jsme přes 50 nováčků.
Za 10 let vidím Contributte jako organizaci, která dává stabilní práci více lidem. Kdo ví, třeba i manželce a pak to bude family business.
Co plánuješ na rok 2022? Na co se můžeme těšit?
Kdybych to měl vypsat v bodech:
Knihovny budou mít minimální verzi PHP 8.0 (aktuálně je to PHP 7.2);
Contributte bude podporovat Symfony 6 a Nette 4 (aktuálně je to Symfony 5 a Nette 3);
Podpora Doctrine 3.0 v Nettrine balíčkách;
First class podpora Sentry s ukázkami a example projektem;
Nová knihovna pro rychlé založení projektu a prototypování;
UI komponenty postavené nad Alpine.js, TailwindCSS a Latte pro rychlé prototypování;
Přesun Nettrine balíčků pod Contributte a dokončení unifikace celého ekosystému Contributte + Apitte + Nettrine;
Nosím v hlavě dlouho jednu myšlenku na SaaS projekt, který by pomohl vyplnit jedno místo a zároveň přinést nějaký nový budget. Uvidíme, nechme se překvapit.
Vím o tobě, že máš už dvě děti. Portfolio tvých aktivit je zároveň dost široké — od konzultací, školení, po vývoj a management Contributte. Jak to vše zvládáš skloubit dohromady? A jak dané aktivity prioritizuješ? Máš na to osvědčené mechanismy a techniky?
Nemám žádnou speciální techniku. Dost často si připadám jako chaos monkey. Velkou roli v tom hraje moje manželka, která je skvělá a obstará děti, domácnost, mě a ještě má plno energie. Já se starám o IT. Takže nám doma dost často nejde WIFI, TV a tak. (smích)
Co bys doporučil firmám a jednotlivcům, chtějí-li se zdokonalit v programování? Ať už v Nette, PHP, nebo klidně i obecně.
Doporučil bych, aby byli otevření jiným postupům a konceptům a zároveň zvídaví, jak věci fungují. Pokud se cítí ztraceni, ať se nebojí kontaktovat někoho ze své komunity. Když se bavíme o Nette, tak třeba právě lidi z Contributte. Rádi poradíme, poklábosíme.
Je něco, co bys ještě závěrem čtenářům vzkázal?
Chtěl bych poděkovat za rozhovor, ať se firmě Involve daří v této době a těším se na budoucí spolupráci. Třeba to nastaví trend a motivuje další firmy v zapojení. Za to bych byl moc rád. Díky.