Article original : A Career Switcher’s Guide to Landing Your Dream Tech Job
Par David Tian
Dans cet article, je vais discuter de quelques conseils professionnels qui vous aideront à réussir vos entretiens dans les entreprises de vos rêves et à tirer le meilleur parti de vos offres d'emploi.
Introduction — De Wall Street au Googleplex
Le 31 mars 2019, j'ai été licencié par un fonds spéculatif en démarrage. Ayant été développeur logiciel quantitatif dans l'industrie de la finance pendant les 10 dernières années, je ne voulais pas un autre emploi faisant plus de la même chose. J'ai décidé de suivre ma passion et de trouver mon prochain emploi dans l'intelligence artificielle, l'apprentissage automatique et l'apprentissage profond.
Au cours des six mois suivants, j'ai travaillé très dur pour atteindre cet objectif. En septembre 2019, j'avais plusieurs entretiens sur site liés à l'apprentissage automatique et des offres, y compris des offres de Google et de Facebook.
Voici comment j'ai fait. J'espère que cela encouragera et aidera d'autres reconvertis potentiels à faire cette transition. Votre récompense pour la reconversion pourrait être double, à la fois intellectuellement et financièrement.
Le Googleplex : le siège mondial de Google
Résumé de l'article
Si vous manquez de temps, voici la recette rapide en 5 étapes qui a fonctionné pour moi.
- Curate : Travaillez sur un projet qui vous passionne et présentez-le en ligne
- Study : Pratiquez intensivement les problèmes de codage d'algorithmes et de structures de données et de conception de systèmes
- Apply : Utilisez plusieurs canaux pour obtenir des entretiens
- Interview : Gardez votre calme pendant les entretiens téléphoniques et sur site
- Negotiate : Sachez ce que vous voulez lorsque vous négociez des offres et que vous correspondez avec des équipes
Comme vous pouvez le voir, il s'agit d'une recette simple en 5 étapes. Cependant, la réalisation de chaque étape demande beaucoup de travail acharné. Lisez la suite pour plus de détails.
À propos de moi
Voici quelques informations sur moi, car je pense que ce guide serait le plus utile pour quelqu'un ayant un parcours similaire au mien.
À savoir, je suis un ingénieur/développeur logiciel expérimenté dans une industrie non technologique qui souhaitait passer à une grande entreprise technologique sur la côte ouest (région de la baie de San Francisco ou Seattle).
Si vous n'avez aucune expérience de travail en ingénierie logicielle, la recette ci-dessus devrait toujours fonctionner pour vous. Vous devez simplement travailler beaucoup plus dur que quelqu'un ayant de l'expérience en codage.
J'ai obtenu mon diplôme de l'Université de Waterloo au Canada en tant qu'ingénieur informaticien. Au début de ma carrière, j'ai travaillé comme ingénieur logiciel pour Microsoft et Oracle. Ensuite, j'ai changé pour l'industrie de la finance quantitative après mon MBA.
Au cours des 10 dernières années, j'ai travaillé comme développeur/analyste quantitatif pour Bank of America, UBS, Citadel et quelques autres entreprises. Mais depuis 2016, lorsque j'ai découvert pour la première fois l'apprentissage automatique (ML) et l'apprentissage profond, j'en suis tombé amoureux. Je savais que je voulais un emploi dans le domaine de l'IA/ML éventuellement.
En avril 2019, j'ai commencé ma préparation à temps plein pour cette reconversion professionnelle. Et je vais déménager dans la région de la baie la semaine prochaine pour rejoindre Google, l'un des leaders en IA et ML.
https://www.linkedin.com/in/dctian
5 étapes simples pour réussir
Étape #1 : Curate - Travaillez sur un projet cool et présentez-le
En février 2019, mon bon ami, Igor, m'a encouragé à créer un projet cool et à en parler. À l'époque, je n'avais pas de bonnes idées. Je n'avais jamais publié quoi que ce soit en ligne et ne savais pas par où commencer.
Mais début avril, alors que je passais des vacances avec ma famille au Mexique, une nuit, j'ai soudainement eu une révélation : je voulais construire une voiture autonome. N'ayant aucune expérience préalable en robotique ou en électronique, je me suis lancé dans la construction d'une voiture robotique autonome/Deep Learning, DeepPiCar, qui pourrait fonctionner dans mon salon.
Un mois plus tard, après avoir réussi à construire la voiture autonome, j'ai commencé à écrire une série de 6 articles de blog sur Towards Data Science pour enseigner aux autres comment en construire une.
En quelques semaines, mes blogs ont reçu plus de 10 000 vues, et la réaction des lecteurs du monde entier a été écrasante. J'ai senti que mes 2 mois de travail acharné — un mois pour construire la voiture, et un autre mois pour écrire les blogs — en valaient la peine.
DeepPiCar fonctionnant dans mon salon
Cependant, je n'ai pas réalisé son impact complet sur ma carrière professionnelle jusqu'à mes entretiens et appels de correspondance d'offres, lorsque les interviewers m'ont demandé « Pourquoi cherchez-vous à changer d'industrie actuelle ? » J'étais prêt avec des points de discussion !
Non seulement j'ai pu leur dire à quel point je me sens passionné par l'IA/ML, mais lorsque j'ai sorti ma voiture (oui, la vraie voiture robotique) de mon sac à dos et l'ai mise dans les mains des interviewers, j'ai pu voir l'excitation dans leurs yeux ! Beaucoup d'entre eux ont même dit qu'ils aimerait construire une telle voiture avec leurs enfants.
Je leur ai ensuite dit que j'avais publié les instructions complètes étape par étape avec le code source en ligne (avec des liens dans mon CV) pour qu'ils puissent les suivre. J'étais assez sûr qu'ils ne jetteraient pas mon CV dans les poubelles de recyclage par la suite. ;-)
Certains de mes amis me demandent de recommander de bons projets sur lesquels travailler. Voici quelques-unes de mes suggestions :
- Si vous souhaitez vous orienter vers le développement front-end, créez un site web cool avec beaucoup d'interactivité avec des frameworks open-source populaires, tels que React et Angular.
- Si vous êtes intéressé par le développement côté serveur, essayez de créer un crawler web ou un moteur de recherche en utilisant des technologies de serveur distribué telles que Cassandra, ZooKeeper, Memcached, et Elastic Search, etc.
- Si vous êtes passionné par les appareils mobiles, essayez de créer et de publier une application Apple/Android. Notez que la publication d'une application sur l'App Store d'Apple prend beaucoup plus de temps que sur le Play Store de Google.
- Si vous êtes intéressé par l'IA/ML, prenez l'un des modèles existants de vision par ordinateur ou de traitement du langage naturel en apprentissage profond, et essayez d'en faire un produit. Par exemple, j'ai pris un modèle de détection d'objets pré-entraîné, SSD, et je l'ai adapté pour en faire un détecteur de panneaux de signalisation pour ma DeepPiCar. Si vous êtes nouveau dans l'IA/ML, assurez-vous de lire la partie 1 de DeepPiCar, où je liste plusieurs cours et ressources ML pour vous aider à démarrer.
- Si vous êtes passionné par la robotique, essayez de construire des robots cool en utilisant un Raspberry Pi ou un Nvidia Jetson Nano. Assurez-vous d'utiliser soit le nouveau Raspberry Pi 4 ou Jetson Nano. Raspberry est plus largement utilisé par les makers et bénéficie d'un meilleur support, tandis que Jetson Nano dispose d'un GPU intégré, ce qui peut être mieux pour les projets de Deep Learning.
- Si vous n'avez aucune idée de projet, ne désespérez pas. Vous pouvez toujours contribuer à l'un des projets open-source mentionnés ci-dessus, ainsi qu'à TensorFlow ou PyTorch si vous êtes passionné par l'IA/ML. Vous pouvez penser que vous devez être un expert pour contribuer à ces projets open-source bien connus. Ce n'est PAS le cas. En réalité, dans chaque projet open-source, il y a plusieurs petites fonctionnalités et corrections de bugs faciles désignées pour les débutants afin qu'ils puissent se familiariser avec le code et le processus de soumission avant de s'attaquer à des problèmes plus complexes.
Projets Open-Source les plus populaires
Une fois que vous avez terminé votre projet, assurez-vous de le faire connaître au monde ! Est-ce suffisant de simplement publier votre code terminé sur GitHub et d'en avoir fini ? Non ! Parce que la plupart des gens préfèrent lire des blogs sur ce que fait votre code en premier.
De beaux blogs bien polis sont un excellent matériel de marketing pour votre projet, et plus important encore, pour vous !
Oui, écrire des blogs polis avec de belles images et graphiques prend beaucoup de temps. Cela m'a pris tout le mois de mai pour écrire 6 articles. J'estime environ 200 heures au total ou 30 heures/article. Si vous travaillez à temps plein, peut-être écrire un blog bien écrit, qui sert d'aperçu de votre projet.
Série de blogs de DeepPiCar
Une chose à retenir est que vous devez aimer ce que vous faites, au lieu de faire le projet juste pour décrocher un emploi. Si vous avez une passion pour ce que vous construisez, cela se verra lorsque vous parlerez aux interviewers.
Étape #2 : Étudiez dur et étudiez intelligemment
Algorithmes et Structures de Données
Si vous devez maîtriser une seule compétence pour les entretiens techniques, ce sont les compétences de codage en algorithmes et structures de données (A&DS). Peu importe les grandes ou petites entreprises technologiques pour lesquelles vous passez des entretiens, elles vous interrogeront sur vos compétences en codage, bien que la plupart des entreprises ne se soucient pas du langage de programmation que vous utilisez.
Mes langages de programmation préférés sont C++ et Python, mais pour les entretiens de codage, je recommande Python. Il est si concis et vous pouvez faire tellement avec si peu de lignes comparé à C++, qui est très verbeux. Il existe de nombreuses ressources qui vous préparent pour A&DS. J'ai utilisé les ressources suivantes :
Cracking the Coding Interview Book (CtCI) : ce livre fait environ 700 pages et ne coûte que 30 $. Si vous avez besoin d'un rappel sur les concepts A&DS, c'est un excellent point de départ. En plus des concepts, il donne une série de questions pratiques de niveau facile à moyen avec des solutions complètes. J'ai passé environ 2 à 3 semaines à temps plein dessus, en passant 1 à 2 jours complets sur chaque chapitre lié à A&DS. J'ai sauté les chapitres sur les maths/casse-têtes/OOD/C++/Java/SQL, car ils ne sont pas liés à A&DS.

LeetCode.com : J'ai également utilisé LeetCode (LC) intensivement, car j'ai senti que CtCI ne me donnait pas assez de pratique. Leetcode est probablement la base de données en ligne la plus complète et organisée de questions d'entretien de codage, avec plus de 1000 questions faciles, moyennes et difficiles. Chaque question a un numéro unique. (par exemple, LC#1 est TwoSum) De nombreux posts en ligne se réfèrent simplement à leurs questions d'entretien comme LC #xxx au lieu de taper toute la question.
Je recommande vivement de dépenser 30 $/mois pour s'inscrire à LeetCode Premium, car cela vous donne accès à TOUTES les questions et solutions de LC. J'ai trouvé cela si utile que je me suis inscrit pour l'adhésion annuelle pour 99 $, car je le considère comme une « cotisation de gym pour mon cerveau ».
J'ai complété plus de 100 questions LeetCode (35 faciles, 60 moyennes, 14 difficiles). Environ 90 % de mes questions d'entretien réelles, ou leurs variantes légères, pouvaient être trouvées sur LeetCode. Dans la plupart des cas, je ne savais pas qu'elles provenaient de Leetcode jusqu'après coup. Mais comme j'avais pratiqué suffisamment de questions LC moyennes, j'ai pu résoudre des questions de difficulté similaire. En fin de compte, j'ai senti que je ne pourrais JAMAIS faire assez de questions LC moyennes, car à ce jour, je lutte encore avec certaines des questions LC moyennes.

