Vyjádření k názorům u rozhovoru na Lupě
Školení, která pořádám
Na Lupě se mnou vyšel rozhovor a v diskusi se objevilo skoro 200 příspěvků, aniž bych na kterýkoliv z nich reagoval a tím diskusi vyživoval. Obvykle v diskusích reaguji, rád se lidi snažím přesvědčit o tom, že mám pravdu a oni se pletou. Tady mi to ale přišlo zbytečné. Přesto se v názorech objevilo několik zajímavých postřehů, ke kterým bych se rád v klidu vyjádřil (proto zde a ne v diskusi na Lupě).
Co dělá 3000 programátorů Facebooku?
Taky jsem si tuto otázku několikrát kladl. Ale je pravda, že i já jsem většinu doby ve Facebooku dělal na Phabricatoru, který vývojáři Facebooku sice používají, ale s Facebookem jako takovým vlastně nesouvisí. Velké firmě se zkrátka vyplatí investovat i do jiných věcí než do hlavního produktu. Spousta lidí navíc dělá na infrastruktuře (třeba různých úložištích), která je zvenku prakticky neviditelná.
Google mi taky nabízel práci a já odmítl
Nabídka práce a skutečný nástup jsou dvě velmi odlišné věci, které odděluje pohovor. Do Facebooku jsem doporučil čtyři Čechy, o kterých jsem přesvědčen, že jsou vynikající programátoři, navíc většinou mají i další přednosti. Přiletěli na pohovor a nikdo z nich neprošel. Bylo to pro mě trochu zklamání. O mně to samozřejmě nevypovídá nic moc – to, že jsem dokázal projít pohovory do Facebooku, Google a několika dalších firem (kde jsem nabídku nakonec nepřijal), vypovídá leda o tom, že na pohovoru dokážu zaujmout a technicky ho zvládnout. Nicméně lidi, kteří si myslí, že dokázali totéž jen proto, že je známá firma taky oslovila, žijí v iluzi.
Source Available
V diskusi mi lidi vyčetli, jak vedu své open-source projekty. Je pravda, že model source-available mi je mnohem bližší. Když by to šlo, tak bych na GitHubu u svých projektů asi úplně zrušil pull requesty nebo je nechal jen pro překlady. Laťku mám nastavenou hodně vysoko, ale navíc asi v jiné ose, než většina přispěvatelů čeká. Tohle je jeden z typických pull requestů zmíněných v diskusi: adminer#2. Z několika malicherných důvodů jsem ho nepřijal a udělal jsem si to po svém. Ironií je, že autora pull requestu Juzny si nesmírně vážím a považuji ho za génia. Přesto jsem jeho kód smetl ze stolu. Nejsem přesvědčen o tom, že komunitní vedení projektu přináší ty nejlepší výsledky. Jestli chcete být součástí komunity, můžete přispívat do phpMyAdmina. Netvrdím, že komunitní přístup nemůže vést k dobrému výsledku, ale vyžaduje to úplně jiný druh investované energie, než kterou jsem do open-source ochoten investovat já. Sobecky mi jde především o to, abych měl z práce na svém projektu radost.
Části kódu budící ze spaní
Na příspěvku kritizujícím použití REPLACE(REPLACE(REPLACE(REPLACE(photofile.file, '.png', '.gif'), '.jpg', '.gif'), '/org/', '/60x60/'), '/640x480/', '/60x60/') AS file
je zajímavé především to, že pochází od někoho z domény iinfo.cz (vydavatel Lupy). Pro Internet Info jsem sice nikdy přímo nepracoval, ale pracoval jsem pro Athos Travel, což je bratrská firma sídlící ve stejných prostorách jako Internet Info. Je tedy docela dobře možné, že to je skutečně můj kód. Nelahodí mému oku, na druhou stranu bych se nerad vymlouval jen na to, že to je prehistorický kód. Proč jsem ho tehdy takto napsal? Nejspíš bylo v databázi uložené celé URL obrázku a já jsem ho potřeboval změnit na URL náhledu. Proč bylo v databázi celé URL? Možná jsem návrh a obsah databáze po někom zdědil a nepovažoval jsem za důležité ho měnit, nevím. Proč to je řešené na úrovni SQL a ne aspoň v PHP? Tipoval bych, že komponenta zobrazující odkaz přijímala přímo SQL, které má zavolat, takže změnu URL nebylo kde jinde provést, ale to jen střílím od boku.
Musím ale přiznat, že jsem nedávno napsal kód, který je tomuto celkem podobný. Vnitřně jsem s tím poměrně bojoval, ale nakonec jsem nevymyslel nic lepšího. Projekt, na kterém jsem pracoval, používá systém, který na základě SQL dotazu zobrazí HTML tabulku. Je to velmi pohodlné, protože zobrazení další tabulky (které se v tom projektu dělá často) znamená jen přidání dalšího dotazu do konfigurace. Ale třeba při požadavku na vytvoření odkazu se to komplikuje – v projektu je abstrakce, která na základě konfigurace vytvoří <a href="">
a do něj umístí ošetřenou hodnotu sloupce vráceného dotazem. Ale už tam není abstrakce, která by odkaz dovolila sestavit ze samotných dat, třeba http://example.com/{path}?param={param}
. Správné řešení samozřejmě spočívá v doplnění této abstrakce, ale tím se dostáváme zpátky k jednomu z nosných témat rozhovoru – je to to nejlepší, na co můžu využít svůj čas, budu tím mít největší impact? I když k tomu mám vnitřní potřebu, tak o tom nejsem přesvědčen.
Kód Admineru míchá aplikační a prezentační logiku
To je fakt, dokonce jsem i uvažoval, že bych Adminer přepsal, i když z trochu jiných důvodů. Pak mi ale přišlo, že bych tím strávil nepřiměřené množství času, které raději věnuji na tvorbu něčeho nového. Výsledek by byl totiž prakticky pouze ten, že bych mohl pyšněji ukazovat svůj kód, navenek by se přepsání nejspíš nijak neprojevilo. A to ještě v tom lepším případě – jednou z důležitých priorit při vývoji Admineru je výkonnost a současná podoba kódu tomu je do značné míry přizpůsobena. Platí to i v situaci, kdy není jasné, jak dlouho bude trvat nějaký dotaz – Adminer zobrazí alespoň část uživatelského rozhraní a na dotaz čeká už uživatel, který něco vidí. To se třeba při tradičním MVC nedělá úplně přímočaře – controller se zeptá modelu, počká na doběhnutí všech dotazů a když v nějakém dojde k chybě, tak zobrazí chybový pohled, jinak normální. Tohle schéma je pro Adminer nepoužitelné. Netvrdím, že to je neřešitelný problém, dotazy můžeme provádět líně a reportování chyb trochu zrelaxovat, ale kód to nadále komplikuje. Navíc se současným kódem Admineru se mi dobře pracuje – když je v něm potřeba něco upravit, tak je to většinou jednoduchá změna na jasně daném místě. Takže ani tím, že by se s kódem lépe pracovalo, si přepsání obhájit nedokážu.
Další prioritou při vývoji Admineru je velikost zdrojového kódu, která je u většiny projektů zcela nezajímavá. Kvůli tomu třeba funkci definuji až v momentě, kdy je volaná z více míst, protože jinak se jejím inlinováním ušetří místo. To přehlednosti zdrojového kódu taky moc nepomáhá.
Machruje a cpe se do médií
Já tento postoj celkem chápu. Řada lidí může mít pocit, že dělají něco zajímavějšího než já, klidně i oprávněný. Přesto je média s žádostí o rozhovor neosloví. Když mě z Lupy oslovili, tak jsem vyhověl. Několik dalších žádostí i z tištěných médií jsem odmítl, protože jsem měl pocit, že bych se zbytečně opakoval. Já se na to dívám takhle: „Kdo jsem, abych posuzoval, jestli jsem dost zajímavý na to, aby se mnou udělal novinář rozhovor?“ Když o to stojí, tak má asi pocit, že to čtenáře bude zajímat. Pokud o to čtenáři nestojí, tak je to jeho špatný odhad, ne můj.
Závěr
Já jsem celkem splachovací, je mi vcelku jedno, co si o mě kdo myslí a píše. Vím, že nejsem dokonalý a své chyby si dokážu připustit. Za svůj život se nestydím a když se někdo zeptá, tak mu odpovím. Děkuji všem, kdo se mě zastali, ať už přímo v diskusi nebo na Twitteru a Facebooku.
Diskuse
Jirka:
Jakube, celkem se divim, ze vubec travite cas reakci na takove nesmyslne vykriky. Preji hodne stesti a diky za reprezentaci ceskych programatoru ve svete.
Dal bych tomu +1, kdyby to tu šlo :-) Máš mé uznání nejen za to, že jsi to všechno četl a odpověděl na to, ale taky za to, ...že ti to vůbec stálo za to.
Je opravdu smutné, že se ještě najde spousta "vášnivých diskutérů", kteří jen hejtují, aniž by sami něco dokázali. Ta diskuse na Lupě je opravdu humáč.
Já jsem pyšný na to, že i Česká republika má někoho, kdo udělal s PHP docela velkou "díru do světa" a ještě k tomu nepřestává psát články o PHP, které svou odborností na českém internetu téměř nemají obdoby (čest výjimkám) nebo si udělá čas na to, aby ostatním v rozhovoru zpřístupnil, jak to vlastně chodí ve světoznámých SW firmách, ve kterých se málokomu podaří získat místo.
Díky, Jakube.
Hodně štěstí a těším se na další články :-)
Martin:
Su 2 typy ludi: ti co *to* robia a potom ti co o *tom* rozpravaju. :-)
paklen:
a pak je jeste typ co to umi a take to umi podat...
martin prokes:
+1!!!
Tohle by si měli ti nafoukani grudlove a další číst povinne každý den před spaním. To jejich hloupé " napiš svý jméno a pojď mi to rict do očí"
místo toho zde čtu "máte pravdu, ale takový jsem a je mi jedno co si myslíte"
vrána jednoznačně nacichl amerikou a našemu cechackovskemu hemžení se jen smeje. měl jsem v usa úplně stejný pocit ;)
David Grudl:
Chucpe…
Na Lupě píšeš „Zatímco ve vyspělých zemích jsou celebritami programátoři typu Gang of Four, u nás se mediálně oslavují "geniální bastlíř, co utekl do Facebooku"“, tady najednou ++1 a smajlíci. Ubožáku.
nesnasim.php:
Davide, je pravda, že příliš chlastáš?
David Grudl:
Piju výjimečně. Což je pochopitelné, pouze střízlivý člověk může být schopen něco smysluplného vyvíjet. To jsi nevěděl?
nesnasim.php:
Poslední dva měsíce máš ale nějakou tvůrčí krizi, co? Je škoda, že Nette tím končí :)
Michal:
Oh.. jak jsi bláhový..
n.p:
Chceš-li si rýpnout do Davida nebo Nette, vymysli své anonymní jméno. Nedělej to pod druhou mocninou anonymního jména.
Ales Pavel:
nesnasim.php:je pravda ze se neumis podepsat?:)
n.p:
Davide, komentář, který napsal nesnasim.php v 10:42:24, není ode mě. Já neznevažuji Nette a tvou práci, které tě živí.
paranoiq:
já hádám, že pobyt v americe Jakubovu reakci ovlivnil jen minimálně. Jakub vždy i na ty největší hatery reagoval věcně, se slušností a kupodivu s jistým typem pokory. až se mu divím. je to prostě gentleman
zato na vás je vidět, že když někdo není slušný od povahy nebo od výchovy, ani setkání s jinou kulturou ho slušnosti nenaučí
Krásně napsané. Běžný hospodský Čech by líp postavil i Karlštejn, kdyby na to měl čas, peníze, někdo mu to nabídl a milion dalších vnějších okolností.
A kašlat na názory haterů by měla být naprostá samozřejmost, ale člověka to stejně dokáže zamrzet, proč má někdo takové potřeby.
Marek:
Tvoj rozhovor na Lupe som si veľmi rád prečítal a bolo to pre mňa veľmi zaujímavé. Dúfam, že Ťa to v budúcnosti neodradí od poskytovania podobných rozhovorov. Pre mňa, ktorý pracujem na Slovensku, je veľmi zaujímavé prečítať si niečo o tom ako to vyzerá v US.
Taktiež nechápem ľudí, čo píšu podobné urážlivé príspevky. Ani som to nebol schopný dočítať, bolo mi z tých ľudí zle. Bol by som veľmi zvedavý, či by také veci boli schopní povedať Ti rovno do očí. Silne o tom pochybujem.
V každom prípade Ti aspoň takto chcem vyjadriť podporu. +1
Ales Pavel:
Jakube, i ja jsem napr. sveho casu v notORM s kolegou nasel veci za ktery bych ti naplacal na zadek (tusim ze to bylo o tom jak jsi tam resil reference, uz vazne nevim).
Ty jsi ale phpeckar a proto me to nijak nepobourilo, naopak.
Smir se s tim ze kazdy tihneme k necemu. Krom toho je iluzi se domnivat, ze nekdo sam napise genialni software bez zpetne vazby, to je nesmysl. Kazdy mame zazite techniky, ktere nas v urcitem smeru omezuji. Tim chci jen rici, aniz bych snizoval tve programatorske kvality, ze prasacky kod piseme vicemene vsichni.
Dilem je to tim ze predelavame pohrobek, dilem neznalost a dilem proste nase "zatizeni" na nami oblibenou techniku.
Pak me udivi, ze to vubec resis, pokud tohle znas a vis a pokud muzeme vychazet z toho, ze tohle zna a vi kazdy soudny programator:)
Jarda:
Prosim vas, ten spanking se resi na jinych serverech. ;-)
Ales Pavel:
no ty urcite vis na kterych;)
Stefan Fiedler:
Moc krasne napsane Jakube. I kdyz se musim priznat, ze z tech hejtovacich komentaru jsem mel take radost. Vetsina komentujich 'mistru' byla tak pruhledna, ze se poprve u IT clanku zasmala i moje manzelka. :-)
Sebastian:
Dobrý den Jakube, článek na Lupě se mi líbil, líbilo se mi, že popisujete i jiné kultury; ale z komentářů jsem byl zklamaný...
Každopádně máte u mě respekt za odstup, kterého jste schopný.
PS: Píše hodně poutavě, prošel jste nějakým kurzem, nebo jste se "prostě vypsal na blogu" (a knize)?
Jakub Vrana :
Na základní škole nás učitelka dobře naučila pravopis a gramatiku, takže na to se celkem můžu spolehnout a při psaní mě to nerozptyluje. Žádný kurz jsem nedělal, vypsal jsem se na blozích – třeba i na http://filmy.vrana.cz/, což posloužilo hlavně jako cvičení v tom stručně a pokud možno jasně něco vyjádřit.
Petr Steinbauer:
"Každý úspěch, jehož dosáhneme, nám udělá nepřítele. Chceme-li být oblíbeni, musíme být průměrní." (Oscar Wilde)
Martin:
Z hloupých komentářů bych nevyvozoval vůbec žádné závěry - ze statistického hlediska jde o výraznou (byť dobře viditelnou) menšinu čtenářů.
Pokud můžu mluvit za fóra do jejichž technického zázemí jsem měl možnost nahlédnout - celý flame je často dílem jednoho dvou fyzických uživatelů.
Petr Tvaroha:
Jakube, máš můj obdiv, že jsi vůbec schopen komunikovat s tou bandou závistivých a frustrovaných blbečků na Lupě (a často i jinde). Držím palce!
Mario:
dobry rozhovor.. drzim palce Jakub :)
nesnasim.php:
1. Čtyři "vynikající programátoři," kteří neprošli, je vysoké číslo. Jaká je tvoje teorie jejich neúspěchu?
2. Slyšíme, že PHP je taková hrůza, že Facebook transpiluje PHP do C. Používají se ve Facebooku jiné jazyky? NodeJs?
koubel:
určitě a spousta - určitě mraky Javascriptu, ale i hodně C/C++, Javy a najdou se i takové srandy jako OCaml - https://github.com/facebook/pfff/.
A když už jsme u těch osobností, jeden za všechny - C++ superstar - Andrei Alexandrescu - také pracuje ve FB,
Lamicz:
FB PHPko nekompiluje do C++ protože by to byla "taková hrůza", ale pro výkon. Je potřeba si uvědomit, že při počtu požadavků je i minimální zrychlení brutálně poznat a může ušetřit klidně stovky serverů.
Pleca:
rozhovor na lupe jsem si rad precetl byl velice zajimavy a diky za nej
zbyso:
blbcu a zavistivych lidi vzdycky bylo i je nepomerne vic, nema smysl se tim trapit ;)
jinak tvuj model source-available plne chapu a podporuji:)
Aleš:
Díky za otevřený rozhovor i dodatečné vyjádření a stejně tak za váš web o PHP. Jste typ člověka, který si onen "spotlight" právem zaslouží a ukazuje mmj. na fakt, že skutečný zájem o věc, tvrdá a poctivá práce a osobní rozvoj jsou vlastnosti, které se vyplácí. Do budoucna přeji vše nejlepší při tvarování další kariéry i v osobním životě. A neváhejte si jednou za čas ukrást kousek mediálního prostoru, ať jsem o něco více v obraze :)
Jan Forman:
Článek byl velmi dobrej,
pak jsem viděl tu diskuzi a hned ze začátku, už to mě otrávilo. Samej špecialista a programátor (někteří to prý dají sami).
Reagoval jsem jen jednou a už to ani nikdy číst nebudu - ztracený čas. Bohužel, takové lidi potkávám denně, takže žádný šok. Mají pocit, že pokud naklikali něco ve Windows, popř zkusili triviální aplikaci klient->sql / že už tomu rozumí a že lze takto dělat všechno.
Zkoušel jsem jednu podobnou aplikaci k facebooku, byla šíleně pomalá i pro jednotky uživatelů (právě proto, že byla napsaná běžným způsobem - interaktivní ani moc nebyla, musela by se dekomponovat a v podstatě úplně přepsat).
Mnoho z těch lidí nechápe, že je třeba měřit úspěchem/výkonem - funguje / nefunguje.
Aleš:
Za sebe musím říct, že Jakub určitě není žádný namyšlený pitomec. Kdysi jsem s ním pracoval v jedné pražské firmě, kde mě jako mladého PHP programátora docela hodně naučil. I když se dnes živím převážně Javou, tak některé jeho poučky si stále beru k srdci. Docela se mu divím (vzhledem k mým tehdejším znalostem), že tenkrát se mnou vůbec měl trpělivost mě něco, v rámci pracovní doby, ještě učit :))
Osobně přeji mnoho úspěchů a doufám, že naštveš ještě hodně lidí svým úspěchem :)
ic :
K těm pull requestům, není škoda když už od někoho přijde a je užitečný ho odmítnout a napsat si to samé znovu? Není lepší commiterovi napsat, co má udělat jinak, ať to změní a zkusí znovu? Nemyslím, že by ani tak šlo o to, kdo tam u toho commitu bude uveden, ale já třeba bych autorovi rád pomohl a ušetřil mu nějakou práci a když vidím, že to samé dělá znova, tak nevím, jestli to vůbec mělo smysl.
Jakub Vrána :
Někdy to smysl má, někdy ne. Někdy je právě rychlejší to napsat znovu, než podrobně vysvětlovat, jak by to přesně mělo být.
Diskuse je zrušena z důvodu spamu.