Miksi opiskelin 8 kuukautta täysipäiväisesti Googlen haastattelua varten

by Googley as Heck

Minun hyvin kulunut valkotauluni, jota koristaa Dijkstran yhden lähteen lyhimpien polkujen algoritmi.

Se on totta. Olen käyttänyt tuhansia tunteja kirjojen lukemiseen, koodin kirjoittamiseen ja tietotekniikan luentojen katsomiseen valmistautuakseni Googlen ohjelmistosuunnittelijan haastatteluun.

Jos haluat valmistautua Googlen haastatteluun, tässä on opintosuunnitelmani:

jwasham/google-interview-university
google-interview-university – Täydellinen päivittäinen suunnitelma opiskelusta Googlen ohjelmistoinsinööriksi.github.com

Miten päädyin tänne

Aloitin ohjelmoinnin jo yläasteella, mutta kun opiskelun vuoro koitti, tähtäsin kauppatieteiden tutkintoon. Perusteluni oli, että valmistuessani olisi liikaa ohjelmoijia etsimässä töitä. Voi pojat, olin väärässä.

Myöhemmin liityin armeijaan ryhtyäkseni ohjelmoijaksi, mutta värvääjä suostutteli minut sotilastiedustelun tehtäviin, ja vietin seuraavat kaksi vuotta opiskellen korean kieltä. Sen jälkeen palvelin Etelä-Koreassa kaksi vuotta.

Ennen kuin lähdin armeijasta, yritin palata ohjelmoinnin pariin ja yllätyin sen vaikeudesta. Olin oppinut BASICin yläasteella ja jatkoin sen ohjelmointia läpi lukion. Aloitin kuitenkin uudelleen ohjelmointiopintoni C++:lla, ja harppaus oli liian suuri. En vain pystynyt ymmärtämään sitä.

Nautin kuitenkin verkkosivujen tekemisestä, mutta käytin Wordia muistuttavalla käyttöliittymällä varustettua ohjelmistoa, jota käytin verkkosivujeni julkaisemiseen. En osannut tehdä verkkosivuja tyhjästä.

Armeijan jälkeen päätin jäädä Koreaan vuodeksi ja opettaa englantia. Käytin iltani ja viikonloppuni web-ohjelmoinnin opiskeluun käyttäen Perliä, HTML:ää, CSS:ää (joka oli tuolloin uutta), JavaScriptiä ja SQL:ää.

Vuoden intensiivisen opiskelun jälkeen sain työpaikan Seattlen alueelta, ja olen ollut täällä siitä lähtien.

Työskentelen parvekkeelta käsin kauniissa Bellevue’ssa WA:n osavaltiossa.

Olen toiminut web-ohjelmoijana nykyään jo 15 vuotta. Olen perustanut 3 yritystä, joista 2 on edelleen toiminnassa ja tuottaa tuloja. Olen työskennellyt suurissa ja pienissä yrityksissä, auttanut startup-yrityksiä käynnistymään ja kasvamaan sekä rekrytoinut ja johtanut tiimejä. Olen ollut tuotepäällikkö, toimitusjohtaja, suunnittelija ja markkinoija.

Olen tehnyt menestyksekkään uran ja oppinut paljon matkan varrella. Mutta en ole vielä valmis.

Haen uranvaihtoa

Muistatko sen kohdan, jossa en hankkinut tietotekniikan tutkintoa? Sillä on ollut merkitystä.

Muutama vuosi sitten ajattelin, että minut voisi palkata minne tahansa. Luulin olevani kuumaa kamaa: vaikeasti tavoiteltava full-stack-verkkokehittäjä. Mutta työnhakuvaiheessa vuonna 2013 tajusin, että taitoni olivat puutteelliset. Olin käyttänyt niin paljon aikaa dollareiden jahtaamiseen pyörittämällä startup-yrityksiä vapaa-ajallani, että olin antanut taitojeni surkastua. En ollut pysynyt teknologiassa ajan tasalla.

Vuosien ajan olin oppinut juuri sen verran, että tulin toimeen. Minulla oli laaja taitopaketti, mutta en ollut asiantuntija missään.

Älkää käsittäkö minua väärin, sain edelleen töitä, mutta en niissä teknologioissa tai niillä aloilla, joilla halusin työskennellä. Minut voitiin palkata aloille, joissa teknologiapino oli hieman vanhentunut, kuten minäkin. Siellä on paljon rahaa, mutta en nähnyt jännittäviä tulevaisuudennäkymiä.