Solutions LeetCode Hard de Tushar Roy : Tushar est en fait un Engineering Manager chez Apple. Il a fait ces vidéos lorsqu'il était encore un ingénieur logiciel. Je dirais que regarder ses vidéos m'a non seulement appris ces algorithmes, mais aussi comment présenter des idées/algorithmes complexes clairement. Cela m'a énormément aidé lorsque je faisais du codage sur tableau blanc pendant les entretiens sur site.

Notez que la plupart des interviewers donneront des questions de niveau moyen de LC, car il est assez équitable de demander à quelqu'un de résoudre un problème moyen en 20 à 30 minutes. Je suggérerais de faire au moins 20 questions faciles et 30 questions moyennes de LC avant vos premiers entretiens téléphoniques. J'ai fait mon premier entretien téléphonique après avoir terminé le livre CtCI et avant de commencer sur LC, et j'ai été promptement massacré.
De plus, je me suis chronométré sur chaque problème de pratique, comme si j'étais en entretien. Cependant, j'ai utilisé un IDE, avec autocomplétion et un débogueur. Vous n'aurez pas ces outils dans un vrai entretien, donc je me fixais généralement une contrainte de temps plus stricte lors de mes pratiques, d'environ 30 min/question, au lieu de 45 min. Vous pouvez choisir de reproduire l'environnement de test réel en utilisant uniquement un éditeur de texte régulier ou même un tableau blanc. C'est à vous de décider selon vos préférences personnelles.
Conception de Système
La deuxième compétence la plus importante que vous devez maîtriser est la Conception de Système. Habituellement, une session d'entretien sur site vous demandera de concevoir un système distribué à grande échelle, comme le système de diffusion vidéo de Netflix, ou le système de messagerie instantanée WhatsApp, ou les stories Instagram, et ainsi de suite.
Ce test est un mélange de compétences techniques et non techniques. C'est un test de compétences techniques car vous devez comprendre de nombreux composants de système distribué couramment utilisés, tels qu'une base de données distribuée, un cache en mémoire distribué, un gestionnaire de configuration distribué, un stockage de fichiers distribué, et un moteur de recherche distribué, etc., ainsi que le moment opportun pour utiliser chacun d'eux.
C'est aussi un test de compétences non techniques car vous devez être capable de dessiner un diagramme clair pour illustrer votre conception et de discuter et défendre votre conception verbalement. On m'a dit que les entretiens de conception de système influencent fortement le niveau qui vous est offert si vous passez l'entretien sur site (c'est-à-dire qu'ils peuvent décider si vous êtes offert un poste d'ingénieur de niveau 4 ou de niveau 5, par exemple).
Voici les ressources que j'ai utilisées :
- Cracking the Coding Interview Book (CtCI) : Il y a un chapitre qui discute de la conception de système, mais il est couvert à un niveau assez basique
- Chaîne YouTube de Gaurav Sen sur la Conception de Système : Je me suis senti insatisfait après avoir lu le chapitre sur la conception de système de CtCI. Ensuite, je suis tombé sur la chaîne de Gaurav, qui compte 22 vidéos. J'ai téléchargé toutes ses vidéos sur mon ordinateur portable et je les ai regardées lors d'un long vol. Wow, ce gars est vraiment BON (et drôle) et explique les choses si clairement ! Environ 10 vidéos sont des descriptions approfondies des composants individuels du système distribué, le reste est une discussion sur des cas d'utilisation réels sur la façon de construire Netflix, ou Tinder, ou les systèmes Facebook, etc.

- Vidéos de Conception de Système de Tushar Roy : Bien que Tushar soit très bon dans les questions difficiles de LC, il a également 5 excellentes vidéos sur la Conception de Système. Je recommande de regarder ces vidéos après celles de Gaurav, car Gaurav vous donne une solide base en conception de système, et les vidéos de Tushar supposent certaines de ces connaissances.
Pour moi personnellement, puisque j'avais travaillé sur plusieurs systèmes distribués auparavant, j'ai pu saisir l'idée générale assez rapidement même si je n'avais pas utilisé certaines des nouvelles technologies mentionnées dans les vidéos ci-dessus. Après avoir regardé suffisamment de vidéos, j'ai pu généraliser la plupart des systèmes distribués en les couches suivantes :
- Clients (applications PC/Mobile, navigateur)
- Un équilibreur de charge distribué pour gérer les requêtes des clients
- Un réseau de diffusion de contenu (CDN) basé sur la localisation ou un cache en mémoire pour livrer rapidement du contenu volumineux et relativement statique (vidéos et images) aux clients qui sont géographiquement plus proches du CDN/Cache.
- Une série de microservices pour gérer diverses logiques métiers, telles que l'authentification, la diffusion/sauvegarde du contenu utilisateur, la livraison de messages entre utilisateurs.
- Les communications entre microservices sont envoyées via un système de messagerie distribué.
- Une base de données distribuée pour sauvegarder le contenu utilisateur et les messages. Optionnellement, ajoutez une couche de cache distribué avant la base de données pour améliorer le débit de lecture/écriture.
Questions comportementales
Je pense que les questions comportementales sont la partie la plus facile de l'entretien. Malheureusement, elles portent également le moins de poids dans une évaluation d'entretien. Bien sûr, les entreprises technologiques savent qu'il est facile de mettre en avant une personnalité de « personne gentille » et de dire les bonnes choses lors d'un entretien comportemental. Mais il est beaucoup plus difficile de s'entraîner à être un bon codeur.
Pour un reconverti, la question la plus importante à préparer est, bien sûr, « Pourquoi cherchez-vous à changer d'industrie ? » Espérons qu'avec le projet que vous avez construit à l'étape 1, vous pourrez probablement répondre à cette question de manière brillante en présentant votre projet et votre passion pour la nouvelle industrie et l'entreprise pour laquelle vous postulez.

Voici quelques autres questions comportementales à préparer :
- Pourquoi voulez-vous travailler pour mon entreprise/mon groupe ?
- Donnez un exemple d'un objectif que vous avez atteint et dites-moi comment vous l'avez atteint.
- Donnez un exemple d'un objectif que vous n'avez pas atteint et comment vous l'avez géré.
- Décrivez une situation stressante au travail et comment vous l'avez gérée.
- Avez-vous été dans une situation où vous n'aviez pas assez de travail à faire ?
- Avez-vous déjà fait une erreur ? Comment l'avez-vous gérée ?
- Décrivez une situation où vous avez eu un désaccord avec votre collègue/patron/subordonné, et comment vous l'avez géré ?
La clé de toutes les questions comportementales est de terminer sur une note positive. Par exemple, même si on vous demande un désaccord avec un collègue ou un échec dans votre carrière, décrivez honnêtement ce qui s'est passé, mais mentionnez surtout ce que vous en avez appris. Parlez de la manière dont cela vous a aidé à devenir un membre/ingénieur d'équipe plus efficace lorsque des situations similaires se sont reproduites.
Étape 3. Postulez via plusieurs canaux
J'ai commencé à surveiller de près le marché des emplois d'ingénieur ML dans la région de la baie début juin, juste après avoir publié mes blogs sur DeepPiCar. En même temps, j'ai commencé ma préparation intensive à temps plein pour le codage (environ 200 heures au total).
Fin juin, même si je ne me sentais pas tout à fait prêt, j'ai commencé à postuler dans des entreprises. La raison est qu'il y a un délai de 1 à 2 semaines entre l'envoi de mes CV et les entretiens téléphoniques. Via plusieurs canaux, j'ai pris contact avec plus de 20 entreprises et j'ai fait plus de 30 entretiens téléphoniques. Parfois, plusieurs entretiens téléphoniques avec la même entreprise.
CV — Listez d'abord les éléments pertinents
Je ne vais pas discuter trop de la rédaction de CV, car il existe déjà de nombreux articles excellents à ce sujet. Mon focus est sur la manière de le faire du point de vue d'un reconverti afin que les recruteurs puissent rapidement vous identifier comme un bon candidat pour la nouvelle industrie/fonction d'emploi.
Rappelez-vous que je passais d'un développeur quantitatif en finance à un ingénieur ML en technologie — c'était donc doublement délicat, car il s'agissait à la fois d'un changement de rôle et d'industrie. Encore une fois, mes projets sont venus à la rescousse. Je les ai listés en haut de mon expérience professionnelle, en tant que « Projets Personnels ». Oui, même s'ils ne sont pas exactement du « Travail », ils étaient mon travail, et étaient très pertinents pour ce que je voulais faire comme prochain emploi.
Vous devez savoir que la plupart des recruteurs ne lisent pas au-delà de la première page d'un CV. S'ils ne peuvent pas repérer les mots-clés qu'ils recherchent en 10 à 20 secondes, votre CV est mis de côté. J'ai également listé les ensembles de compétences (et tous les mots-clés) pertinents pour le nouvel emploi dans la moitié supérieure de la première page de mon CV. Voir ci-dessous.

LinkedIn — Laissez-les venir à vous !
Les meilleures candidatures sont celles que vous n'avez jamais à envoyer. Après avoir publié mes articles de blog sur DeepPiCar sur LinkedIn, j'ai été ravi de recevoir tant de messages/appels de recruteurs, y compris de certaines grandes entreprises de voitures autonomes, me demandant si je serais intéressé par leurs rôles d'ingénieur ML.
J'ai été surpris par le pouvoir des blogs Medium et des publications LinkedIn. Mais assurez-vous de vous marquer comme « ouvert aux opportunités » dans les paramètres de confidentialité de LinkedIn, afin que les recruteurs puissent vous trouver facilement. Lorsque les recruteurs me contactaient, j'obtenais presque toujours un entretien téléphonique.

Recommandations internes — Avoir un défenseur solide

Je dirais que les deuxièmes meilleures candidatures sont celles soumises par des recommandations internes. J'avais une recommandation interne à la fois chez Facebook et Google. J'ai échoué mon premier entretien chez Facebook, mais parce que mon recommandateur m'a donné une forte recommandation, Facebook m'a offert de réessayer. Heureusement, j'ai réussi le deuxième entretien téléphonique un mois plus tard.
Avec Google, c'était encore plus surprenant. En partie à cause de ma forte recommandation, et en partie parce que je leur ai dit que j'avais d'autres entretiens sur site à venir, ils m'ont directement passé aux entretiens sur site, même si j'étais un candidat à distance (je vis à Chicago, soit dit en passant).
Je vous recommande donc de trouver un membre de votre famille/ami/camarade de classe qui travaille dans l'une des entreprises technologiques que vous souhaitez rejoindre. Si aucun d'entre eux n'y travaille, peut-être qu'ils connaissent quelqu'un qui y travaille. Demandez à vos amis de vous présenter à eux, et peut-être de soumettre votre CV via une recommandation interne. Vos chances d'obtenir un entretien téléphonique sont beaucoup plus élevées de cette manière.
Une autre façon est d'utiliser judicieusement votre réseau LinkedIn. Vous pouvez rechercher des personnes qui travaillent pour une entreprise spécifique, et demander à l'un de vos amis communs de vous présenter. Si ce n'est pas possible, envoyez un message LinkedIn à la personne.
Notez que si vous envoyez beaucoup de messages LinkedIn, vous avez besoin de LinkedIn Premium. Je me suis inscrit pour environ 3 mois de LinkedIn Premium (environ 30 $/mois) et j'ai pu entrer en contact avec beaucoup plus de personnes directement. Certaines de ces connexions ont conduit à des entretiens. En tant qu'avantage supplémentaire, j'ai reçu beaucoup plus de messages de recruteurs qu'avant, car je crois que l'algorithme de LinkedIn m'a classé devant les utilisateurs non payants.
Agences de recrutement tierces
Dans l'ensemble, j'ai trouvé que la plupart des agences tierces n'ont pas bien fonctionné pour ma recherche d'emploi cette fois-ci. À titre de référence, lorsque je cherchais des emplois dans la finance par le passé, j'utilisais exclusivement des cabinets de recherche de cadres, et les résultats étaient excellents. Mais la plupart des géants de la technologie n'utilisent pas d'agences de recrutement tierces. Les seules agences qui ont bien fonctionné pour moi étaient TripleByte et DeepLearning.ai, que je vais discuter ci-dessous.
TripleByte — Passez les entretiens téléphoniques

