De ce am studiat cu normă întreagă timp de 8 luni pentru un interviu la Google

de Googley as Heck

Tabloul meu alb bine uzat, împodobit cu algoritmul drumurilor cele mai scurte cu o singură sursă al lui Dijkstra.

Este adevărat. Am petrecut mii de ore citind cărți, scriind cod și urmărind cursuri de informatică, toate pentru a mă pregăti pentru interviul de inginer software de la Google.

Dacă doriți să vă pregătiți pentru un interviu Google, iată planul meu de studiu:

jwasham/google-interview-university
google-interview-university – Un plan zilnic complet pentru a studia pentru a deveni inginer software Google.github.com

Cum am ajuns aici

Am început să programez în școala generală, dar când a venit timpul pentru facultate am urmat o diplomă în economie. Raționamentul meu a fost că vor fi prea mulți programatori în căutarea unui loc de muncă până când voi absolvi. Doamne, m-am înșelat.

Mai târziu, m-am înrolat în armată pentru a deveni programator, dar recrutorul m-a convins să mă angajez într-un post de informații militare și mi-am petrecut următorii doi ani studiind limba coreeană. Am servit în Coreea de Sud timp de 2 ani după aceea.

Înainte de a părăsi armata, am încercat să mă reapuc de programare și am fost surprins de dificultate. Învățasem BASIC în gimnaziu și am continuat să îl programez în timpul liceului. Dar mi-am reînceput studiile de programare cu C++, iar saltul a fost prea mare. Pur și simplu nu am putut să-l înțeleg.

Am făcut totuși plăcere să fac site-uri web, dar am folosit un software cu o interfață asemănătoare cu Word pe care l-am folosit pentru a-mi publica site-urile web. Nu știam cum să fac site-uri web de la zero.

După armată, am decis să rămân în Coreea timp de un an și să predau engleza. Mi-am folosit nopțile și weekend-urile pentru a studia programarea web, folosind Perl, HTML, CSS (care era nou la acea vreme), JavaScript și SQL.

După un an de studiu intens, am obținut un loc de muncă în zona Seattle și de atunci sunt aici.

Făcând niște muncă de la balcon în frumosul Bellevue, WA.

Am fost dezvoltator web acum 15 ani. Am înființat 3 companii, dintre care 2 sunt încă în funcțiune și generează venituri. Am lucrat la companii mari și mici, am ajutat startup-uri să se lanseze și să crească și am recrutat și gestionat echipe. Am fost manager de produs, CEO, designer și marketer.

Am avut o carieră de succes și am învățat multe pe parcurs. Dar nu am terminat încă.

În căutarea unei schimbări de carieră

Îți amintești partea în care nu am obținut o diplomă în informatică? A făcut o diferență.

Cu câțiva ani în urmă, am crezut că mă pot angaja oriunde. Credeam că sunt o chestie tare: evazivul dezvoltator web full-stack. Dar, în timpul căutării unui loc de muncă în 2013, mi-am dat seama că abilitățile mele lipseau. Îmi petrecusem atât de mult timp alergând după dolari, conducând startup-uri în timpul liber, încât îmi lăsasem abilitățile să se atrofieze. Nu ținusem pasul cu tehnologia.

De ani de zile, învățasem doar atât cât să mă descurc. Aveam un set larg de abilități, dar nu eram expert în nimic.

Nu mă înțelegeți greșit, încă puteam fi angajat, dar nu în tehnologiile sau domeniile în care voiam să lucrez. Puteam fi angajat în domenii în care stiva tehnologică era oarecum învechită, ca mine. Sunt bani mulți acolo, dar nu vedeam perspective interesante.

Realizarea a atins apogeul anul trecut, la un târg de cariere. Eram interesat să lucrez, poate, pentru una dintre companiile locale care erau laboratoare de startup-uri conduse de firme cu capital de risc. Cu toate acestea, faptul că nu aveam o diplomă în domeniul informaticii, precum și abilitățile și cunoștințele care însoțesc o astfel de diplomă, însemna că nu aveam nicio șansă.

