aneb ZPRO a ZALG – nejen, že  „je to hezký“

Milí jaderňáci,

po absolvování FJFI (SOFE) mě vítr zavál na různá místa po světě, včetně evropské centrály společnosti Google. Odtamtud mne po více než roce nakonec zlákala opět akademická sféra doktorandská, ale o tom až někdy příště. Podstatné je, že nyní už můžu svobodně napsat článek, který mi dlouho ležel na srdci. O tom, v čem vám jaderka pomůže se dostat do Google a jestli jsou výběrová řízení opravdu taková, jak se o nich špitá na sociálních sítích.

Jak to celé probíhá? Začnete od online přihlášky, nebo ještě lépe, pokud ve firmě někoho znáte, nechte se rovnou osobně doporučit hned na začátku. V obou případech, pokud váš životopis vypadá k světu, zavolá vám HR a prověří základní fakta, která píšete – třeba co vlastně znamená ta vaše zkušenost v oboru. To ještě ani není pohovor. Pokud se všechno jeví v pořádku, dostanete termín telefonického interview, tentokrát už s někým z oboru. Prozkouší vás ze ‘základních’ technických pojmů podle potřeb role, na kterou se hlásíte, a ověří, že umíte během pár minut navrhnout třeba jednoduchý algoritmus na běžnou úlohu. Celé to trva kolem půl hodiny. Jestliže jste uspěli i tady, jste po několika dnech až týdnech (Google si dává na čas) pozváni přímo do kanceláře (hurá, tobogán!), kde začíná pořádný pohovorový maraton – podle náročnosti pozice mluvíte se třemi až šesti lidmi, s každým půl hodiny až hodinu, někdy jen přes videokonference. Na odlehčenou máte alespoň polední pauzu v pohádkové jídelně. Během těchto pohovorů dochází k nejnáročnějšímu prověřování vašich znalostí a schopností, ale o tom až dále. Pokud se zadaří (to se zpravidla dozvíte opět až po týdnech), musíte napsat detailní několikastránkový report o sobě a svých dosavadních uspěších. Ten pak putuje k výběrčí komisi do Spojených státu. V něm je potřeba maximum informací podložit čísly (můj školní program zlepšil X o Y %). Navíc tu můžou byt rozhodující další faktory – co takhle nějaká dobrovolnická činnost? Jestlipak píšete do školního časopisu, hmm?

Teď už tedy konečně k tomu obsahu, krok po kroku. Nejprve tedy životopis – krom toho, že byste měli být samozřejmě silní programátoři a uvést podrobnosti nad rámec konstatování typu ‘umím Javu’, je třeba myslet na několik věcí. Zaprvé, velkou roli hraje prospěch. Obzvlášť když nejste z Harvardu, ale z Prahy. V Americe se známky ve třídě rozdělují proporčně, takze pokud máte z většiny zkoušek C, ale víte, že jste borci, protože z celé třídy byla dvě C a zbytek málem vyletěl, je třeba to náležitě vysvětlit. To platí mimochodem u všech mezinárodních společnosti, kam se budete hlásit. Zadruhé, buďte zkrátka dostatečně cool. Google dostane na jednu pozici stovky životopisů a každý z nich říká „jsem dobrý programátor“. Takže pokud třeba skáčete s padákem, jste blázni do Hvězdné brány nebo milujete šifrovačky, šup tam s tím. Pokud jste někdy něco dělali v mezinárodním týmu (pivní teambuilding se zahraničními studenty?), šup tam s tím taky. Výborně, teď už máme zajímavého kandidáta a jdeme dál.

