Hvorfor jeg studerede på fuld tid i 8 måneder til en Google-interview

af Googley as Heck

Min slidte whiteboardtavle, prydet med Dijkstras single-source shortest-paths-algoritme.

Det er sandt. Jeg har brugt tusindvis af timer på at læse bøger, skrive kode og se forelæsninger om datalogi, alt sammen for at forberede mig til interviewet som softwareingeniør hos Google.

Hvis du gerne vil forberede dig til et Google-interview, så er her min studieplan:

jwasham/google-interview-university
google-interview-university – En komplet daglig plan for at studere for at blive softwareingeniør hos Google.github.com

Hvordan jeg kom hertil

Jeg begyndte at programmere i mellemskolen, men da det blev tid til college, tog jeg en uddannelse i økonomi. Min begrundelse var, at der ville være for mange programmører, der ledte efter job, når jeg blev færdiguddannet. Jeg tog fejl.

Senere meldte jeg mig ind i hæren for at blive programmør, men rekrutteringsmedarbejderen overtalte mig til en stilling i den militære efterretningstjeneste, og jeg brugte de næste to år på at studere det koreanske sprog. Jeg tjente derefter i Sydkorea i 2 år.

Hvor jeg forlod hæren, forsøgte jeg at komme tilbage til programmering og blev overrasket over, hvor svært det var. Jeg havde lært BASIC i mellemskolen og blev ved med at programmere det gennem gymnasiet. Men jeg genstartede mine programmeringsstudier med C++, og springet var for stort. Jeg kunne bare ikke forstå det.

Jeg nød dog at lave hjemmesider, men jeg brugte software med en Word-lignende grænseflade, som jeg brugte til at offentliggøre mine hjemmesider. Jeg vidste ikke, hvordan man lavede hjemmesider fra bunden.

Efter hæren besluttede jeg mig for at blive i Korea i et år og undervise i engelsk. Jeg brugte mine nætter og weekender på at studere webprogrammering, hvor jeg brugte Perl, HTML, CSS (som var nyt på det tidspunkt), JavaScript og SQL.

Efter et års intense studier fik jeg et job i Seattle-området, og jeg har været her lige siden.

Samarbejder fra balkonen i smukke Bellevue, WA.

Jeg har nu været webudvikler i 15 år. Jeg har startet 3 virksomheder, hvoraf 2 stadig kører og genererer indtægter. Jeg har arbejdet i store og små virksomheder, hjulpet startups med at lancere og vokse, og rekrutteret og ledet teams. Jeg har været produktchef, administrerende direktør, designer og marketingmedarbejder.

Jeg har haft en succesfuld karriere og lært en masse undervejs. Men jeg er ikke færdig endnu.

Søger et karriereskift

Huskede du den del, hvor jeg ikke fik en datalogiuddannelse? Det har gjort en forskel.

For et par år siden troede jeg, at jeg kunne blive ansat hvor som helst. Jeg troede, at jeg var en hot stuff: den undvigende full-stack webudvikler. Men under min jobsøgning i 2013 indså jeg, at mine færdigheder var mangelfulde. Jeg havde brugt så meget tid på at jagte penge ved at drive startups i min fritid, at jeg havde ladet mine færdigheder forfalde. Jeg havde ikke fulgt med i teknologien.

I årevis havde jeg lært lige nok til at klare mig. Jeg havde et bredt sæt af færdigheder, men var ikke ekspert i noget.

Forstå mig ret, jeg kunne stadig blive ansat, men ikke inden for de teknologier eller områder, som jeg ønskede at arbejde inden for. Jeg kunne blive ansat inden for områder, hvor den teknologiske stak var noget forældet, ligesom mig. Der er store penge derinde, men jeg så ikke spændende udsigter.

Denne erkendelse nåede sit højdepunkt sidste år på en karrieremesse. Jeg var interesseret i måske at arbejde for en af de lokale virksomheder, der var startup-laboratorier drevet af venturekapitalfirmaer. Men det faktum, at jeg manglede en datalogiuddannelse og de færdigheder og den viden, der følger med en sådan uddannelse, betød, at jeg ikke havde en chance.

