Perché ho studiato a tempo pieno per 8 mesi per un colloquio con Google

di Googley as Heck

La mia lavagna ben consumata, adornata con l’algoritmo del percorso più breve di Dijkstra.

È vero. Ho passato migliaia di ore a leggere libri, scrivere codice e guardare lezioni di informatica, tutto per prepararmi al colloquio per l’ingegnere del software di Google.

Se vuoi prepararti per un colloquio con Google, ecco il mio piano di studio:

jwasham/google-interview-university
google-interview-university – Un piano giornaliero completo per studiare per diventare un ingegnere del software di Google.github.com

Come sono arrivato qui

Ho iniziato a programmare alle scuole medie, ma quando è arrivato il momento del college mi sono laureato in Economia. La mia logica era che ci sarebbero stati troppi programmatori in cerca di lavoro quando mi sarei laureato. Ragazzi, mi sbagliavo.

Poi mi sono arruolato nell’esercito per diventare un programmatore, ma il reclutatore mi ha convinto ad una posizione di intelligence militare, e ho passato i due anni successivi a studiare la lingua coreana. Ho servito in Corea del Sud per 2 anni dopo.

Prima di lasciare l’esercito, ho cercato di tornare a programmare e sono rimasto sorpreso dalla difficoltà. Avevo imparato il BASIC alle scuole medie e ho continuato a programmare durante le scuole superiori. Ma ho ricominciato i miei studi di programmazione con il C++, e il salto era troppo grande. Non riuscivo ad afferrarlo.

Mi piaceva fare siti web, tuttavia, ma usavo un software con un’interfaccia simile a quella di Word per pubblicare i miei siti. Non sapevo come fare siti web da zero.

Dopo l’esercito, ho deciso di rimanere in Corea per un anno e insegnare inglese. Ho usato le mie notti e i fine settimana per studiare la programmazione web, usando Perl, HTML, CSS (che era nuovo all’epoca), JavaScript e SQL.

Dopo un anno di studio intenso, ho trovato lavoro nella zona di Seattle, e sono qui da allora.

Facendo qualche lavoro dal balcone nella bellissima Bellevue, WA.

Sono uno sviluppatore web da 15 anni. Ho avviato 3 aziende, 2 delle quali sono ancora in funzione e generano entrate. Ho lavorato in aziende grandi e piccole, ho aiutato startup a lanciare e crescere, ho reclutato e gestito team. Sono stato un product manager, un CEO, un designer e un marketer.

Ho avuto una carriera di successo e ho imparato molto lungo la strada. Ma non ho ancora finito.

Cercare un cambio di carriera

Ricordate la parte in cui non ho preso una laurea in informatica? Ha fatto la differenza.

Alcuni anni fa, pensavo di poter essere assunto ovunque. Pensavo di essere roba forte: l’inafferrabile sviluppatore web full-stack. Ma durante la mia ricerca di lavoro nel 2013, mi sono reso conto che le mie competenze erano carenti. Avevo passato così tanto tempo a caccia di dollari gestendo startup nel mio tempo libero, che avevo lasciato atrofizzare le mie competenze. Non mi ero tenuto al passo con la tecnologia.

Per anni, avevo imparato quanto bastava per andare avanti. Avevo un ampio set di competenze, ma non ero un esperto in nulla.

Non fraintendetemi, potevo ancora essere assunto, ma non nelle tecnologie o nei settori in cui volevo lavorare. Potevo essere assunto per aree in cui lo stack tecnologico era in qualche modo superato, come me. Ci sono un sacco di soldi, ma non vedevo prospettive eccitanti.

La realizzazione ha raggiunto l’apice l’anno scorso ad una fiera della carriera. Ero interessato a lavorare forse per una delle aziende locali che erano laboratori di startup gestiti da società di venture capital. Tuttavia, il fatto che mi mancasse una laurea in informatica, e le competenze e le conoscenze che accompagnano tale laurea, significava che non avevo alcuna possibilità.