La acea vreme lucram cu normă întreagă la afacerile mele și lucrez și astăzi.

La începutul anului 2016, am decis că era timpul să fac o schimbare în carieră, de la dezvoltator web la inginer software. Va trebui să studiez din greu și să exersez pentru a comprima o diplomă în informatică în câteva luni, dar odată ce am făcut-o, aș putea începe o nouă carieră.

Poate că nu vedeți dezvoltarea web și ingineria software ca poziții diferite. Ambele implică programare și măiestrie, dar ingineria software adaugă la aceasta cunoștințe despre structuri de date și algoritmi, limbaje compilate, considerații legate de memorie și înțelegerea impactului deciziilor de codificare și arhitectură asupra mașinilor în care locuiesc.

Companii mari care angajează pentru posturi de inginerie software se așteaptă ca candidații să aibă aceste cunoștințe.

Am luat legătura cu o cunoștință care lucrează la Google și i-am pus întrebări despre experiența sa în cadrul companiei. Citisem How Google Works și eram deja destul de familiarizat cu Google.

Prin intermediul unui alt contact, am primit o copie a notelor de pregătire de la Google care sunt furnizate candidaților la interviu. Acestea au devenit baza planului meu de studiu.

Google este un loc de muncă destul de grozav, dar chiar înainte de a ști asta, Google era obiectivul meu.

De ce Google?

Google stabilește o ștachetă foarte înaltă pentru angajare. Ei vor să angajeze doar pe cei mai buni. Așa că, dacă îmi pun ținte înalte (să mă angajez la Google), voi fi destul de angajabil în altă parte, chiar dacă nu voi fi selectat.

Cu cât aflu mai multe despre Google, cu atât mai mult îmi doresc să lucrez acolo.

În concluzie, Google este o companie care angajează oameni inteligenți, creativi și care îi tratează bine. Google recompensează meritele, încurajează ideile mărețe și le oferă angajaților libertatea de a lua decizii bune pentru utilizator.

Procesul de angajare este calibrat pentru a aduce oameni inteligenți și pasionați. Google a perfecționat procesul de recrutare și de interviu de-a lungul anilor. Întrebările de tip brain teaser au dispărut de mult. În prezent, candidații sunt aleși pe baza abilităților de codificare, a cunoștințelor tehnice și a Googleyness. Se întâmplă multe în acest singur cuvânt.

Într-o călătorie cu mașina în 2015, am vizitat sediul din Mountain View. Asta a plantat sămânța.

Managementul este diferit. Managerii nu fac micro-management. Ei au încredere în ingineri pentru a lua deciziile corecte. Încrederea în angajați schimbă rolul managerilor de la Google față de ceea ce își imaginează majoritatea oamenilor când se gândesc la management. În plus, managerii nu pot, în mod unilateral, să angajeze, să concedieze sau să promoveze. Multe dintre deciziile de management importante, care ar putea fi percepute ca fiind politici de birou, sunt gestionate de un comitet pentru a elimina acest pericol.

Operațiunile cu oamenii de la Google (HR) au învățat ce funcționează de-a lungul timpului și folosesc date și feedback-ul angajaților pentru a îmbunătăți sistemele de evaluare, procesul de angajare, promovările, compensațiile, beneficiile și multe altele. Citiți Work Rules! de Laszlo Bock (SVP, People Operations) pentru mai multe informații.

Da, beneficiile sunt uimitoare. Am făcut un tur al biroului Google din Kirkland, WA, și mi-a depășit așteptările. Iar așteptările mele erau deja mari.

Google Interview University

Îți amintești notele de pregătire pe care le-am primit și care îmi spuneau ce să studiez? Lista de subiecte părea ușor de gestionat, chiar dacă nu știam nimic din listă.

Am transformat subiectele din notițe într-o schiță și am început să completez subiectele cu videoclipuri de pe YouTube cu prelegeri de la MIT și UC Berkeley. Un videoclip despre listele legate într-un loc, un videoclip despre cozile de așteptare în altul. Lista a început să crească.