TripleByte est une agence de recrutement unique. Son attrait pour le candidat est que, une fois que le candidat a réussi le test technique en direct de 2 heures de TripleByte, il peut directement passer à des entretiens sur site avec de nombreuses entreprises. C'est également attrayant pour les entreprises car TripleByte élimine la plupart des candidats faibles pour elles, économisant ainsi des heures de temps de dépistage téléphonique à leurs ingénieurs.
Lorsque j'ai réussi le test de TripleByte, j'ai pu choisir parmi environ 200 entreprises. Elles étaient principalement des startups, mais avec quelques grandes entreprises, comme Apple, Adobe, American Express, etc. J'ai fini par interviewer avec le groupe Apple Siri (énorme), Zoox (moyen), et Determined.ai (petit) sur site. Tous font un travail d'ingénierie incroyable.
Je recommande vivement de passer par le processus TripleByte, car il a identifié mes points faibles et m'a évité de nombreuses heures de dépistage téléphonique et de maux de tête associés. Passez le test en ligne de TripleByte ici.
DeepLearning.ai et Workera.ai — L'Évangile pour les Aspirants Data Scientists/Ingénieurs ML

Si vous êtes un aspirant Data Scientist/Ingénieur ML, vous avez probablement entendu parler ou suivi l'un des cours de Machine Learning/Deep Learning d'Andrew Ng, proposés par Coursera/Deep Learning.ai.
En fait, DeepLeaning.ai a deux parties : une partie est l'éducation, qui est très bien connue, et l'autre partie (Workera.ai) est le recrutement, qui est moins connue. C'est parce que Workera.ai est assez nouveau, lancé seulement mi-2019. Ils n'ont pas près autant de firmes affiliées que TripleByte, mais je crois qu'ils augmentent rapidement cet effort. Ils vous font également passer un test.
Les différences entre les tests de Workera.ai et de TripleByte sont doubles. Premièrement, c'est un test conçu pour les Data Scientists (DS)/Ingénieurs ML, alors que TripleByte a des tests pour les ingénieurs logiciels généraux ainsi que pour les ingénieurs ML — le test pour ingénieur ML est tout nouveau.
Deuxièmement, le test Workera.ai est non contraignant, ce qui signifie que le fait de réussir son test ne vous fait PAS passer directement aux entretiens sur site. Au lieu de cela, Workera.ai vous recommande aux groupes DS/ML de quelques-unes de leurs entreprises affiliées, et vous amène essentiellement à l'avant de la file d'attente. Mais vous devez toujours passer par le processus complet d'entretien téléphonique/sur site.
Je pense que c'est toujours très précieux car la réputation et le réseau d'Andrew Ng dans l'espace du Deep Learning dans la région de la baie sont assez vastes. J'ai fini par interviewer avec les groupes ML de Pinterest et Scale.ai. Je ne pense pas que j'aurais obtenu des entretiens de l'une ou l'autre entreprise si j'avais simplement postulé directement. Cliquez ici pour postuler au programme AI de Workera.ai pour les ingénieurs expérimentés.
Tableaux d'offres d'emploi en ligne — Ne vous y fiez pas trop

Pour élargir ma recherche, j'avais également configuré des alertes de recherche d'emploi sur quelques tableaux d'offres d'emploi en ligne, tels que LinkedIn, GlassDoor, Indeed et ZipRecruiter, afin qu'ils me notifient de toute nouvelle offre d'emploi correspondant à mes critères de recherche. Avec le temps, j'ai effectivement reçu quelques entretiens téléphoniques après avoir postulé.
Dans l'ensemble, j'ai trouvé que le rapport signal/bruit était quelque peu faible, ce qui signifie que je recevais beaucoup d'e-mails quotidiens, mais très peu de bonnes fonctions d'emploi de la part des meilleures entreprises. Mais ne négligez pas complètement ce canal. Vous devez lancer votre filet large au début, et peut-être attraperez-vous quelques poissons via ce canal.
Candidature directe — Cela ne fonctionne pas vraiment
Dans le temps, les gens envoyaient une belle lettre de motivation avec un CV aux entreprises, et ils s'attendaient à recevoir une réponse de quelqu'un du département des ressources humaines. Mais cette fois-ci, cette approche n'a pas fonctionné du tout pour moi !
J'ai identifié environ 10 entreprises (principalement des entreprises de véhicules autonomes) pour lesquelles je voulais travailler, et j'ai postulé directement sur leurs sites web, sous la page carrière. À ma surprise, je n'ai pas reçu de réponse de la part de l'une d'entre elles, pas même un e-mail de rejet !
Heureusement, postuler en ligne à chaque entreprise n'a pas pris trop de temps. Je dirais, postulez toujours à toute entreprise qui vous intéresse, mais ne retenez pas votre souffle en attendant une réponse.
Postulez pour des emplois en phases
Essayez de postuler à quelques entreprises pour lesquelles vous n'êtes pas si enthousiaste ou que vous pensez être plus faciles à intégrer dans votre première phase. Ensuite, postulez à votre emploi/entreprise de rêve dans une phase ultérieure. Vous pouvez utiliser votre première phase pour vous entraîner, vous améliorer, et si vous obtenez des offres, même les utiliser pour obtenir de meilleures offres de vos entreprises de rêve.
Cela peut sembler assez controversé et peut paraître une approche très « matérialiste », mais réfléchissez-y : beaucoup de gens travailleraient dans une entreprise moins prestigieuse, avec l'intention de gagner de l'expérience et de passer ensuite à une entreprise plus prestigieuse quelques années plus tard. Et qui sait, si vous n'obtenez pas l'emploi de vos rêves, au moins vous avez quelques offres parmi lesquelles choisir parmi vos entreprises de première phase.
Organisez-vous : Tenez un journal de bord
Lorsque vous postulez via tant de canaux, il est difficile de garder une trace des entreprises auxquelles vous avez postulé et des étapes auxquelles vous en êtes avec chaque entreprise.
Pour m'aider avec cela, je tiens un journal d'entretien détaillé. Il est organisé par étapes d'entretien (Postulé, Entretien, Offre, Rejeté, etc.) et ensuite par entreprises. Chaque entreprise est essentiellement une page, avec des informations de fond et une liste d'événements dans l'ordre chronologique, tels que des appels téléphoniques et des entretiens. De cette façon, je peux voir quelles entreprises j'ai contactées et interviewées afin de faire le suivi approprié.

Étape #4 : Entretiens
4.1 Entretiens téléphoniques
Appels initiaux des RH
Habituellement, le premier contact avec une entreprise est un e-mail d'un recruteur. Le recruteur vous demande un moment pour un premier appel téléphonique, qui est généralement un appel de « fit », où vous discutez de vos intérêts et de votre parcours et pourquoi vous seriez un bon candidat pour le poste. Ne stressez pas trop sur les détails. Cela sera probablement un appel court, et le recruteur voudra vous faire passer à l'étape suivante, qui est l'entretien téléphonique technique.
Avant l'entretien téléphonique technique

Un ou deux jours avant l'entretien téléphonique technique, assurez-vous de lire sur Glassdoor et Leetcode les questions d'entretien précédemment posées pour cette entreprise. Pour les grandes entreprises, comme Google et Facebook, cela ne fonctionne PAS bien, car il y a des centaines de questions précédemment posées.
Mais pour les petites entreprises, cela est quelque peu efficace. Je parcourais de nombreux posts sur Glassdoor et copiais les questions techniques spécifiques. Ensuite, j'essayais de les résoudre. Pendant les entretiens téléphoniques, il est assez rare de tomber sur les questions exactes postées en ligne, mais faire les problèmes passés de cette entreprise vous prépare mieux pour l'entretien téléphonique de cette entreprise.
Cela est analogue à la pratique des questions des examens finaux des années précédentes avant de passer l'examen final du même professeur — les questions peuvent être différentes, mais le style et le type de questions seraient similaires.
Entretiens téléphoniques techniques

Les entretiens téléphoniques techniques sont là où la gomme rencontre la route. Cette étape est conçue pour séparer les candidats capables des candidats moins capables. J'ai lu que seulement environ 10 à 20 % des candidats peuvent réussir les écrans téléphoniques techniques des meilleures entreprises technologiques.
Le critère de mesure est simplement un test de codage, PAS à quel point vous parlez bien, PAS à quel point vous êtes expérimenté dans votre travail actuel, PAS combien de langages de programmation vous connaissez, PAS même vos projets personnels. La plupart des interviewers veulent simplement que vous complétiez un exercice de codage dans le langage de programmation avec lequel vous êtes le plus à l'aise.
Personnellement, je ne suis pas tout à fait d'accord que ce soit la meilleure façon de trouver les meilleurs ingénieurs. Par exemple, j'ai travaillé avec de nombreux ingénieurs logiciels très expérimentés. Certains sont des experts en développement GUI/applications, d'autres sont des experts en C++, d'autres encore sont des gourous Linux de bas niveau, mais beaucoup d'entre eux me disent qu'ils échoueraient misérablement dans un test de codage chronométré sur les algorithmes et les structures de données (A&DS).
Mais puisque c'est le seul jeu en ville, pour percer dans l'industrie technologique, vous devez « Crack the Coding Interview »...

