Miért tanultam 8 hónapig teljes munkaidőben egy Google-interjúra

by Googley as Heck

A jól megkopott táblám, Dijkstra egyforrású legrövidebb utak algoritmusával díszítve.

Ez igaz. Több ezer órát töltöttem azzal, hogy könyveket olvastam, kódot írtam és informatikai előadásokat néztem, mindezt azért, hogy felkészüljek a Google szoftvermérnöki interjújára.

Ha szeretnél felkészülni a Google interjúra, íme a tanulási tervem:

jwasham/google-interview-university
google-interview-university – Egy teljes napi tanulási terv a Google szoftvermérnökké váláshoz.github.com

How I Got Here

A középiskolában kezdtem el programozni, de amikor eljött az egyetem ideje, közgazdasági szakot végeztem. Az indoklásom az volt, hogy mire lediplomázom, már túl sok programozó fog állást keresni. Öregem, tévedtem.

Később csatlakoztam a hadsereghez, hogy programozó legyek, de a toborzó rábeszélt egy katonai hírszerzői pozícióra, és a következő két évben a koreai nyelvet tanultam. Ezután 2 évig Dél-Koreában szolgáltam.

Mielőtt otthagytam a hadsereget, megpróbáltam visszatérni a programozáshoz, és meglepett a nehézség. Középiskolában megtanultam a BASIC-et, és a középiskolában végigprogramoztam. De újra kezdtem a programozási tanulmányaimat C++-val, és az ugrás túl nagy volt. Egyszerűen nem tudtam felfogni.

A honlapok készítését azonban élveztem, de egy Word-szerű felülettel rendelkező szoftvert használtam, amelyet a honlapjaim közzétételére használtam. Nem tudtam, hogyan kell weboldalakat készíteni a semmiből.

A hadsereg után úgy döntöttem, hogy egy évig Koreában maradok és angolt tanítok. Az éjszakákat és hétvégéket arra használtam, hogy webprogramozást tanuljak, Perl, HTML, CSS (ami akkoriban új volt), JavaScript és SQL használatával.

Egy év intenzív tanulás után munkát kaptam Seattle környékén, és azóta is itt vagyok.

A gyönyörű Bellevue-ben, WA-ban az erkélyről dolgozom.

Már 15 éve vagyok webfejlesztő. Három céget alapítottam, amelyek közül kettő még mindig működik és bevételt termel. Dolgoztam nagy és kis cégeknél, segítettem startupoknak elindulni és növekedni, valamint csapatokat toboroztam és irányítottam. Voltam termékmenedzser, vezérigazgató, tervező és marketinges.

Sikeres karriert futottam be, és sokat tanultam útközben. De még nem végeztem.

Karrierváltást keresek

Memlékszel arra a részre, amikor nem szereztem informatikai diplomát? Ez sokat számított.

Pár évvel ezelőtt azt hittem, bárhol felvehetnek. Azt hittem, én vagyok a menő: a megfoghatatlan full-stack webfejlesztő. De a 2013-as álláskeresésem során rájöttem, hogy hiányoznak a képességeim. Annyi időt töltöttem a dollárvadászattal, hogy szabadidőmben startupokat vezettem, és hagytam, hogy a képességeim elsorvadjanak. Nem tartottam lépést a technológiával.

Évekig csak annyit tanultam, hogy boldoguljak. Széles körű készségekkel rendelkeztem, de semmiben sem voltam szakértő.

Ne értsen félre, még mindig fel tudtak venni, de nem azokon a technológiákon vagy területeken, ahol dolgozni akartam. Olyan területekre tudtam felvenni, ahol a tech stack kissé elavult volt, mint én. Ott nagy pénzek vannak, de nem láttam izgalmas perspektívákat.

A felismerés tavaly egy karriervásáron érte el a csúcspontját. Érdekelt, hogy talán az egyik helyi cégnél dolgozhatnék, amelyik kockázati tőkebefektetési cégek által működtetett startup-labor volt. Azonban az a tény, hogy nem rendelkeztem informatikai diplomával, illetve az ilyen diplomával járó készségekkel és tudással, azt jelentette, hogy nem volt esélyem.

A vállalkozásomon dolgoztam akkoriban teljes munkaidőben, és még ma is dolgozom.