Toteamus saavutti huippunsa viime vuonna uramessuilla. Olin kiinnostunut ehkä työskentelemään yhdessä paikallisista yrityksistä, jotka olivat pääomasijoitusyhtiöiden ylläpitämiä startup-laboratorioita. Se, että minulta puuttui tietotekniikan tutkinto ja siihen liittyvät taidot ja tiedot, merkitsi kuitenkin sitä, ettei minulla ollut mahdollisuuksia.

Työskentelin tuolloin täysipäiväisesti yritystoimintani parissa, ja teen sitä edelleen.

Vuoden 2016 alussa päätin, että oli aika vaihtaa uraa web-kehittäjästä ohjelmistosuunnittelijaksi. Minun täytyisi opiskella ahkerasti ja harjoitella, jotta saisin puristettua tietojenkäsittelytieteen tutkinnon muutamaan kuukauteen, mutta kun saisin sen tehtyä, voisin aloittaa uuden uran.

Sinä et ehkä näe web-kehitystä ja ohjelmistosuunnittelua eri tehtävinä. Molempiin liittyy ohjelmointia ja käsityötaitoa, mutta ohjelmistotekniikkaan lisätään tietämys tietorakenteista ja algoritmeista, käännetyistä kielistä, muistin huomioimisesta ja koodaus- ja arkkitehtuuripäätösten vaikutuksen ymmärtämisestä koneisiin, joissa ne sijaitsevat.

Suuret yritykset, jotka palkkaavat ohjelmistotekniikan tehtäviin, odottavat hakijoilta tätä tietämystä.

Ostin yhteyttä erääseen Googlen leivissä työskentelevään tuttavaani ja kysyin häneltä kysymyksiä, jotka koskivat kokemuksiaan yhtiössä. Olin lukenut How Google Works -kirjan ja tunsin Googlen jo melko hyvin.

Toisen kontaktin kautta sain kopion Googlen valmennusmuistiinpanoista, jotka annetaan haastateltaville. Siitä tuli opiskelusuunnitelmani perusta.

Google on aika mahtava työpaikka, mutta ennen kuin edes tiesin sitä, Google oli tavoitteeni.

Miksi Google?

Google asettaa riman erittäin korkealle palkkaamisessa. He haluavat palkata vain parhaat. Joten jos asetan tavoitteeni korkealle (palkkaaminen Googleen), olen silti varsin palkattavissa muualle, vaikka minua ei valittaisikaan.

Mitä enemmän opin Googlesta, sitä enemmän haluan työskennellä siellä.

Lyhyesti sanottuna Google on yritys, joka palkkaa älykkäitä, luovia ihmisiä ja kohtelee heitä hyvin. Google palkitsee ansioista, kannustaa suuriin ideoihin ja antaa työntekijöille vapauden tehdä hyviä päätöksiä käyttäjän kannalta.

Henkilöstön rekrytointiprosessi on kalibroitu siten, että se tuo mukanaan älykkäitä ja intohimoisia ihmisiä. Google on hionut rekrytointi- ja haastatteluprosessia vuosien varrella. Aivojumppakysymykset ovat jo kauan sitten kadonneet. Nykyään ehdokkaat valitaan koodauskyvyn, teknisen tietämyksen ja Googlemaisuuden perusteella. Tuohon yhteen sanaan mahtuu paljon.

Vuonna 2015 kävin road tripillä Mountain View’n päämajassa. Se istutti siemenen.

Johtaminen on erilaista. Johtajat eivät mikromanageroi. He luottavat siihen, että insinöörit tekevät oikeita päätöksiä. Työntekijöihin luottaminen muuttaa johtajien roolia Googlessa siitä, mitä useimmat ihmiset kuvittelevat, kun he ajattelevat johtamista. Lisäksi johtajat eivät voi yksipuolisesti palkata, erottaa tai ylentää työntekijöitä. Monet tärkeät johtopäätökset, jotka voitaisiin mieltää toimistopolitiikaksi, käsitellään komiteassa tämän vaaran poistamiseksi.

Googlen henkilöstötoiminnot (HR) ovat oppineet ajan mittaan, mikä toimii, ja he käyttävät tietoja ja työntekijäpalautetta parantaakseen arviointijärjestelmiä, rekrytointiprosessia, ylennyksiä, palkkausta, palkitsemista, etuuksia ja paljon muuta. Lue lisää Laszlo Bockin (SVP, People Operations) kirjoittamasta kirjasta Work Rules!

Joo, edut ovat uskomattomia. Kävin kierroksella Googlen toimistossa Kirklandissa, WA:ssa, ja se ylitti odotukseni. Ja odotukseni olivat jo valmiiksi korkealla.

Googlen haastatteluyliopisto

Muistatko valmennusmuistiinpanot, jotka sain ja joissa kerrottiin, mitä pitää opiskella? Luettelo aiheista vaikutti hallittavissa olevalta, vaikka en tiennytkään mitään listalla olleista asioista.

