Pourquoi j’ai étudié à temps plein pendant 8 mois pour un entretien avec Google

par Googley as Heck

Mon tableau blanc bien usé, orné de l’algorithme des plus courts chemins de Dijkstra à source unique.

C’est vrai. J’ai passé des milliers d’heures à lire des livres, à écrire du code et à regarder des conférences sur l’informatique, tout cela pour me préparer à l’entretien d’ingénieur logiciel de Google.

Si vous souhaitez vous préparer à un entretien avec Google, voici mon plan d’étude :

jwasham/google-interview-university
google-interview-university – Un plan quotidien complet pour étudier afin de devenir un ingénieur logiciel Google.github.com

Comment j’en suis arrivé là

J’ai commencé à programmer au collège, mais quand est venu le temps de l’université, j’ai poursuivi un diplôme en économie. Mon raisonnement était qu’il y aurait trop de programmeurs à la recherche d’un emploi au moment où je serais diplômé. Bon sang, j’avais tort.

Plus tard, je me suis engagé dans l’armée pour devenir programmeur, mais le recruteur m’a parlé d’un poste de renseignement militaire, et j’ai passé les deux années suivantes à étudier la langue coréenne. J’ai servi en Corée du Sud pendant 2 ans par la suite.

Avant de quitter l’armée, j’ai tenté de me remettre à la programmation et j’ai été surpris par la difficulté. J’avais appris le BASIC au collège et j’ai continué à le programmer pendant le lycée. Mais j’ai repris mes études de programmation avec le C++, et le saut était trop grand. Je n’arrivais tout simplement pas à le saisir.

J’ai cependant aimé faire des sites web, mais j’utilisais un logiciel avec une interface de type Word que j’utilisais pour publier mes sites web. Je ne savais pas comment faire des sites web à partir de zéro.

Après l’armée, j’ai décidé de rester en Corée pendant un an et d’enseigner l’anglais. J’ai utilisé mes nuits et mes week-ends pour étudier la programmation web, en utilisant Perl, HTML, CSS (qui était nouveau à l’époque), JavaScript et SQL.

Après une année d’études intenses, j’ai décroché un emploi dans la région de Seattle, et je suis ici depuis.

Faire un peu de travail depuis le balcon dans la belle Bellevue, WA.

Je suis un développeur web maintenant depuis 15 ans. J’ai lancé 3 entreprises, dont 2 sont toujours en activité et génèrent des revenus. J’ai travaillé dans de grandes et petites entreprises, aidé des startups à se lancer et à se développer, et recruté et géré des équipes. J’ai été gestionnaire de produits, PDG, concepteur et spécialiste du marketing.

J’ai eu une carrière réussie et j’ai beaucoup appris en cours de route. Mais je n’ai pas encore fini.

Recherche d’un changement de carrière

Vous vous souvenez de la partie où je n’ai pas obtenu de diplôme en informatique ? Cela a fait une différence.

Il y a quelques années, je pensais que je pouvais être embauché n’importe où. Je pensais que j’étais une matière chaude : l’insaisissable développeur web full-stack. Mais pendant ma recherche d’emploi en 2013, j’ai réalisé que mes compétences étaient insuffisantes. J’avais passé tellement de temps à courir après les dollars en dirigeant des startups pendant mon temps libre, que j’avais laissé mes compétences s’atrophier. Je n’avais pas suivi l’évolution de la technologie.

Pendant des années, j’avais appris juste assez pour m’en sortir. J’avais un large éventail de compétences, mais je n’étais pas un expert en quoi que ce soit.

Ne vous méprenez pas, je pouvais encore être embauché, mais pas dans les technologies ou les domaines dans lesquels je voulais travailler. Je pouvais être embauché dans des domaines où la pile technologique était quelque peu dépassée, comme moi. Il y a beaucoup d’argent là-dedans, mais je ne voyais pas de perspectives excitantes.