2016 elején úgy döntöttem, hogy itt az ideje, hogy webfejlesztőből szoftvermérnökké váljak. Keményen kellett tanulnom és gyakorolnom ahhoz, hogy az informatikai diplomát néhány hónapba sűrítsem, de ha ez sikerült, új karrierbe kezdhettem.

Nem biztos, hogy a webfejlesztést és a szoftverfejlesztést különböző pozícióknak tekinted. Mindkettő magában foglalja a programozást és a kézműves munkát, de a szoftvermérnöki munka kiegészül az adatszerkezetek és algoritmusok, a lefordított nyelvek, a memóriával kapcsolatos megfontolások ismeretével, valamint a kódolási és architektúrával kapcsolatos döntéseknek azokra a gépekre gyakorolt hatásának megértésével, ahol ezek a döntések születnek.

A szoftvermérnöki pozíciókra felvételt szervező nagyvállalatok elvárják, hogy a jelöltek rendelkezzenek ezekkel a tudással.

Elértem egy ismerősömet, aki a Google-nél dolgozik, és kérdéseket tettem fel neki a vállalatnál szerzett tapasztalatairól. Olvastam a How Google Works című könyvet, és már elég jól ismertem a Google-t.

Egy másik kapcsolat révén kaptam egy példányt a Google coaching jegyzeteiből, amelyeket az interjúra jelentkezőknek adnak. Ez lett a tanulási tervem alapja.

A Google egy elég nagyszerű munkahely, de még mielőtt ezt tudtam volna, a Google volt a célom.

Miért a Google?

A Google nagyon magasra teszi a lécet a felvételeknél. Csak a legjobbakat akarják felvenni. Tehát ha magasra teszem a lécet (felvesznek a Google-hoz), akkor is elég jól felvehető leszek máshol, még ha nem is választanak ki.

Minél többet tudok meg a Google-ról, annál jobban szeretnék ott dolgozni.

Röviden: a Google egy olyan vállalat, amely okos, kreatív embereket vesz fel, és jól bánik velük. A Google jutalmazza az érdemeket, bátorítja a nagy ötleteket, és megadja az alkalmazottaknak a szabadságot, hogy jó döntéseket hozzanak a felhasználók érdekében.

A felvételi folyamatot úgy kalibrálják, hogy okos, szenvedélyes embereket hozzon be. A Google az évek során tökéletesítette a toborzási és interjúkészítési folyamatot. Az agytornáztató kérdések már régen eltűntek. Manapság a jelölteket a kódolási képességek, a technikai tudás és a Google-szerűség alapján választják ki. Ebben az egy szóban rengeteg minden rejlik.

Egy 2015-ös út során ellátogattam a Mountain View-i főhadiszállásra. Ez elültette a magot.

A vezetés más. A menedzserek nem mikro-menedzselnek. Bíznak a mérnökökben, hogy meghozzák a helyes döntéseket. Az alkalmazottakban való bizalom megváltoztatja a vezetők szerepét a Google-nál ahhoz képest, amit a legtöbben elképzelnek, amikor a vezetésre gondolnak. Ráadásul a vezetők nem tudnak egyoldalúan felvenni, kirúgni vagy előléptetni. Sok olyan fontos vezetői döntést, amely irodai politikának tűnhetne, egy bizottság kezel, hogy kiküszöbölje ezt a veszélyt.

A Google személyzeti műveletei (HR) az idők során megtanulták, hogy mi működik, és az adatokat és a dolgozói visszajelzéseket használják az értékelési rendszerek, a felvételi folyamat, az előléptetések, a javadalmazás, a juttatások és sok más dolog javítására. Bock László (SVP, People Operations) a Work Rules! című könyvében olvashat bővebben.

Igen, az előnyök elképesztőek. Voltam egy túrán a Google Kirklandben, WA-ban található irodájában, és minden várakozásomat felülmúlta. És az elvárásaim már így is magasak voltak.

Google Interview University

Emlékszik a coaching jegyzetekre, amiket kaptam, hogy mit kell tanulnom? A témák listája kezelhetőnek tűnt, még akkor is, ha semmit sem tudtam a listáról.

A jegyzetekben szereplő témákat vázlattá alakítottam, és elkezdtem kitölteni a témákat az MIT és a UC Berkeley előadásainak YouTube-videóival. Az egyik helyen egy videó a kapcsolt listákról, a másikon egy videó a várólistákról. A lista elkezdett gyarapodni.

