Varför jag studerade heltid i åtta månader för en intervju hos Google

av Googley as Heck

Min slitna whiteboardtavla, prydd med Dijkstras algoritm för kortaste vägen med en enda källa.

Det är sant. Jag har tillbringat tusentals timmar med att läsa böcker, skriva kod och titta på föreläsningar om datavetenskap, allt för att förbereda mig inför intervjun som mjukvaruingenjör hos Google.

Om du vill förbereda dig för en Google-intervju, här är min studieplan:

jwasham/google-interview-university
google-interview-university – En komplett daglig plan för att studera för att bli mjukvaruingenjör hos Google.github.com

Hur jag hamnade här

Jag började programmera på mellanstadiet, men när det var dags att gå på college tog jag en examen i ekonomi. Min motivering var att det skulle finnas för många programmerare som sökte jobb när jag tog min examen. Jag hade verkligen fel.

Senare gick jag med i armén för att bli programmerare, men rekryteraren övertalade mig till en tjänst inom den militära underrättelsetjänsten, och jag tillbringade de följande två åren med att studera det koreanska språket. Därefter tjänstgjorde jag i Sydkorea i två år.

För att lämna armén försökte jag återigen börja programmera och blev förvånad över hur svårt det var. Jag hade lärt mig BASIC på mellanstadiet och fortsatte att programmera det under hela gymnasiet. Men jag återupptog mina programmeringsstudier med C++, och språnget var för stort. Jag kunde helt enkelt inte greppa det.

Jag tyckte dock om att göra webbplatser, men jag använde en programvara med ett Word-liknande gränssnitt som jag använde för att publicera mina webbplatser. Jag visste inte hur man gör webbplatser från grunden.

Efter armén bestämde jag mig för att stanna i Korea i ett år och undervisa i engelska. Jag använde mina nätter och helger till att studera webbprogrammering med hjälp av Perl, HTML, CSS (som var nytt på den tiden), JavaScript och SQL.

Efter ett år av intensiva studier fick jag ett jobb i Seattle-området, och jag har varit här ända sedan dess.

Jag jobbar lite från balkongen i vackra Bellevue, WA.

Jag har varit webbutvecklare nu i 15 år. Jag har startat 3 företag, varav 2 fortfarande är igång och genererar intäkter. Jag har arbetat på stora och små företag, hjälpt nystartade företag att starta och växa samt rekryterat och lett team. Jag har varit produktchef, VD, designer och marknadsförare.

Jag har haft en framgångsrik karriär och lärt mig mycket på vägen. Men jag är inte klar än.

Söker ett karriärbyte

Kommer du ihåg att jag inte tog en datavetenskapsexamen? Det har gjort skillnad.

För några år sedan trodde jag att jag kunde bli anställd var som helst. Jag trodde att jag var en het kille: den svårfångade fullstackwebbutvecklaren. Men under mitt jobbsökande 2013 insåg jag att mina färdigheter var bristfälliga. Jag hade ägnat så mycket tid åt att jaga dollar genom att driva nystartade företag på min fritid att jag hade låtit mina färdigheter förtvina. Jag hade inte hängt med i tekniken.

I åratal hade jag lärt mig precis tillräckligt för att klara mig. Jag hade en bred kompetens men var inte expert på något.

Förstå mig rätt, jag kunde fortfarande få anställning, men inte inom den teknik eller de områden som jag ville arbeta inom. Jag kunde bli anställd inom områden där den tekniska stapeln var något föråldrad, precis som jag. Det finns stora pengar där, men jag såg inga spännande utsikter.

Insikten nådde sin höjdpunkt förra året på en karriärmässa. Jag var intresserad av att kanske arbeta för ett av de lokala företag som var startup-lab som drevs av riskkapitalbolag. Men det faktum att jag saknade en datavetenskapsexamen, och de färdigheter och kunskaper som följer med en sådan examen, gjorde att jag inte hade en chans.

Jag arbetade på heltid med mina företag vid den tidpunkten, och gör det fortfarande idag.

I början av 2016 bestämde jag mig för att det var dags att göra en karriärförändring från webbutvecklare till mjukvaruingenjör. Jag skulle behöva studera hårt och öva för att komprimera en datavetenskapsexamen till några månader, men när jag väl gjorde det kunde jag starta en ny karriär.

Du kanske inte ser webbutveckling och programvaruteknik som olika befattningar. Båda innefattar programmering och hantverk, men programvaruteknik lägger till kunskap om datastrukturer och algoritmer, kompilerade språk, minnesöverväganden och förståelse för hur kodnings- och arkitekturbeslut påverkar de maskiner där de finns.

Stora företag som anställer för programvaruteknikplatser förväntar sig att kandidaterna har dessa kunskaper.

Jag kontaktade en bekant som jobbar på Google och ställde frågor till honom om hans erfarenhet på företaget. Jag hade läst How Google Works och var ganska bekant med Google redan.

Genom en annan kontakt fick jag en kopia av Googles coachningsanteckningar som ges till intervjukandidater. Detta blev grunden för min studieplan.

