Přejít k navigační liště

Zdroják » Různé » Třídění programátorů quicksortem?

Třídění programátorů quicksortem?

Články Různé

Se kterým z algoritmů jste se na pohovoru setkali? Je to Quicksort, StackOverflowsort nebo Githubsort?

Ve vaší firmě, kde již devátým rokem pracujete na velmi specifickém, a zároveň hodně důvěrném projektu, o kterém veřejně nesmíte nic říkat, došlo k zemětřesení nebo něčemu takovému, každopádně vám jednoho dne oznámili, že už pro vás nemají práci. Což vám nevadí, protože víte, co se v takové situaci dělá. Totiž otevřete Jobs.cz, Annonci a LinkedIn, vyberete si z nabídek a napíšete jim. Pošlete své CV, do kterého uvedete všechny technologie, se kterými jste kdy dělal, a počkáte si, až si vás zavolají.

U pohovoru se s vámi vlastně ani moc bavit nebudou, protože je zajímá jen jedna jediná věc, a to: jaký jste programátor! Je logické, že tedy dostanete nějaké zadání, které budete muset vypracovat, pravděpodobně implementace quicksortu nebo nalezení nejkratší cesty mezi body.

Jasně, sice se jdete ucházet o pozici ve firmě, co vyvíjí skladové účetnictví, ale je logické, že v takové firmě se quicksort píše velmi často. Vypracujete zadání a jdete domů. Za několik dní se ozvou, a se špatně skrývaným pohrdáním vám oznámí, že jste v kódu udělali chybu, takže vás neberou, rozumíte, NEBEROU!

Nejpozději v tuhle chvíli se začínáte usmívat, protože je vám jasné, co tu dělám: Píšu fikci! Vy byste totiž nikdy chybu v Quicksortu neudělali!

Dovolte mi na úvod drobnou statistiku:

image00

Možná vás to překvapí, ale takhle se věci mají.

Máte pravdu v jednom jediném: Vašeho budoucího zaměstnavatele zajímá, jaký jste programátor! Ovšem jeho definice se může lišit od toho, jak tu definici vnímáte vy, vaši kamarádi nebo komentátoři na webových fórech.

Samozřejmě je důležité, že programátor umí programovat, ale to je takříkajíc samozřejmý předpoklad (neříkám, že to tak samozřejmě je, ale že to je samozřejmý předpoklad). Nutný, ale na většině pozic, kupodivu, nikoli postačující. Kdybych měl vypisovat, kolikrát jsem říkal, že jen “umět programovat” nestačí, tak by to bylo na dlouho. Za mnohé například v článku Vývojář si jen s programováním nevystačí.

Co by chtěli ještě? No, spoustu věcí, například abyste byli schopni se učit. Abyste chtěli víc, než jen odbouchat si to svoje. Abyste dokázali kreativně využívat existujících řešení. Abyste se nebáli nových technologií, abyste se nebáli cizího kódu, aby se cizí nemuseli bát vašeho kódu. Abyste dokázali mluvit s lidma a nechovali se jako sociopat. Ano, můžete se uklidňovat tím, že jste tak velký odborník, že vás firma ráda zaměstná, i když chodíte bos, v tesilkách a s nikým nemluvíte – ale množství takových pozic je omezené a s časem klesá… a klesá… a klesá… a ano, jakkoli je to bolestivé, tak čím dál víc firem přijme radši normálního člověka do party ke svým pěti vývojářům, i když je třeba pomalejší nebo nemá tak nadrcenou teorii, než vysoce výkonného sociopata. Jednak pro něj nemá dostatek stimulů, a jednak – práce ve firmě není jen “vytváření produktu”, ale taky to s sebou nese to, že osm hodin denně trávíte s nějakými lidmi v nějakém prostředí. A další špatná zpráva: pomalu to začíná platit i pro takové ty firmy “vyvíjíme enterprise řešení v Javě…”, dokonce i pro korporace, kde vývojové oddělení představuje “manufakturu na kód”.

nerd

Osobní píár

Trošku odbočím. Jiří Hlavenka napsal na margo jednoho článku, kde si vedoucí výzkumného týmu stěžoval, že o jejich objev firmy nestojí, toto:

Farmaceutické firmy celého světa nehledají nic víc než nové skvělé léky s obrovským potenciálem. Tyhle firmy mají navíc vesměs pobočky i u nás. Byli za nimi oni „vědci“, nebo sedí v bílých pláštích za svými stoly a čekají, až přijde někdo za nimi? Pokud byli a neuspěli, tedy pokud je odmítl i „svět“, asi bude chyba někde jinde. Pokud nebyli, asi tedy bude chyba rovněž někde jinde (…) Pan profesor si stěžuje, že mu nikdo nebyl ochoten dát 20 m na to, aby se jejich vynález začal komerčně vyrábět, a vzápětí si stěžuje, že „je taková doba, že se všechno přepočítává jenom na peníze“. Pan profesor tedy předvádí myšlenkový trojitý Rittberger, za který by zřejmě své studenty nepochválil: na jedné straně chce komerční úspěch produktu, na druhé straně se ale pohoršuje, že z toho někdo chce mít peníze. Článek uvádí, že skvělých nápadů českých vědců leží v šuplíku kvůli „nezájmu firem“ mnoho. Přičemž v dalším je perla: „Cesta z laboratoře do průmyslové výroby už pro vědce není zajímavá“. No když není, tak není: jestli zrovinka tady nebude někde ten zakopaný pes v tom, že si, abych opět citoval, „akademická sféra nerozumí se sférou komerční“.

Jiří Hlavenka má naprostou pravdu. Vzpomínám si na profesora Milana Nováka, který ve své přednášce o vědecké práci říkal, že se snaží studentům vysvětlit, že “vědecká práce” neznamená jen něco objevit, pak o tom napsat do časopisu a čekat, až si toho někdo všimne. “Odborných impaktovaných časopisů,” říkal profesor Novák, “je dneska už skoro tolik, kolik je vědců. Článek se k nikomu nedostane. Ale to není chyba těch časopisů, to je chyba vědců!” Svým studentům vysvětloval, že když něco objeví a chtějí, aby to přešlo do praxe, tak je potřeba napsat nejen článek, ale taky vyrazit na konference, mluvit s lidmi, “popularizovat” svoje výsledky, dokonce jezdit i na konference “komerční” a mluvit o tom před lidmi z praxe…

Bohužel tohle, podle profesora Nováka, je pro mnohé vědecké pracovníky jako mávání rudým hadrem: “To přeci není věda, to nemá s vědou nic společného, to je zaprodávání se komerci!” Často si na pana profesora vzpomenu, najmě když čtu takové ty úvahy o tom, kdo všechno kolem vás může za to, že se o vaší práci neví a že nedosahuje dostatečného ocenění! A po pravdě řečeno i z vlastní zkušenosti vím, že člověk často narazí na akademika, který si před vámi, obrazně řečeno, až odplivne, když zjistí, že jste z “komerční sféry”, a na otázku “nemáte tu něco zajímavého, o čem by stálo za to napsat?” je schopen říct: “Pro vás? Ne, pro vás nic nemáme!” Těžko pak u rozhovoru, kde akademik pláče, jak s nimi komerční sféra nespolupracuje, cítit nějakou účast.

Zpět od vědy k programátorům. Věřte nebo ne, ale platí tu naprosto totéž. Pokud jste žáci profesora Nováka nebo někoho s podobným přístupem, tak to asi víte, ale pro ty ostatní to bude možná velký problém se s tím mentálně smířit: Můžete být sebelepší, ale pokud se o tom svět nedozví, tak jako byste nebyli. A svět se o tom dozví jen tehdy, když mu to řeknete!

Vedl jsem Zdroják dost dlouho na to, abych poznal mentalitu některých čtenářů: “Prosazovat se? To já nepotřebuju, to dělají jen hochštapleři, kteří nic neumí, tak se musí zviditelňovat. Já nic takového nepotřebuju, za mne mluví moje práce…” Postupem času se stávali víc a víc zahořklými, a ti, kterým tohle přesvědčení vydrželo nejdéle, se dostali do stádia “všechno je špatně, svět je špatně, média nejvíc, protože píšou o kdejakých lamerech, zatímco já dělám skvělou práci… ale nikdo o tom neví! Já totiž nemám potřebu o tom kecat do novin!” To zajisté nemají, ale frustraci si musí podrbat aspoň v komentářích. Ono je totiž řádově snazší napsat “Já dělám mnohem lepší a důležitější a kvalitnější programy než tady ten matlal v článku, ale nikomu je neukážu, protože nemám zapotřebí exhibovat,” než jít s vlastní kůží na trh.

Klíčové slovo zní: Ambice. Pokud máte větší ambici než “naprogramovat, co mi zadají, a přinést domů peníze”, tak vám nezbude, než svoji práci zveřejňovat, mluvit o ní, popularizovat ji. I kdybyste si měli založit blog! Musíte to udělat, pokud chcete svou prací dosáhnout čehokoli navíc, i kdyby to “navíc” mělo být jen to, že dáte svoje knihovny k dispozici světu. Pokud takovéhle ambice nemáte, tak to samozřejmě nevadí – spousta šikovných lidí může dělat takovou tu běžnou každodenní, byť vysoce kvalifikovanou, práci a budou spokojení.

ambitious