A quel tempo lavoravo a tempo pieno alle mie imprese, e lo faccio ancora oggi.

All’inizio del 2016, ho deciso che era il momento di fare un cambiamento di carriera da sviluppatore web a ingegnere del software. Avrei dovuto studiare duramente e fare pratica per comprimere una laurea in informatica in pochi mesi, ma una volta fatto, avrei potuto iniziare una nuova carriera.

Potreste non vedere lo sviluppo web e l’ingegneria del software come posizioni diverse. Entrambi coinvolgono la programmazione e l’artigianato, ma l’ingegneria del software aggiunge la conoscenza delle strutture dei dati e degli algoritmi, i linguaggi compilati, le considerazioni sulla memoria e la comprensione dell’impatto delle decisioni di codifica e architettura sulle macchine dove risiedono.

Le grandi aziende che assumono per posizioni di ingegneria del software si aspettano che i candidati abbiano queste conoscenze.

Ho contattato un conoscente che lavora a Google e gli ho fatto domande sulla sua esperienza in azienda. Avevo letto Come funziona Google e avevo già una certa familiarità con Google.

Attraverso un altro contatto, ho ricevuto una copia delle note di coaching di Google che vengono fornite ai candidati al colloquio. Questo è diventato la base del mio piano di studio.

Google è un posto di lavoro fantastico, ma prima ancora che lo sapessi, Google era il mio obiettivo.

Perché Google?

Google pone un livello molto alto per le assunzioni. Vogliono assumere solo i migliori. Quindi, se miro in alto (essere assunto a Google), sarò comunque assumibile altrove anche se non sarò selezionato.

Più imparo su Google, più voglio lavorare lì.

In breve, Google è un’azienda che assume persone intelligenti e creative, e le tratta bene. Google premia il merito, incoraggia le grandi idee e dà ai dipendenti la libertà di prendere buone decisioni per l’utente.

Il processo di assunzione è calibrato per portare persone intelligenti e appassionate. Google ha perfezionato il processo di reclutamento e di intervista nel corso degli anni. Le domande rompicapo sono scomparse da tempo. Oggi i candidati sono scelti in base alla capacità di codifica, alla conoscenza tecnica e alla Googleitudine. C’è molto in quella sola parola.

In un viaggio nel 2015, ho visitato il quartier generale di Mountain View. Questo ha piantato il seme.

Il management è diverso. I manager non microgestiscono. Hanno fiducia che gli ingegneri prendano le decisioni giuste. Fidarsi dei dipendenti cambia il ruolo dei manager di Google da quello che la maggior parte della gente immagina quando pensa al management. Inoltre, i manager non possono assumere, licenziare o promuovere unilateralmente. Molte delle importanti decisioni di gestione che potrebbero essere percepite come politica d’ufficio sono gestite da un comitato per eliminare questo pericolo.

Le operazioni sulle persone di Google (HR) hanno imparato cosa funziona nel tempo, e usano i dati e il feedback dei dipendenti per migliorare i sistemi di valutazione, il processo di assunzione, le promozioni, la compensazione, i benefici e altro. Leggi Work Rules! di Laszlo Bock (SVP, People Operations) per saperne di più.

Sì, i benefici sono incredibili. Ho fatto un tour dell’ufficio di Google a Kirkland, WA, e ha superato le mie aspettative. E le mie aspettative erano già alte.

Google Interview University

Ricordate le note di allenamento che ho ricevuto che mi dicevano cosa studiare? L’elenco degli argomenti sembrava gestibile, anche se non sapevo nulla della lista.

Ho trasformato gli argomenti degli appunti in uno schema e ho iniziato a riempire gli argomenti con i video di YouTube delle lezioni del MIT e della UC Berkeley. Un video sulle liste collegate in un posto, un video sulle code in un altro. La lista ha iniziato a crescere.

