Ebben a bejegyzésben azt szeretném megosztani veletek, hogy milyen csodálatos kalandban volt részem az elmúlt 2 hónapban. Rengeteget tanultam és sok mindent gondoltam át annak hatására, hogy a Google azt akarta váltsak vissza a vezetői pályáról a fejlesztői szerepbe, ha csak egy rövidebb időre is...
Júliusban kaptam egy LinkedIn üzenetet, hogy tudnék-e úgy kódot írni whiteboardon is a Google irodájában, mint ahogy azt tettem Sublime-ban a Game of Life esetén. Egy Google fejvadász ugyanis megtalálta a http://csaba.szirjak.com oldalon az Easter Egget. Az oldalt tavaly év végén hoztam létre, hogy gyakoroljam az AngularJS-t és a Material design-t és az Easter Egg is azt a funkciót töltötte be, hogy tanuljak pár új dolgot.
Mit tehet ilyenkor az ember, ha megkeresik a világ egyik legjobb cégétől, azzal a kérdéssel, hogy szeretnél-e nálunk dolgozni? Egyeztettem a cégünk tulajdonosával, hogy ez egy olyan lehetőség, amit ki kell próbálni, mert sokat tanulhatunk és profitálhatunk belőle. Igent mondtam hát a kihívásra. Igaz, hogy 5 éve nem programozóként dolgozom és munkahelyen nem is kódolok, az angolom pedig épp csak annyira elég, hogy külföldön boldoguljak vele, vagy egy kocsmában beszélgetni tudjak, de hát ők tudják, én sokat nem veszíthetek. Mivel nem voltam teljesen biztos magamban, megkérdeztem azért Adrit és Anyut is, hogy mit szólnak egy ilyen lehetőséghez, ha összejönne tényleg tudnának ebben támogatni? Meglepetésre igen volt a válasz. Ezek után megpróbáltam eltántorítani a fejvadászt, hogy nem elég jó az angolom és nem fejlesztőként dolgozom. Nem sikerült. Azt mondta, hogy az számít, hogy mennyire jó a problémamegoldó képességem, mennyire tudok jól kommunikálni (nem az angolom mennyire jó), megérteni a problémát és kooperatívan dolgozni. Ezek mellett még nagyon fontos, hogy milyenek a programozói alapismereteim, mennyire tudok big picturben, architektúrákban gondolkodni. Elárulta azt is, hogyan talált meg. Megnézte 2004-ben, hogy milyen eredmények születtek az ACM programozó versenyeken és mi éppen ekkor a csapatunkkal kijutottunk a közép-európai döntőbe. Azt mondta, hogy gondoljam át komolyan, hogy bele akarok-e vágni, mert ha igen akkor 1-2 hónapig is eltarthat és komoly felkészülést igényel.
Döntöttem, vágjunk bele, a sok interjú valamelyikén úgyis elvérzek, de legalább elmondhatom, hogy interjúztam a Google-nél és biztosan tanulok is belőle. Az első 2 kör Google Hangoutos interjú, amin 45-60 percben valamilyen algoritmust kell kitalálni egy adott problémára. Az első akadályt viszonylag könnyen vettem, az algoritmusra hamar kitaláltam a megoldást, a kódolás is egész jól ment Google Docs-ban. Egy pici segítséget kaptam, amit felhasználva még szebbé tudtam tenni a kódot, ennek elvileg örült az interjúztató, hogy be tudtam építeni a kapott segítséget. A következő alkalommal pedig egy olyan függvényre volt szükség, ami képes más függvényeket becachelni, illetve el kellett mondanom, hogyan valósítanám meg a Google keresőmezőjét, milyen kihívások vannak frontend és backend oldalon. Az első interjú úgy éreztem jól sikerült a második már annyira nem, de azt mondták, hogy elégedettek voltak, mikor tudnék kimenni Zürichbe? Mivel ez augusztus közepén történt és sok meló várt rám szeptemberben, ezért azt kértem, hogy szeptember vége legyen az időpont. Közben kiderült, hogy nem 3 interjú vár még rám, hanem 5…
Érdemes tudni, hogy a Google ha ajánlatot tesz valakinek, akkor az ajánlatát 1 évig fenntartja. Az interjúk pedig eléggé általánosak, nem konkrét pozíciókra keresnek embert, így gyakorlatilag bármely irodába mehetsz, és választhatsz projektet is azok közül, ahova kell ember. A fizetések a helyi országhoz vannak igazítva. Én azért választottam Zürichet, mert nincs messze, ott van egy jó barátom már 4 éve a Google-nél és talán itt a legmagasabb a fizetés is az egész világon.
Eredetileg nem gondoltam, hogy idáig eljutok, így azzal sem kalkuláltam, hogy készülni kell majd. De ha már így alakult, akkor nem tehetem meg magammal, hogy felkészületlenül megyek. Készítettem hát egy 1 hónapos tervet, hogy melyik reggel, melyik hétvégén mit fogok tanulni. Algoritmuselmélet, Rendszertervezés, Elosztott rendszerek, Java, Javascript. Hétvégén egész jól is ment a készülés, de hétköznap nem. Ezért inkább azokra a részekre koncentráltam, amit tényleg élveztem is, meg amit használni is tudok/fogok a közeljövőben. Nagyon meglepő volt, hogy milyen segédanyagokat biztosítottak számomra, kaptam rengeteg linket a felkészüléshez a Google-ös HR-estől. Érdemes lehet ebből tanulni amúgy. A http://old.hiredintech.com/app oldalt kiemelném a többi közül, mert ez volt számomra a leghasznosabb és ebből tudom a legtöbbet beépíteni a saját interjúztatási folyamatunkba is. A Java-t annyira néztem csak át, hogy algoritmusokat le tudjak kódolni benne, de Design patterneket már nem gyakoroltam. A Javascript azonban nagyon lázbahozott, mert szeretem a funkcionális programozást és tetszenek azok a dolgok, amik az ES6-tal bekerültek (http://es6-features.org/#Constants). Ezt ráadásul két kedvenc programozós oldalamon is tudtam gyakorolni, mind a kettő támogatta az ES6-ot. A http://www.codewars.com/ oldalon 5 kyu-ig jutottam, szerintem 30-40 feladatot csináltam meg, míg a https://www.codingame.com/ oldalon sikerült Clash of Code-ban (https://www.codingame.com/leaderboards/clash/country/hu) a legjobb magyarnak lenni. Ezek mellett amúgy elolvastam Bock László - A Google titok című könyvét (https://www.libri.hu/konyv/laszlo_bock.a-google-titok.html), hogy a cég kultúrájával jobban tisztában legyek.
Az interjú időpontja szeptember 26-27-re volt kitűzve. Hétfőn repülés és ismerkedés a várossal, majd kedden 5 interjú és este hazarepülés. Sajnos valahogy sikerült a Google-nek elfelejteni lefoglalni a repülőt, így 2 nappal előtte szóltak, hogy csúsztassuk már az interjút. Ez azért egy csöppet csalódás, de ezen már ne múljon. Áttettük egy héttel későbbre, és így hétfő helyett vasárnap lett az utazás és hétfő az interjúk (október 2-3).
A repülőt, a szállást a Google intézte, ezekért nem kellett külön fizetni. A kajára is biztosítottak napi $50-et, amit számlával kell igazolni, de ezzel nem foglalkoztam. A szállás a B2 Boutique Hotel + Spa-ban volt, amit a Google irodájától 50m, de lehet hogy 100m is megvan gyalog. Ennek örültem, hogy reggel nem azon kell majd stresszelni, hogy odatalálok-e. A repülő azonban nem volt a legpraktikusabb, mert hazafelé csak átszállásos jegyet tudtak venni. Nem merték bekockáztatni a korábban induló közvetlen járatot, így hétfőn Frankfurtot is meglátogattam egy 10 perces gyors 1 km-es séta erejéig.
Az egész utazás egyébként tök jól jött ki, kaptam egy csomó segítséget, amit így utólag is köszönök mindenkinek, mert így tudtam csak az interjúra koncentrálni, nem kellett az utazáson stresszelni. Az egyik barátom hajnalban kivitt a reptérre és még a szavazásra is be tudtunk előtte ugrani. Ikertesója pedig hétfőn jött ki értem este 11-kor. Egykori évfolyamtársam és jó barátom Zürichben fogadott autóval és elvitt a szállodához. Puccos kis 4 csillagos szálloda, a tetőn nyitott medencével. Szép nagy szobát kaptam, üvegfalú fürdőszobával, hogy az agyból lehessen látni ha zuhanyzik valaki. Óriási puha ágy, hatalmas TV, rengetegféleképpen állítható hangulatvilágítás. De most pont nem azon volt a hangsúly, hogy ezeket kipróbáljam, barátommal helyette elmentünk megnézni a Google irodát kívülről, hogy másnap ne tévedjek el azon az 50 méteren :). Utána elmentünk ebédelni. 1 pizza 6000-7000 Ft a Vapianoban (ismerősöm meghívott, köszi!), és ez kábé igaz egész Zürichre, hogy minden kaja háromszor annyiba kerül, mint itthon. Szerencsére a fizetések meg még ennél is többszörösek. Kaja után megnéztük a várost, és közben a barátom mesélt egy csomó dolgot, hogy itt mi hogyan működik. Van egy szép nagy tó, olyan mintha az ember a Balaton mellett lakna, körbe meg hegyek. A város azonban nekem kb olyan volt, mintha Budapesten lennék, de tény, hogy nem a városoktól, építészettől szoktam lázba jönni. Délután 16:30 körül kimentünk a haveromékhiz, akik 10-15 percre laknak a Google-től, egy Zürich melletti kisvárosban. Itt megismerhettem a 1.5 éves kislányát, akivel korábban még nem találkoztam és találkoztam kisfiával is, aki már 5 éves. Korábban őt még csak a földön kúszva láttam, most meg azzal fogadott az ajtónyitáskor ordítva, hogy “Szia Chaar-Lee, úgy vártunk már! Miért késtetek?”. Vaó :) Párjával sajnos nem tudtunk sokat beszélgetni, pedig kíváncsi lettem volna, hogy feleségként milyen élmény odakint, mik a tapasztalatok, de ez azt hiszem ráér addig, ha netalántán ajánlatot tennének (hisz úgyis csak minden 400. embernek adnak ajánlatot). A gyerekekkel viszont tök jót játszottunk, a végén a kislány is megkedvelt, akinek épp aznap volt a névnapja. Este aztán haverom visszavitt a szállásra és hagyott pihenni, hogy készülni tudjak a nagy napra.
Írtam magamnak még itthon indulás előtt egy checklistet, hogy miket kell átnéznem. Kinyomtattam 6 system designos kérdésre a megoldásomat, feltettem a laptopra a kódokat amiket Java-ban és Javascriptben írtam, illetve volt még pár segédlet, pl a http://bigocheatsheet.com/, amivel jó ha tisztában van az ember, ha a Google-höz megy. A Google jófej volt és kaptam egy voucher-t, ami vagy egy sörre, vagy egy bor elfogyasztását biztosította. Mivel a szálloda egy több mint 100 éves sörfőzde helyén vagy épp rá épült, ezért a sört választottam. Az étkezde egy hatalmas könyvtár volt, 2-3 emelet magasban körben könyvek voltak a polcokon. 3 hatalmas csillár lógott a mennyezetről, amit egyedileg ide készítettek és vagy 15-20 fém kör alkotta, amikre zöld borosüvegek voltak fejjel lefelé felrakva, ezekben pedig világított pici izzó. Baromi hangulatos volt. Ahogy pedig körbenéztem kb azt láttam, hogy az a pár ember aki most itt van az vagy a Google-höz jött interjúra, tipikus programozó fejük volt, vagy a Google egy másik irodájából jöhetett megbeszélésre, mert nekik meg Google logó volt a ruhájukon. A sör mellé kaptam némi rágcsát, chips, M&M’s, és pikáns mogyoró. Miután ezt szép lassan elfogyasztottam felmentem a szobámba, átnéztem még amit átakartam és vettem egy jó nagy meleg zuhanyt. Ugrás az ágyba és alvás.
Reggel előbb keltem, mint ahogy az ébresztő be volt állítva. Ez mégis csak annak a jele, hogy izgulok, pedig azt hittem nem fogok. Hisz interjúztattam már több mint 100 embert és ezt is úgy próbáltam felfogni, mint egy jó kis beszélgetés, de lehet ezt az agyam mégse hitte el teljesen. Lementem reggelizni, szépen nyugisan intéztem a dolgokat. Majd összepakoltam a szobámban és 9:20-kor elindultam, hogy nehogy elkéssek. 9:45-re kellett odaérni és volt még hátra egy checkout az első emeletről és egy 50 méteres séta. A checkout lehet 1 percig is eltartott a séta pedig lehet 2-t is kitett, így 9:23 körül ott voltam az iroda előtt. Alapszabály, hogy ilyen időpontokra nem érkezünk korán, max 1-2 perccel előtte, így párszor körbejártam a Google irodákat és közben próbáltam az agyam átállítani angolra. Szerintem vagy 3x biztos bemutatkoztam magamnak séta közben angolul :) 9:43-kor pedig egy nagy lélegzetvételt követően megindultam az ajtó felé. Odabent a recepciós nem azt mondta, hogy mindjárt hívom a HR-est, akivel találozom, hanem azt, hogy itt van egy érintőképernyős masina, írjam be hogy ki vagyok, kihez jöttem és milyen célból. Majd ezután jön a személy akit keresek. Oké. 5 perc várakozást követően jött is a HR-es, aki hozza a nyomtatott kitűzőt, amivel közlekedni fogok tudni a Google-nél. Közben néztem a 3 nagy TV-t a várakozóban, amin kis négyzetek, téglalapok tűntek fel a Google színeiben és benne írások jelentek meg, mintha valaki gépelne. Egyszer csak azt látom, hogy “népszavazás 2016”, majd “népszavazás eredménye”, majd “444.hu”. Hmmm… Realtime mutatja ki mire keres éppen és szinte mindig volt magyar keresés a képernyőn. Vicces és ötletes. Legalább látják a dolgozók minden nap, hogy amin dolgozik cég azt használják is emberek (ja, kb 1.000.000.000 naponta).
Kisérőm felkísért az interjú szobába és megkezdődött a legjobban várt, legizgalmasabb rész. Innen már nincs menekvés, most aztán jönnek emberek és megkérdeznek jól, mindezt persze angolul. Az első kettő algorituselmélet volt. Általános iskolában tanult matematikai műveletek, kódolás, dekódolás, fél információk. Próbálnak tesztelni minden irányból, hogy mire hogyan reagálok, hogyan oldom meg a problémát. Ezt követően a Javascript tudásom lett vizsgálva, de még ez is eléggé algoritmusos téma volt, egy fura rendezést és szűrést kellett implementálni egy adatsoron. Az interjúztatók konkrétan egymás kezébe adták a kilincset, pihenés nem volt.
A harmadik után a negyedik srác már azért jött, hogy elvigyen ebédelni és menet közben beszélgessünk és megmutassa az irodát. Ő nem jegyzetelt semmit, tőle szabadon kérdezhettem, amiről beszéltünk arról a HR elvileg nem tud semmit. Volt három étterem amiből lehetett választani, mediterrán, keleti és vegyes. Én a mediterránt választottam. Teljesen tömve volt, nagy volt a nyüzsgés. 2500 ember kajál itt ingyen. Közben elmentünk a konditerem mellett, amit szintén tudnak használni az alkalmazottak. Az itt dolgozó barátom mondta, hogy van squash pálya is, illetve squash liga a cégben, így biztosan van megfelelő partner a játékhoz. Kaja után megnéztünk pár minikonyhát az egyes emeleteken. Szép nagy kávéfőzők, ahol te magad darálod a kávét, meg te töltöd meg, olyan mint az éttermekben. Valamelyikben csocsóasztal volt, valamelyik meg olyan volt mint egy könyvtár. Itt volt egy polcnyi társasjáték, nagyjából 100 darab. Ebből 20-30% jófajta, ami nekem is megvan. De a Dominion hiányzott a készletből, ez azért csalódás.
Lejárt az időnk és társalgó partnerem elkísért az új interjú szobába. Itt egy valószínüleg orosz, idősebb srác fogadott. Ő szerintem system designból kérdezett ki elsősorban frontend vonalon. Szerette volna tudni, hogyan tárolnék kliens oldalon ilyen meg olyan adatokat. Aztán arra volt kíváncsi, hogy mit csinálnék, ha egy product manager azt mondja, hogy lassú az alkalmazás. Feltettem 6-8 kérdés a teszteléshez, hiba feltáráshoz, de mindegyikre az volt a válasz, hogy ez nem oldja meg a problémát. Aztán áttértünk arra, hogy oké, mit lehet tenni ha gyorsítani szeretnénk az alkalmazást. Erre is ledaráltam 6-8 lehetőséget, erre úgy vettem észre elismerően jelzett vissza, hogy szép listát adtam. Mondta amúgy, hogy ez egy nyitott kérdés, nincs jó válasz csak érdekli hogyan közelítem meg a problémát. El lehet lesni, tanulni ezt a megközelítést :) Utána azt hiszem német srác jött. Ismét Javascriptből kaptam a kérdéseket. Itt a papíron egy kód, mit fog ez kiírni? Vicces volt, mert minden sor kódot kétszer át kellett nézni mit is fog csinálni. Volt benne olyan is, amit nem szabad, de azért működik. Szerencsére meg tudtam adni a helyes megoldást, mert később begépeltem emlékezetből a kérdést és az jött ki, amit én is mondtam.
Ezt követően egy olyan függvényt kellett írnom, ami egy tetszőleges másik függvényt N alkalommal próbál meg lefuttatni, egészen addig amíg nem sikerül neki. Közben pedig a success és error callbackeket is kezelni kell. Adtam egy rekurzív megoldást, amit szerintem elsőre nem értett, mert kérte magyarázzam el még egyszer, miért fog ez működni. Aztán mondta találjunk egy egyszerűbb megoldást. Itt 5-10 percig félreértettük egymást, mert én azt hittem aszinkron függvényről beszélünk és ezért vannak callbackek. Aztán mondta, hogy egy szinkron függvény. Így már meg tudtam adni azt a megoldást amire vágyott.
Az interjú után pedig lekísért a recepcióra, majd elköszöntünk. Még érkezéskor kaptam egy welcome package-t, amiben van egy gömb alakú rubik kocka és chrome logót vannak rajta. Kaptam még egy Google nyomatos füzetet, meg egy logózott kulacsot. Felpakoltam hát és elhagytam az irodát. Haverommal megbeszéltük még előző nap, hogy hívjam és kikísér a vonathoz. Így is lett. Innen már csak az utazásra kellett koncentrálnom és átgondolni, mi hogyan sikerült.
Ezt azonban baromi nehéz megmondani. Én jól éreztem magam, nem vagyok elégedetlen, úgy érzem, hogy nem tudtam volna jobban felelni a kérdésekre. A kérdéseknek azonban nincs egzakt helyes megoldása azt se tudom, hogy eljutottunk-e addig ameddig az interjúztatók szerették volna, hisz volt amikor egy problémán volt amikor két kérdésen is dolgoztunk. Még mindig úgy érzem, hogy egy álomban vagyok és ez nem történhetett meg, meg az se, hogy ajánlatot tegyenek, hisz az egész tök szürreális. 5 éve nem dolgozom programozóként, nem jó az angolom, mégis miért vennének fel? Közben meg az interjúk alapján még el is tudnám hinni, hogy tetszettem nekik...
2 hét várakozás...
Öcsémékhez tartunk, hogy unokaöcsémet a második születésnapján felköszöntsük. Feleségem kérdezi, hogy hívtak-e esetleg. Nem, nem hívtak, de lehet írtak emailt, nézd meg a telefonomon. Még jó, hogy mások aggódnak helyettem is és többször kérdezik meg, hogy jött-e visszajelzés, mint ahogy nekem eszembe jut. Ránézett a leveleimre és azt látta, hogy jött levél a Google-től. Pulzus megemelkedett vagy 10-zel. Elkezdte felolvasni angolul a levelet, amiben ez állt: I am afraid I do not have good news: the overall feedback was not supportive enough for us to proceed with your application. Fura, semleges érzés. Egyszerűen abszurd szituáció, mert a két hónap alatt attól féltem a legjobban, hogy mi van ha mégis ajánlatot tesznek? Adjam fel a vezetői szerepemet, amiben úgy érzem megtaláltam önmagam? Nem lesz elég nekünk a januárban érkező Baba, mint változás? Kell nekünk új ország, régi szerep és hiányzó ismerősök, rokonok? De hát ez mégis csak a Google... Szerencsére lezárult, nem kell ezen tovább agyalni. Én pedig végülis maximálisan elértem a célomat, testközelből ismertem meg, hogy a világ egyik legjobb cége hogyan csinálja a felvételiztetést, eljutottam egészen a cél előtti utolsó kanyarig, ahol ugyan elbuktam, de ennek valószínüleg így kellett lennie, mert az élet más meglepetéseket tartogat számunkra.
A visszajelzések alapján a system design területen voltam a legügyesebb, ott elégedettek voltak a teljesítményemmel. Úgy látják, hogy inkább high-level tervezésben vagyok erősebb, ami köszönhető valószínüleg a vezetői éveknek. Az algoritmusok és kódolás területén két esetben azt kaptam, hogy határeset, de ez még elég lett volna, míg két interjúztató nem javasolt felvételre. Az egyik azt mondta, hogy túl sok hintre volt szükségem (úgy emlékszem, hogy megkérdezte, hogy mi van akkor, ha nem csak a természetes számok halmazán, hanem az egész számok halmazán értelmezzük a problémát), míg a másik esetben az volt a probléma, hogy a feladat komplexitását lassan számoltam ki. Itt tényleg elkövettem a hibát, hogy egy rövid "nlogn" válasz helyett egzaktul ki akartam számolni 2 paraméter függvényében és ez így lassabb volt. Teljesen igazuk van azonban, lehetett volna jobban is teljesíteni és egy másik szituációban lehet úgy is teljesítettem volna. Most már értem, hogy miért csak minden négyszázadik embert veszik fel és hogy miért írta Bock László, hogy inkább nem vesznek fel 2 jó jelöltet, nehogy 1 olyan bekerüljön, akitől később meg kell válni.
Folytatás ... Mit tanulhatunk 7 Google interjúból?