La prise de conscience a atteint son apogée l’année dernière lors d’un salon de l’emploi. J’étais intéressé à travailler peut-être pour l’une des entreprises locales qui étaient des laboratoires de démarrage dirigés par des sociétés de capital-risque. Cependant, le fait que je n’avais pas de diplôme en informatique, ni les compétences et les connaissances qui accompagnent un tel diplôme, signifiait que je n’avais aucune chance.

Je travaillais à temps plein sur mes entreprises à l’époque, et je le fais encore aujourd’hui.

Au début de 2016, j’ai décidé qu’il était temps de changer de carrière, passant de développeur web à ingénieur logiciel. J’aurais besoin d’étudier dur et de m’exercer afin de comprimer un diplôme en informatique en quelques mois, mais une fois que je l’aurais fait, je pourrais commencer une nouvelle carrière.

Vous ne voyez peut-être pas le développement web et l’ingénierie logicielle comme des postes différents. Les deux impliquent la programmation et l’artisanat, mais le génie logiciel y ajoute des connaissances sur les structures de données et les algorithmes, les langages compilés, les considérations de mémoire et la compréhension de l’impact des décisions de codage et d’architecture sur les machines où elles résident.

Les grandes entreprises qui embauchent pour des postes de génie logiciel s’attendent à ce que les candidats aient ces connaissances.

J’ai contacté une connaissance qui travaille chez Google et lui ai posé des questions sur son expérience dans l’entreprise. J’avais lu How Google Works et je connaissais déjà assez bien Google.

Par le biais d’un autre contact, j’ai reçu une copie des notes de coaching de Google qui sont fournies aux candidats aux entretiens. Cela est devenu la base de mon plan d’étude.

Google est un endroit assez génial pour travailler, mais avant même que je le sache, Google était mon objectif.

Pourquoi Google ?

Google place la barre très haut en matière d’embauche. Ils ne veulent embaucher que les meilleurs. Donc, si je vise haut (être embauché chez Google), je serai tout à fait embauchable ailleurs même si je ne suis pas sélectionné.

Plus j’en apprends sur Google, plus je veux y travailler.

En bref, Google est une entreprise qui embauche des personnes intelligentes et créatives, et qui les traite bien. Google récompense le mérite, encourage les grandes idées et donne aux employés la liberté de prendre de bonnes décisions pour l’utilisateur.

Le processus d’embauche est calibré pour attirer des personnes intelligentes et passionnées. Google a affiné le processus de recrutement et d’entretien au fil des ans. Les questions casse-tête sont depuis longtemps révolues. Aujourd’hui, les candidats sont choisis en fonction de leurs capacités de codage, de leurs connaissances techniques et de leur « Googleyness ». Il y a beaucoup de choses dans ce seul mot.

Lors d’un road trip en 2015, j’ai visité le QG de Mountain View. Cela a planté la graine.

La gestion est différente. Les managers ne font pas de microgestion. Ils font confiance aux ingénieurs pour prendre les bonnes décisions. Faire confiance aux employés change le rôle des managers chez Google par rapport à ce que la plupart des gens imaginent lorsqu’ils pensent à la gestion. En outre, les cadres ne peuvent pas embaucher, licencier ou promouvoir de manière unilatérale. De nombreuses décisions de gestion importantes qui pourraient être perçues comme des politiques de bureau sont traitées par un comité afin d’éliminer ce danger.

Les opérations de personnes (RH) de Google ont appris ce qui fonctionne au fil du temps, et elles utilisent les données et les commentaires des employés pour améliorer les systèmes d’évaluation, le processus d’embauche, les promotions, la rémunération, les avantages sociaux et plus encore. Lisez Work Rules ! de Laszlo Bock (SVP, People Operations) pour en savoir plus.

Oui, les avantages sociaux sont incroyables. J’ai fait une visite des bureaux de Google à Kirkland, WA, et cela a dépassé mes attentes. Et mes attentes étaient déjà élevées.

Université d’entretien Google

Souvenez-vous des notes de coaching que j’ai reçues pour me dire quoi étudier ? La liste des sujets semblait gérable, même si je ne connaissais rien de la liste.

