Waarom ik 8 maanden fulltime heb gestudeerd voor een sollicitatiegesprek bij Google

door Googley as Heck

Mijn goed versleten whiteboard, versierd met Dijkstra’s single-source kortste-padenalgoritme.

Het is waar. Ik heb duizenden uren besteed aan het lezen van boeken, het schrijven van code en het bekijken van lezingen over informatica, allemaal om me voor te bereiden op het gesprek met Google-software-ingenieur.

Als je je wilt voorbereiden op een Google-interview, is hier mijn studieplan:

jwasham/google-interview-university
google-interview-university – Een compleet dagelijks studieplan om een Google-software-ingenieur te worden.github.com

Hoe ik hier ben gekomen

Ik begon op de middelbare school met programmeren, maar toen het tijd werd voor de universiteit heb ik een graad in economie behaald. Mijn redenering was dat er te veel programmeurs op zoek naar een baan zouden zijn tegen de tijd dat ik afstudeerde. Ik had het mis.

Later ging ik bij het leger om programmeur te worden, maar de rekruteerder praatte me om voor een militaire inlichtingendienst, en ik bracht de volgende twee jaar door met het leren van de Koreaanse taal. Daarna diende ik 2 jaar in Zuid-Korea.

Voordat ik het leger verliet, probeerde ik weer te programmeren en was verrast over de moeilijkheidsgraad. Ik had BASIC geleerd op de middelbare school en bleef het programmeren tijdens de middelbare school. Maar ik hervatte mijn programmeerstudie met C++, en de sprong was te groot. Ik kon het gewoon niet vatten.

Ik vond het wel leuk om websites te maken, maar ik gebruikte software met een Word-achtige interface die ik gebruikte om mijn websites te publiceren. Ik wist niet hoe ik websites vanaf nul moest maken.

Na het leger besloot ik een jaar in Korea te blijven en Engelse les te geven. Ik gebruikte mijn nachten en weekenden om te leren programmeren op het web, met Perl, HTML, CSS (dat toen nieuw was), JavaScript en SQL.

Na een jaar intensief studeren vond ik een baan in de regio Seattle, en sindsdien ben ik hier.

Werk vanaf het balkon in het mooie Bellevue, WA.

Ik ben nu al 15 jaar webontwikkelaar. Ik heb 3 bedrijven opgestart, waarvan er 2 nog steeds actief zijn en inkomsten genereren. Ik heb bij grote en kleine bedrijven gewerkt, heb startups geholpen met opstarten en groeien, en heb teams gerekruteerd en geleid. Ik ben productmanager, CEO, ontwerper en marketeer geweest.

Ik heb een succesvolle carrière gehad en onderweg veel geleerd. Maar ik ben nog niet klaar.

Seeking a Career Change

Herinner je je het deel waar ik geen computerwetenschappen diploma heb gehaald? Het heeft een verschil gemaakt.

Een paar jaar geleden dacht ik dat ik overal kon worden aangenomen. Ik dacht dat ik hot stuff was: de ongrijpbare full-stack webontwikkelaar. Maar tijdens mijn zoektocht naar een baan in 2013, realiseerde ik me dat mijn vaardigheden ontbraken. Ik had zoveel tijd besteed aan het najagen van dollars door in mijn vrije tijd startups te runnen, dat ik mijn vaardigheden had laten verschrompelen. Ik had de technologie niet bijgehouden.

Jarenlang had ik net genoeg geleerd om rond te komen. Ik had een breed scala aan vaardigheden, maar was nergens een expert in. Begrijp me niet verkeerd, ik kon nog steeds worden aangenomen, maar niet in de technologieën of gebieden waar ik in wilde werken. Ik kon worden ingehuurd voor gebieden waar de tech-stack was enigszins verouderd, zoals ik. Daar zit veel geld in, maar ik zag geen spannende vooruitzichten.

Het besef bereikte vorig jaar zijn hoogtepunt op een carrièrebeurs. Ik was geïnteresseerd om misschien te werken voor een van de lokale bedrijven die startup labs waren, gerund door venture capital bedrijven. Maar het feit dat ik geen diploma in de informatica had, en de vaardigheden en kennis die bij zo’n diploma horen, betekende dat ik geen kans maakte.