Jeg arbejdede på fuld tid på mine virksomheder på det tidspunkt, og det gør jeg stadig i dag.

I begyndelsen af 2016 besluttede jeg, at det var på tide at foretage et karriereskift fra webudvikler til softwareingeniør. Jeg ville være nødt til at studere hårdt og øve mig for at komprimere en datalogiuddannelse til et par måneder, men når jeg først havde gjort det, kunne jeg starte en ny karriere.

Du ser måske ikke webudvikling og software engineering som forskellige stillinger. Begge involverer programmering og håndværk, men software engineering tilføjer viden om datastrukturer og algoritmer, kompilerede sprog, hukommelsesovervejelser og forståelse af virkningen af kodnings- og arkitekturbeslutninger på de maskiner, hvor de befinder sig.

Store virksomheder, der ansætter til stillinger som software engineering, forventer, at kandidaterne har denne viden.

Jeg kontaktede en bekendt, der arbejder hos Google, og stillede ham spørgsmål om hans erfaring i virksomheden. Jeg havde læst How Google Works og var ret bekendt med Google i forvejen.

Gennem en anden kontakt fik jeg en kopi af Googles coachingsnoter, der udleveres til interviewkandidater. Dette blev grundlaget for min studieplan.

Google er et ret fantastisk sted at arbejde, men før jeg overhovedet vidste det, var Google mit mål.

Hvorfor Google?

Google sætter en meget høj barren for ansættelser. De ønsker kun at ansætte de bedste. Så hvis jeg sætter mine mål højt (at blive ansat hos Google), vil jeg stadig kunne ansættes andre steder, selv hvis jeg ikke bliver udvalgt.

Desto mere jeg lærer om Google, jo mere har jeg lyst til at arbejde der.

Kort sagt er Google en virksomhed, der ansætter kloge, kreative mennesker og behandler dem godt. Google belønner fortjeneste, tilskynder til store idéer og giver medarbejderne frihed til at træffe gode beslutninger til gavn for brugeren.

Indansættelsesprocessen er kalibreret til at bringe kloge, passionerede mennesker ind. Google har finpudset rekrutterings- og interviewprocessen gennem årene. De hjernevridende spørgsmål er for længst væk. I dag udvælges kandidater på baggrund af kodningsevne, teknisk viden og Googleyness. Der er meget i det ene ord.

På en roadtrip i 2015 besøgte jeg hovedkvarteret i Mountain View. Det plantede frøet.

Ledelse er anderledes. Managere mikrostyrer ikke. De stoler på, at ingeniørerne træffer de rigtige beslutninger. Tilliden til medarbejderne ændrer ledernes rolle hos Google i forhold til det, de fleste forestiller sig, når de tænker på ledelse. Desuden kan ledere ikke ensidigt ansætte, fyre eller forfremme folk. Mange af de vigtige ledelsesbeslutninger, der kan opfattes som kontorpolitik, håndteres af et udvalg for at fjerne denne fare.

Google’s personaleafdeling (HR) har lært, hvad der virker over tid, og de bruger data og feedback fra medarbejderne til at forbedre evalueringssystemer, ansættelsesprocessen, forfremmelser, kompensation, fordele og meget mere. Læs Work Rules! af Laszlo Bock (SVP, People Operations) for at få mere at vide.

Ja, fordelene er fantastiske. Jeg var med på en rundvisning på Google-kontoret i Kirkland, WA, og det overgik mine forventninger. Og mine forventninger var allerede høje.

Google Interview University

Huskede du de coaching-noter, jeg fik, som fortalte mig, hvad jeg skulle studere? Listen over emner virkede overskuelig, selv om jeg ikke kendte noget på listen.

Jeg omdannede emnerne i noterne til en skitse og begyndte at udfylde emnerne med YouTube-videoer af forelæsninger fra MIT og UC Berkeley. En video om linkede lister et sted, en video om køer et andet sted. Listen begyndte at vokse.