Muutin muistiinpanojen aiheet hahmotelmaksi ja aloin täyttää aiheita YouTube-videoilla MIT:n ja UC Berkeleyn luennoista. Yhdessä paikassa video linkitetyistä listoista, toisessa video jonoista. Lista alkoi kasvaa.

Julkaisin listan Githubissa, koska Github-tilini oli aika tyhjä. Koska kaikki koodi, jota kirjoitin yrityksiäni ja työtäni varten, oli yksityistä, Github-tilini sai sen näyttämään siltä, etten koodannut lainkaan. Minun oli luotava portfoliota. Alun perin kutsuin projektia nimellä ”Project 9894”. Google lanseerattiin 4. syyskuuta 1998. Siitä nimi. Myöhemmin nimesin sen uudelleen ”Google Interview Universityksi”.

Aikojen saatossa lisäsin joitakin valinnaisia aiheita, jotka löysin matkan varrella.

Kesän lukulistani. Hieman yliampuvaa.

Olin aika hämmästynyt siitä, että olin päässyt urallani niin pitkälle tietämättä edes sitä, miten prosessori käsittelee ohjelmaa, miten muisti toimii tai mitään sellaista. Olin tiennyt ”juuri tarpeeksi” menestyäkseni.

Pieni Github-projektini alkoi saada muutamia tähtiä, ja julkaisin blogikirjoituksen, jossa juhlistin 20 tähteä.

Ens aamuna heräsin siihen, että se oli kasvanut 120 tähteen. Joku kuuluisa henkilö oli twiitannut siitä yön aikana, ja se johti siihen, että se päätyi Githubin päivittäiseen trendiraporttiin. Olin Githubin trendi #1 muutaman päivän ajan.

Monet ystävälliset ihmiset ottivat yhteyttä kiittääkseen ja rohkaistakseen minua. Kävi ilmi, että on tuhansia ihmisiä, jotka eivät vain halua työskennellä Googlella, vaan haluavat työskennellä ohjelmistoinsinöörinä, ja tämä lista oli juuri se tehtävälista, jota he tarvitsivat.

Se on nyt yli 21 000 tähteä.

En vieläkään voi uskoa sitä.

Mitä jos en saa työtä?

Ei se ole maailmanloppu.

Olen uhrannut aikaa ja omistautumista opintoihini tavoitteenani saada palkka Googlen ohjelmistosuunnittelijaksi, mutta vaikka en onnistuisikaan, minulla on silti aseistettuna taidot ja tiedot, joita tarvitaan työskennelläkseni ohjelmistosuunnittelijana missä tahansa yrityksessä.

Mihin tahansa päädynkin, menen sinne aloittelevana ohjelmistosuunnittelijana. En mene sinne 15 vuoden ohjelmistosuunnittelukokemuksella, koska minulla ei yksinkertaisesti ole sitä. Kun on kyse näistä asioista, olen vasta-alkaja.

Mutta minulla on myös vastavalmistuneen innostusta. Tämä on minulle uusi maailma. Olen vasta aloittelemassa. En pelkää tehdä virheitä. Tiedän, että teen niitä. Haluan myös oppia kaiken mahdollisen ja olla erinomainen lisä mihin tahansa tiimiin.

Älä opiskele yhtä paljon kuin minä

Joo, minulla kesti 8 kuukautta. Mutta olisin voinut lyhentää prosessia. Kuten missä tahansa startup-yrityksessä, jolla on suuri tavoite, teet virheitä ja teet asioita, jotka tuhlaavat aikaa. On monia asioita, joita toivoisin meneväni takaisin ja tekeväni toisin.

Oppailin aiheita, joita minun ei tarvinnut, joitakin, koska ajattelin tarvitsevani niitä haastattelussa, ja joitakin, koska halusin, että minulla olisi tietoa valmiina, kun aloitan työt. En halunnut olla taakka tiimille, johon minut on määrätty. Kävi ilmi, että olin yksinkertaisesti ylivalmistautunut.

Vietin kolme viikkoa lukemalla 1000-sivuisen kirjan C++:sta. En muista 1000 sivun arvosta, mutta tiedän nyt paljon C++:sta. Kuten kävi ilmi, käytän haastattelussa Pythonia, en C++:aa. Olin olettanut tarvitsevani C++:a, C:tä tai Javaa, mutta olin väärässä. On hyvä kysyä, ei olettaa.

Luin paljon enemmän kirjoja kuin olisi tarvinnut. On vain 3 tai 4 kirjaa, jotka minun olisi pitänyt lukea.

Minulla on koodiluettelo kymmenistä algoritmeista, joita käyn läpi, ja joista suurinta osaa en odottaisi haastattelussa. Sitä ei tarvitse tehdä.