U telefonického pohovoru máte možnost využít místo mobilu videohovor přes gtalk, což je, zjednodušeně řečeno, obdoba skypu v gmail chatu. Pokud si nejste s telefonickou angličtinou jistí v kramflecích, může vám video zjednodušit komunikaci. Od HR byste se neměli nechat překvapit obecnými otázkami, proč se na danou pozici hlásíte a jaká jsou vaše očekávání. Jinak celkem o nic nejde. Zato technický telefonický rozhovor jde rovnou k věci. Můžete dostat pár zařívacích otázek typu „jaká je složitost quicksortu“, „řekni mi všechno, co víš o hešovacích tabulkách“, „kolik je dva na dvanáctou“ nebo „v čem je rozdíl mezi get() a fget()“. Můžete být požádáni otevřít Google dokument, sdílet ho s tím, kdo se ptá, a programovat do něj při hovoru. Příklad: Vyjmi prvek z obousměrného seznamu (Ehm, co vám to připomíná?). Nebo: Napiš funkci, která v řetězci najde všechny otazníky a nahradí je všemi možnými kombinacemi jedniček a nul (tedy např. ?? = 10,01,11,00). Nebo : Napiš program, který zjistí, jestli je zadaný řetězec součástí druhého zadaného řetezce. Obecně je důležité přemýšlet nahlas, zmínit nejdříve jakékoli, i třeba mechanické a neefektivní řešení, a pak uvažovat nad tím, jak by se dalo zlepšit, případně i proč nefunguje.

U ústních pohovorů jsou příklady o něco málo složitější – to ovšem neznamená, že pokud jste za hodinu napsali na tabuli jejich základní řešení, máte vyhráno. Dobrý kandidát vyřeší základní problém rychle, jelikož mu pak zbude čas k zamyšlení nad složitostí algoritmu (Ano, to je ta zatracena O notace), nad případnými zlepšeními, použitím datových typů, potížemi s atypickými vstupy apod.

Základní algoritmické struktury jsou většinou schované pod ‘úlohou ze života’, ve které je musíte odhalit. Třeba: Parkoviště je úplně plné až na jedno místo. Přemísti auta do daného pořadí za předpokladu, že v jednu chvíli můžes přesunout pouze jedno auto. Nebo: Navrhni funkci nápovědy pro dokončení textu ve vyhledávání (a zamysli se nad složitostí, samozřejmě). Nebo: Máš seznam nepřekrývajících se intervalů (např. (1,2)(4,7)(9,13)) a k tomu jeden samostatný interval (5,15). Vhodnou metodou je spoj do utříděného seznamu dvou intervalu (1,2)(4,15).

Zbývá už jen dodat, s čím se u pohovoru s největší pravděpodobností nesetkáte, a to jsou logické hříčky a hlavolamy. Navzdory tomu, co tvrdí mnozí bloggeři, otázky typu „stojí pravda a lež na rozcestí“ už jsou mnoho let z módy, jelikož odpovědi na ně jsou snadno naučitelné a o kandidátovi tak vlastně neřeknou nic.

Závěrem bych s ohledem na výše uvedené chtěla zdůraznit, že předměty Základy programování a Základy algoritmizace tak, jak jsou či alespoň byly vyučovány na FJFI, považuji s odstupem osmi let od jejich absolvování za naprosto klíčové součástí vzdělání, a to přesto, že jsem je tehdy spolu s mnoha studenty vnímala jako ‘přehnaně teoretické’ a „technologicky zpátečnické“. Mnoho z nás namítalo, že programování je v dnešní době nutně začínat objektově, že Pascal je natolik mrtvým jazykem, že každý rok neprogramování v C++ či Javě je rokem ztraceným. Domnívám se ale, že to není znalost syntaxe a rozsahu příkazů programovacího jazyka, ale právě schopnost úsudku nad výběrem optimálního algoritmu, který nakonec rozlišuje dobrého programátora od špatného. Stejně tak, jako nelze tvrdit, že pouhá znalost gramatiky je to, co odlišuje dobrého spisovatele od špatného. Přeji tedy všem, kteří o programatorské kariéře uvažují, aby si přínosu uvedených předmetů dokázali s otevřenýma očima vážit a stali se úspěšnými spisovateli děl softwarových.

(autorka je doktorandkou v Ubiquitous Knowledge Processing Lab ve Frankfurtu nad Mohanem)

Poznámka: Všechny příklady otázek pochází z webového fóra glassdoor.com, kde byly zveřejněny kandidáty. Google seznamy zveřejněných otázek pravidelně monitoruje a znovu nepoužívá. Za to, zda byly otázky v pohovoru v tomto znění opravdu použity, autorka neručí. Článek dále vyjadřuje soukromé názory autorky, které se nemusí nijak ztotožňovat s názory odborníků společnosti Google.


Napsat komentář

XHTML: You can use these tags: <a href="" title=""> <abbr title=""> <acronym title=""> <b> <blockquote cite=""> <cite> <code> <del datetime=""> <em> <i> <q cite=""> <strike> <strong>