Jeg offentliggjorde listen på Github, fordi min Github-konto var temmelig tom. Da al den kode, jeg skrev til mine virksomheder og mit arbejde, var privat, fik min Github-konto det til at se ud som om, at jeg slet ikke kodede. Jeg havde brug for at opbygge en portefølje. Jeg kaldte oprindeligt projektet “Project 9894”. Google blev lanceret den 4. september 1998. Deraf navnet. Senere omdøbte jeg det til “Google Interview University”.

Med tiden tilføjede jeg nogle valgfrie emner, som jeg opdagede undervejs.

Min sommerlæseliste. Lidt for meget.

Jeg var ret overrasket over, at jeg var nået så langt i min karriere uden at vide, hvordan en CPU behandlede et program, hvordan hukommelse fungerede eller noget af det. Jeg havde vidst “lige akkurat nok” til at få succes.

Mit lille Github-projekt begyndte at få et par stjerner, og jeg offentliggjorde et blogindlæg, der fejrede 20 stjerner.

En morgen vågnede jeg op og opdagede, at det var vokset til 120 stjerner. En berømt person havde tweetet om det i løbet af natten, og det førte til, at det endte på den daglige trending-rapport på Github. Jeg var nr. 1 i trending på Github i et par dage.

Mange venlige mennesker henvendte sig for at takke og opmuntre mig. Det viser sig, at der er tusindvis af mennesker, som ikke kun ønsker at arbejde hos Google, men som også ønsker at arbejde som softwareingeniør, og denne liste var lige den to-do-liste, de havde brug for.

Den er nu på over 21.000 stjerner.

Jeg kan stadig ikke tro det.

Hvad sker der, hvis jeg ikke får jobbet?

Det vil ikke være verdens undergang.

Jeg har lagt tid og engagement i mine studier med det mål at blive ansat som softwareingeniør hos Google, men selv hvis det ikke lykkes mig, vil jeg stadig være bevæbnet med de færdigheder og den viden, der kræves for at arbejde som softwareingeniør i en hvilken som helst virksomhed.

Hvor jeg end ender, vil jeg gå ind som softwareingeniør på begynderniveau. Jeg går ikke ind med 15 års erfaring som softwareingeniør, for det har jeg simpelthen ikke. Når det drejer sig om disse ting, svarer jeg til en nyuddannet cand.scient.soc.

Men jeg har også den samme entusiasme som en nyuddannet. Dette er en ny verden for mig. Jeg er lige kommet i gang. Jeg er ikke bange for at begå fejl. Jeg ved, at jeg vil gøre det. Jeg vil også gerne lære alt, hvad jeg kan, og være en fremragende tilføjelse til ethvert team.

Lær ikke så meget som jeg gjorde

Ja, jeg tog 8 måneder. Men jeg kunne have forkortet processen. Som enhver nystartet virksomhed med et stort mål begår man fejl og gør ting, der spilder tiden. Der er mange ting, som jeg ville ønske, at jeg ville gå tilbage og gøre anderledes.

Jeg studerede emner, som jeg ikke havde brug for, nogle fordi jeg troede, at jeg ville få brug for dem til samtalen, og andre fordi jeg ville have den viden ved hånden, når jeg begyndte at arbejde. Jeg ønskede ikke at være en byrde for det team, jeg er blevet tildelt. Det viser sig, at jeg simpelthen var overforberedt.

Jeg brugte 3 uger på at læse en 1.000-siders bog om C++. Jeg kan ikke huske 1.000 sider, men jeg ved en god del om C++ nu. Det viser sig, at jeg skal bruge Python til interviewet, ikke C++. Jeg havde antaget, at jeg havde brug for C++, C eller Java, men jeg tog fejl. Det er godt at spørge, ikke at antage.

Jeg læste langt flere bøger, end jeg havde brug for. Der er kun 3 eller 4 bøger, jeg burde have læst.

Jeg har et kodekatalog med snesevis af algoritmer, som jeg gennemgår, hvoraf jeg ikke ville forvente de fleste i et interview. Det behøver du ikke at gøre.

