Ahoj Jakube, díky že sis udělal chvilku na rozhovor. Na úvod, jak ty bys představil sám sebe?
Ahoj, jmenuji se Jakub Vrána a jsem programátor.
Řada lidí (asi nejen v ČR) tě rozhodně vnímá jako PHP guru. Jak jsi se k PHP a programování dostal? Pamatuješ si ještě na svůj první projekt?
Programovat jsem začal už na osmibitovém ZX Spectru. Nejdřív jsem dělal úplně jednoduché prográmky jako třeba seznam receptů nebo kreslení kružnice. Fascinovalo mě, že počítač dělá to, co mu řeknu. Pak jsem začal dělat jednoduché hry, i když jen v Basicu. Většinu času jsem ale trávil hraním her.
K tvorbě webu jsem se dostal v prváku na Matfyzu, kde jsem správcům napsal, že web informatické sekce je úplně příšerný, na což oni mi odpověděli, že když jsem tak chytrej, můžu ho dělat sám. Tak jsem ho celý předělal (tehdy to bylo pomocí CGI skriptů, PHP bylo ještě v plenkách) a pro fakultu jsem začal pracovat.
K PHP jsem se dostal vzápětí, první aplikace byl možná registrační formulář pro mou karetní hru. V PHP manuálu jsem nacházel nějaké nesrovnalosti, tak jsem přidával poznámky k jednotlivým stránkám, ke kterým mi editoři psali, že by bylo lepší je začlenit přímo do manuálu, tak jsem to zkusil a zjistil jsem, že to je docela jednoduché. Postupně mě zapsali jako jednoho ze spoluautorů celého manuálu.
VPS Centrum
Vyzkoušejte zdarma naši aplikaci pro správu serveru a domén. Budete si připadat jako zkušený administrátor.
Jaké další jazyky umíš? Co se ti na nich líbí?
PHP je pořád můj jazyk první volby. Když dělám nějakou webovou stránku, vždycky sáhnu po PHP. Všelijaké glue-skripty (třeba jen zavolají nějaký program příkazového řádku nebo stáhnou něco z webu, zparsují výsledek a něco s ním udělají) dělám taky v PHP. V práci používám hlavně Javu a JavaScript, zvolna i TypeScript, často specializované jazyky (např. šablony Closure Templates), někdy se musím uchýlit i k C++. Schopnost používat různé jazyky mi dává možnost si udělat většinu věcí sám a nezáviset na tom, až budou mít vlastníci projektů čas se mým požadavkům věnovat.
Na PHP mám rád, že se mi velmi snadno a rychle píše, je to takový můj mateřský jazyk, i když jsem začínal s Basicem a Pascalem. Velmi jednoduše ale PHP skript může sklouznout do write-only režimu, kdy se sice nějaká myšlenka dá snadno zapsat, ale pak už je trochu těžší ze čtení pochopit, co vlastně ta myšlenka byla. Psaní větších projektů v PHP proto vyžaduje nějakou disciplínu.
Java je na můj vkus poměrně ukecaná, ale na druhou stranu je asi jednodušší napsat kód, který se dá snadno udržovat. JavaScript byl dlouhou dobu takový otloukánek, kterého nikdo neměl moc rád, ale nakonec se stal jedním z nejpoužívanějších jazyků a přes nějaká jeho specifika je velmi dobře použitelný. C++ rád nemám, na můj vkus je ten jazyk strašně nízkoúrovňový a řekl bych, že archaický.
Na všech jazycích se mi líbí, že se zase začaly vyvíjet. PHP, Java i JavaScript jednu dobu ustrnuly a prakticky se nevyvíjely, teď jdou dopředu mílovými kroky. Obvykle změny vedou ke zjednodušení zápisu a robusnějššímu kódu.
Jakou vidíš budoucnost programovacích jazyků / technologií v příštích 5ti letech? Jak to bude s PHP?
PHP je etablovaný jazyk, který jen tak nezmizí, ostatně pohání většinu webu. Vývoj si netroufám odhadovat. U PHP a dalších volně typovaných jazyků byla nasnadě větší podpora explicitních typů, u typových jazyků zase naopak, tato změna už ale proběhla. Obecně řečeno se asi jazyky dál budou snažit zjednodušit zápis kódu, ve kterém přitom bude těžší udělat nějakou chybu.
Jaké používáš nástroje k práci? Jaké máš oblíbené IDE apod.?
V práci používám interní webové IDE, do kterého jsem si přidělal pár funkcí, které mi v něm chyběly. Pro osobní projekty používám SciTE, na jehož vývoji jsem se v minulosti taky podílel. Na SciTE mi přijde geniální, že má panel s výstupem ze spuštěných programů, který se dá normálně editovat a ze kterého se dají otevírat odkazované soubory. To umožňuje velmi jednoduchou integraci s programy příkazového řádku – např. na Git neexistuje žádný plugin, prostě mám jen klávesové zkratky namapované na `git commit` a podobně. Zkoušel jsem i modernější editory, ale jsem v tomhle asi hodně konzervativní.
Ty sám píšeš vývojářský blog php.vrana.cz. Proč jsi s tím začal? Pomohlo ti to utřídit myšlenky a zlepšit se v programování v průběhu času?
Když jsem začínal s PHP, tak jsem chtěl číst nějaké články o praktických zkušenostech s programováním v něm. Našel jsem pár blogů, ale většina skončila po napsání deseti článků. Tak jsem pochopil, že si to musím psát sám. Měl jsem toho plnou hlavu a napsal jsem spatra desítky článků. Vydával jsem je každé pondělí, středu a pátek a jednu dobu jsem měl frontu na půl roku dopředu. Takže jsem si nakonec četl svůj vlastní blog, abych si připomněl, co jsem před půl rokem psal. Řada triků je triviálních, ale u některých jsem šel víc do hloubky a u toho jsem pochopil, že dané oblasti vlastně moc nerozumím. Musel jsem si to pořádně nastudovat, abych měl vůbec článek jak dokončit a podložit ho argumenty. Totéž pak bylo u školení, která jsem začal pořádat. Příprava každého školení mi zabrala asi rok – samozřejmě ne soustavné práce, ale postupného odhalování souvislostí a získávání pevné půdy pod nohama, aby všechno co říkám, dávalo smysl a zapadalo do sebe.
Takže rozhodně mi psaní i učení pomohlo utřídit si myšlenky a podstatně se zlepšit. Myslím, že člověk něčemu rozumí až v momentě, kdy to dokáže srozumitelně vysvětlit ostatním. Nejlépe mnohem méně zkušeným.
Freelo - Nástroj na řízení úkolů a projektů
Přidej se, pozvi svůj tým a klienty, rozděl práci a sleduj, jak se úkoly dají do pohybu.
Jaká si myslíš, že je nejlepší cesta pro začínajícího vývojáře? Kde a jak se vzdělávat a čím si projít? Je lepší být v týmu a nechat se zaměstnat nebo mohu být super programátor i jako freelancer?
Hodně lidí říká, že škola je zbytečná, ale mě toho hodně dala. Sice jen některé přednášky, taky jich bylo dost zbytečných, ale aspoň jsem přičichl k různým oblastem a uvědomil si, co mě nejvíc baví. Taky mi škola dost pomohla v tom se naučit věci dotahovat do konce. Na druhou stranu člověk může být dobrý programátor i bez školy, ale k některým souvislostem je těžší se prokousat. Jinak podle mě nezáleží na tom, jestli člověk dělá pro firmu nebo na sebe. Já jsem dlouhou dobu dělal jedno i druhé a nevidím velké rozdíly. V obou případech se dá zlepšovat a dělat smysluplné věci. Zásadní podle mě je, aby to člověka bavilo a aby ideálně sám používal výsledky své práce. Protože teprve používáním vlastního software si někdy uvědomím, jak je třeba nešťastně navržený, a mám vnitřní motivaci ho změnit.
Jsi zainteresovaný do celé řady projektů. Adminer, NotORM, přispíváš do PHP dokumentace… Kde na to vše bereš čas? A jsou tyto projekty pro tebe práce, relax, seberozvoj nebo ještě něco jiného?
Kromě Admineru už vlastně nic moc jiného nedělám. A na Adminer moc času nepotřebuji. Když mi někdo kvůli Admineru píše, tak hned řeším jen bezpečnostní problémy, kterých je naprosté minimum. Ostatní požadavky nechám klidně několik měsíců ležet a pak je často smetu ze stolu s tím, že o ně nemám zájem. Sám Adminer pořád trochu používám, ale už nijak intenzivně, takže mi jeho funkce bohatě stačí a nemám nějaké pnutí ho pořád předělávat. Na Adminer si většinou najdu čas, když v práci dodělám nějaký projekt a uvolní se mi kapacita na to, abych myslel na něco jiného. Pak obvykle vyřídím většinu požadavků, vydám novou verzi a je zase nějakou dobu klid.
Kromě Admineru si pro radost programuji jednoduché hry pro děti, které s nimi pak hraju. Vracím se tak vlastně ke svým začátkům, kdy jsem taky programoval jednoduché hry. Řekl bych, že v současné době je strašně snadné spíchnout něco, co běží v prohlížeči. Kromě toho si programuji nějaké pomůcky, které pak používám obvykle jenom sám.
Je to pro mě relax a obvykle taky řešení nějaké potřeby, kterou mám.
Je nějaký projekt, který ty sám máš vnitřně nejraděj a proč?
Nejúspěšnější projekt je určitě Adminer. I když se vyvinul dost živelně, tak si myslím, že je navržen celkem dobře a i složité změny (jako třeba podpora jiných databází) do něj v minulosti bylo docela snadné dodělat. To je určitě takové mé dítě. Ostatní projekty jsem časem přestal používat a tím odumřely.
Jak bys zhodnotil, že se daří Admineru? Kolik lidí jej používá?
Adminer pingá svůj web, aby zjistil, jestli není k dispozici nová verze, takže by se to dalo asi docela snadno zjistit. Já tyto data ale nesleduji. Nezkoumám ani počty stažení, po pravdě řečeno mě to nijak nezajímá. Takže bohužel netuším. Adminer jsem si napsal pro sebe a pokud ho chce použít ještě někdo další, tak ať si poslouží, ale kvůli tomu to nedělám.
Jak je na tom Adminer Editor?
U Adminer Editoru tuším, že ho asi skoro nikdo nepoužívá, ale zase to nemám ničím podložené. Občas mi někdo napíše, jak je to skvělý nástroj a že si nedovede představit, jak by administrace dělal bez něj, ale bariéra vstupu je asi moc vysoká. Člověk si musí nastudovat, jak administrace s Adminer Editorem vytvářet a přistoupit na nějaký způsob práce, který Adminer má. Ale zase mě to moc netrápí. Já jsem rád, že si můžu dělat svoje administrace a pokud to použije ještě někdo další, tak klidně.
Co máš v plánu s Adminerem? A máš plány nebo vize na nějaké další projekty?
S Adminerem žádné plány nemám. Chci ho nadále udržovat a drobně vylepšovat, když mě nebo nějakého uživatele něco smysluplného napadne. Chtělo by to asi předělat způsob, jak se používají pluginy, teď to je trochu krkolomné. Adminer samotný je v jednom souboru, ale když chce někdo použít plugin, tak potřebuje soubory čtyři – Adminer, přizpůsobení pro podporu pluginů, plugin a skript, kterým se to celé propojí. To přizpůsobení je zbytečné a vzniklo jen historicky tím, že původně žádné pluginy nebyly. Bez toho skriptu, který to celé dává dohromady, by se asi u některých pluginů taky dalo obejít. Ale dělat se mi to moc nechce.
Nějaké projekty si dál dělám, ale většinou jsou jen pro mě nebo pro úzký okruh lidí. Třeba když skončil Google Reader, tak jsem zkusil pár jiných čteček, ale žádná mi nevyhovovala, tak jsem si udělal vlastní, která mi naprosto vyhovuje. Ale posunout to do stavu, kdy by byla použitelná i jinými lidmi, je ještě poměrně dost práce, pro kterou nemám žádnou motivaci. S některými dalšími projekty to je podobně.
Jak vnímáš záležitost okolo open-source a financování? Máš stejný názor jako David Grudl, že současný model nemůže fungovat, protože vývojáři prostě potřebují finance a obvykle jsou pouhé donations málo?
Já vlastně žádný open-source nedělám, většina mých projektů je z kategorie source-available. Zveřejním nějaký kód, ale nijak zvlášť nestojím o to, aby kolem něj vznikala nějaká komunita nebo aby se mi v něm někdo šťoural. Když mi někdo nahlásí reprodukovatelnou chybu, tak jsem za to vděčný, protože když tu chybu opravím, tak na ni sám nenarazím v budoucnu. Stejně tak, když někdo požádá o nějakou novou funkci, která se mi zdá užitečná. Ale pokud je chyba pro mě nereprodukovatelná (např. je s databází, kterou sám nepoužívám), tak ji klidně nechám ležet. Obdobně pokud se mi nějaká funkce zdá zbytečná, tak to klidně zavřu s tím, že o to nemám zájem.
Pokud k požadavku někdo přidá i kód, který ho rovnou řeší, tak se na ten kód podívám, ale často ho nějak upravím nebo si to udělám celé po svém. Pokud z původního kódu vycházím, tak v commit logu nechávám autorství původnímu programátorovi, ale málokterý pull-request se do Admineru dostane beze změny.
Chápu, že někdo to může mít jinak. Adminer vznikl jen jako vedlejší produkt mých aktivit. Dělal jsem nějaké komerční aktivity, ke kterým jsem si vyvinul Adminer, který jsem dal k dispozici. Ale živily mě ty komerční aktivity. David to měl s Nette podobně – dělal weby, které ho živily. K tomu si vyvinul framework, který dal k dispozici. Jenže práce na frameworku bylo mnohem víc, takže už ty komerční aktivity k tomu dělat nemohl nebo ho to třeba tolik nebavilo a najednou tenhle příjem vypadl. Přitom oprávněně nabyl dojmu, že vlastně podporuje komerční aktivity všech ostatních a sám z toho nic nemá. Jsem rád, že se financování vývoje Nette snad nějak podařilo vyřešit, i když s tím bylo hodně mrzení.
David zdaleka není sám, komu současný model vadí. Např. Redisu se moc nelíbí, že oni vyvíjí databázi a Amazon ji pak komerčně nabízí. Proto udělali vlastní licenci, která to komplikuje.
Myslím, že jsou možné oba modely. Jeden model je, že člověk nebo firma si dělá nějaké komerční aktivity, ze kterých jako vedlejší produkt vypadne nějaký open-source projekt, který nepotřebuje žádné financování, protože je živen těmi komerčními aktivitami. Druhý model je, že člověk nebo firma přímo dělá ten open-source projekt, potřebuje jím být nějak živen a o vymýšlení nějakých jiných komerčních aktivit nestojí. Že se oběma těmto modelů říká open-source, je asi trochu matoucí a lidi moc nechápou, proč za jedno nemusí platit a za druhé ano.
Jak jsi na tom ty co se týče financí z open source projektů? A jak ti pomáhá komunita?
Za Adminer mi uživatelé za poslední dva měsíce poslali přes PayPal 30 dolarů, přes Patreon každý měsíc posílají 35 dolarů. Finance z Admineru naštěstí žádné nepotřebuji a třeba Patreon jsem zavedl proto, že mě o to jeden uživatel požádal. Donations nabízím hlavně kvůli tomu, že někteří uživatelé prostě přispět chtějí, třeba jen pár dolarů.
S Adminerem nemám žádné výdaje (kromě pár korun za doménu a za hosting, kterých bych si platil stejně), takže mě to nijak netrápí. Na druhou stranu, když jedna firma napadla ochrannou známku kterou na Adminer mám, tak jsem si najal právničku aby tu ochrannou známku ubránila, což se jí povedlo. Zveřejnil jsem to na Twitteru a uživatelé se mi na to během pár týdnů složili. Takže když už nějaké výdaje přišly, tak je uživatelé zaplatili.
Jak vypadá tvůj typický den?
Vstávám mezi sedmou a osmou, pracuji obvykle od půl desáté do půl sedmé. Večer mezi devátou a půlnocí se většinou koukám na nějaké filmy nebo seriály. Občas si večer místo toho dělám na svých projektech.
Na závěr bych se ještě zeptal jaký máš ty osobně přístup ke zdraví a rovnováze s prací. Máš nějaké rutiny pro zdraví? Sportuješ? Kolik hodin denně sedíš u počítače? Jak si čistíš hlavu?
Work-life balance si celkem pečlivě hlídám. Doma po večerech nebo o víkendech prakticky zásadně nedělám nic do práce. I když mám něčeho z práce plnou hlavu, tak to nechám až na pracovní den. Snažím se svůj život dělit mezi práci, rodinu a koníčky. Pokud někdo pořád jenom pracuje, tak snadněji vyhoří a práce ho třeba úplně přestane bavit. Když si někdo nenajde čas na své koníčky, tak se to na jeho spokojenosti časem taky projeví. A bez rodiny by mi bylo smutno, je to podle mě jeden ze smyslů života.
Letos jsem začal lítat na paraglidu a věnuji tomu hodně volného času. Ve vzduchu se dokážu úplně oprostit od všech jiných myšlenek a soustředím se čistě na rozhodování při letu. Po večerech se někdy koukám na videa jiných pilotů a snažím se z toho něco naučit. I mé poslední programovací projekty souvisí s létáním, píšu si třeba takovou pomůcku na interpretaci předpovědi počasí. O svých dojmech z letů jsem toho letos napsal víc než na blog o PHP.
U počítače sedím tak deset hodin denně, o víkendu jednu až dvě.