Ho pubblicato la lista su Github perché il mio account Github era piuttosto vuoto. Poiché tutto il codice che scrivevo per le mie imprese e il mio lavoro era privato, il mio account Github faceva sembrare che non scrivessi codice. Avevo bisogno di costruire un portfolio. Inizialmente ho chiamato il progetto “Progetto 9894”. Google è stato lanciato il 4 settembre 1998. Da qui il nome. In seguito l’ho rinominato “Google Interview University”.

Con il tempo ho aggiunto alcuni argomenti opzionali che ho scoperto lungo la strada.

La mia lista di letture estive. Un po’ sopra le righe.

Ero abbastanza stupito di essere arrivato così lontano nella mia carriera senza nemmeno sapere come una CPU elaborasse un programma, come funzionasse la memoria, o qualsiasi altra cosa. Sapevo “quanto bastava” per avere successo.

Il mio piccolo progetto su Github ha iniziato a ricevere qualche stella, e ho pubblicato un post sul blog per celebrare 20 stelle.

Una mattina mi sono svegliato e ho scoperto che era cresciuto fino a 120 stelle. Qualcuno di famoso aveva twittato su di esso durante la notte, e questo lo ha portato a finire sul rapporto di tendenza giornaliero di Github. Sono stato il numero 1 delle tendenze su Github per alcuni giorni.

Molte persone gentili mi hanno raggiunto per ringraziarmi e incoraggiarmi. Si è scoperto che ci sono migliaia di persone che non solo vogliono lavorare in Google, ma vogliono lavorare come ingegneri del software, e questa lista era proprio la lista di cose da fare di cui avevano bisogno.

Ora è a oltre 21.000 stelle.

Non riesco ancora a crederci.

E se non ottengo il lavoro?

Non sarà la fine del mondo.

Ho messo il tempo e la dedizione nei miei studi con l’obiettivo di essere assunto come ingegnere del software di Google, ma anche se fallisco, sarò comunque armato delle abilità e delle conoscenze necessarie per lavorare come ingegnere del software in qualsiasi azienda.

Dovunque finirò, ci andrò come ingegnere del software entry-level. Non entrerò con 15 anni di esperienza nell’ingegneria del software perché semplicemente non ce l’ho. Quando si tratta di queste cose, sono l’equivalente di un fresco laureato in CS.

Ma ho anche l’entusiasmo di un nuovo laureato. Questo è un mondo nuovo per me. Ho appena iniziato. Non ho paura di fare errori. So che lo farò. Voglio anche imparare tutto quello che posso ed essere un’eccellente aggiunta a qualsiasi squadra.

Non studiare tanto quanto ho fatto io

Sì, ho impiegato 8 mesi. Ma avrei potuto abbreviare il processo. Come ogni startup con un grande obiettivo, si fanno errori e si fanno cose che fanno perdere tempo. Ci sono molte cose che vorrei tornare indietro e fare diversamente.

Ho studiato argomenti di cui non avevo bisogno, alcuni perché pensavo che mi sarebbero serviti per il colloquio, e altri perché volevo avere le conoscenze a portata di mano per quando ho iniziato a lavorare. Non volevo essere un peso per la squadra a cui sono stato assegnato. Si scopre che mi sono semplicemente iperpreparato.

Ho passato 3 settimane a leggere un libro di 1.000 pagine sul C++. Non ricordo 1.000 pagine, ma ora so un bel po’ di C++. Come si è scoperto, sto usando Python per il colloquio, non C++. Avevo dato per scontato di aver bisogno di C++, C, o Java, ma mi sbagliavo. È bene chiedere, non supporre.

Ho letto molti più libri di quanto fosse necessario. Ci sono solo 3 o 4 libri che avrei dovuto leggere.

Ho un catalogo di codice di decine di algoritmi che rivedo, la maggior parte dei quali non mi aspetterei in un colloquio. Non è necessario farlo.