L'exercice de codage est toujours effectué via un bloc-notes en ligne partagé, comme CoderPad ou Google Docs, où vous et l'interviewer pouvez taper en même temps.
Alors que certaines entreprises, comme Google et Facebook, vous demandent uniquement d'écrire les bons algorithmes et ne vous demanderont pas d'exécuter votre code, de nombreuses entreprises s'attendent à ce que vous produisiez un code entièrement fonctionnel dans la fenêtre de temps de 45 à 60 minutes.
En plus du bloc-notes partagé, la plupart des entreprises mènent des appels vocaux uniquement, tandis que certaines entreprises mènent des entretiens téléphoniques via des appels vidéo Zoom/Skype.
Personnellement, les écrans téléphoniques sont la partie la plus difficile du processus d'entretien pour moi. À titre de référence, je n'ai réussi qu'environ 50 % de mes écrans téléphoniques techniques. Ils sont difficiles parce que :
- La fenêtre de temps de 45 à 60 minutes est généralement serrée pour moi, car je ne suis pas rapide à taper. (Croyez-le ou non, je suis plus rapide en codage sur tableau blanc pour des raisons que je vais discuter dans la section sur les entretiens sur site.)
- Vous devez coder tout en parlant avec l'interviewer tout au long de l'appel. La plupart des gens, y compris moi-même, préfèrent discuter d'une conception/approche d'abord, puis taper le code et déboguer en silence. Mais si vous ne parlez pas pendant 20 à 30 minutes pendant votre phase de mise en œuvre, ce sera très gênant.
- Le bloc-notes en ligne est basé sur du texte et n'est pas un tableau blanc. Il est donc difficile de dessiner un diagramme ou d'illustrer graphiquement le flux de travail de votre code.
- Les blocs-notes en ligne ne sont PAS des IDE. Bien que la plupart des blocs-notes en ligne, comme CoderPad, puissent faire une mise en évidence de la syntaxe et une indentation décente, ils ne sont pas des IDE complets. Par exemple, ils ne peuvent pas faire de complétion automatique des mots. Ils ne peuvent pas mettre en évidence les erreurs de syntaxe évidentes pendant que vous tapez et ils ne supportent certainement pas le débogage ligne par ligne. Donc, souvent, j'ai dû recourir aux « vieux fidèles » instructions print pour le débogage, ce qui est très lent et maladroit.
- Les appels vocaux sont non visuels. Alors que j'essayais d'expliquer mon approche par téléphone, je ne pouvais pas dessiner une image et je ne pouvais pas voir l'expression faciale ou le langage corporel de l'interviewer pour évaluer si j'étais sur la bonne voie.
Voici ce que j'ai fait pour combattre les difficultés ci-dessus :
- Utilisez un bon casque téléphonique. Cela devrait être très évident car vous voulez libérer vos deux mains pour coder ! Investissez donc dans un bon casque Bluetooth et assurez-vous qu'il est complètement chargé avant les entretiens téléphoniques.
- Limitez les « bavardages » au minimum. Lors de mes premiers entretiens, j'essayais de donner une bonne impression de moi-même à l'interviewer. Je passais donc environ 5 à 7 minutes à parler de mon parcours, de mes expériences, puis de ma voiture autonome. Parfois, l'interviewer me posait quelques questions, et cela pouvait durer jusqu'aux 10 premières minutes ! Ce que j'ai rapidement découvert, c'est que tout ce temps de « bavardage » empiétait sur les 45 minutes allouées à mon entretien, ce qui signifiait que j'avais moins de temps pour travailler sur le problème de codage. En fait, la plupart des interviewers sont là pour évaluer vos compétences en codage UNIQUEMENT, et votre solide expérience professionnelle n'est pas pertinente pour eux à ce moment-là. J'ai donc appris à réduire les « bavardages » à moins de 2 minutes au début, et à garder mes questions pour la fin de l'entretien. En fait, si j'avais réussi le problème de codage, les interviewers étaient généralement plus disposés à discuter avec moi un peu plus longtemps que les 45 minutes allouées. D'un autre côté, si vous avez « échoué » l'entretien de codage, discuter ne changera pas le résultat de l'entretien, de toute façon. Notez que ce conseil s'applique également aux entretiens sur site.

- Utilisez deux moniteurs. Un moniteur serait pour le bloc-notes partagé, et l'autre moniteur serait pour les recherches Google et l'IDE, etc. La plupart des ordinateurs portables de nos jours ont des ports pour des moniteurs externes. Assurez-vous de connecter votre ordinateur portable à au moins un moniteur externe lorsque vous codez, afin de ne pas avoir à basculer entre les fenêtres.
- Utilisez une souris externe. Si vous utilisez un ordinateur portable, assurez-vous d'investir dans une souris externe. Pour moi, l'utilisation d'une souris externe améliore considérablement ma capacité à sélectionner, copier et coller du code.

- Utilisez un IDE. Même si vous codez dans le bloc-notes partagé, parfois, pour résoudre des problèmes, il peut être préférable de copier-coller le code dans votre IDE, de corriger les erreurs de syntaxe et les bugs, puis de copier le code fonctionnel dans le bloc-notes partagé. La plupart des interviewers n'y verront pas d'inconvénient, tant que vous pouvez faire fonctionner le code dans le temps imparti. Ils veulent aussi vous voir réussir ! Avant votre entretien téléphonique, assurez-vous de configurer un projet vide où vous pouvez rapidement coller du code et l'exécuter. Vous ne voulez pas passer un temps précieux d'entretien à créer un projet et à configurer les paramètres d'exécution. Avoir un IDE ouvert signifie également que vous pouvez directement coller votre code à la fin de l'entretien afin de sauvegarder une copie des questions et de votre solution pour une analyse ultérieure.

- Utilisez un langage de programmation qui vous évite de taper. La plupart des conseils ici sont conçus pour vous faire gagner du temps en TAPANT, afin que vous puissiez passer plus de temps à RÉFLÉCHIR à la solution. Essayez donc de choisir un langage qui peut faire beaucoup avec très peu de frappe. Mes meilleurs langages sont C++ et Python. Je choisis Python pour tous mes entretiens, sauf si un interviewer demande spécifiquement du C++, car il est beaucoup plus expressif comparé au C++.
- Faites bon usage de Google. C'est un avantage de l'entretien téléphonique par rapport à l'entretien sur site, car vous pouvez utiliser Google ! Si vous n'êtes pas très familier avec l'API d'une fonction, ou une certaine syntaxe d'un langage, n'hésitez pas à la rechercher sur Google. Il est compris que vous pouvez utiliser Google pendant un entretien téléphonique. En fait, si votre interviewer est paresseux et a pris un problème mot à mot de LC, alors félicitations ! ;-)
- Parlez de votre approche en détail avec l'interviewer AVANT de commencer l'implémentation. Pour mes premiers entretiens, je commençais à coder après avoir une idée approximative de ce qu'il fallait faire, pensant que je pourrais préciser les détails en codant. Ce n'était PAS une bonne idée. Essayez de préciser autant de détails que possible pendant votre discussion initiale avec l'interviewer. Cela vous fera en réalité gagner beaucoup de temps plus tard. L'interviewer connaît bien sûr toutes les bonnes et mauvaises approches du problème. Si vous présentez une approche sous-optimale ou incorrecte, ils peuvent vous orienter vers une approche plus optimale et/ou peuvent pointer les bugs/cas particuliers que vous avez oublié de considérer. Cela peut vous faire gagner beaucoup de temps d'implémentation par la suite. Mais assurez-vous de couvrir autant de cas particuliers que possible par vous-même, car vous perdrez des points si l'interviewer doit pointer les cas particuliers manquants.
- Résoudre le problème est mieux que de ne pas résoudre le problème. Cette déclaration peut ne pas être si évidente lorsque vous cherchez la solution la plus optimale. Parfois, si je ne pouvais pas trouver la solution la plus optimale, je proposais et finissais par implémenter une solution sous-optimale. Dans tous les cas, le fait que j'aie trouvé une solution fonctionnelle (bien que sous-optimale) a donné à l'interviewer un bon point de comparaison pour me comparer aux autres. Dans certains cas, les interviewers m'ont dit, après coup, que la solution « optimale » que je pensais possible n'existait pas ! Comme je l'ai appris de mes propres expériences ratées, ne pas trouver de solution fonctionnelle serait certainement un entretien RATÉ.

Rappelez-vous, à ce stade, vous ne devriez PAS vous concentrer sur les questions de conception de systèmes, car elles ne sont posées que lors des entretiens sur site car cela nécessite un tableau blanc pour dessiner des diagrammes.
Tests de codage en ligne