Ik werkte op dat moment fulltime aan mijn bedrijven, en nu nog steeds.

Aan het begin van 2016 besloot ik dat het tijd was om een carrièreswitch te maken van webontwikkelaar naar software-engineer. Ik zou hard moeten studeren en oefenen om een diploma informatica in een paar maanden te comprimeren, maar zodra ik dat had gedaan, kon ik een nieuwe carrière beginnen.

Je ziet webontwikkeling en software-engineering misschien niet als verschillende functies. Beide hebben betrekking op programmeren en vakmanschap, maar software engineering voegt daar kennis van datastructuren en algoritmen, gecompileerde talen, geheugenoverwegingen, en het begrijpen van de impact van codering en architectuurbeslissingen op de machines waar ze zich bevinden.

Grote bedrijven die aannemen voor software engineering-functies verwachten dat kandidaten deze kennis hebben.

Ik nam contact op met een kennis die bij Google werkt en stelde hem vragen over zijn ervaring bij het bedrijf. Ik had How Google Works gelezen en was al redelijk bekend met Google.

Door een ander contact kreeg ik een kopie van Google’s coaching notes die worden verstrekt aan interview kandidaten. Dit werd de basis van mijn studieplan.

Google is een behoorlijk geweldige plek om te werken, maar voordat ik dat zelfs maar wist, was Google mijn doel.

Waarom Google?

Google legt de lat erg hoog bij het aannemen van mensen. Ze willen alleen de besten inhuren. Dus als ik mijn lat hoog leg (aangenomen worden bij Google), ben ik elders nog steeds goed in te huren, zelfs als ik niet geselecteerd word.

Hoe meer ik over Google leer, hoe meer ik er wil werken.

In het kort, Google is een bedrijf dat slimme, creatieve mensen aanneemt, en ze goed behandelt. Google beloont verdienste, moedigt grote ideeën aan en geeft werknemers de vrijheid om goede beslissingen te nemen voor de gebruiker.

Het wervingsproces is gekalibreerd om slimme, gepassioneerde mensen binnen te halen. Google heeft het wervings- en sollicitatieproces in de loop der jaren aangescherpt. De brain teaser-vragen zijn al lang verleden tijd. Tegenwoordig worden kandidaten gekozen op basis van coderingsvermogen, technische kennis en Google-gevoel. Er gaat heel wat om in dat ene woord.

Tijdens een roadtrip in 2015 bezocht ik het Mountain View HQ. Dat plantte het zaadje.

Management is anders. Managers doen niet aan micro-manage. Ze vertrouwen erop dat ingenieurs de juiste beslissingen nemen. Door op werknemers te vertrouwen, verandert de rol van managers bij Google van wat de meeste mensen zich voorstellen als ze aan management denken. Bovendien kunnen managers niet eenzijdig mensen aannemen, ontslaan of promoveren. Veel van de belangrijke managementbeslissingen die als kantoorpolitiek zouden kunnen worden opgevat, worden door een commissie afgehandeld om dat gevaar weg te nemen.

Google’s people operations (HR) heeft in de loop der tijd geleerd wat werkt, en ze gebruiken gegevens en feedback van werknemers om evaluatiesystemen, het wervingsproces, promoties, vergoedingen, secundaire arbeidsvoorwaarden en meer te verbeteren. Lees Work Rules! door Laszlo Bock (SVP, People Operations) voor meer.

Ja, de voordelen zijn geweldig. Ik heb een rondleiding gehad door het Google-kantoor in Kirkland, WA, en het overtrof mijn verwachtingen. En mijn verwachtingen waren al hoog.

Google Interview University

Herinner je je de coachingsnotities die ik kreeg om me te vertellen wat ik moest bestuderen? De lijst met onderwerpen leek beheersbaar, ook al kende ik niets op de lijst.

Ik maakte van de onderwerpen op de notities een outline en begon de onderwerpen in te vullen met YouTube-video’s van lezingen van MIT en UC Berkeley. Een video over gelinkte lijsten op de ene plaats, een video over wachtrijen op een andere. De lijst begon te groeien.