A listát a Githubon tettem közzé, mert a Github-fiókom eléggé üres volt. Mivel minden kód, amit a vállalkozásomhoz és a munkámhoz írtam, privát volt, a Github-fiókom miatt úgy tűnt, mintha egyáltalán nem kódoltam volna. Fel kellett építenem egy portfóliót. Eredetileg a projektet “Project 9894”-nek neveztem el. A Google 1998. szeptember 4-én indult. Innen a név. Később átneveztem “Google Interjú Egyetem”-re.

Az idő múlásával hozzáadtam néhány opcionális témát, amelyeket útközben fedeztem fel.

A nyári olvasmánylistám. Kicsit túlzásba vittem.

Meglehetősen meglepett, hogy ilyen messzire jutottam a karrieremben anélkül, hogy egyáltalán tudtam volna, hogyan dolgoz fel egy CPU egy programot, hogyan működik a memória, vagy bármi ilyesmit. “Épp eleget” tudtam ahhoz, hogy sikeres legyek.

A kis Github-projektem kezdett néhány csillagot kapni, és közzétettem egy blogbejegyzést, amelyben 20 csillagot ünnepeltem.

Egy reggel arra ébredtem, hogy 120 csillagra nőtt. Valami híres ember tweetelt róla az éjszaka folyamán, és ez vezetett ahhoz, hogy a Github napi trendjelentésében is szerepelt. Néhány napig én voltam az #1 trending a Githubon.

Sok kedves ember keresett meg, hogy megköszönje és bátorítson. Kiderült, hogy több ezer ember van, aki nemcsak a Google-nál akar dolgozni, hanem szoftvermérnökként is, és ez a lista pont az a teendőlista volt, amire szükségük volt.

Már több mint 21 000 csillagnál tart.

Még mindig nem hiszem el.

Mi lesz, ha nem kapom meg az állást?

Az nem lesz a világ vége.

A tanulmányaimba időt és elhivatottságot fektettem azzal a céllal, hogy felvegyenek a Google szoftvermérnökeként, de még ha nem is sikerül, akkor is fel leszek fegyverkezve azokkal a készségekkel és tudással, amelyek szükségesek ahhoz, hogy szoftvermérnökként bármelyik cégnél dolgozhassak.

Ha bárhol is kötök ki, belépő szintű szoftvermérnökként fogok dolgozni. Nem megyek be 15 év szoftvermérnöki tapasztalattal, mert egyszerűen nem rendelkezem ilyennel. Ha ilyen dolgokról van szó, én egy friss diplomás informatikusnak felelek meg.

De megvan bennem a friss diplomás lelkesedése is. Ez egy új világ számomra. Még csak most kezdek belejönni. Nem félek a hibáktól. Tudom, hogy fogok. Emellett mindent meg akarok tanulni, amit csak tudok, és kiváló kiegészítője akarok lenni bármelyik csapatnak.

Ne tanulj annyit, mint én

Igen, 8 hónapot vettem igénybe. De lerövidíthettem volna a folyamatot. Mint minden nagy céllal induló vállalkozásnál, itt is követsz el hibákat, és olyan dolgokat teszel, amivel időt pazarolsz. Sok mindent szeretnék visszamenni és másképp csinálni.

Tanultam olyan témákat, amelyekre nem volt szükségem, néhányat azért, mert úgy gondoltam, hogy szükségem lesz rájuk az interjún, néhányat pedig azért, mert azt akartam, hogy a tudás kéznél legyen, amikor munkába állok. Nem akartam teher lenni a csapat számára, ahová beosztottak. Kiderült, hogy egyszerűen túlságosan felkészültem.

3 hétig olvastam egy 1000 oldalas könyvet a C++-ról. Nem emlékszem 1000 oldalra, de most már jó sokat tudok a C++-ról. Mint kiderült, Pythont használok az interjún, nem C++-t. Azt feltételeztem, hogy C++-ra, C-re vagy Javára van szükségem, de tévedtem. Jó kérdezni, nem feltételezni.

Sokkal több könyvet olvastam, mint kellett volna. Csak 3 vagy 4 könyv van, amit el kellett volna olvasnom.

Van egy több tucat algoritmusból álló kódkatalógusom, amit átnézek, a legtöbbet nem várnám el egy interjún. Erre nincs szükség.

