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

C'est vrai. J'ai passé des milliers d'heures à lire des livres, à écrire du code et à regarder des cours d'informatique, le tout pour me préparer à l'entretien avec l'ingénieur logiciel de Google.

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

jwasham / google-interview-université

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

Comment je suis arrivé ici

J'ai commencé à programmer au collège, mais quand est venu le temps de l'université, j'ai poursuivi un diplôme en économie. Ma raison était qu'il y aurait trop de programmeurs à la recherche d'un emploi au moment où j'aurais obtenu mon diplôme. Garçon, j'avais tort.

Plus tard, j'ai rejoint l'armée pour devenir programmeur, mais le recruteur m'a amené à un poste de renseignement militaire, et j'ai passé les deux années suivantes à étudier la langue coréenne. J'ai ensuite servi en Corée du Sud pendant 2 ans.

Avant de quitter l'armée, j'ai tenté de me remettre à la programmation et j'ai été surpris de la difficulté. J'avais appris le BASIC au collège et j'ai continué à le programmer jusqu'au lycée. Mais j'ai redémarré mes études de programmation avec C ++, et le saut était trop grand. Je ne pouvais tout simplement pas le comprendre.

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

Après l'armée, j'ai décidé de rester un an en Corée 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 intensives, j'ai décroché un emploi dans la région de Seattle et je suis ici depuis.

Je suis développeur web maintenant depuis 15 ans. J'ai démarré 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é chef de produit, PDG, designer et marketeur.

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

À la recherche d'un changement de carrière

Tu te souviens 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 pouvoir être embauché n'importe où. Je pensais que j'étais un truc chaud: l'insaisissable développeur Web full-stack. Mais lors de ma recherche d'emploi en 2013, j'ai réalisé que mes compétences faisaient défaut. J'avais passé tellement de temps à courir après des dollars en dirigeant des startups pendant mon temps libre, que j'avais laissé mes compétences s'atrophier. Je n'avais pas suivi 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 expert en rien.

Ne vous méprenez pas, je pourrais toujours être embauché, mais pas dans les technologies ou les domaines dans lesquels je voulais travailler. Je pouvais être embauché pour des domaines où la pile technologique était un peu dépassée, comme moi. Il y a beaucoup d'argent là-dedans, mais je n'ai pas vu de perspectives intéressantes.

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

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

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

Vous ne pouvez pas voir le développement Web et l'ingénierie logicielle comme des positions différentes. Les deux impliquent de la programmation et de l'artisanat, mais l'ingénierie logicielle y ajoute la connaissance des structures de données et des 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ù ils résident.

Les grandes entreprises qui embauchent pour des postes en génie logiciel s'attendent à ce que les candidats possèdent 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 un autre contact, j'ai reçu une copie des notes de coaching de Google qui sont fournies pour interviewer les candidats. Cela est devenu la base de mon plan d'étude.

Google est un lieu de travail assez génial, mais avant même de le savoir, Google était mon objectif.

Pourquoi Google?

Google place la barre très haut pour l'embauche. Ils ne veulent embaucher que les meilleurs. Donc, si je fixe mes objectifs (être embauché chez Google), je serai toujours assez embauché ailleurs même si je ne suis pas sélectionné.

Plus j'en apprends sur Google, plus je souhaite 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 de recrutement est calibré pour attirer des gens intelligents et passionnés. Google a perfectionné le processus de recrutement et d'entretien au fil des ans. Les questions de casse-tête ont disparu depuis longtemps. De nos jours, les candidats sont choisis en fonction de leur capacité de codage, de leurs connaissances techniques et de Googleyness. Il se passe beaucoup de choses dans ce mot.

La gestion est différente. Les managers ne micro-gèrent pas. 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 envisagent lorsqu'ils pensent à la direction. De plus, les gestionnaires ne peuvent pas unilatéralement embaucher, licencier ou promouvoir. Bon nombre des décisions de gestion importantes qui pourraient être perçues comme des politiques de bureau sont prises en charge par un comité pour éliminer ce danger.

Les opérations humaines de Google (RH) ont appris ce qui fonctionne au fil du temps et utilisent les données et les commentaires des employés pour améliorer les systèmes d'évaluation, le processus de recrutement, les promotions, la rémunération, les avantages, etc. Lisez les règles de travail! par Laszlo Bock (SVP, People Operations) pour en savoir plus.

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

Université des entretiens Google

Vous vous souvenez des notes de coaching que j'ai reçues me disant quoi étudier? La liste des sujets me paraissait gérable, même si je ne savais rien sur la liste.

J'ai transformé les sujets des notes en un aperçu 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 dans un autre. La liste a commencé à s'allonger.