J'ai rencontré très peu d'entreprises technologiques qui donnent encore des tests de codage en ligne, comme HackerRank ou Codility, bien que plusieurs entreprises financières donnent encore ceux-ci. La raison de donner ces tests est d'économiser la main-d'œuvre des entreprises d'embauche.
Habituellement, vous recevrez un lien vers un test en ligne d'une entreprise. Il y a généralement 3 à 5 questions de codage, que vous devez compléter dans une fenêtre de 2 à 3 heures. Vous devez le compléter à tout moment dans les 7 à 10 jours suivant l'e-mail du recruteur. Aucun humain ne vous surveille pendant que vous passez le test, et vous devez réussir la plupart des cas de test pour passer cette étape.
Voici quelques conseils pour les tests de codage en ligne :
- Utilisez un IDE : vous pouvez écrire et tester votre code entièrement dans votre IDE préféré, puis le coller dans la page de test en ligne pour exécuter les cas de test officiels.
- Lisez tous les problèmes avant de commencer. Certains tests en ligne sont conçus de sorte que la plupart des gens ne peuvent pas compléter toutes les questions dans le temps imparti. Assurez-vous donc de lire toutes les questions avant de commencer un problème et commencez par les questions les plus faciles afin de pouvoir terminer autant de questions que possible.
- Faites-le fonctionner d'abord. Pour la plupart des tests en ligne, le temps est une ressource rare. Le but est généralement de réussir autant de cas de test que possible, pas nécessairement TOUS les cas de test. Si vous avez une solution fonctionnelle, elle devrait réussir la plupart des cas de test. Si votre solution n'est pas la plus optimisée en temps, vous pouvez dépasser le temps sur quelques cas de test, ce qui est acceptable. Passez simplement à la résolution du problème suivant, revenez si vous avez plus de temps. (Remarque : NE FAITES PAS cela lorsque vous écrivez du code de niveau production. Pour le code de niveau production, Prenez le temps de bien faire vos algorithmes et de les nettoyer, et ajoutez suffisamment de documentation pour que vous et les autres puissiez maintenir votre code à l'avenir.)
- Sauvegardez une copie des questions et de vos solutions pour une analyse future. Cela devrait être une routine où vous sauvegardez TOUTES vos questions d'entretien, qu'elles soient téléphoniques/en ligne/sur site.
Projets à emporter
Quelques entreprises donnent des projets à emporter avant, ou à la place, d'un écran téléphonique technique. J'ai eu deux entreprises qui m'ont donné des projets à emporter, tous deux liés à l'apprentissage automatique. J'ai trouvé ces projets beaucoup plus agréables et plus pertinents pour l'emploi auquel je postulais. Donc, j'aurais souhaité que plus d'entreprises donnent des projets à emporter à la place des écrans téléphoniques techniques.
Mais je comprends que cela peut ne pas être aussi efficace ou équitable car 1) les entreprises ne savent pas si c'est vous ou votre ami expert en ML qui avez fait le projet, et 2) même si vous l'avez fait vous-même, combien de temps cela vous a-t-il pris ?
Pour les projets à emporter, comme vous devez généralement y consacrer beaucoup de temps, assurez-vous de bien utiliser votre temps.
Pour une entreprise qui vous enthousiasme vraiment, oui, consacrez 8 à 10 heures à faire un bon travail de codage et de documentation de votre approche et de vos décisions de conception. Pour le projet de Scale.ai, j'ai passé au moins 10 heures à travailler sur leur projet — même si les instructions me disaient de ne consacrer que 2 à 3 heures. Je l'ai fait parce que je trouvais cela amusant et que j'ai appris beaucoup en explorant différentes approches ML.
Pour les entreprises qui ne vous enthousiasment pas autant, ne consacrez pas autant de temps et économisez-le pour plus de problèmes LC, afin de mieux vous préparer aux entretiens de codage en général.
Planification des entretiens
Une fois que vous avez fait quelques entretiens téléphoniques, vous devriez commencer à recevoir des invitations pour des entretiens sur site. Au début de vos entretiens téléphoniques, votre taux de réussite sera quelque peu faible. J'ai littéralement échoué à tous mes 4 à 5 premiers entretiens téléphoniques. Ensuite, j'ai réalisé que je devais me concentrer sur la pratique de plus de programmation dynamique et d'algorithmes récursifs.
Votre expérience peut être différente, mais ne vous découragez pas lorsque vous recevez des e-mails de rejet dans votre processus d'entretien. Demandez des commentaires aux recruteurs et étudiez davantage. Il y a beaucoup d'entreprises parmi lesquelles vous pouvez essayer.
Voici quelques conseils pour la planification des entretiens :
- Tenez un journal d'entretien détaillé : C'est le même journal mentionné à l'étape 2. Maintenant est le moment de commencer à garder une trace de quand et de ce qui a été discuté dans chaque entretien.
- Mettez tous les entretiens dans votre calendrier et définissez des rappels/alertes. Vous ne voulez pas manquer un seul entretien parce que vous l'avez oublié. Assurez-vous également de confirmer le fuseau horaire de l'entretien. Pour simplifier, je communique toujours avec les recruteurs dans leur fuseau horaire (généralement l'heure du Pacifique).
- Planifiez des entretiens téléphoniques consécutifs avec au moins 30 minutes d'intervalle. Cela est dû au fait que certains interviewers peuvent appeler 5 à 10 minutes en retard, et certains interviewers peuvent permettre à l'entretien de dépasser la limite de temps de 5 à 10 minutes. Donc, si vous planifiez deux entretiens téléphoniques consécutifs, vous devrez peut-être en écourter un ou manquer l'autre appel. De plus, vous avez besoin d'une pause de 5 à 10 minutes pour vous éclaircir l'esprit et noter les détails de l'entretien.
- Demandez une deuxième chance. Cela peut être un fait peu connu. Si vous échouez au premier entretien téléphonique, de nombreuses entreprises vous permettront d'avoir une deuxième chance. La plupart ne l'offriront pas automatiquement, mais le feront si vous le demandez gentiment. Donc, demandez toujours, mais planifiez-le quelques semaines après le premier entretien, afin d'avoir assez de temps pour étudier. Il n'y aura généralement pas de troisième chance à moins d'attendre 6 mois.
- Échelonnez vos entretiens. J'ai échelonné mes entretiens en phases. J'ai mis les entreprises que je pensais être plus faciles à réussir dans la phase initiale, et les plus difficiles à réussir et les plus connues dans les phases ultérieures, environ 2 à 3 semaines plus tard. De cette façon, si vous découvrez que vous êtes faible dans certains sujets, vous avez 2 à 3 semaines pour les étudier.
- Regroupez vos entretiens sur site. Parce que la plupart des entreprises avec lesquelles j'ai interviewé sont dans la région de la baie, j'ai essayé de planifier tous les entretiens sur site dans un laps de temps de 1 à 2 semaines, afin de pouvoir prendre l'avion une fois et faire tous ces entretiens sur site. Par exemple, mes entretiens sur site dans la région de la baie ont duré 2 semaines complètes, pendant lesquelles j'ai interviewé avec 6 entreprises — 3 entretiens par semaine. Certaines entreprises seraient plus disposées à vous faire venir sur site si elles savent que vous serez en ville pour d'autres entretiens. De plus, elles n'ont pas à payer votre billet d'avion. Différentes entreprises ont payé certaines des nuits d'hôtel, et j'ai dû couvrir les autres nuits. Cela me convenait, car cela m'a fait gagner beaucoup de temps, et j'ai pu regrouper tous les entretiens sur site ensemble, afin de pouvoir entendre les décisions de tous en même temps.
4.2 Entretiens sur site

2 à 3 semaines avant l'entretien sur site, commencez à vous concentrer sur les questions de conception de système. De nombreuses entreprises vous permettent de planifier des entretiens sur site jusqu'à 4 à 6 semaines après avoir réussi l'entretien téléphonique. Cela devrait vous donner suffisamment de temps pour vous préparer aux questions de A&DS et de conception de système.
Normalement, il y a 4 à 5 sessions d'entretien de 45 minutes pour chaque entretien sur site d'une entreprise — 2 le matin, déjeuner, et 2 à 3 l'après-midi. Il y aura 1 conception de système, 1 comportement et 2 à 3 entretiens de codage A&DS. Très peu d'entreprises vous poseront des questions sur les maths ou les casse-têtes, donc je ne passerais pas beaucoup de temps à les préparer.
Entretiens de conception de système
Gaurav Sen concevant WhatsApp
Cela a été couvert dans l'étape 2 : Préparation à l'entretien. Si vous avez regardé toutes les vidéos YouTube de conception de système que j'ai recommandées et que vous pouvez les généraliser dans un cadre similaire à celui que j'ai décrit, vous serez en assez bonne forme.
Clarifiez les spécifications. Une technique importante de la question de conception de système est de clarifier les fonctionnalités et les capacités du système dès le début. Vous voulez définir un ensemble de fonctionnalités qui n'est ni trop trivial ni trop complexe pour que vous ne puissiez pas le terminer dans le délai de 45 minutes.
Par exemple, lorsque vous êtes invité à concevoir une application de messagerie instantanée, assurez-vous de mentionner les fonctionnalités essentielles telles que :
- Authentification de l'utilisateur (cela devrait être dans la plupart des systèmes)
- Messagerie un à un
- Messagerie de groupe
- Statut actif de l'utilisateur
- Messages hors ligne (si vous avez le temps)
Pour une session de 45 minutes, je ne mentionnerais pas ces fonctionnalités non essentielles :
- appels vocaux
- appels vidéo
- appels multi-personnes
- chronologies personnelles (c'est-à-dire Facebook Stories)
Bien sûr, si vous êtes invité à concevoir Skype, vous devrez concevoir pour les appels vocaux et vidéo, mais je n'inclurais pas le partage des bureaux d'ordinateur juste pour limiter l'ensemble des fonctionnalités à une portée gérable.
Surveillez les balles courbes. Pendant l'entretien, méfiez-vous des questions étranges et soyez capable de répondre intelligemment.

Par exemple, lorsque j'étais à l'entretien chez Facebook, on m'a demandé comment concevoir une version simplifiée de Google Search. J'ai procédé en dessinant une assez bonne conception de haut niveau sur le tableau blanc. Ensuite, l'interviewer m'a lancé une balle courbe :
Interviewer : « Donc, combien de serveurs pensez-vous avoir besoin ? »
Moi : « Eh bien, cela dépend du nombre de personnes qui l'utilisent et de la puissance des serveurs... »
Interviewer : « Pourquoi avez-vous besoin de savoir à quel point les serveurs sont puissants ? »
Moi : « Mon raisonnement est que l'utilisation réelle est en quelque sorte comme le numérateur, la capacité matérielle du serveur est comme le dénominateur, et le nombre de serveurs dépend de ces deux nombres. »
Interviewer : « NON, la spécification matérielle d'un serveur est sans importance. »
Moi : « Bien sûr que la spécification matérielle compte. Si je peux héberger un service avec 10 serveurs puissants, j'aurais probablement besoin de 100 ordinateurs portables pour héberger le même service. »
Interviewer : « La spécification matérielle est sans importance. »
À ce stade, j'étais perdu, car je pensais qu'il était assez déraisonnable. Après une longue et gênante pause, j'ai presque abandonné.
Moi : « Donc, que voulez-vous dire par le fait que les spécifications matérielles n'ont pas d'importance ? »
Interviewer : « Faites semblant de ne pas connaître la spécification matérielle d'un serveur, comment déterminez-vous combien de serveurs vous avez besoin ? »
OH, C'EST CE QU'IL A VOULU DIRE ??!! Il ne voulait pas dire que la spécification matérielle est sans importance, il voulait simplement dire que nous ne connaissons pas la spécification matérielle exacte.
Moi : « Oh, dans ce cas, je devrais benchmarker le débit des serveurs, et le nombre de serveurs requis est approximativement l'utilisation maximale divisée par le débit d'un seul serveur. Suis-je sur la bonne voie ici ? »
Je pouvais le voir légèrement hocher la tête.
La morale de cette histoire est d'illustrer à quel point il est important de clarifier ce que l'interviewer demande/dit. Vous pouvez le faire en répétant la question/déclaration dans vos propres mots. Si vous êtes vraiment bloqué, demandez-leur ce qu'ils voulaient dire par ce qu'ils viennent de dire. Peut-être vont-ils reformuler les questions/déclarations d'une manière différente, afin que vous puissiez comprendre et continuer.
Rappelez-vous que de nombreux interviewers ne sont pas des locuteurs natifs anglais, donc ce qu'ils disent et ce qu'ils veulent dire peuvent ne pas correspondre exactement. De même, de nombreux intervieweurs (y compris moi-même) ne sont pas non plus des locuteurs natifs anglais, donc ce qu'ils entendent et ce qu'ils pensent entendre peuvent également ne pas correspondre exactement.
Le fait que les interviewers disent la même chose de différentes manières peut grandement aider les intervieweurs à comprendre ce que les interviewers veulent vraiment dire.
Entretiens de codage A&DS sur tableau blanc
Tushar Roy parlant de la structure de données Trie
Les questions A&DS sur site sont presque exclusivement réalisées sur des tableaux blancs. Beaucoup de gens, y compris moi-même, ont initialement peur du codage sur tableau blanc, car qui, dans un cadre de travail réel, écrit du code détaillé sur un tableau blanc ?!
Mais au fur et à mesure que j'ai passé tous ces entretiens sur site, j'ai constaté que le codage sur tableau blanc est, dans un certain sens, plus facile que les entretiens téléphoniques. Je vais couvrir quelques techniques spécifiquement pour le codage sur tableau blanc ci-dessous.
Illustrez votre algorithme avec des diagrammes/graphiques/tableaux. Il y a un vieux dicton, « Une image vaut mille lignes de code », ou quelque chose comme ça. Avant d'écrire du code, essayez d'illustrer comment votre code fonctionnerait avec des diagrammes/graphiques/tableaux. Cela donnera à votre interviewer une feuille de route de ce à quoi votre code pourrait ressembler, et lui permettra de pointer tout problème potentiel qu'il voit.
Une fois que vous avez terminé de coder, essayez de parcourir votre code ligne par ligne avec les diagrammes sur le côté, afin de montrer à l'interviewer que votre implémentation correspond à ce que vous aviez l'intention de faire. Assurez-vous de regarder les vidéos YouTube Solutions LeetCode Hard de Tushar Roy pour apprendre à présenter des idées sur un tableau blanc.
Divisez le tableau blanc en sections. Pour les raisons mentionnées dans le conseil précédent, je recommande de diviser le tableau blanc en au moins 2 à 3 sections verticales. Une section est réservée aux diagrammes, et les autres sections sont pour le code. De cette façon, vous pouvez toujours vous référer aux diagrammes avant/pendant/après avoir codé.
Ne vous souciez pas des détails syntaxiques. Si vous êtes autorisé à coder dans n'importe quel langage de programmation (comme c'est la norme), alors l'interviewer ne devrait pas être très pointilleux sur la syntaxe de votre code. Par exemple, si vous oubliez un point-virgule final en C++/Java, ou un deux-points final en Python, ce n'est pas grave, tant que votre indentation est correcte. Ou si vous faites une faute d'orthographe ou raccourcissez le nom d'une fonction intégrée, ce n'est pas non plus grave, tant que l'interviewer comprend vos intentions. En revanche, vous n'avez pas le même luxe lors des entretiens téléphoniques.
Utilisez des noms de variables/fonctions raccourcis. Parce qu'écrire des noms longs avec un marqueur peut prendre beaucoup de temps et d'espace, dites à votre interviewer le nom complet et la signification d'une variable, puis utilisez le nom raccourci dans votre code. Cela vous fera gagner beaucoup de temps précieux ainsi que de l'espace précieux sur le tableau blanc.
Recherchez constamment des commentaires. C'est l'un des nombreux avantages d'un entretien sur site, car vous pouvez assez facilement évaluer les commentaires d'un interviewer. Lorsque je présente ma conception ou mon approche, je vérifie régulièrement les expressions faciales de l'interviewer et je demande de manière décontractée, « Suis-je sur la bonne voie ? » ou « Comment cela semble-t-il ? » Habituellement, les interviewers sont assez utiles et vous donnent quelques commentaires, ou au moins hochent ou froncent les sourcils. Si vous êtes complètement à côté de la plaque, ils vous le feront sûrement savoir, si vous demandez.
Comme je l'ai découvert à la dure à quelques reprises, lorsque je ne cherchais pas de commentaires, certains interviewers me laissaient terminer toute l'implémentation et puis pointaient quelques défauts majeurs à la fin. En conséquence, j'ai lamentablement échoué à tous ces entretiens. Donc, essayez de développer votre conception autant que possible avant de coder et cherchez des commentaires.

Autres conseils pour les entretiens sur site
Certains de ces conseils non techniques peuvent sembler évidents, mais je vais les lister comme rappel.
Posez de bonnes questions à la fin. Vous n'aurez probablement pas beaucoup de temps pour poser des questions à la fin de chaque session d'entretien. Gardez donc ces questions courtes et percutantes. L'entretien est un processus à double sens - les entreprises essaient d'extraire des informations de vous pour leur processus d'évaluation, et vous devez faire de même avec ces entreprises, afin de prendre les décisions les plus éclairées lorsque vous recevez des offres.

Voici les questions typiques que j'aime poser :
- Pouvez-vous me parler de votre parcours et de ce que vous faites dans votre groupe actuel ?
- Pouvez-vous me parler de la pile technologique et du processus de développement dans votre groupe/entreprise ? Une fois que l'interviewer mentionne quelques langages de programmation ou outils, vous pouvez faire écho en disant que vous avez également travaillé avec ces technologies.
- Quel serait un candidat idéal pour votre groupe/entreprise ? Une fois que l'interviewer mentionne quelques caractéristiques du candidat idéal, vous pouvez faire écho en disant que vous avez également certaines de ces caractéristiques et donner un exemple rapide pour l'étayer.
- Vendez-vous un peu. Cela peut ne pas fonctionner pour tout le monde. J'ai également utilisé le temps des « questions » à la fin de l'entretien pour montrer ma voiture robotique autonome et quelques vidéos YouTube de la voiture aux interviewers. Je pense que cela a fonctionné de manière surprenante, car j'ai vu que la plupart des interviewers étaient assez agréablement surpris lorsqu'ils tenaient la vraie voiture dans leurs mains.
Restez hydraté. Vous parlerez beaucoup pendant l'entretien, et vous transpirerez beaucoup (inconsciemment), donc vous voulez toujours être hydraté en tout temps. Cela signifie remplir votre tasse après chaque session d'entretien, et prendre une gorgée chaque fois que vous n'écrivez pas sur le tableau blanc. Je trouve que la caféine (café/thé/Coke) est assez efficace pour me maintenir à un niveau de performance optimal.

Prenez des pauses aux toilettes. Après chaque session d'entretien, assurez-vous de prendre une pause aux toilettes. Malheureusement, ces sessions d'entretien de 45 à 60 minutes sont généralement consécutives sans pause entre elles. Assurez-vous donc de demander une pause avant le début de la session suivante. Vous voulez pouvoir marcher et étirer vos jambes un peu et, plus important encore, vous laver les mains et le visage, afin de pouvoir aller au prochain entretien rafraîchi. Ne prenez pas une pause trop longue cependant, car le temps de pause empiète sur vos 45 minutes suivantes.
Prenez des notes. Je tiens toujours un journal détaillé de mes entretiens. Puisque la plupart de vos sessions d'entretien sont consécutives, le seul moment où vous pouvez prendre des notes est pendant les pauses aux toilettes. :) Apportez votre téléphone et notez rapidement quelques notes sur les questions et votre approche afin de vous rappeler après avoir terminé pour la journée. Cela ne devrait pas prendre plus d'1 minute.
Mangez un déjeuner léger. Il est assez difficile de ne pas trop manger au déjeuner car de nombreuses grandes entreprises technologiques ont une nourriture gratuite incroyable ! Facebook a même de la crème glacée gratuite ! Bien qu'il soit tentant d'essayer toute la nourriture gratuite pendant que vous y êtes, vous devez vous rappeler que vous n'êtes pas là pour manger une seule fois mais pour interviewer et obtenir l'emploi, afin de pouvoir manger là-bas chaque jour !
Deux raisons de ne pas trop manger : premièrement, vous voulez rester alerte pendant la session de l'après-midi et ne pas vous sentir somnolent. Deuxièmement, vous voulez passer la plupart du temps à discuter avec votre compagnon de déjeuner. Bien que pour certaines entreprises (Google/Facebook), les commentaires de votre compagnon de déjeuner ne fassent pas partie de la décision d'offre, beaucoup de fois, ils sont des personnes expérimentées dans les entreprises, donc leurs opinions peuvent compter et vous voulez laisser une bonne impression.

Apportez quelques collations. À l'inverse du point précédent, pour certains de mes entretiens sur site, soit par conception, soit en raison de conflits d'horaire, le déjeuner est prévu à 13h30-14h ou est complètement sauté ! J'avais tellement faim à ce moment-là et je fonctionnais à vide. J'ai donc appris à toujours emporter une barre de granola et quelques morceaux de chocolat avec moi afin de pouvoir prendre quelques bouchées rapides entre les entretiens.
Apportez quelques CV : Oui, la plupart des interviewers apporteront effectivement une copie de votre CV avec eux. Cependant, occasionnellement, j'ai rencontré des interviewers qui n'avaient pas apporté de copie de mon CV avec eux, alors je leur ai simplement donné une copie. Pour les entretiens techniques, cela n'a probablement pas beaucoup d'importance, mais c'est un geste sympathique.
Analyse post-mortem. Une fois que vous avez terminé les entretiens de la journée, ne vous détendez pas tout de suite. Tant que votre mémoire est encore fraîche, retournez à l'hôtel/chez vous et notez immédiatement autant de détails que possible sur les entretiens, y compris les noms/antécédents des interviewers, toutes les questions posées, vos approches, les réponses des interviewers à vos questions, etc. Faites cela électroniquement (pas sur un bloc-notes papier) afin qu'il soit plus facile de rechercher et d'archiver plus tard.
De plus, à un moment ultérieur, revisitez toutes les questions d'entretien, obtenez des solutions optimisées et réfléchissez à la manière dont vous pouvez améliorer vos performances la prochaine fois. Si vous trouvez les questions d'entretien sur LC, assurez-vous de taguer les questions avec les noms des entreprises, afin que les autres puissent bénéficier de votre expérience.

Les conseils ci-dessus ne sont que des astuces qui vous aident à faire pencher la balance en votre faveur. Vous devez toujours pratiquer intensivement les problèmes de A&DS et apprendre à identifier rapidement une approche pour chaque problème.
Par exemple, sachez quand utiliser BFS ou DFS dans un arbre/graphe, quand utiliser des algorithmes récursifs par rapport à des algorithmes itératifs, quand trier ou indexer les données avant le traitement, etc. Et TOUJOURS connaissez la complexité temporelle et spatiale en grand O de vos algorithmes. J'ai commencé la préparation aux entretiens fin mai, j'ai fait mon premier entretien téléphonique fin juin et j'ai terminé mes derniers entretiens sur site fin août — trois des mois les plus intenses de ma vie.
Si l'un d'entre vous me demande des questions spécifiques d'entretien que j'ai rencontrées, malheureusement, je ne peux pas les divulguer ici. Mais j'ai tagué toutes les questions d'entretien pertinentes sur LeetCode, comme moyen de redonner à la communauté en ligne de manière anonyme. J'espère que vous ferez de même après vos entretiens.
Étape 5. Négociation d'offre et correspondance d'équipe
5.1 Négociation d'offre
Si vous lisez ceci, vous avez probablement reçu au moins une offre. Wow, félicitations !
Si vous n'avez pas encore reçu d'offres, arrêtez de lire tout de suite et retournez faire plus de LeetCode et d'entretiens ! ;-)
Composants d'un package d'offre
Source : levels.fyi
Ce sont les composants typiques d'un package d'offre d'une entreprise technologique. Je vais donner un exemple d'un ingénieur logiciel de niveau intermédiaire (SWE), généralement 3 à 5 ans d'expérience (YoE).
- Bonus de signature : C'est l'argent que vous recevez juste après avoir commencé à travailler, PAS lorsque vous signez la lettre d'offre. Par exemple, un paiement unique de 30 000 $.
- Salaire de base : C'est l'argent qui est versé sur votre compte bancaire chaque mois. Par exemple, 150 000 $/an.
- Bonus annuel : C'est un pourcentage de votre salaire de base, généralement 10 à 30 %, donné chaque année. Par exemple, 20 %, ce qui est 30 000 $ pour un salaire de base de 150 000 $.
- Options d'achat d'actions ou subventions d'actions : les grandes entreprises ont tendance à donner des actions (appelées Unités d'Actions Restreintes, RSU) qui valent quelque chose au moment de l'attribution. Les startups ont tendance à donner des options d'achat d'actions, qui valent très peu au moment de l'attribution mais peuvent avoir un grand potentiel. Par exemple, 300 000 $ de subventions d'actions acquises sur 4 ans, donc 75 000 $ sont acquises chaque année.
- Package de relocalisation (si vous devez déménager) : Cela inclut généralement 1) quelques semaines de logement d'entreprise pour votre famille, 2) le déménagement de tous vos biens, 3) de l'aide pour la vente et l'achat de maisons, et optionnellement 4) un peu d'argent pour aider aux autres dépenses liées à la relocalisation. Le package de relocalisation est basé sur la composition de votre famille, votre lieu de résidence et votre niveau. Il n'est généralement pas négociable.
Compensation totale annualisée (TC) C'est le chiffre qui rend tous les packages d'offres comparables.
TC = Salaire de base + Bonus annuel + Subventions d'actions annuelles + bonus de signature amorti (supposez que vous amortissez le bonus de signature sur 3 ans)
TC de notre SWE de niveau intermédiaire
= 150k $ + 30k $ + 75k $ + 30k $ / 3 = 265 000 $
Notez que le package de relocalisation n'est pas considéré comme faisant partie du calcul de la TC, car il est prévu que vous dépenserez la majeure partie, sinon la totalité, du package de relocalisation.
Connaître votre niveau
Même si vous connaissez votre YoE, l'entreprise peut vous interviewer à un certain niveau spécifique à l'entreprise. Par exemple, un ingénieur avec 4 ans d'expérience peut être interviewé à L3 ou L4 chez Google, E3 ou E4 chez Facebook, et au niveau 59 à 62 chez Microsoft.
Demandez au recruteur à quel niveau vous êtes interviewé. Mais cela peut ne pas être le niveau auquel vous recevrez l'offre d'emploi. Par exemple, vous pouvez être interviewé chez Facebook à E4, et finalement, le comité d'embauche peut décider que votre performance n'est pas assez exceptionnelle pour un E4, mais suffisamment bonne pour recevoir une offre pour E3. Donc demandez à nouveau au recruteur à quel niveau est votre offre d'emploi. Avec ce niveau, vous pouvez découvrir la valeur attendue et la fourchette de la TC. (voir ci-dessous)