Jen jednu věc se sluší dodat: “Ambice” má v češtině pejorativní nádech, coby něco přiboudlého, nebo dokonce neslušného. Pod označením “ambiciózní” si téměř vždy představíme mladého arogantního blba, který jde za kariérním postupem přes mrtvoly. Bohužel. Přitom za to to slovo nemůže, protože ambice mohou být různé. Třeba “ambice zlepšovat se”. To, že slovo “ambice” máte spojené se zmrdama, ještě neznamená, že byste ho měli škrtnout ze svého života. A tím se dostáváme obloukem zpátky k přijímacímu pohovoru. “Jaké máte ambice?” je dobrá otázka, na kterou se vás mohou zeptat, ale počítejte s tím, že ať odpovíte cokoli, tak bude mnohem lepší, když to budete moci podepřít něčím veřejně dostupným: vlastním kódem, článkem, teorií, knihovnou… (Ne, komentáře se do toho nepočítají!)

Zpráva o stavu programátorů

Slovenský Denník N vydal komentář Správa o stave programátorov. Článek vyvolal silné odmítavé reakce, protože sahá programátorům na ty ustálené představy z prvních odstavců. Totiž že na programátorovi je nejdůležitější, jak kvalitně zpracuje nějaký problém, a všechno ostatní je nepodstatné; že rozhoduje, jak kvalitní je kód, ale bohužel, frikulíni z managementu tohle nechtějí pochopit. Výtky většinou končí lamentací ve smyslu “Tak si teda vezměte nějaké komunikativní blbečky, co sice umí všechno okecat, ale nevyznají se v cizím kódu, a když před ně hodíte trasovatelný kanonický commonlispový parser, tak nevědí, co si počít, hlavně že mají soft skills.”

Mno, na tomto místě bych ukázal další graf, kde bude počet situací, kdy před vás někdo hází trasovatelný kanonický… však víte co, a počet situací, kdy je ve firmě potřeba použít soft skills, ale neudělám to, myslím, že pointu už chápete…

Já si třeba nedokázal představit, jak silný odpor vzbudí tato pasáž: „Open source, StackOverflow, blog? Zaujíma to u nás vôbec niekoho? Malo by. Nič nepovie o kvalite programátora viac ako tieto tri veci. Pozriem jeho projekty na GitHube, odpovede na SO, názory na blogu a jediné čo ešte treba spraviť je pozvať ho na kávu. Je to aj výzva pre samotných programátorov nech sú verejne aktívni. Ťažko presvedčíš iných o svojej kvalite, keď výsledky tvojej práce sú neviditeľnou kvapkou stratenou v piatich rokoch vývoja pre nadnárodnú korporáciu.“

Tak třeba: “Svou práci na GitHubu nemám, je přísně tajná”. Nebo “na StackOverflow aktivní nejsem, protože je moje práce tajná a příliš specifická.” Sakra, to všichni programují pro armádu a BIS? Nebo “Na Githubu mám jen svoje hobbyprojekty.” Nebo “Na GitHubu mám projekty v assembleru 6502, pochybuju, že pan Malý dokáže takový kód pochopit…”

No, u toho posledního jsem se docela pobavil, ale pointa je někde úplně jinde: U přijímacího pohovoru nechce nikdo vidět váš GitHub proto, aby se zavrtal do vašeho kódu, posoudil, jak moc je užitečný pro váš tajný projekt, udělal bezpečnostní audit a rozebral ho (“Tady máte jedno sčítání navíc, to je chyba, takže vás nemůžeme vzít, bůhví kolik zbytečných sčítání byste nám nacpal do kódu!”) Ne, chce vidět, jak to vedete, jak přistupujete ke svým hobby projektům, protože to o vás řekne víc než celé slavné CV, které, přiznejme si, bude podle toho, co lidé píšou, vypadat nějak takto: “Studium, ještě jedno studium, jedno zaměstnání (tajný projekt), druhé zaměstnání (ještě tajnější projekt), současné zaměstnání (ultra tajný a specifický projekt).”

octobiwan

“A to jako když GitHub nemám, tak mě nevezmete? Ten svět teda… úpadek… matlači… kdo nemá sociální sítě… rezignace na kvalitu…” Binární vidění světa někdy bolí, že? Je to tak, že když něco není bílé, tak to nemusí být zákonitě černé. A to jako když GitHub nemáte, tak přesto jsou jiné způsoby. Třeba s sebou vezměte kus kódu z toho, na čem děláte, a pobavíte se o něm. Nemusí to být ultratajné jádro vaší práce, nemusí to být dokonce ani nic pracovního, může to být nějaká legrácka, utilita… U pohovoru je bude zajímat, jak jste to psali, proč, jak jste u toho přemýšleli, chtějí si poslechnout, co jste řešili, jak a proč. A je víceméně šumák, jestli jim to předvedete na assemblerovém demu nebo na utilitě pro síťovou komunikaci. Váš kód nebudou kontrolovat, jestli dodržuje zásady správného programování. Jen chtějí vidět, jak máte utříděné myšlenky, jak se to odráží ve struktuře kódu, zajímá je, jak máte komentováno, dokumentováno, co považujete za zajímavý problém… Hlavně chtějí slyšet, jak o svojí práci mluvíte. Protože čím dál víc lidí z firem hledá vývojáře, co není jen programátor. Vývojáře, který dokáže víc než jen psát kód, byť rychle a kvalitní.