J’ai transformé les sujets des notes en un plan et j’ai commencé à remplir les sujets avec des vidéos YouTube de conférences du MIT et de l’UC Berkeley. Une vidéo sur les listes liées à un endroit, une vidéo sur les files d’attente à un autre. La liste a commencé à s’allonger.

J’ai publié la liste sur Github parce que mon compte Github était plutôt vide. Comme tout le code que j’écrivais pour mes entreprises et mon travail était privé, mon compte Github donnait l’impression que je ne codais pas du tout. J’avais besoin de me constituer un portfolio. Au départ, j’ai appelé le projet « Projet 9894 ». Google a été lancé le 4 septembre 1998. D’où le nom. Je l’ai ensuite rebaptisé « Université d’entretien Google ».

Au fil du temps, j’ai ajouté des sujets facultatifs que j’ai découverts en cours de route.

Ma liste de lecture de l’été. Un peu trop haut.

J’étais assez étonné d’être allé si loin dans ma carrière sans même savoir comment une unité centrale traitait un programme, comment la mémoire fonctionnait, ou tout cela. J’en avais su « juste assez » pour réussir.

Mon petit projet Github a commencé à obtenir quelques étoiles, et j’ai publié un article de blog célébrant 20 étoiles.

Un matin, je me suis réveillé pour découvrir qu’il était passé à 120 étoiles. Quelqu’un de célèbre avait tweeté à son sujet pendant la nuit, et cela a conduit à ce qu’il se retrouve sur le rapport trending quotidien de Github. J’ai été le numéro 1 des tendances sur Github pendant quelques jours.

De nombreuses personnes aimables m’ont contacté pour me remercier et m’encourager. Il s’avère qu’il y a des milliers de personnes qui veulent non seulement travailler chez Google mais aussi travailler comme ingénieur logiciel, et cette liste était justement la liste de choses à faire dont ils avaient besoin.

Elle en est maintenant à plus de 21 000 étoiles.

Je n’arrive toujours pas à y croire.

Et si je n’obtiens pas le poste ?

Ce ne sera pas la fin du monde.

J’ai mis le temps et le dévouement dans mes études dans le but d’être embauché comme ingénieur logiciel chez Google, mais même si j’échoue, je serai toujours armé des compétences et des connaissances nécessaires pour travailler comme ingénieur logiciel dans n’importe quelle entreprise.

Où que je finisse, j’y vais comme ingénieur logiciel de premier échelon. Je ne vais pas y aller avec 15 ans d’expérience en génie logiciel parce que je ne l’ai tout simplement pas. Quand il s’agit de ce genre de choses, je suis l’équivalent d’un nouveau diplômé en informatique.

Mais j’ai aussi l’enthousiasme d’un nouveau diplômé. C’est un nouveau monde pour moi. Je viens juste de commencer. Je n’ai pas peur de faire des erreurs. Je sais que j’en ferai. Je veux aussi apprendre tout ce que je peux et être un excellent atout pour n’importe quelle équipe.

Ne pas étudier autant que moi

Oui, j’ai pris 8 mois. Mais j’aurais pu abréger le processus. Comme toute startup avec un grand objectif, vous faites des erreurs et faites des choses qui vous font perdre du temps. Il y a beaucoup de choses que je voudrais revenir en arrière et faire différemment.

J’ai étudié des sujets dont je n’avais pas besoin, certains parce que je pensais que j’en aurais besoin pour l’entretien, et d’autres parce que je voulais avoir les connaissances en main pour quand je commencerais à travailler. Je ne voulais pas être un fardeau pour l’équipe à laquelle je suis affecté. Il s’avère que je me suis simplement sur-préparé.

J’ai passé 3 semaines à lire un livre de 1 000 pages sur le C++. Je ne me souviens pas de la valeur de 1 000 pages, mais je connais bien le C++ maintenant. Il se trouve que j’utilise Python pour l’entretien, pas C++. J’avais supposé que j’avais besoin de C++, C ou Java, mais j’avais tort. C’est bien de demander, pas de supposer.

J’ai lu beaucoup plus de livres que nécessaire. Il n’y a que 3 ou 4 livres que j’aurais dû lire.