Connaître votre valeur marchande
Vous ne pouvez pas négocier si vous ne connaissez pas votre valeur marchande actuelle. Pendant des années, les entreprises ont gardé les informations sur la rémunération très secrètes, de sorte que les candidats ont subi un énorme désavantage d'information.
Heureusement, ces dernières années, les informations sur la rémunération ont été démocratisées, avec de nombreux sites web collectant des données auprès de nombreux candidats, puis présentant les données de rémunération anonymisées par niveau, fonction d'emploi et lieu. Un site bien connu est levels.fyi.
Compensation la plus élevée pour les SWE avec 3 à 5 ans d'expérience. Source : levels.fyi
Compensation la plus élevée pour les SWE avec 5+ ans d'expérience. Source : levels.fyi
Comme vous pouvez le voir ci-dessus, tous les emplois les mieux rémunérés se trouvent dans la région de la baie de San Francisco. Les SWE avec 3 à 5 ans d'expérience peuvent gagner jusqu'à 290 000 $ de TC, et les SWE avec 5+ ans d'expérience peuvent gagner plus de 400 000 $.
Pour tout ingénieur hors de la région de la baie, une compensation totale de 300 000 $ à 400 000 $ peut sembler astronomique. Mais rappelez-vous que le logement dans la région de la baie est la zone métropolitaine la plus chère des États-Unis. Le prix médian du logement à Palo Alto, en Californie, est de 2,8 millions de dollars (source : Zillow.com), et celui de la région métropolitaine de San Francisco (source : censusreporter.com) est de 1,1 million de dollars. Pour cette raison précise — de nombreuses personnes sont payées à un taux beaucoup plus élevé.
À titre de comparaison, les prix médians des maisons à Manhattan, NY, sont de 1,2 million de dollars (source : Zillow.com), et ceux de la région métropolitaine de New York/New Jersey sont seulement de 440 000 $. (source : censusreporter.com)
Armés de levels.fyi, de votre niveau (obtenu à l'étape précédente) et du nom de l'entreprise, vous pouvez clairement voir la TC moyenne signalée ainsi que sa fourchette. Par exemple, pour le SWE L4 de Google dans la région de la baie, la TC moyenne signalée est d'environ 260 000 $, avec une fourchette de 200 000 $ à 320 000 $. Donc si vous avez reçu une offre Google L4 dans les 200 000 $ bas, alors vous savez que vous avez de la marge pour négocier.

Startups
Levels.fyi est un excellent outil pour comparer les offres entre des entreprises plus matures (publiques ou privées), car la composante actions de la rémunération peut être évaluée en termes de dollars avec une plus grande certitude.
Mais pour les startups en phase précoce, vous ne pouvez pas trouver de points de données fiables sur Levels.fyi. Très souvent, on vous donne soit 1) un pourcentage des actions de l'entreprise, soit 2) un certain nombre d'options d'achat d'actions. Le recruteur de l'entreprise ou le PDG peut vous dire que même si la valeur de votre composante actions vaut très peu pour l'instant, elle peut valoir 20x à 50x plus si l'entreprise devient publique dans 3 à 5 ans.
En réalité, ces composantes actions sont difficiles à évaluer, sont extrêmement non liquides sans valeur monétaire pendant des années, et en effet, tombent à zéro lorsque 90 % de toutes les startups échouent. (source : Forbes).
J'ai reçu quelques offres de startups en phase précoce. Le package typique est léger en espèces (c'est-à-dire un faible salaire de base et bonus) et lourd en actions (beaucoup d'options avec un énorme potentiel de paiement... ou rien). Cela a du sens, car la plupart des startups en phase précoce ne réalisent pas de profit, et tout salaire/boni en espèces qu'elles versent épuise leur trésorerie ou, en termes de capital-risque (VC), brûle leur piste.
Bien que les startups pour lesquelles j'ai reçu des offres fassent un travail vraiment passionnant et que les perspectives semblent très prometteuses — l'une avait Google Ventures comme soutien — j'ai fini par choisir Google parce que j'ai besoin de la certitude et de la stabilité d'une grande entreprise. Après tout, j'aurai bientôt un enfant qui ira à l'université. Je ne peux pas me permettre de rejoindre une startup pendant quelques années pour la voir échouer et voir ma composante actions s'évaporer.
Cependant, si j'étais plus jeune et sans enfants, je travaillerais certainement pour une startup et essaierais de faire un coup de circuit. Si j'échouais, je ne serais pas sous pression pour subvenir aux besoins de la famille et j'aurais encore assez de temps pour recommencer. Si ma femme gagnait assez d'argent pour subvenir aux dépenses de toute notre famille, alors je pourrais aussi travailler pour des startups pour leur potentiel de hausse. En termes financiers, cela s'appelle diversification — en combinant des actions risquées avec des actions ou des obligations plus sûres, vous pouvez en fait obtenir des rendements ajustés au risque plus élevés.
Ne pas accepter une offre lors du premier appel

Lorsque vous recevez une offre de poste pour la première fois, le recruteur vous informe toujours des détails de l'offre (salaire de base, bonus, subventions d'actions, etc.) par téléphone. Cela s'appelle une « Offre Verbale ». Ce que vous devez faire lors du premier appel est de remercier le recruteur, de noter tous les détails de l'offre, de les répéter au recruteur pour confirmation, et de leur demander de vous envoyer ces détails de l'offre par e-mail. Ensuite, raccrochez.
Rappelez-vous, NE PAS accepter le poste sur-le-champ. (Si c'est l'emploi de vos rêves, vous pouvez sauter de joie APRÈS avoir raccroché le téléphone.) Parfois, le recruteur refusera de vous envoyer quoi que ce soit par écrit ou par e-mail. Si c'est le cas, envoyez-leur un e-mail avec les détails de l'offre que vous venez de noter et demandez-leur de confirmer si ce que vous avez entendu est correct. Ils répondront généralement de manière affirmative.
Cela est important car après qu'une offre soit écrite, le recruteur ne peut pas facilement revenir sur ce qu'il vous a dit au téléphone.
De nombreuses fois, les recruteurs vous pousseront à accepter verbalement l'offre immédiatement par téléphone ou vous donneront un délai de 24 heures pour accepter. NE MORDEZ PAS À L'HAMEÇON ! Vous devriez toujours essayer de négocier une meilleure offre.
Négociation d'offre — Offres multiples