Ik publiceerde de lijst op Github omdat mijn Github-account vrij leeg was. Omdat alle code die ik schreef voor mijn bedrijven en werk privé was, liet mijn Github-account het lijken alsof ik helemaal niet codeerde. Ik moest een portfolio opbouwen. Ik noemde het project oorspronkelijk “Project 9894”. Google lanceerde op 4 september 1998. Vandaar de naam. Later heb ik het omgedoopt tot “Google Interview University”.

Gaandeweg heb ik wat optionele onderwerpen toegevoegd die ik gaandeweg ontdekte.

Mijn zomerleeslijst. Een beetje overdreven.

Ik was nogal verbaasd dat ik zo ver in mijn carrière was gekomen zonder zelfs maar te weten hoe een CPU een programma verwerkte, hoe het geheugen werkte, of iets van dat alles. Ik wist “net genoeg” om succesvol te zijn.

Mijn kleine Github-project begon een paar sterren te krijgen, en ik publiceerde een blogbericht waarin ik 20 sterren vierde.

Op een ochtend werd ik wakker en zag ik dat het was gegroeid tot 120 sterren. Een beroemd iemand had er ’s nachts over getweet, en dat leidde ertoe dat het op het Github daily trending report terechtkwam. Ik was # 1 trending op Github voor een paar dagen.

Vele vriendelijke mensen reikte uit om me te bedanken en aan te moedigen. Het blijkt dat er duizenden mensen zijn die niet alleen bij Google willen werken, maar ook als software engineer, en deze lijst was precies de to-do lijst die ze nodig hadden.

Het staat nu op meer dan 21.000 sterren.

Ik kan het nog steeds niet geloven.

Wat als ik de baan niet krijg?

Het zal niet het einde van de wereld zijn.

Ik heb de tijd en toewijding in mijn studie gestoken om als software-ingenieur bij Google aangenomen te worden, maar zelfs als ik faal, ben ik nog steeds gewapend met de vaardigheden en kennis die nodig zijn om als software-ingenieur bij elk bedrijf te werken.

Waar ik ook terecht kom, ik ga erin als software-ingenieur op instapniveau. Ik ga er niet heen met 15 jaar software-engineering ervaring, want die heb ik gewoon niet. Als het op dit spul aankomt, ben ik het equivalent van een pas afgestudeerde CS’er.

Maar ik heb ook het enthousiasme van een pas afgestudeerde. Dit is een nieuwe wereld voor mij. Ik begin net. Ik ben niet bang om fouten te maken. Ik weet dat ik dat zal doen. Ik wil ook alles leren wat ik kan en een uitstekende aanvulling zijn voor elk team.

Studeer niet zo veel als ik

Ja, ik heb er 8 maanden over gedaan. Maar ik had het proces kunnen inkorten. Zoals elke startup met een groot doel, maak je fouten en doe je dingen die tijd verspillen. Er zijn veel dingen die ik anders zou willen doen

Ik heb onderwerpen bestudeerd die ik niet nodig had, sommige omdat ik dacht dat ik ze nodig zou hebben voor het interview, en sommige omdat ik de kennis bij de hand wilde hebben voor als ik aan de slag ging. Ik wilde het team waaraan ik was toegewezen niet tot last zijn. Het bleek dat ik me gewoon te veel had voorbereid.

Ik heb 3 weken een boek van 1000 pagina’s over C++ gelezen. Ik herinner me geen 1000 pagina’s, maar ik weet nu een aardig woordje over C++. Het blijkt dat ik Python gebruik voor het interview, niet C++. Ik was ervan uitgegaan dat ik C++, C of Java nodig had, maar ik had het mis. Het is goed om te vragen, niet te veronderstellen.

Ik heb veel meer boeken gelezen dan nodig was. Er zijn maar 3 of 4 boeken die ik had moeten lezen.

Ik heb een codecatalogus van tientallen algoritmen die ik nakijk, waarvan ik de meeste niet in een interview zou verwachten. Dat is niet nodig.

Een stapel algoritmen, uitgeprint om na te kijken.