Egy halom algoritmus, kinyomtatva az áttekintéshez.

Megnéztem sok órányi YouTube-videót, de sokkal kevesebbet is megnézhettem volna, és időben eloszthattam volna a témákat.

Még korábban abba kellett volna hagynom a könyvek olvasását és a videók nézését, és hamarabb hozzá kellett volna kezdenem a kódolási problémákhoz. Több időt tudtam volna fordítani a tanult témák alkalmazására.

A memorizálás kulcsa az ütemezett ismétlés. Ha egyszer megtanultál valamit, később ismételd át újra, és még később újra. Minden egyes ismétlésnél megerősíted a tanultakat. Attól, hogy egyszerre órákat és órákat töltesz a prioritási sorozatokkal, nem leszel szakértő. Szakértővé azáltal válhatsz, hogy idővel újra és újra átismétled. Ha így teszel, eljutsz arra a pontra, ahol már nem tudsz elfelejteni részleteket.

Az ismétlés segítésére 1792 tanulókártyát (digitális tanulókártyát) készítettem. Ez túl sok. A telefonomon vagy a tabletemen nézem át őket, amikor csak van egy szabad percem (például karácsonyi bevásárlás közben). A tanulókártyák és az ütemezett ismétlés kéz a kézben járnak. Ha egyszer helyesen válaszolok egy tanulókártyán, nem jelölöm meg ismertnek. A pakliban tartom, és ha már sokszor láttam és helyesen válaszoltam rá, akkor jelölöm meg ismertnek.

A félelemérzetem (“Mi van, ha a piros-fekete fákról kérdeznek?”) arra késztetett, hogy sokkal több témát tanuljak, mint amennyit kellett volna.

De nem csak az interjúra akartam felkészülni, hanem a Google-nél való karrierre, nagyszabású problémák megoldására akartam felkészülni. Ez azt jelenti, hogy olyan algoritmusokat kell ismernem, amelyekkel megtakaríthatom az idő, a hely és az I/O számítási erőforrásokat.

Lehet, hogy soha nem lesz szükségem egy maximum flow algoritmus (Ford-Fulkerson) ismeretére, de jó tudni, hogy ha a helyzet úgy hozza, rendelkezésre áll ez az eszköz (az implementáció memorizálása nélkül), és fel tudom ismerni az alkalmazását egy problématérben.

Következtetés

Elég korán azt kívántam, bárcsak kihagyhatnám ezt az egész tanulást, és csak siessek, hogy felvegyenek, hogy inkább azzal tölthessem az időmet, hogy megtanuljam a nyelveket és az eszközöket a csapat számára, amelyhez csatlakozom. De útközben rájöttem, hogy mennyire fontos ez a tudás, és még ha a legtöbbje nem is alkalmazható a mindennapokban, örülök, hogy fáradoztam vele. Újra értékelem a számítástechnika történetét, a terület nagyjait, az adatstruktúrákat és algoritmusokat (és azt, hogy hogyan egészítik ki egymást), valamint azt, hogy a számítógépes rendszerek hogyan működnek alacsony szinten.

Nemsokára beadom a jelentkezésemet. Hosszú út vezetett idáig – majdnem egy egész év. Már januárban elkezdődött, de csak áprilisban tudtam elkötelezni magam a nappali tagozatos tanulmányok mellett.

A lehető legjobban felkészültem. Nem tanulhatok tovább és nem halogathatom örökké a jelentkezést. Egy bizonyos ponton meg kell tennem a lépést.

Fényes jövőt látok magam előtt.

Köszönöm, hogy időt szántatok a történetem elolvasására.

A cikk arab, vietnami és koreai nyelven is elérhető.

Frissítve: 2017. január 10.

Nem vettek fel. Olvass tovább! Köszönöm mindenkinek a csodálatos, elsöprő támogatást.

Frissítve: 2017. március 6.

A történetnek happy endje van! Felvett az Amazon, hogy szoftverfejlesztő mérnökként dolgozzak az Amazon Web Services-en!

Hol találsz meg

A Startup Next Door-on blogolok.

Google Interview University on Github:

jwasham/google-interview-university
google-interview-university – A complete daily plan for studying to become a Google software engineer.github.com

.

Vélemény, hozzászólás?

Az e-mail-címet nem tesszük közzé.