La négociation d'offre est comme jouer au poker à haut risque — en effet, nous parlons de dizaines de milliers de dollars ici — et c'est à la fois excitant et stressant. Pour certaines personnes comme moi, cela peut aussi être effrayant. Cependant, armé d'informations de level.fyi, vous pouvez appeler le bluff d'un recruteur, si cette offre est trop basse.
Pour avoir un levier dans le processus de négociation d'offre, il est utile d'avoir une autre offre solide, ou en termes de poker, une main forte. De nombreux recruteurs sont très disposés à essayer de faire correspondre les offres concurrentes. Ils peuvent présenter l'offre concurrente au comité d'embauche/rémunération comme une justification solide pour mettre en place une meilleure offre pour vous.
Dans ce cas, vous pouvez essayer de faire en sorte que ces entreprises enchérissent pour votre rémunération. Cela est tout à fait normal, car les enchères se produisent tous les jours autour de nous lorsqu'une marchandise est en demande, comme sur les marchés boursiers, eBay et Google Ads. Le processus d'enchères garantit que la marchandise est évaluée à un prix de marché équitable.
Négociation d'offre — Une seule offre
Même si vous n'avez pas une main forte — c'est-à-dire une seule offre ou seulement des offres basses — vous pouvez dire au recruteur que vous êtes vraiment enthousiaste à propos de l'entreprise, mais que votre attente salariale est en réalité de $XYZ. Le recruteur vous demandera probablement de justifier ce chiffre, et vous pouvez dire qu'il est basé sur des chiffres de levels.fyi, ou vos amis/collègues qui ont une expérience similaire et dont la TC est de $XYZ.
Si vous vous présentez de manière professionnelle, il est très probable que l'offre initiale soit quelque peu augmentée. Il est très peu probable que l'entreprise retire son offre initiale simplement parce que vous essayez de négocier. Après tout, l'entreprise investit beaucoup d'efforts pour trouver un candidat qualifié, donc elle ne veut pas perdre un bon candidat pour une petite augmentation. Donc vous n'avez rien à perdre en demandant plus de rémunération, gentiment.
Négociation d'offre — L'argent n'est pas la seule chose sur la table
Rappelez-vous que l'argent n'est pas la seule chose que vous pouvez négocier. Tout ce que l'entreprise peut vous offrir est sur la table de négociation.
Par exemple, vous pouvez demander à travailler pour un groupe différent (par exemple, un groupe central plutôt qu'un groupe de support), un titre différent (par exemple, ingénieur logiciel senior au lieu d'ingénieur logiciel), une fonction de travail différente (par exemple, ingénieur de recherche plutôt qu'ingénieur logiciel), plus de jours de congé payé, du temps flexible pour travailler depuis chez vous, ou un meilleur package de relocalisation.
Bien sûr, cela varie beaucoup d'une entreprise à l'autre. Les grandes entreprises peuvent être moins flexibles, mais les petites entreprises qui peuvent ne pas être en mesure de correspondre à la rémunération monétaire des grandes entreprises peuvent être plus disposées à considérer ces demandes alternatives. Encore une fois, cela ne fait pas de mal de demander, si vous le faites gentiment.
Négociation d'offre — Ne soyez pas trop gourmand
Après quelques allers-retours avec le recruteur, si vous sentez qu'il n'y a pas beaucoup plus de marge de négociation, arrêtez de demander plus. Les recruteurs des grandes entreprises voient cela tous les jours, et probablement ne s'en soucieront pas trop. Pour les petites entreprises, le recruteur peut travailler directement avec votre responsable d'embauche ou même le propriétaire/fondateur. Si vous poussez trop fort votre négociation, vous pouvez être perçu comme trop gourmand. Donc même s'ils vous embauchent, ils peuvent vous voir négativement. Sachez quand être content.
Tactiques de retardement d'offre

Si vous n'êtes pas tout à fait satisfait de l'une des offres après négociation, vous devriez essayer de retarder l'acceptation des offres. Cela peut se produire si certaines offres ont des fonctions de travail très attractives, mais des rémunérations trop basses, tandis que d'autres offres ont des rémunérations intéressantes, mais vous n'aimez pas les fonctions de travail.
Retarder une offre vous donne plus de temps pour interviewer et décrocher cette offre parfaite. Mais cela comporte des risques, car le poste vacant peut être pourvu à tout moment. Mais pour les grandes entreprises technologiques, ce risque est minime, car elles recrutent en permanence. Si vous devez retarder une offre, voici quelques tactiques à essayer. (Avertissement : Je n'ai pas essayé toutes ces tactiques, certaines m'ont été suggérées.)
- Rencontrez l'équipe/les pairs : Demandez un appel, un café ou un dîner pour rencontrer le reste de l'équipe ou en apprendre davantage auprès des pairs. C'est une excellente façon de montrer votre intérêt et d'obtenir un signal fort sur la culture de l'entreprise/équipe.
- Demandez des démonstrations de produits : Demander une démonstration de produit est une autre excellente façon de montrer votre intérêt. C'est aussi un bon moyen d'évaluer les défis techniques, la feuille de route du produit et à quel point l'entreprise est orientée produit. Vous pouvez généralement combiner cela avec une rencontre avec l'équipe pour le déjeuner.
- Posez diverses questions liées aux actions/options, telles que la valorisation actuelle de l'entreprise, le dernier tour de financement, les plans/stratégies de sortie de l'entreprise, et le calendrier d'exercice des options, etc.
Ces stratégies fonctionnent mieux pour la plupart des entreprises. Pour certaines grandes entreprises technologiques, une fois qu'elles décident de vous faire une offre, l'offre est généralement valable pendant au moins quelques mois, car vous avez atteint leur niveau technique, et elles seraient heureuses d'embaucher un bon SWE à tout moment. Votre recruteur peut ne pas être disposé à vous dire cela, car ils veulent vous faire signer le plus rapidement possible, mais vous pouvez le découvrir à partir d'autres sources, c'est-à-dire Google Search et l'application Blind.
Enfin, rappelez-vous que tous les recruteurs veulent vous voir embauché par l'entreprise. Pouvoir conclure avec un candidat (c'est-à-dire convertir un candidat qualifié en employé) est l'une de leurs métriques de performance, qui est liée au bonus de performance d'un recruteur. Donc traitez votre recruteur comme votre avocat, pas comme votre adversaire.
5.2 Correspondance/Selection d'équipe
Ne choisissez pas un emploi simplement parce qu'il paie le plus en ce moment. Bien que la rémunération soit un facteur important dans votre processus de décision d'offre, ce qui peut être plus important est l'impact d'un emploi sur votre carrière. Je vais discuter de la manière de sélectionner une entreprise/équipe qui maximisera votre potentiel de carrière à long terme.
Processus de Correspondance d'Équipe

