Article original : How I Landed a Software Engineer Job at Twitter
Par Zhia Chong
Voici l'histoire de comment j'ai obtenu un poste chez Twitter en tant qu'ingénieur logiciel à temps plein. Je vais partager le processus que j'ai suivi, comment je me suis préparé et pourquoi j'ai finalement décidé de rejoindre l'entreprise.
Comment j'ai commencé mon parcours
Click-clack-click-clack.
Le son de mes doigts frappant furieusement les touches du clavier résonnait dans la nuit.
Je levai les yeux de l'écran de mon ordinateur portable et jetai un coup d'œil à une horloge sur le mur d'un appartement en sous-sol que je louais pour 600 dollars par mois.
Il était 2 heures du matin.
Maintenant, vous pourriez penser que j'écrivais un logiciel ou que je piratais quelque chose d'important. Pourquoi sinon serais-je éveillé ?
Je ne l'étais pas.
Je me préparais pour mon prochain entretien technique de codage en utilisant un site web appelé Leetcode. La fureur m'a envahi parce que je n'arrivais pas à inverser une liste chaînée, qui était classée Facile sur la plateforme (essayez-la ici).
Comment j'en suis arrivé là
Un e-mail d'un recruteur de Twitter était arrivé une semaine plus tôt, demandant si je souhaitais planifier un premier entretien téléphonique avec l'un de leurs ingénieurs.
J'étais excité, mais aussi nerveux parce que j'avais postulé à un poste d'ingénieur logiciel chez Twitter il y a quelques années sans succès.
Le recruteur m'avait envoyé une fiche de préparation complète avec des liens pour pratiquer et me rafraîchir la mémoire sur mes compétences en codage et en algorithmes.
L'un des éléments de la liste de contrôle m'a dirigé vers leetcode.com (un site web de défis de codage) et c'est ainsi que j'ai fini par coder sur ce site pendant des heures afin de me préparer pour mon entretien technique de codage.
Ce n'était pas facile de se préparer pour les entretiens techniques. Pour quelqu'un qui est sorti de l'université depuis un certain temps, il faut un temps non négligeable pour se rafraîchir la mémoire sur les compétences et les fondamentaux nécessaires pour réussir un entretien technique de codage.
Le recruteur a explicitement souligné que notre entretien technique se concentrerait spécifiquement sur les fondamentaux techniques, comme les maps, les arbres binaires, les listes chaînées, les arbres de recherche binaires, les graphes, et ainsi de suite.
Si je devais commencer à me préparer à partir de zéro aujourd'hui, j'essaierais de trouver une approche beaucoup plus structurée afin de maximiser mon temps de préparation.
C'est pourquoi j'ai commencé un cours de coaching personnalisé, appelé Acing The Technical Interview.
Ce cours aide les gens à se préparer pour leurs entretiens aussi efficacement que possible afin qu'ils puissent réussir ces entretiens techniques et éviter les pièges et les pièges que j'ai dû apprendre à la dure.
De nombreux autres ingénieurs ont trouvé le succès grâce aux approches décrites dans le cours.
Mon parcours
J'avais 3 ans d'expérience en tant qu'ingénieur full-stack dans une startup, principalement avec la construction de microservices et le développement d'API sur la stack AWS.
La stack était fortement axée sur PHP, NodeJS, AWS SQS comme file d'attente de messages, Postgres pour notre base de données, et AWS S3 pour le stockage à long terme.
Je n'avais aucune expérience professionnelle ou de stage précédente, et le poste dans la startup était ma première position "réelle" d'ingénieur logiciel.
J'avais une formation formelle en informatique — j'ai obtenu un diplôme de premier cycle en informatique en 4 ans dans un petit collège jésuite privé dans l'État de Washington.
En regardant en arrière, je pense que c'était une expérience précieuse d'aller à l'université. Si je devais le refaire, je choisirais encore une formation formelle plutôt qu'un Bootcamp de codage. Vous pouvez regarder ma vidéo ici pour une analyse d'un diplôme de 4 ans en informatique par rapport à un Bootcamp de codage.
J'ai postulé à plus de 30 entreprises différentes, j'ai passé des entretiens avec 15, j'ai été rejeté par 6, j'ai reçu des offres de 6, j'en ai décliné 5 et j'en ai accepté 1. Si vous comptez, les maths ne s'alignent pas parfaitement parce que certaines entreprises ont disparu après l'entretien sur place.
Vous pouvez lire plus ici si vous êtes intéressé par la manière dont j'ai obtenu des offres des entreprises FAANG de premier plan sans un diplôme de l'Ivy League.
Comment je me suis préparé pour les entretiens
J'ai passé la majorité de mon temps sur Leetcode et avec un livre appelé Elements of Programming Interviews (fortement recommandé).
J'ai également passé environ 10 % de mon temps à parcourir YouTube pour des entretiens sur la conception de systèmes, comme Jack Gabbard et Gauran Sen.
Une autre ressource/un site web que j'ai aimé était DailyCodingProblem.com, qui envoie une question de codage par jour à votre e-mail. Cela vous permet d'obtenir de nouvelles questions fraîches tout le temps.
Temps de préparation total
Mon temps de préparation était d'environ un mois de pratique constante et ininterrompue. Il est crucial d'avoir un emploi du temps constant.
J'avais l'habitude de faire des sessions de codage intensives : 3 heures de codage intensif suivies d'une semaine de repos. J'ai trouvé que cela était inefficace et j'ai payé le prix fort de la commutation de contexte à plusieurs reprises.
Au total, j'ai passé environ 3 heures par jour en semaine (en raison du travail), et 4 à 6 heures le week-end pour un total d'environ ~20 heures par semaine pendant un mois.
Comment j'ai postulé aux emplois
J'ai postulé à Twitter via leur page carrière. Avec le recul, il aurait peut-être été plus efficace de trouver une recommandation ou un recruteur sur LinkedIn car cela aurait très probablement accéléré le processus de candidature.
Un CV bien rédigé est crucial, surtout lorsque vous postulez via un centre de carrière en ligne. Sans cela, je ne pense pas que j'aurais eu l'opportunité de passer des entretiens avec ces entreprises technologiques de premier plan.
Vous pouvez lire plus ici sur la manière dont j'ai conçu mon CV pour attirer l'attention des responsables de l'embauche.
Quelques semaines plus tard, un recruteur m'a finalement contacté et a souhaité planifier un premier entretien téléphonique.
Chronologie de mon processus de candidature
- 10 févr. 2017 — Le recruteur a pris contact pour planifier un TPS
- 8 mars 2017 — Premier TPS
- 13 avril 2017 — Deuxième TPS
- 18 avril 2017 — Entretien sur place
- 2 mai 2017 — Offre étendue
- 23 mai 2017 — Twitter confirmé
- 24 juillet 2017 — Date de début officielle
Les deux premiers entretiens techniques téléphoniques impliquaient du codage sur un document en ligne partagé, comme Google Docs. Nous avons parlé des différentes approches et compromis, et avons passé 30+ minutes sur l'implémentation.
Après les deux premiers tours, j'ai été avancé au tour suivant des entretiens sur place chez Twitter à Seattle.
Le recruteur m'a ensuite envoyé un lien vers un dépôt de codage en ligne et m'a demandé de faire une revue de code. Je devais faire des suggestions sur la manière d'améliorer le code et en discuter avec les intervieweurs sur place.
J'ai passé environ une journée à parcourir le code, je l'ai imprimé sur papier (environ 5 pages de long en police 10pt), et j'ai noté les zones d'amélioration sur le papier. Cela s'est avéré être un exercice utile comme je l'ai découvert plus tard.
L'entretien sur place
L'entretien sur place comportait 3 tours au total avec un déjeuner entre les deux (jeu de mots intentionnel) :
- Large (75 mins)
- Approfondissement (75 mins)
- Déjeuner
- Top-Grading (90 mins, Optionnel)
Une chose à noter est que les tours sur place de Twitter avaient 2 intervieweurs à chaque tour.
Au début, c'était intimidant d'être fixé par deux intervieweurs qui me jugeaient à chaque mouvement. Mais en réalité, j'ai aimé ça car cela semblait beaucoup plus collaboratif et nous échangions des idées.
Large (Conception de système)
L'entretien Large (Conception de système) se concentre sur une large gamme de sujets afin qu'ils puissent comprendre ce que vous savez sur la conception d'un système à partir de zéro. Le but est de pousser le candidat à ses limites et de voir jusqu'où il peut aller.
Ils ont posé des questions comme celle-ci :
Êtes-vous capable de construire un système fiable avec un temps d'arrêt raisonnable de bout en bout, depuis la configuration de l'UI jusqu'à la communication via une API HTTP, en passant par la construction d'un service backend ?
J'ai apprécié la conversation car j'ai toujours aimé bricoler avec différentes technologies. Si vous aimez construire des choses, vous aimerez aussi ce tour. Les intervieweurs étaient vraiment gentils et m'ont guidé poliment tout au long de l'entretien.
Nous avons terminé par une question de codage à la fin. Je ne me souviens honnêtement pas de ce que c'était, mais ce n'était rien d'extraordinaire.
Approfondissement (CV)
L'entretien Approfondissement s'est beaucoup plus concentré sur mes projets passés et mon expertise. Cela était, en toute honnêteté, beaucoup plus intense et difficile car l'intervieweur a approfondi chaque aspect des projets que j'ai construits et a remis en question mes décisions de conception.
Quel était un projet que vous avez construit récemment ? Pourquoi l'avez-vous construit ? Quelles étaient les alternatives envisagées ? A-t-il fonctionné à la fin ?
Venant d'un milieu de startup, j'étais responsable de la construction de nombreuses choses à partir de zéro, comme la configuration de clusters AWS et la configuration de SQS pour le traitement des tâches.
Même si j'étais intimement familier avec de nombreux projets, ce tour m'a poussé à mes limites. J'ai dû revenir sur mon expérience et raconter l'histoire de mon point de vue — pourquoi avons-nous conçu certaines choses de certaines manières et quelles étaient les meilleures/piires approches que nous avions envisagées. Aucune question de codage pour ce tour.
Top-Grading / Culturel
Le tour Culturel était un entretien de 90 minutes avec le responsable de l'embauche et la direction senior.
J'ai découvert plus tard que si vous arrivez à ce tour, cela signifie que vous avez suffisamment bien réussi techniquement et qu'ils cherchent une adéquation culturelle dans les deux sens — si vous vous intégrez dans leur culture et s'ils auraient les bonnes opportunités pour vous.
Aucune question de codage pour ce tour non plus.
Rétrospective du processus d'entretien
Les entretiens chez Twitter se concentrent fortement sur les fondamentaux de l'informatique. Assurez-vous donc de bien connaître vos structures de données de haut en bas et de gauche à droite. Il est également bon de réviser tous les algorithmes de base que vous auriez appris dans votre cours CS101.
Voici quelques autres conseils :
Connaître vos algorithmes en profondeur
Comprenez comment les compromis entre la complexité temporelle et la complexité spatiale fonctionnent.
Bien connaître une langue
Connaître et bien comprendre une langue a énormément aidé. Pour cela, je recommande quelque chose comme Python, Java ou C++ car ce sont des langues très couramment utilisées.
Personnellement, j'aime utiliser Python car il est très facile à lire, très facile à expliquer, et il a un tas de structures de données intégrées.
Faire une revue de CV
Assurez-vous de vous rafraîchir la mémoire sur les projets listés sur mon CV. Cela signifiait
- comprendre la conception complète du logiciel dont j'étais responsable de bout en bout,
- comprendre les compromis qui ont été faits dans le système, et
- avoir des raisons pour lesquelles les systèmes ont été construits de cette manière et quelles étaient les alternatives.
Être discipliné dans votre préparation
Déterminez dès le début les domaines dans lesquels vous êtes en retard, et établissez un calendrier pour vous entraîner. Il est important d'avoir une pratique constante et ininterrompue.
J'ai mal commencé et j'aurais souhaité le savoir plus tôt afin de ne pas avoir perdu de temps sur les mauvaises choses.
Réfléchir aux systèmes avec lesquels vous interagissez au quotidien
Déterminez les compromis, les alternatives, les avantages et les inconvénients, et comment vous pouvez construire un meilleur système. Cette compétence vous mènera très loin dans l'ingénierie logicielle.
Ressources que je recommande
- Acing The Technical Interview : Mon coaching personnalisé pour vous aider à réussir l'entretien technique dans les meilleures entreprises technologiques.
- Leetcode.com : Pratiquez les problèmes de codage ici.
- Consultez cette page de ressources pour plus d'équipements, d'outils et de livres que je recommande vivement.
Vous pouvez lire plus de mes articles sur la technologie sur mon blog personnel, où je partage mon parcours pour devenir ingénieur logiciel professionnel.
Si vous avez aimé cela, envisagez de partager cela avec quelqu'un qui en bénéficierait, et suivez-moi sur Youtube, LinkedIn et Twitter.
Je lance également un nouveau cours qui explique ce que les intervieweurs recherchent, comment vous pouvez vous préparer et comment maximiser vos chances de passer des entretiens et d'obtenir le travail que vous souhaitez.