Google är en ganska fantastisk arbetsplats, men innan jag ens visste det var Google mitt mål.

Varför Google?

Google sätter ribban väldigt högt när det gäller rekrytering. De vill bara anställa de bästa. Så om jag sätter mina mål högt (att bli anställd på Google) kommer jag fortfarande att vara fullt anställningsbar på andra ställen även om jag inte blir utvald.

Ju mer jag lär mig om Google, desto mer vill jag jobba där.

Kort sagt är Google ett företag som anställer smarta, kreativa människor och behandlar dem väl. Google belönar meriter, uppmuntrar stora idéer och ger de anställda friheten att fatta bra beslut för användaren.

Anställningsprocessen är kalibrerad för att få in smarta, passionerade människor. Google har finslipat rekryterings- och intervjuprocessen under årens lopp. Hjärnspöksfrågorna är sedan länge borta. Numera väljs kandidater ut baserat på kodningsförmåga, teknisk kunskap och Googleyness. Det är mycket som ryms i det ordet.

Under en bilresa 2015 besökte jag huvudkontoret i Mountain View. Det planterade fröet.

Ledningen är annorlunda. Cheferna mikroförvaltar inte. De litar på att ingenjörerna fattar rätt beslut. Att lita på medarbetarna förändrar chefernas roll på Google jämfört med vad de flesta föreställer sig när de tänker på ledning. Dessutom kan chefer inte ensidigt anställa, avskeda eller befordra. Många av de viktiga ledningsbeslut som skulle kunna uppfattas som kontorspolitik hanteras av en kommitté för att undanröja den faran.

Googles personalavdelning (HR) har lärt sig vad som fungerar med tiden, och de använder data och feedback från de anställda för att förbättra utvärderingssystem, anställningsprocessen, befordringar, ersättningar, förmåner med mera. Läs Work Rules! av Laszlo Bock (SVP, People Operations) för mer information.

Ja, fördelarna är fantastiska. Jag gick på en rundtur på Googles kontor i Kirkland, WA, och det överträffade mina förväntningar. Och mina förväntningar var redan höga.

Google Interview University

Håller du minnet av de coachningsanteckningar jag fick som berättade vad jag skulle studera? Listan med ämnen verkade hanterbar, även om jag inte kunde något på listan.

Jag omvandlade ämnena på anteckningarna till en översikt och började fylla i ämnena med YouTube-videor av föreläsningar från MIT och UC Berkeley. En video om länkade listor på ett ställe, en video om köer på ett annat. Listan började växa.

Jag publicerade listan på Github eftersom mitt Github-konto var ganska tomt. Eftersom all kod jag skrev för mina företag och mitt arbete var privat, fick mitt Github-konto det att se ut som om jag inte kodade alls. Jag behövde bygga upp en portfölj. Jag kallade ursprungligen projektet för ”projekt 9894”. Google lanserades den 4 september 1998. Därav namnet. Jag döpte senare om det till ”Google Interview University”.

Med tiden lade jag till några valfria ämnen som jag upptäckte på vägen.

Min sommarlitteraturlista. Lite överdriven.

Jag var ganska förvånad över att jag hade kommit så långt i min karriär utan att ens veta hur en CPU bearbetade ett program, hur minnet fungerade eller något av det. Jag hade vetat ”precis tillräckligt” för att lyckas.

Mitt lilla Github-projekt började få några stjärnor, och jag publicerade ett blogginlägg där jag firade 20 stjärnor.

En morgon vaknade jag och upptäckte att det hade vuxit till 120 stjärnor. Någon känd person hade twittrat om det under natten, och det ledde till att det hamnade på Githubs dagliga trendrapport. Jag var nummer 1 på Github i några dagar.

Många vänliga människor hörde av sig för att tacka och uppmuntra mig. Det visade sig att det finns tusentals människor som inte bara vill jobba på Google utan som vill jobba som mjukvaruingenjör, och den här listan var precis den att-göra-lista de behövde.

Den är nu uppe i över 21 000 stjärnor.

Jag kan fortfarande inte tro det.

Hur blir det om jag inte får jobbet?

Det kommer inte att vara världens undergång.

Jag har lagt ner tid och engagemang på mina studier med målet att bli anställd som mjukvaruingenjör hos Google, men även om jag misslyckas kommer jag ändå att vara beväpnad med de färdigheter och kunskaper som krävs för att arbeta som mjukvaruingenjör på vilket företag som helst.

Varhelst jag hamnar kommer jag att gå in som mjukvaruingenjör på nybörjarnivå. Jag kommer inte att gå in med 15 års erfarenhet av programvaruteknik eftersom jag helt enkelt inte har den erfarenheten. När det gäller dessa saker motsvarar jag en nyutexaminerad civilingenjör.

Men jag är också entusiastisk som en nyutexaminerad. Det här är en ny värld för mig. Jag har precis börjat. Jag är inte rädd för att göra misstag. Jag vet att jag kommer att göra det. Jag vill också lära mig allt jag kan och bli ett utmärkt tillskott till vilket team som helst.