Pour de nombreuses entreprises (y compris Apple/Microsoft/de nombreuses autres entreprises), vous serez interviewé par quelques équipes spécifiques. Et lorsque vous recevez une offre d'emploi, ce sera pour l'une de ces équipes.
Cependant, pour certaines entreprises comme Google et Facebook, elles interviewent la plupart des candidats en tant que SWEs généraux et n'essayent de faire correspondre un candidat à une équipe qu'après que ce candidat a reçu une offre. Comme je n'ai vécu le processus de correspondance d'équipe qu'avec ces deux entreprises, je vais discuter de mon expérience ci-dessous.
Facebook étend d'abord une offre écrite ferme, puis vous fait correspondre à une équipe. La correspondance d'équipe peut également se faire avant que vous ne rejoigniez, lorsque vous prenez des appels de la part de responsables d'embauche, ou après que vous ayez rejoint, pendant les 4 à 6 premières semaines de la phase d'orientation/boot camp. Le pour de ce processus est que le candidat sait que son offre est ferme. Le contre est que vous courez le risque de rejoindre puis de ne pas trouver une équipe que vous aimez pendant le boot camp. Mais mes amis de Facebook m'ont dit que cette situation est très improbable.
Google, en revanche, fonctionne très différemment. Ils ne font pas une longue orientation/boot camp comme Facebook. Ils vous étendent d'abord une offre verbale, puis vous obligent à être jumelé à une équipe avant de vous étendre une offre écrite formelle. Même après avoir été jumelé à une équipe, cette offre peut être rejetée/modifiée par le comité d'embauche. Même la rémunération finale peut être révisée par rapport à l'offre verbale initiale par le comité de rémunération.
J'ai lu, dans de nombreux posts en ligne, que c'est un processus long et ardu. Comme je l'ai découvert personnellement, le processus de correspondance d'équipe était effectivement long et frustrant et a pris 1,5 mois. À un moment donné, j'ai sérieusement pensé que cela ne fonctionnerait pas et j'ai voulu rejoindre une autre entreprise à la place.
Si Google m'avait d'abord étendu une offre écrite ferme comme Facebook, cela aurait été beaucoup moins stressant, car j'aurais su avec certitude que j'allais travailler pour Google et tout ce que j'avais à faire était de trouver une équipe. Heureusement, les choses ont bien tourné pour moi car j'ai finalement été jumelé avec un groupe de mon choix, et l'offre a été approuvée par divers comités peu de temps après.
Comment choisir une équipe
Voici les questions que je me pose lors de l'entretien ou de l'offre. Vous n'avez pas besoin de poser exactement ces questions aux interviewers, mais vous voulez extraire les réponses à ces questions de vos entretiens/conversations avec les entreprises/groupes.
- Quel groupe vais-je rejoindre ? Je voulais rejoindre l'un des groupes « principaux » d'une entreprise — un groupe auquel l'entreprise avait consacré beaucoup d'engagement et de ressources. Ce sont souvent ses groupes de produits phares ou de forte croissance. Travailler dans ces groupes offre stabilité et/ou croissance.
- Quels types de travail vais-je faire pour cette entreprise/groupe ? J'ai cherché des expériences de travail transférables dans ma carrière ultérieure. Je préférerais travailler avec des outils et technologies publics, et moins avec les technologies propriétaires de l'entreprise. Par exemple, si je devais travailler sur un système d'apprentissage automatique de recommandation de publicités, je suis sûr que je pourrais facilement trouver une autre entreprise qui souhaite également améliorer son système de recommandation de publicités/produits. Cependant, je ne serais pas aussi intéressé à travailler sur l'automatisation de certains processus internes avec un langage de script propriétaire de l'entreprise.
- Que vais-je apprendre en travaillant pour cette entreprise/groupe ? Le travail est une voie à double sens. Je voulais pouvoir contribuer beaucoup à mon entreprise. En même temps, je voulais apprendre énormément de mon travail, afin que mes compétences soient très demandées lorsque je chercherai mon prochain emploi. Je crois que les compétences en IA/ML, en vision par ordinateur, en informatique en nuage, en voiture autonome et en RA/RV seront très demandées à l'avenir, donc je voulais apprendre certaines de ces compétences dans mon prochain emploi.
- Ai-je une passion pour ce travail ? Si vous n'avez pas de passion pour ce que vous faites, peu importe combien le travail paie — vous ne serez pas heureux et ne donnerez pas le maximum de vous-même. J'étais passionné par la finance quantitative car c'était cool de voir les mathématiques et la technologie transformer toute une industrie. Mais après 10 ans, ma passion est maintenant dans l'IA/ML. C'est vraiment génial et magique que vous n'ayez pas à dire à un ordinateur exactement comment faire quelque chose. Tout ce que vous avez à faire est de lui fournir des données et il trouvera comment le faire mieux que quelqu'un le ferait avec du code.
- Est-ce que j'aime mon manager et mes pairs ? Et est-ce qu'ils m'aiment ? Vous voulez un manager qui vous apprécie et vous soutiendra dans votre nouveau travail. Vous voulez également apprécier la compagnie de vos coéquipiers, puisque vous serez avec eux 8+ heures chaque jour, même plus longtemps que lorsque vous êtes avec votre famille !
Souvent, toutes les conditions ci-dessus ne peuvent pas être satisfaites. Vous devez alors peser le pour et le contre de chacune. Mais si l'une des conditions ci-dessus vous donne un signal d'alarme, je considérerais sérieusement de passer cette offre.
J'ai fini par choisir de rejoindre le groupe de caméras du téléphone Pixel de Google car il offre trois choses pour lesquelles je suis très passionné : la vision par ordinateur, l'apprentissage automatique et le matériel. Ce sont exactement les sujets de mon projet de voiture robotique autonome ! De plus, d'après ce que j'ai appris, Google est maintenant profondément engagé dans ses stratégies de matériel et de maison intelligente, où le téléphone Pixel sera une partie centrale de cet écosystème.
Réflexions finales

Merci d'avoir lu jusqu'ici. Ce fut un véritable parcours pour moi ces six derniers mois. Grâce à mes projets personnels et à ma préparation intensive aux entretiens, je crois que je suis maintenant un meilleur ingénieur (ou au moins un meilleur candidat. ;-) Ce que j'ai présenté sont mes propres leçons et expériences.
J'ai constaté que les questions A&DS sont au cœur de tout entretien technique, et qu'il n'y a pas de raccourci pour s'améliorer, si ce n'est en pratiquant davantage de questions LC. Une fois que vous êtes à l'aise avec les questions A&DS et de conception de système, les suggestions que j'ai présentées dans cet article devraient vous aider à faire pencher la balance en votre faveur.
Je recommande de marquer cette page, car vous devrez vous y référer dans les 2 à 6 prochains mois, au fur et à mesure que votre recherche d'emploi progresse. Certains des conseils des étapes ultérieures n'auront pas beaucoup de sens jusqu'à ce que vous atteigniez réellement cette étape. Par exemple, vous devrez peut-être faire quelques entretiens téléphoniques pour apprécier les conseils présentés à l'étape 4, et vous ne devriez certainement pas penser à la négociation d'offre de l'étape 5 avant d'obtenir des offres.
Si vous passez des entretiens, faites-moi savoir quels conseils ont bien fonctionné ou moins bien en laissant un commentaire ci-dessous, afin que les autres puissent également en bénéficier. N'hésitez pas à suggérer de nouveaux conseils dans les commentaires également. Merci !
Ressources
Voici une annexe de ressources (par ordre alphabétique) que j'ai utilisées dans mon processus de recherche d'emploi. J'espère que vous les trouverez utiles également.
Blind : Cette application permet aux employés de diverses entreprises (principalement technologiques) de poser des questions et d'y répondre de manière anonyme. Les gens discutent généralement des décisions de carrière, de la culture d'entreprise, des entretiens et de la rémunération, etc.
J'ai trouvé cette plateforme à la fois bonne et mauvaise. Elle est bonne car vous obtenez des réponses/réponses plus franches et parfois des informations internes. Elle est mauvaise car certaines personnes écrivent des réponses offensantes en raison de l'anonymat, et l'environnement peut être toxique à certains moments. Vous êtes prévenu.
Coursera : Apprenez les sujets qui vous passionnent. C'est gratuit ou pour une somme très modique. J'ai suivi des cours de Machine Learning et de Deep Learning là-bas.
- Suivez la série de 5 cours sur le Deep Learning, si vous êtes intéressé par les techniques de Deep Learning en vision par ordinateur (CV) ou en traitement du langage naturel (NLP)
- Passez leur test de dépistage pour être recommandé aux responsables d'embauche dans les groupes ML des meilleures entreprises technologiques
Elements of Programming Interviews Livre : C'est un autre excellent livre de préparation aux entretiens, similaire au livre CtCI. Mais il est plus orienté vers les ingénieurs expérimentés, tandis que CtCI peut être lu par des débutants ayant peu de connaissances en algorithmes.

GeeksForGeeks : Comme LeetCode, ce site est un autre site web avec des questions et solutions A&DS très complètes. Ce site est gratuit et contient parfois des questions d'entretien non trouvées dans LeetCode.


- Vérifiez les avis des employés d'une entreprise
- Trouvez les questions d'entretien précédentes
- Configurez des alertes d'emploi pour recevoir les mises à jour des nouveaux emplois
Google Search : Le point de départ pour TOUTE question dans la vie. Dois-je en dire plus ?

Employés internes : Essayez toujours de contacter vos amis, ou les amis de vos amis, qui travaillent dans les entreprises où vous souhaitez postuler. Ils seront vos informateurs et défenseurs les plus efficaces. Connectez-vous avec moi sur LinkedIn, et si vous êtes un bon candidat, je serais ravi de vous recommander moi-même à Google, ou à l'un de mes amis qui travaillent dans d'autres grandes entreprises technologiques.
- Pratiquez les questions A&DS
- Utilisez LeetCode Premium (35 $/mois ou 99 $/an avec coupon) pour trouver les questions d'entretien précédentes posées par une entreprise donnée. Je recommande de payer l'adhésion annuelle. Considérez cela simplement comme un abonnement à une salle de sport pour votre cerveau de codage.
Level.fyi : Ce site liste les informations de salaire crowdsourcées par entreprise, par niveaux de seniorité, par lieu et par fonction d'emploi, afin que vous sachiez si vous recevez une offre équitable de la part des entreprises. Bien sûr, cela fonctionne bien uniquement pour les grandes entreprises, car il y a plus de points de données.

LinkedIn :
- Consultez les antécédents professionnels et éducatifs des personnes
- Activez le paramètre « Ouvert aux nouvelles opportunités » afin que les recruteurs puissent vous trouver.
- Utilisez LinkedIn Premium pour vous connecter avec des personnes qui vous intéressent
- Configurez des alertes d'emploi pour recevoir les mises à jour des nouveaux emplois
- Lisez des tutoriels et des guides pour vous aider avec vos projets personnels
- Bloguez sur Medium ou ailleurs pour présenter vos propres projets personnels

TripleByte : Passez les entretiens téléphoniques et allez directement aux entretiens sur site si vous réussissez leur dépistage technique. Voir la description détaillée ci-dessus

- Regardez des tutoriels et des guides lorsque vous travaillez sur vos projets personnels
- Regardez des vidéos sur la conception de systèmes et les algorithmes
- ATTENTION : NE vous laissez pas distraire et regardez des heures de vidéos pour le plaisir pendant votre temps de préparation aux entretiens
C'est tout. C'est une entreprise énorme. Mais si vous y mettez le temps et les efforts, vous pouvez le faire.