Am publicat lista pe Github pentru că contul meu Github era destul de gol. Deoarece tot codul pe care îl scriam pentru afacerile și munca mea era privat, contul meu Github făcea să pară că nu am codat deloc. Aveam nevoie să-mi construiesc un portofoliu. Inițial, am numit proiectul „Project 9894”. Google a fost lansat pe 4 septembrie 1998. De aici și numele. Mai târziu l-am redenumit „Google Interview University”.

Cu timpul am adăugat câteva subiecte opționale pe care le-am descoperit pe parcurs.

Lista mea de lecturi de vară. Un pic cam exagerată.

Eram destul de uimit că am ajuns atât de departe în cariera mea fără să știu cum procesează un procesor un program, cum funcționează memoria sau orice altceva. Știam „doar atât cât trebuia” pentru a avea succes.

Peținul meu proiect Github a început să primească câteva stele, iar eu am publicat o postare pe blog sărbătorind 20 de stele.

Într-o dimineață, m-am trezit și am constatat că ajunsese la 120 de stele. Cineva celebru a scris pe Twitter despre el în timpul nopții, iar asta a dus la faptul că a ajuns în raportul zilnic de trending pe Github. Am fost #1 în trending pe Github pentru câteva zile.

Mulți oameni amabili m-au contactat pentru a-mi mulțumi și a mă încuraja. Se pare că există mii de oameni care nu numai că vor să lucreze la Google, dar vor să lucreze ca inginer software, iar această listă a fost exact lista de care aveau nevoie.

Acum este la peste 21.000 de stele.

Încă nu-mi vine să cred.

Și dacă nu obțin postul?

Nu va fi sfârșitul lumii.

Am investit timp și dedicare în studiile mele cu scopul de a mă angaja ca inginer software la Google, dar chiar dacă nu reușesc, voi fi înarmat cu abilitățile și cunoștințele necesare pentru a lucra ca inginer software la orice companie.

Oriunde voi ajunge, voi intra ca inginer software entry-level. Nu mă voi duce cu 15 ani de experiență în inginerie software, pentru că pur și simplu nu o am. Când vine vorba de aceste lucruri, sunt echivalentul unui proaspăt absolvent de CS.

Dar am și entuziasmul unui proaspăt absolvent. Aceasta este o lume nouă pentru mine. Sunt abia la început. Nu mi-e teamă să fac greșeli. Știu că o voi face. De asemenea, vreau să învăț tot ce pot și să fiu un plus excelent pentru orice echipă.

Nu studiați atât de mult cât am studiat eu

Da, mi-au trebuit 8 luni. Dar aș fi putut să scurtez procesul. Ca orice startup cu un obiectiv mare, faceți greșeli și faceți lucruri care vă fac să pierdeți timp. Sunt multe lucruri pe care mi-aș dori să mă întorc înapoi și să le fac diferit.

Am studiat subiecte de care nu aveam nevoie, unele pentru că am crezut că voi avea nevoie de ele pentru interviu, iar altele pentru că am vrut să am cunoștințele la îndemână pentru când voi începe să lucrez. Nu am vrut să fiu o povară pentru echipa în care am fost repartizată. Se pare că pur și simplu m-am pregătit prea mult.

Am petrecut 3 săptămâni citind o carte de 1.000 de pagini despre C++. Nu-mi amintesc valoarea a 1.000 de pagini, dar acum știu o bună parte despre C++. După cum se pare, folosesc Python pentru interviu, nu C++. Am presupus că am nevoie de C++, C sau Java, dar m-am înșelat. Este bine să întrebi, nu să presupui.

Am citit mult mai multe cărți decât era nevoie. Sunt doar 3 sau 4 cărți pe care ar fi trebuit să le citesc.

Am un catalog de coduri cu zeci de algoritmi pe care îi revizuiesc, dintre care majoritatea nu m-aș fi așteptat la un interviu. Nu trebuie să faceți asta.

Un teanc de algoritmi, tipărit pentru revizuire.