Studiera inte lika mycket som jag gjorde

Ja, jag tog åtta månader. Men jag kunde ha förkortat processen. Som alla nystartade företag med ett stort mål gör man misstag och gör saker som slösar tid. Det finns många saker som jag önskar att jag skulle gå tillbaka och göra annorlunda.

Jag studerade ämnen som jag inte behövde, en del för att jag trodde att jag skulle behöva dem för intervjun och en del för att jag ville ha kunskapen till hands när jag började arbeta. Jag ville inte vara en belastning för det team jag tilldelas. Det visade sig att jag helt enkelt förberedde mig för mycket.

Jag ägnade tre veckor åt att läsa en 1000-sidig bok om C++. Jag minns inte 1 000 sidor, men jag kan en hel del om C++ nu. Det visar sig att jag använder Python för intervjun, inte C++. Jag hade antagit att jag behövde C++, C eller Java, men jag hade fel. Det är bra att fråga, inte anta.

Jag läste betydligt fler böcker än vad jag behövde. Det finns bara tre eller fyra böcker som jag borde ha läst.

Jag har en kodkatalog med dussintals algoritmer som jag granskar, de flesta av dem skulle jag inte förvänta mig i en intervju. Det behöver du inte göra.

En stapel algoritmer, utskrivna för granskning.

Jag tittade på många timmars YouTube-videor, men kunde ha tittat på betydligt färre, och spridit ut ämnena över tiden.

Jag borde ha slutat läsa böcker och titta på videor tidigare och börjat med kodningsproblem tidigare. Jag skulle ha kunnat ägna mer tid åt att tillämpa de ämnen jag lärt mig.

Spaced repetition är nyckeln till memorering. När du väl har lärt dig något, gå igenom det igen senare, och igen ännu senare. Vid varje upprepning förstärker du din inlärning. Att spendera timmar och timmar på en gång på prioriterade köer gör dig inte till en expert. Du blir en expert genom att återkomma och granska över tid. Om du gör det kommer du att komma till den punkt där du inte kan glömma detaljer.

För att underlätta genomgången gjorde jag 1 792 flashcards (digitala flashcards). Detta är alldeles för många. Jag går igenom dem på min telefon eller surfplatta när jag får en ledig stund (till exempel under julhandeln). Flashkort och spaced repetition går hand i hand. När jag väl har fått rätt svar på ett flashcard markerar jag det inte som känt. Jag behåller det i kortleken och när jag har sett det och svarat rätt många gånger markerar jag det som känt.

Min känsla av rädsla (”Tänk om de ställer mig en fråga om rödsvarta träd?”) ledde till att jag studerade betydligt fler ämnen än vad jag behövde.

Men jag ville inte bara förbereda mig för intervjun, jag ville förbereda mig för en karriär på Google, där jag löser storskaliga problem. Det innebär att känna till algoritmer som sparar datorresurser i form av tid, utrymme och I/O.

Jag kanske aldrig behöver känna till en algoritm för maximalt flöde (Ford-Fulkerson), men det är trevligt att veta att jag har det verktyget tillgängligt om situationen uppstår (utan att memorera implementeringen) och kan känna igen dess tillämpning på ett problemområde.

Slutsats

I början önskade jag att jag kunde hoppa över all denna inlärning och bara skynda mig att bli anställd så att jag i stället kunde ägna min tid åt att lära mig språken och verktygen för det team jag ansluter mig till. Men längs vägen insåg jag hur viktig den här kunskapen är, och även om det mesta kanske inte är applicerbart på daglig basis är jag glad att jag lade ner ansträngningen. Jag har fått en ny uppskattning av datorernas historia, de stora inom området, datastrukturer och algoritmer (och hur de kompletterar varandra) och hur datorsystem fungerar på låg nivå.

Jag kommer snart att skicka in min ansökan. Det har varit en lång resa att komma hit – nästan ett helt år. Den började redan i januari, men jag kunde inte engagera mig i heltidsstudier förrän i april.

Jag är ungefär så förberedd som jag kan vara. Jag kan inte fortsätta att studera och skjuta upp ansökan i all evighet. Någon gång måste jag ta steget.

Jag ser en ljus framtid framför mig.

Tack för att du tog dig tid att läsa min berättelse.

Artikeln finns även på arabiska, vietnamesiska och koreanska.

Uppdatering: 10 januari 2017

Jag blev inte anställd. Läs vidare. Tack till alla för ert fantastiska, överväldigande stöd.

Uppdatering: 6 mars 2017

Historien har ett lyckligt slut! Jag har anställts av Amazon för att arbeta som mjukvaruutvecklingsingenjör på Amazon Web Services!

Hur du hittar mig

Jag bloggar på Startup Next Door.

Google Interview University på Github:

jwasham/google-interview-university
google-interview-university – En komplett dagsplan för att studera för att bli mjukvaruingenjör på Google.github.com

Lämna ett svar

Din e-postadress kommer inte publiceras.