Pino algoritmeja, jotka on tulostettu tarkastelua varten.

Katsoin monta tuntia YouTube-videoita, mutta olisin voinut katsoa paljon vähemmän ja hajauttaa aiheet ajallisesti.

Olisin pitänyt lopettaa kirjojen lukeminen ja videoiden katsominen aikaisemmin ja aloittaa koodausongelmien tekeminen aikaisemmin. Olisin voinut käyttää enemmän aikaa opittujen aiheiden soveltamiseen.

Tahdistettu toisto on avain muistamiseen. Kun olet oppinut jotain, käy se läpi uudelleen myöhemmin ja vielä myöhemmin. Jokaisella toistokerralla vahvistat oppimaasi. Tuntikausien viettäminen kerrallaan prioriteettijonojen parissa ei tee sinusta asiantuntijaa. Asiantuntijaksi tullaan toistamalla ja kertaamalla ajan mittaan. Jos teet niin, pääset siihen pisteeseen, jossa et voi unohtaa yksityiskohtia.

Kertaamisen avuksi tein 1792 muistilistaa (digitaalisia muistilistoja). Tämä on aivan liikaa. Käyn niitä läpi puhelimellani tai tabletillani aina kun minulla on vapaa hetki (esimerkiksi jouluostosten aikana). Flash-kortit ja jaksotettu toisto kulkevat käsi kädessä. Kun saan kortin vastauksen oikein, en merkitse sitä tunnetuksi. Pidän sen korttipakassa, ja kun olen nähnyt sen ja vastannut siihen oikein monta kertaa, merkitsen sen tunnetuksi.

Pelkoni (”Entä jos he kysyvät minulta kysymyksen punamustista puista?”) johti siihen, että opiskelin paljon enemmän aiheita kuin minun olisi tarvinnut.

Mutta en halunnut valmistautua vain haastatteluun, vaan halusin valmistautua uraan Googlen palveluksessa, jossa ratkotaan suuria ongelmia. Se tarkoittaa sellaisten algoritmien tuntemista, jotka säästävät ajan, tilan ja I/O:n laskentaresursseja.

En ehkä koskaan tarvitse tuntea maksimivirtausalgoritmia (Ford-Fulkerson), mutta on mukavaa tietää, että minulla on tämä työkalu käytettävissä, jos tilanne tulee eteen (ilman, että opettelen ulkoa toteutuksen), ja osaan tunnistaa sen soveltamisen ongelma-alueeseen.

Johtopäätös

Aluksi toivoin, että voisin jättää kaiken tämän oppimisen väliin ja vain kiirehtiä ja saada töitä, jotta voisin sen sijaan käyttää aikani sen tiimin kielten ja työkalujen oppimiseen, johon liityn. Mutta matkan varrella tajusin, miten tärkeää tämä tieto on, ja vaikka suurin osa siitä ei ehkä olekaan sovellettavissa päivittäin, olen iloinen, että panostin siihen. Arvostan nyt uudella tavalla tietojenkäsittelyn historiaa, alan suurmiehiä, tietorakenteita ja algoritmeja (ja sitä, miten ne täydentävät toisiaan) sekä sitä, miten tietokonejärjestelmät toimivat matalalla tasolla.

Hakemukseni jätän pian. Matka tähän pisteeseen on ollut pitkä – melkein kokonainen vuosi. Se alkoi jo tammikuussa, mutta pystyin sitoutumaan täysipäiväiseen opiskeluun vasta huhtikuussa.

Olen suunnilleen niin valmis kuin mahdollista. En voi jatkaa opiskelua ja hakemuksen lykkäämistä loputtomiin. Jossain vaiheessa minun on otettava harppaus.

Näen valoisan tulevaisuuden edessäni.

Kiitos, että käytit aikaa tarinani lukemiseen.

Artikkeli on saatavilla myös arabiaksi, vietnamiksi ja koreaksi.

Päivitys: 10.1.2017

Minä en saanut paikkaa. Lue lisää. Kiitos kaikille uskomattomasta, ylivoimaisesta tuestanne.

Päivitys: 6. maaliskuuta 2017

Tarinalla on onnellinen loppu! Amazon on palkannut minut työskentelemään ohjelmistokehitysinsinöörinä Amazon Web Services -palvelussa!

Missä minut löytää

Bloggaan osoitteessa Startup Next Door.

Googlen haastatteluyliopisto Githubissa:

jwasham/google-interview-university
google-interview-university-university – Täydellinen päiväkohtainen suunnitelma Googlen ohjelmistotekniikan insinööriksi opiskelemista varten.github.com

Vastaa

Sähköpostiosoitettasi ei julkaista.