J'ai publié la liste sur Github car mon compte Github était assez vide. Puisque tout le code que j'ai écrit 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 constituer un portefeuille. J'ai initialement appelé le projet «Projet 9894». Google a été lancé le 4 septembre 1998. D'où le nom. Plus tard, je l'ai renommée «Google Interview University».

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

J'étais assez étonné d'avoir été aussi loin dans ma carrière sans même savoir comment un processeur traitait un programme, comment la mémoire fonctionnait ou rien de tout cela. J'avais su «juste assez» pour réussir.

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

Un matin, je me suis réveillé pour constater qu'il était passé à 120 étoiles. Une personne célèbre avait tweeté à ce sujet pendant la nuit, ce qui l'a conduit à se retrouver dans le rapport quotidien des tendances de Github. J'étais n ° 1 des tendances sur Github pendant quelques jours.

De nombreuses personnes aimables m'ont remercié et encouragé. Il s'avère que des milliers de personnes souhaitent non seulement travailler chez Google, mais également travailler en tant qu'ingénieur logiciel, et cette liste n'était que la liste de tâches dont elles avaient besoin.

Il 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 consacré du temps et du dévouement à mes études dans le but d'être embauché en tant qu'ingénieur logiciel Google, mais même si j'échoue, je serai toujours armé des compétences et des connaissances nécessaires pour travailler en tant qu'ingénieur logiciel dans n'importe quelle entreprise. .

Partout où je me retrouve, j'entre en tant qu'ingénieur logiciel d'entrée de gamme. Je ne vais pas 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é CS.

Mais j'ai aussi l'enthousiasme d'un nouveau diplômé. C'est un nouveau monde pour moi. Je ne fais que commencer. Je n'ai pas peur de faire des erreurs. Je sais je vais. Je veux aussi apprendre tout ce que je peux et être un excellent ajout à toute équipe.

N'étudiez pas autant que moi

Oui, j'ai mis 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 font perdre du temps. Il y a beaucoup de choses que j'aimerais 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'entrevue, et d'autres parce que je voulais avoir les connaissances sous la main pour quand j'ai commencé à travailler. Je ne voulais pas être un fardeau pour l'équipe à laquelle je suis affecté. Il s'avère que j'ai simplement trop préparé.

J'ai passé 3 semaines à lire un livre de 1000 pages sur C ++. Je ne me souviens pas d'une valeur de 1 000 pages, mais je connais un peu le C ++ maintenant. Il s'avère que j'utilise Python pour l'interview, pas C ++. J'avais supposé que j'avais besoin de C ++, C ou Java, mais j'avais tort. Il est bon de demander, pas d'assumer.

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 codes de dizaines d'algorithmes que j'examine, la plupart auxquels je ne m'attendrais pas dans une interview. Vous n'avez pas besoin de faire ça.

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 à résoudre 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 à la fois sur les files d'attente prioritaires ne fera pas de vous un expert. Vous devenez 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 les détails.

Pour aider à la révision, j'ai créé 1 792 flashcards (flashcards numériques). C'est beaucoup trop. Je les passe en revue sur mon téléphone ou ma tablette chaque fois que j'ai un moment libre (comme pendant les achats de Noël). Les cartes flash et la répétition espacée vont de pair. Une fois que j'obtiens une réponse sur une carte flash, je ne la marque pas comme connue. Je le garde dans le jeu et une fois que je l'ai vu et répondu correctement à plusieurs reprises, je le marque comme connu.

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

Mais je ne voulais pas simplement me préparer à l'entretien, je voulais me préparer à une carrière chez Google, en résolvant des problèmes à grande échelle. Cela signifie connaître des algorithmes qui permettront d'économiser des ressources informatiques en temps, en espace et en E / S.

Je n'ai peut-être jamais besoin de connaître un algorithme de débit 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èmes.

Conclusion

Au début, j'aurais souhaité pouvoir ignorer tout cet apprentissage, me dépêcher et me faire embaucher pour pouvoir passer mon temps à apprendre les langues et les outils de l'équipe que je rejoins. Mais en cours de route, j'ai réalisé à quel point ces connaissances sont importantes, et même si la plupart d'entre elles ne sont peut-être pas applicables au quotidien, je suis heureux d'avoir fait l'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 de la manière dont ils se complètent) et du fonctionnement des systèmes informatiques à 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. Cela a commencé en janvier, mais je n'ai pu m'engager à étudier à plein temps qu'en avril.

Je suis à peu près aussi préparé que possible. Je ne peux pas continuer à étudier et à reporter définitivement l'application. À un moment donné, je dois faire le saut.

Je vois un avenir radieux à venir.

Merci d'avoir pris 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é. Continuez à lire . Merci à tous pour votre incroyable soutien.

Mise à jour: 6 mars 2017

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

Où me trouver

Je blogue sur Startup Next Door.

Université d'entrevue Google sur Github:

jwasham / google-interview-université

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