J’ai un catalogue de code de dizaines d’algorithmes que j’examine, dont la plupart ne s’attendraient pas à un entretien. Vous n’avez pas besoin de faire cela.

Une pile d’algorithmes, imprimés pour être examinés.

J’ai regardé de nombreuses heures de vidéos YouTube, mais j’aurais pu en regarder beaucoup moins, et répartir les sujets dans le temps.

J’aurais dû arrêter de lire des livres et de regarder des vidéos plus tôt et commencer sur des problèmes de codage plus tôt. J’aurais pu passer plus de temps à appliquer les sujets que j’ai appris.

La répétition espacée est la clé de la mémorisation. Une fois que vous avez appris quelque chose, revoyez-le plus tard, et encore plus tard. A chaque répétition, vous renforcez votre apprentissage. Passer des heures et des heures en une seule fois sur les files d’attente prioritaires ne fera pas de vous un expert. Vous deviendrez un expert en revisitant et en révisant au fil du temps. Si vous le faites, vous arriverez au point où vous ne pourrez plus oublier de détails.

Pour aider à réviser, j’ai fait 1 792 flashcards (cartes flash numériques). C’est beaucoup trop. Je les révise sur mon téléphone ou ma tablette dès que j’ai un moment de libre (comme pendant les achats de Noël). Les flashcards et la répétition espacée vont de pair. Une fois que j’ai trouvé la bonne réponse sur une carte flash, je ne la marque pas comme étant connue. Je la garde dans le jeu et une fois que je l’ai vue et que j’y ai répondu correctement plusieurs fois, alors je la marque comme connue.

Mon sentiment de peur (« Et s’ils me posent une question sur les arbres rouge-noir ? ») m’a conduit à étudier beaucoup plus de sujets que nécessaire.

Mais je ne voulais pas seulement me préparer à l’entretien, je voulais me préparer à une carrière chez Google, à résoudre des problèmes à grande échelle. Cela signifie connaître les algorithmes qui économiseront les ressources informatiques de temps, d’espace et d’E/S.

Je n’aurai peut-être jamais besoin de connaître un algorithme de flux maximal (Ford-Fulkerson), mais il est bon de savoir que j’ai cet outil disponible si la situation se présente (sans mémoriser l’implémentation), et que je peux reconnaître son application à un espace problématique.

Conclusion

Au début, j’ai souhaité pouvoir sauter tout cet apprentissage, et juste me dépêcher d’être embauché pour pouvoir plutôt passer mon temps à apprendre les langages et les outils de l’équipe que je rejoins. Mais en cours de route, je me suis rendu compte de l’importance de ces connaissances, et même si la plupart d’entre elles ne sont pas applicables au quotidien, je suis content d’avoir fait cet effort. J’ai une nouvelle appréciation de l’histoire de l’informatique, des grands du domaine, des structures de données et des algorithmes (et comment ils se complètent), et de la façon dont les systèmes informatiques fonctionnent à bas niveau.

Je vais bientôt déposer ma candidature. Cela a été un long voyage pour arriver à ce point – presque une année entière. Il a commencé en janvier, mais je n’ai pas pu m’engager à étudier à temps plein avant avril.

Je suis à peu près aussi prêt que je peux l’être. Je ne peux pas continuer à étudier et à repousser la demande éternellement. À un moment donné, je dois faire le saut.

J’entrevois un avenir brillant.

Merci de prendre le temps de lire mon histoire.

Article également disponible en arabe, vietnamien et coréen.

Mise à jour : 10 janvier 2017

Je n’ai pas été embauché. Lisez la suite. Merci à tous pour votre soutien incroyable et écrasant.

Mise à jour : 6 mars 2017

L’histoire a une fin heureuse ! J’ai été embauché par Amazon pour travailler comme ingénieur en développement logiciel sur Amazon Web Services !

Où me trouver

Je blogue sur Startup Next Door.

Google Interview University sur Github:

jwasham/google-interview-university
google-interview-university – Un plan quotidien complet pour étudier afin de devenir un ingénieur logiciel Google.github.com

Laisser un commentaire

Votre adresse e-mail ne sera pas publiée.