Ik heb vele uren YouTube-video’s bekeken, maar ik had er veel minder kunnen bekijken en de onderwerpen in de tijd kunnen spreiden.

Ik had eerder moeten stoppen met het lezen van boeken en het bekijken van video’s en eerder moeten beginnen met het oplossen van codeerproblemen. Ik zou meer tijd hebben kunnen besteden aan het toepassen van de onderwerpen die ik heb geleerd.

Gespreide herhaling is de sleutel tot memorisatie. Als je iets hebt geleerd, herhaal je het later nog eens, en nog later. Bij elke herhaling, versterk je het geleerde. Uren en uren tegelijk besteden aan prioritaire wachtrijen zal je geen expert maken. Je wordt een expert door na verloop van tijd te herhalen en te herzien. Als je dat doet, kom je op het punt waar je geen details meer kunt vergeten.

Om te helpen bij het nakijken, heb ik 1.792 flashcards (digitale flashcards) gemaakt. Dit is veel te veel. Ik kijk ze na op mijn telefoon of tablet wanneer ik een vrij moment heb (zoals tijdens het kerstshoppen). Flitskaarten en gespreide herhaling gaan hand in hand. Zodra ik een antwoord op een flashcard goed heb, markeer ik het niet als bekend. Ik bewaar het in de stapel en als ik het eenmaal heb gezien en het vele malen goed heb beantwoord, markeer ik het als bekend.

Mijn gevoel van angst (“Wat als ze me een vraag stellen over rood-zwarte bomen?”) leidde ertoe dat ik veel meer onderwerpen bestudeerde dan ik nodig had.

Maar ik wilde me niet alleen voorbereiden op het interview, ik wilde me voorbereiden op een carrière bij Google, het oplossen van grootschalige problemen. Dat betekent dat ik algoritmen moet kennen waarmee ik tijd, ruimte en I/O kan besparen.

Ik hoef misschien nooit een maximum flow-algoritme (Ford-Fulkerson) te kennen, maar het is fijn om te weten dat ik dat gereedschap tot mijn beschikking heb als de situatie zich voordoet (zonder de implementatie uit mijn hoofd te hoeven leren), en dat ik de toepassing ervan op een probleemruimte kan herkennen.

Conclusie

Al vroeg wenste ik dat ik al dit leren kon overslaan, en gewoon snel kon worden aangenomen, zodat ik in plaats daarvan mijn tijd kon besteden aan het leren van de talen en gereedschappen voor het team waar ik me bij aansloot. Maar gaandeweg realiseerde ik me hoe belangrijk deze kennis is, en ook al is het meeste misschien niet dagelijks toepasbaar, ik ben blij dat ik de moeite heb genomen. Ik heb een nieuwe waardering voor de geschiedenis van de informatica, de groten in het vak, datastructuren en algoritmen (en hoe die elkaar aanvullen), en hoe computersystemen op laag niveau werken.

Ik zal binnenkort mijn sollicitatie indienen. Het is een lange reis geweest om op dit punt te komen – bijna een heel jaar. Het begon in januari, maar ik kon pas in april voltijds gaan studeren. Ik ben zo goed mogelijk voorbereid. Ik kan niet blijven studeren en de aanvraag voor altijd uitstellen. Op een gegeven moment moet ik de sprong wagen.

Ik zie een mooie toekomst voor me.

Bedankt dat je de tijd hebt genomen om mijn verhaal te lezen.

Artikel ook beschikbaar in het Arabisch, Vietnamees en Koreaans.

Update: 10 januari 2017

Ik ben niet aangenomen. Lees verder. Bedankt aan iedereen voor jullie geweldige, overweldigende steun.

Update: 6 maart 2017

Het verhaal heeft een happy end! Ik ben aangenomen door Amazon om te werken als een Software Development Engineer op Amazon Web Services!

Where to Find Me

Ik blog over bij Startup Next Door.

Google Interview University op Github:

jwasham/google-interview-university
google-interview-university – Een compleet dagplan voor het studeren om een Google-software-engineer te worden.github.com

Geef een antwoord

Het e-mailadres wordt niet gepubliceerd.