Una pila di algoritmi, stampata per la revisione.

Ho guardato molte ore di video su YouTube ma avrei potuto guardare molto meno, e distribuire gli argomenti nel tempo.

Avrei dovuto smettere di leggere libri e guardare video prima e iniziare prima con problemi di codifica. Sarei stato in grado di passare più tempo ad applicare gli argomenti che ho imparato.

La ripetizione spaziata è la chiave per la memorizzazione. Una volta che hai imparato qualcosa, ripassalo più tardi, e ancora più tardi. Ad ogni ripetizione, rafforzate il vostro apprendimento. Passare ore e ore in una sola volta sulle code di priorità non vi farà diventare esperti. Si diventa esperti rivisitando e rivedendo nel tempo. Se lo fai, arriverai al punto in cui non puoi dimenticare i dettagli.

Per aiutare il ripasso, ho fatto 1.792 flashcards (flashcards digitali). Questo è davvero troppo. Le rivedo sul mio telefono o tablet ogni volta che ho un momento libero (come durante lo shopping natalizio). Le flashcard e la ripetizione distanziata vanno di pari passo. Una volta che azzecco una risposta su una flashcard, non la segno come conosciuta. La tengo nel mazzo e una volta che l’ho vista e ho risposto correttamente molte volte, allora la segno come conosciuta.

Il mio senso di paura (“E se mi fanno una domanda sugli alberi rosso-neri?”) mi ha portato a studiare molti più argomenti del necessario.

Ma non volevo solo prepararmi per il colloquio, volevo prepararmi per una carriera a Google, risolvendo problemi su larga scala. Questo significa conoscere algoritmi che faranno risparmiare risorse di calcolo di tempo, spazio e I/O.

Potrei non aver mai bisogno di conoscere un algoritmo di flusso massimo (Ford-Fulkerson), ma è bello sapere che ho quello strumento disponibile se la situazione si presenta (senza memorizzare l’implementazione), e posso riconoscere la sua applicazione a uno spazio problematico.

Conclusione

All’inizio, avrei voluto saltare tutto questo apprendimento, e sbrigarmi ad essere assunto in modo da poter passare il mio tempo ad imparare i linguaggi e gli strumenti del team a cui mi unisco. Ma lungo la strada, ho capito quanto sia importante questa conoscenza, e anche se la maggior parte di essa potrebbe non essere applicabile su base giornaliera, sono contento di aver fatto lo sforzo. Ho un nuovo apprezzamento della storia dell’informatica, dei grandi del settore, delle strutture dei dati e degli algoritmi (e di come si completano a vicenda), e di come funzionano i sistemi informatici a basso livello.

Farò presto la mia domanda di ammissione. È stato un lungo viaggio per arrivare a questo punto – quasi un anno intero. È iniziato a gennaio, ma non sono stato in grado di impegnarmi nello studio a tempo pieno fino ad aprile.

Sono il più preparato possibile. Non posso continuare a studiare e rimandare la domanda per sempre. Ad un certo punto, devo fare il salto.

Vedo un futuro luminoso davanti a me.

Grazie per aver dedicato del tempo a leggere la mia storia.

Articolo disponibile anche in arabo, vietnamita e coreano.

Aggiornamento: 10 gennaio 2017

Non sono stato assunto. Continua a leggere. Grazie a tutti per il vostro incredibile e travolgente sostegno.

Aggiornamento: 6 marzo 2017

La storia ha un lieto fine! Sono stato assunto da Amazon per lavorare come ingegnere di sviluppo software su Amazon Web Services!

Dove trovarmi

Sono sul blog di Startup Next Door.

Google Interview University su Github:

jwasham/google-interview-university
google-interview-university – Un piano giornaliero completo per studiare per diventare un ingegnere software di Google.github.com

Lascia un commento

Il tuo indirizzo email non sarà pubblicato.