En stak algoritmer, der er udskrevet til gennemsyn.

Jeg så mange timers YouTube-videoer, men kunne have set langt mindre og spredt emnerne ud over tid.

Jeg skulle have stoppet med at læse bøger og se videoer tidligere og være begyndt på kodningsproblemer tidligere. Jeg ville have kunnet bruge mere tid på at anvende de emner, jeg lærte.

Spaced repetition er nøglen til udenadslære. Når du først har lært noget, skal du gennemgå det igen senere, og igen endnu senere. Ved hver gentagelse forstærker du din indlæring. At bruge timer og timer ad gangen på prioriterede køer vil ikke gøre dig til ekspert. Du bliver ekspert ved at gentage og gennemgå det over tid. Hvis du gør det, vil du komme til det punkt, hvor du ikke kan glemme detaljer.

For at hjælpe med at gennemgå, lavede jeg 1.792 flashcards (digitale flashcards). Det er alt for mange. Jeg gennemgår dem på min telefon eller tablet, når jeg får et ledigt øjeblik (f.eks. under juleindkøb). Flashkort og spaced repetition går hånd i hånd. Når jeg først har svaret rigtigt på et flashcard, markerer jeg det ikke som kendt. Jeg beholder det i bunken, og når jeg har set det og svaret rigtigt mange gange, markerer jeg det som kendt.

Min følelse af frygt (“Hvad nu, hvis de stiller mig et spørgsmål om rød-sorte træer?”) fik mig til at studere langt flere emner, end jeg havde brug for.

Men jeg ville ikke bare forberede mig til samtalen, jeg ville forberede mig på en karriere hos Google, hvor jeg skulle løse store problemer. Det betyder at kende algoritmer, der sparer computerressourcer i form af tid, plads og I/O.

Jeg får måske aldrig brug for at kende en maksimal flow-algoritme (Ford-Fulkerson), men det er rart at vide, at jeg har det værktøj til rådighed, hvis situationen opstår (uden at lære implementeringen udenad), og kan genkende dens anvendelse på et problemområde.

Slutning

I begyndelsen ønskede jeg, at jeg kunne springe al denne læring over og bare skynde mig at blive ansat, så jeg i stedet kunne bruge min tid på at lære sprog og værktøjer til det team, jeg slutter mig til. Men undervejs gik det op for mig, hvor vigtig denne viden er, og selv om det meste af den måske ikke kan anvendes i det daglige, er jeg glad for, at jeg har gjort mig umage. Jeg har fået en ny forståelse for computerens historie, de store inden for området, datastrukturer og algoritmer (og hvordan de supplerer hinanden), og hvordan computersystemer fungerer på lavt niveau.

Jeg vil snart indsende min ansøgning. Det har været en lang rejse at nå frem til dette punkt – næsten et helt år. Den begyndte tilbage i januar, men jeg kunne først forpligte mig til at studere på fuld tid i april.

Jeg er så godt forberedt, som jeg overhovedet kan være. Jeg kan ikke blive ved med at studere og udskyde ansøgningen for evigt. På et tidspunkt er jeg nødt til at tage springet.

Jeg ser en lys fremtid forude.

Tak fordi du tog dig tid til at læse min historie.

Artikelen findes også på arabisk, vietnamesisk og koreansk.

Opdatering: 10. januar 2017

Jeg blev ikke ansat. Læs videre. Tak til alle for jeres fantastiske, overvældende støtte.

OPDATERING: 6. marts 2017

Historien har en lykkelig slutning! Jeg er blevet ansat af Amazon til at arbejde som softwareudviklingsingeniør på Amazon Web Services!

Hvor du kan finde mig

Jeg blogger ovre på Startup Next Door.

Google Interview University på Github:

jwasham/google-interview-university
google-interview-university – En komplet daglig plan for at studere for at blive softwareingeniør hos Google.github.com

Skriv et svar

Din e-mailadresse vil ikke blive publiceret.