Am urmărit multe ore de videoclipuri pe YouTube, dar aș fi putut urmări mult mai puțin, și aș fi putut distribui subiectele în timp.

Ar fi trebuit să mă opresc din citit cărți și vizionat videoclipuri mai devreme și să mă apuc mai devreme de probleme de codare. Aș fi putut petrece mai mult timp aplicând subiectele pe care le-am învățat.

Repetiția spațioasă este cheia memorării. Odată ce ai învățat ceva, revizuiește-l din nou mai târziu, și din nou și mai târziu. La fiecare repetare, vă întăriți învățarea. Petrecând ore și ore întregi la un moment dat la cozi prioritare nu vă va face un expert. Deveniți expert revizuind și recapitulând în timp. Dacă faceți acest lucru, veți ajunge în punctul în care nu mai puteți uita detalii.

Pentru a vă ajuta să revedeți, am făcut 1.792 de flashcards (fișe digitale). Acesta este un număr mult prea mare. Le revăd pe telefon sau pe tabletă ori de câte ori am un moment liber (cum ar fi în timpul cumpărăturilor de Crăciun). Cardurile flash și repetiția spațioasă merg mână în mână. Odată ce am răspuns corect la un răspuns de pe o flashcard, nu îl mai marchez ca fiind cunoscut. Îl păstrez în pachet și, odată ce l-am văzut și am răspuns corect de mai multe ori, atunci îl marchez ca fiind cunoscut.

Sentimentul meu de teamă („Dacă îmi pun o întrebare despre copacii roșu-negru?”) m-a determinat să studiez mult mai multe subiecte decât era nevoie.

Dar nu voiam doar să mă pregătesc pentru interviu, ci voiam să mă pregătesc pentru o carieră la Google, rezolvând probleme la scară mare. Asta înseamnă să cunosc algoritmi care vor economisi resurse de calcul de timp, spațiu și I/O.

Poate că nu voi avea niciodată nevoie să cunosc un algoritm de flux maxim (Ford-Fulkerson), dar este bine să știu că am acest instrument la dispoziție dacă apare situația (fără a memora implementarea) și că pot recunoaște aplicarea lui la un spațiu de probleme.

Concluzie

La început, mi-am dorit să pot sări peste toată această învățare și să mă grăbesc să mă angajez, astfel încât să-mi pot petrece în schimb timpul învățând limbajele și instrumentele pentru echipa în care mă voi alătura. Dar, pe parcurs, mi-am dat seama cât de importante sunt aceste cunoștințe și, chiar dacă cele mai multe dintre ele s-ar putea să nu fie aplicabile zilnic, mă bucur că am depus acest efort. Am o nouă apreciere a istoriei informaticii, a marilor din domeniu, a structurilor de date și a algoritmilor (și a modului în care se completează reciproc) și a modului în care funcționează sistemele informatice la nivel scăzut.

Îmi voi depune candidatura în curând. A fost o călătorie lungă pentru a ajunge în acest punct – aproape un an întreg. A început în ianuarie, dar nu am putut să mă angajez să studiez cu normă întreagă până în aprilie.

Sunt cât se poate de pregătit. Nu pot continua să studiez și să amân aplicația la nesfârșit. La un moment dat, trebuie să fac saltul.

Văd un viitor strălucit în față.

Mulțumesc că v-ați făcut timp să-mi citiți povestea.

Articolul este disponibil și în arabă, vietnameză și coreeană.

Actualizare: 10 ianuarie 2017

Nu am fost angajat. Citește mai departe. Mulțumesc tuturor pentru sprijinul vostru uimitor și copleșitor.

Update: 6 martie 2017

Povestea are un final fericit! Am fost angajat de Amazon pentru a lucra ca inginer de dezvoltare software pe Amazon Web Services!

Unde să mă găsiți

Am un blog la Startup Next Door.

Google Interview University pe Github:

jwasham/google-interview-university
google-interview-university – Un plan zilnic complet pentru a studia pentru a deveni inginer software Google.github.com

.

Lasă un răspuns

Adresa ta de email nu va fi publicată.