Počítejte s tím, že se vás zeptají: “Počkejte, nerozumím tomu, vysvětlete mi to: K čemu přesně to je?” (Bacha, můžou blafovat!) Když v tu chvíli obrátíte oči v sloup a povzdychnete si, že jako těžko někomu něco… když ten dotyčný stejně neví, vo co jde…, tak poletíte, a nebude to proto, že dotyčný nerozuměl tomu, co děláte. Bude to proto, že nejste schopni vysvětlit, co děláte! Pokud nejste schopni vysvětlit, co děláte, tak tomu s největší pravděpodobností nerozumíte. Ano, může to být i tím, že neumíte vysvětlovat… ovšem vysvětlování, to je jen schopnost utřídit si myšlenky, rozdělit je na podstatné a vedlejší, a pak říct ty podstatné tak, aby to dávalo smysl. Bystré hlavy chápou, méně bystré mohou hledat, v čem se to liší od schopností, co by měl mít dobrý programátor.

Spoustu vášně vzbudila i poznámka o open source. Tady bych začal citátem z Wikipedie:

Přijímací řízení (na Harvardovu univerzitu, pozn.aut.) trvá rok a je velmi selektivní: ročně je přijato asi 9 % všech žadatelů (na bakalářský stupeň ještě méně). Typičtí úspěšní žadatelé o přijetí patří k nejlepším studentům na své škole (z objektivních kritérií jsou zohledňovány zejména testy SAT a zprůměrovaný prospěch ze střední školy), o přijetí však rozhodují i doporučující dopisy, mimoškolní aktivity uchazečů a dobrovolné činnosti.

Harvard, hmm… A chce vidět doporučující dopisy, mimoškolní aktivity a dobrovolné činnosti a přihlíží k tomu při výběru. Zkuste do přihlášky napsat “Moje mimoškolní aktivita, to jsou takové maličké projektíky, na kterých není vidět nic zajímavého, navíc byste si mohli myslet, že to je vrchol toho, co umím, no a některé z nich jsou v assembleru 6502, to byste asi nepochopili…” Že to je jiné? A v čem, prosím pěkně? Mimoškolní aktivity si nahraďte tím GitHubem, dobrovolnou činnost StackOverflow nebo open source, a doporučující dopisy, to bude LinkedIn nebo třeba váš blog…

tl;dr: Měli byste mluvit, psát, publikovat, přednášet a zapojit se. Aspoň trošku. (Můžete zkusit napsat článek třeba pro Zdroják – pozn. red.) Není to bodovaná disciplína, kde vyhrávají ti, co mluví a píšou nejvíc. I ze dvou článků bude vidět, jak uvažujete a jak nad prací přemýšlíte. A i pokud vám nejde o “osobní píár”, tak zvažte jeden efekt: Tím, že o svojí práci mluvíte s neznámými lidmi, tím, že o ní píšete, tak si v první řadě uspořádáte sami svoje myšlenky, utřídíte si je, zachytíte je, a to vám pomůže ve vaší práci mnohem víc než mozol na zadku a obličej opálený svitem monitoru.

Můžete se bez toho všeho samozřejmě obejít a vyrazit do firmy, kde vám u pohovoru dají za úkol vypracovat quicksort a přijmou toho, kdo ho napíše nejlíp. Ale pamatujte si, že počet firem s kójemi pro neosobní programátory, kteří jsou vysoce specializovaní odborníci v jedné úzké oblasti, není neomezený a pravděpodobnost, že si budete muset najít práci mimo takovou korporaci, bude narůstat…

Enum a statická analýza kódu

Mám jednu univerzální radu pro začínající programátorty. V učení sice neexistují rychlé zkratky, ovšem tuhle radu můžete snadno začít používat a zrychlit tak tempo učení. Tou tajemnou ingrediencí je statická analýza kódu. Ukážeme si to na příkladu enum.

Pocta C64

Za prvopočátek své programátorské kariéry vděčím počítači Commodore 64. Tehdy jsem genialitu návrhu nemohl docenit. Dnes dokážu lehce nahlédnout pod pokličku. Chtěl bych se o to s vámi podělit a vzdát mu hold.