Article original : How I landed offers from Microsoft, Amazon, and Twitter without an Ivy League degree
Par Zhia Chong
Ceci s'adresse à ceux d'entre vous qui sont sur le point de commencer leur recherche d'emploi et qui pourraient s'inquiéter de ne pas pouvoir décrocher un emploi de premier plan dans le domaine de la technologie sans un diplôme en informatique de Stanford. On vous a dit que vous n'étiez pas assez bon pour obtenir un emploi chez Microsoft ou Facebook.
Mais je suis ici pour vous dire que vous pouvez obtenir cet emploi. Voici comment j'ai décroché mon emploi de rêve chez Twitter.
En savoir plus sur mes cours ici pour apprendre comment je me suis préparé.
Vous pouvez lire mes expériences après un an chez Twitter ici.
Ce que cet article couvre :
- Mon parcours
- Comment j'ai obtenu des entretiens avec les meilleures entreprises technologiques du monde : Facebook, Google, Amazon, LinkedIn, Microsoft, Twitter, Pinterest, Snapchat, et d'autres.
- Comment j'ai obtenu plusieurs offres en tant qu'ingénieur logiciel à temps plein
- Leçons de mon expérience d'entretien
- Abonnez-vous ici pour plus de mises à jour d'articles de ma part
Si vous préférez regarder mon histoire, j'ai fait une vidéo ici :
Parcours
Je ne suis pas diplômé d'une université de l'Ivy League. J'ai fréquenté un collège communautaire en Idaho pendant deux ans, puis j'ai terminé mon diplôme en informatique dans une petite université catholique.
J'ai commencé à apprendre l'informatique lors de ma troisième année de licence, car cela me semblait amusant à l'époque. La seule chose ressemblant à un ordinateur que j'avais en grandissant était une copie chinoise de la Nintendo SNES. Même alors, elle se cassait chaque fois que j'y insérais une cartouche.
Pour subvenir à mes besoins pendant mes études, j'ai occupé plusieurs emplois à temps partiel, comme nettoyer des sols et travailler dans des concessions debout.
Lorsque j'ai obtenu mon diplôme, je n'avais pas d'emploi en vue. J'ai postulé à autant de grandes entreprises technologiques que possible, et j'ai eu la chance d'obtenir quelques entretiens téléphoniques.
À ce moment-là, je n'avais aucune idée de ce à quoi ressemblait un entretien technique, et encore moins de comment m'y préparer. Je suis entré dans ces entretiens en pensant que l'intervieweur me demanderait ce qu'était une liste chaînée ou un arbre binaire.
Je n'ai pas réussi aucun de ces entretiens.
Aller de l'avant
Je ne me suis pas trop attardé sur la question de savoir si j'étais bon. Je savais que je pouvais apprendre les choses rapidement. J'avais juste besoin d'une opportunité.
Comme le dit le proverbe, jetez votre filet large et loin. C'est ce que j'ai fait.
Ce que j'ai fait ensuite est quelque chose dont je suis particulièrement fier. J'ai écrit un simple script Python qui a extrait les offres d'emploi sur Craigslist avec des titres contenant des mots-clés d'une liste, et j'ai collecté les e-mails dans une feuille de calcul. Pour l'histoire réelle, vous pouvez lire l'article ici.
Ce n'était pas la solution la plus intelligente, mais les personnes qui publient sur Craigslist sont surprenamment précises avec leurs titres.
Craigslist, cependant, n'aimait pas que les gens extraient les données de leur site web. Pour contourner cela, j'ai exécuté mon script via un VPN, et j'avais un minuteur qui mettait le script en pause toutes les quelques minutes. Ce n'était pas parfait, mais cela fonctionnait suffisamment bien.
À la fin, j'ai collecté environ 500 e-mails de la région de San Francisco, Portland, Spokane et Seattle. J'ai filtré les résultats en fonction de leur spécificité et de leur actualité, et je les ai améliorés en ajoutant de plus en plus de fonctionnalités.
Il s'avère qu'il y avait déjà quelques robots sur le marché qui parcouraient Craigslist et envoyaient des e-mails automatisés. Il s'agissait principalement d'entreprises offshore qui cherchaient à promouvoir leur entreprise sur le marché américain.
L'une de mes solutions de contournement était que j'ai rédigé des e-mails qui utilisaient des mots-clés de leurs annonces dans le titre de mes e-mails. J'ai ensuite ajouté plus de détails en utilisant le corps des annonces pour les rendre plus personnelles. J'ai fait un test A/B rapide, et les réponses que j'ai reçues ont augmenté considérablement, passant d'environ 2-3% à 10%.
Sur les 500 e-mails envoyés, j'ai reçu environ 50 réponses, et j'ai obtenu des entretiens téléphoniques avec un petit pourcentage de celles-ci. Je me suis arrêté à 500 parce que je manquais de temps et que je devais finaliser un emploi dès que possible. J'optimisais pour les résultats plutôt que pour la portée à ce moment-là.
Par chance, j'ai finalement obtenu un emploi dans une startup à Seattle en tant qu'ingénieur logiciel junior. La startup était située à Kirkland à l'époque, donc je devais prendre un bus de 45 minutes pour arriver à temps pour l'entretien.
Je suis ensuite resté là pendant les 3,5 années suivantes, où j'ai appris beaucoup de choses comme Amazon AWS, EC2, DynamoDB, SQS et Docker. J'ai beaucoup grandi pendant cette période. J'ai appris à écrire du code modulaire et maintenable. J'ai appris à raisonner sur la conception de logiciels. Et j'ai appris à gérer les problèmes de personnes.
Je travaillais à côté d'un groupe de personnes intelligentes qui occupaient des emplois chez Microsoft, Amazon et LinkedIn, et j'ai essayé d'être l'« éponge » du groupe. J'ai absorbé tout ce qu'ils me lançaient. Je crois que cela a eu un énorme impact sur ma carrière.
Jours de startup
Pendant mon passage dans la startup, j'ai travaillé presque exclusivement sur le développement backend, avec un peu de dev-ops entre les deux. J'ai commencé par écrire quelques fonctions pour ajouter/modifier une fonctionnalité qui étaient pour la plupart de petite envergure. Mais c'était une excellente opportunité pour comprendre la base de code et obtenir quelques revues de code.
Un an plus tard, j'ai commencé à posséder des parties de la base de code, puis j'ai été chargé de transformer un ensemble de fonctionnalités en un service. C'était le début de la phase SOA pour la startup. Nous avons commencé à transformer divers composants du site en services, et c'est ainsi que j'ai commencé à en apprendre davantage sur les services RESTful, l'authentification, les services AWS, pub-sub, les systèmes distribués et ainsi de suite.
La partie intéressante ici est que je n'ai rien appris de tout cela à travers des livres ou une éducation formelle. Plutôt, j'avais besoin de réaliser cet ensemble de fonctionnalités et il y avait des goulots d'étranglement.
Alors je me suis dit, allons résoudre cela !
Il y a eu de nombreuses fois où j'étais bloqué dans une paralysie de l'analyse, un état où j'analysais trop les scénarios et je n'arrivais pas à progresser.
Ces moments difficiles ont été les plus grandes opportunités d'apprentissage. J'ai commencé à apprendre la définition des fonctionnalités, les négociations, la surveillance, les alertes et la documentation. Chaque étape du processus a révélé plus de choses que je devais apprendre. J'ai le plus grandi pendant ces 2-3 années, à la fois en tant qu'individu et en tant qu'ingénieur logiciel.
Comment je me suis préparé pour mes entretiens
Après avoir souffert lors de ma première recherche d'emploi, je me suis dit que je devais être préparé pour les futurs entretiens.
J'ai commencé à me préparer pour les entretiens en établissant un aperçu de ce que je faisais bien, mal, et où je pouvais m'améliorer. Je l'ai divisé en trois catégories : structures de données, algorithmes et conception de systèmes.
Ayant travaillé en PHP pour la plupart de ma carrière professionnelle, et en C++ à l'université, je voulais essayer quelque chose de plus simple et moins verbeux pour les entretiens.
Pour cette raison, j'ai choisi Python. C'est un excellent langage à apprendre, facile à prendre en main, supporte de nombreuses structures de données prêtes à l'emploi, et peut être écrit rapidement sur un tableau blanc. J'ai appris Python en suivant des tutoriels YouTube comme ceux-ci, et aussi en lisant leur documentation. Je préfère Python 2.x, mais vous pouvez choisir soit 2.x soit 3.
De plus, une autre raison pour laquelle j'ai choisi Python est qu'il est très lisible et facile à écrire sur un tableau blanc. Voici une comparaison triviale entre C++ et Python.
Un programme C++ pour trier dans l'ordre décroissant :
#include <bits/stdc++.h>
using namespace std;
int main() {
int arr[] = {1,10,0,4,5};
int n = size(arr)/sizeof(arr[0]);
sort(arr, arr + n, greater<int>());
for (int i = 0; i < n; i++) {
cout << arr[i] << " ";
}
return 0;
}
Comparez cela avec la version Python :
a = [1,2,4,5,1000]
a.sort(reverse=True)
print a
J'ai reçu des commentaires de la part des intervieweurs pour privilégier la brièveté lors d'un entretien. Dans un entretien de 45 minutes, vous voulez utiliser la plupart de votre temps à résoudre le problème réel.
Astuce pro : choisissez un langage moins verbeux afin de pouvoir écrire le code plus rapidement sur le tableau blanc.
Mode préparation
J'ai passé environ une semaine à parcourir des défis simples sur LeetCode, HackerRank et Project Euler pour me familiariser avec leurs interfaces, et pour m'habituer à écrire du code en Python.
La première semaine m'a donné des informations sur mon niveau de compétence dans certains langages de programmation. J'ai passé une autre semaine à parcourir des défis de conception comme « concevoir X » et je suis allé aussi large et profond que possible.
C'était très amusant pour moi, car je regardais souvent des applications iOS et j'essayais de comprendre comment elles fonctionnaient. Par exemple, comment construiriez-vous Instagram à partir de zéro ? (On me l'a demandé chez Facebook.)
Mon parcours est dans la conception d'API et l'architecture orientée services, donc j'ai saisi cette opportunité pour montrer comment je concevrais ma propre version d'Instagram. Et parce que j'ai une certaine expérience en programmation iOS grâce à mes projets secondaires, je pouvais parler un peu des rappels et des push/long-polls ici.
J'ai commencé la conversation avec quelques fonctionnalités que j'aimerais avoir sur ma propre version d'Instagram : les likes, le téléchargement d'une photo et une timeline simple. La définition des fonctionnalités m'a permis de construire une API très solide car je connais bien ces scénarios.
J'ai ensuite dessiné quelques images d'une conception de haut niveau, de la manière dont le client interagirait avec le backend, et de la manière dont le backend stockerait les données.
J'ai commencé petit, puis j'ai ajouté plus de composants là où c'était nécessaire et j'ai cherché activement où se trouvaient les goulots d'étranglement. J'ai fait des suppositions éclairées (lisez éclairées, pas des suppositions aveugles) sur ce que seraient les exigences, et comment chaque technologie s'intégrerait bien. Et aussi, tout aussi important, quelles technologies ne conviendraient pas bien.
Par exemple, pourquoi utiliser Cassandra plutôt que MySQL pour stocker certaines informations (indice : échelle, vitesse de développement, révisions de schéma), pourquoi utiliser OAuth plutôt qu'une authentification simple, Redis vs Memcached pour la mise en cache des données, streaming vs traitement par lots, et ainsi de suite.
Il y a de nombreux domaines que vous pouvez explorer ici, donc généralement une session d'une heure n'est pas suffisante. Pour bien répondre à ces questions, vous devez lire et apprendre sur les compromis. Les avantages et les inconvénients des technologies dans l'industrie. Pour cela, je recommande un site comme HighScalability.
Prenez cela comme une session typique de remue-méninges avec un collègue, donc explorez aussi largement et aussi profondément que vous le pouvez.
Il est crucial de savoir que ces entretiens de conception sont destinés à explorer ce que vous savez et à quel point vous le savez bien, et c'est une opportunité pour vous de briller. J'ai regardé cette vidéo YouTube vidéo d'un ancien ingénieur de Facebook sur la façon de résoudre les problèmes de conception, et elle m'a donné des informations qui m'ont énormément aidé avec mes entretiens de conception. Mes deux principales leçons de cela : dirigez la conversation de conception, et montrez ce que vous savez.
J'ai listé mon niveau de compétence pour : structures de données (liste chaînée, table de hachage, arbre binaire, arbre de recherche binaire, tas, tableau), algorithmes (recherche binaire, hachage, programmation dynamique, tri), et syntaxe et bibliothèques spécifiques au langage (comme tri, lambda pour Python, ajout, indexation).
J'ai choisi le domaine où j'étais le moins bon, et j'ai commencé à travailler dessus : algorithmes.
Les algorithmes n'ont jamais été mon point fort. Cela fait un moment depuis mes jours à l'université, et je n'ai pas passé beaucoup de temps à faire des recherches binaires dans ma carrière quotidienne. J'avais une idée de la performance de chaque algorithme, et dans quels scénarios les utiliser. Mais je n'étais pas à 100% à l'aise avec l'écriture d'une recherche binaire en moins de 10 minutes. Sur un tableau blanc. Devant un intervieweur.
J'ai également acheté un ensemble de marqueurs à pointe fine sur Amazon, qui fonctionnent incroyablement bien. Peut-être que c'est juste moi, mais les marqueurs à pointe fine dans les salles d'entretien ne fonctionnent généralement pas du tout. Je passais généralement 2-3 minutes à chercher un stylo qui fonctionne, et ce sont 2-3 minutes que vous ne pouvez pas vous permettre de gaspiller. De plus, les marqueurs à pointe fine vous permettent d'écrire 5-8 lignes de code de plus sur un tableau blanc typique par rapport aux plus épais. :)
Astuce pro : Procurez-vous votre propre ensemble de marqueurs à pointe fine.
J'ai acheté un tableau blanc chez Costco pour 50$, quelques livres sur Amazon (listés dans la section des outils que je recommande ci-dessous), et j'ai commencé à m'entraîner. Je me suis assuré de me mettre à niveau sur la recherche binaire, la récursivité, la programmation dynamique, BFS et DFS. Beaucoup de questions d'entretien tournent autour de la récursivité et de la recherche binaire ou de certaines de leurs variations.
Les meilleures questions d'entretien que j'ai vues avaient de nombreuses solutions différentes, et il y avait une couche supplémentaire ajoutée au fur et à mesure que vous progressiez.
Une question de Google que j'ai eue était liée aux répertoires du système de fichiers, et comment les parcourir (indice : récursivité). J'ai résolu cela relativement rapidement, et l'intervieweur a demandé comment identifier un fichier manquant dans ce répertoire. C'était un peu plus difficile, mais je m'en suis sorti. Et nous avons ensuite passé à la reconstruction du répertoire, comment le sérialiser/désérialiser, et nous avons passé un bon moment à débattre du fonctionnement des répertoires de fichiers sous le capot. C'était une session très agréable pour moi.
Entretiens dans les entreprises de premier plan
C'était une expérience stressante, pour dire le moins, et un vrai roller-coaster.
J'ai alloué mon temps de la manière suivante : 20% CV, 20% recherche et 60% préparation aux entretiens.
J'ai passé 20% de mon temps à retoucher mon CV, qui n'avait pas été mis à jour depuis au moins trois ans. J'ai examiné attentivement les choses que j'avais faites dans le passé, et j'ai choisi des projets que j'avais gérés de bout en bout, quelle que soit leur complexité.
La raison de faire cela est double. Prendre un projet du début à la fin demande de la discipline et du leadership, deux des traits avec lesquels je souhaite être identifié.
Deuxièmement, la propriété d'un projet de bout en bout signifie que je peux parler de chaque aspect du projet longuement et en profondeur. Cela s'est avéré crucial pour m'aider à naviguer dans mon tour de conception chez Twitter, où ils m'ont interrogé dur sur non seulement les conceptions de mes projets, mais aussi les décisions derrière eux.
20% de mon temps a été utilisé pour la recherche. La recherche dans ce cas signifiait faire des diligences raisonnables sur les entreprises qui m'intéressaient et demander des recommandations. Avoir des recommandations aide à obtenir des retours d'appel.
D'après mon expérience, j'ai envoyé environ 20 messages à froid à des startups et à des entreprises en phase intermédiaire, et j'ai seulement eu des réponses d'une poignée. Cependant, presque toutes les entreprises pour lesquelles j'ai été recommandé par un employé existant m'ont envoyé un message dans la semaine. C'est anecdotique, mais il y a de la valeur à en tirer.
Je ne suis pas très sociable, et je ne connaissais pas beaucoup de personnes qui pourraient me recommander à une entreprise qui m'intéressait. Pour résoudre ce problème, je suis allé sur LinkedIn. Ils ont une fonctionnalité de recherche que j'ai utilisée pour rechercher des connexions de premier et deuxième niveau. Les connexions de deuxième niveau sont des personnes qui sont à un saut de votre cercle immédiat. En d'autres termes, nous avons des amis communs qui peuvent attester de ma crédibilité.
Recherche LinkedIn
C'est incroyablement important, car contacter quelqu'un à froid pour un emploi est très, très difficile, surtout dans le marché actuel. Les gens ont tendance à être prudents lorsqu'il s'agit de démarchages à froid. Utiliser LinkedIn a été très utile pour ma phase de recherche.
En regardant toutes les entreprises où j'ai passé des entretiens, voici mes pensées sur chacune d'elles :
- Facebook/Google — très mécanique. Le processus d'entretien standard, et je n'ai ressenti aucune connexion personnelle avec eux.
- Pinterest — pas la meilleure expérience d'entretien, mais un produit et une entreprise cool.
- Microsoft — j'ai adoré l'équipe et surtout le manager et son manager. Questions d'entretien standard, mais très personnelles. Deuxième choix. Votre expérience peut varier, cependant — chaque équipe chez Microsoft interviewe différemment.
- Amazon — processus d'entretien standard. Environ 50% des gens l'adorent, les autres non.
- Twitter — incroyablement amusant et personnel. J'ai adoré le processus d'entretien, qui mettait beaucoup l'accent sur l'individu et ce que j'avais fait dans le passé.
- Snapchat — bureau cool à LA, groupe de gens sympas qui ont décidé de sauter dans le wagon des startups. J'ai eu l'impression que les choses étaient enveloppées dans un nuage de secret.
- Lyft — proche de chez moi, bureau agréable, processus d'entretien standard. Pas de sentiments forts à ce sujet.
Parlons de mon préféré
À bien des égards, je dirais que le style d'entretien de Twitter était difficile. Mais en même temps, il était plus intéressant et personnel que les autres entreprises où j'ai passé des entretiens.
Leur processus d'entretien commence par un appel téléphonique d'introduction avec un responsable technique. Cela est suivi par un ou deux entretiens téléphoniques techniques, selon vos performances. Si vous vous en sortez bien, ils vous feront venir dans le bureau où vous passez l'entretien, qui était Seattle dans mon cas. Il y a trois tours de 1 heure et 15 minutes, chacun avec deux intervieweurs.
Les deux premiers entretiens téléphoniques techniques sont les entretiens techniques standard, où vous résolvez des problèmes de codage sur un document de codage partagé.
Les tours sur place, cependant, sont beaucoup plus conversationnels et semblent beaucoup moins intimidants. Les intervieweurs vous poseront des questions approfondies sur vos projets passés, et ils vous interrogeront sur ce que vous avez fait dans le passé. Si vous revendiquez la propriété d'un projet, vous devez vous attendre à des questions à ce sujet. Vous êtes encouragé à les utiliser comme références et à échanger des idées avec eux.
Je n'ai jamais ressenti de pression pour trouver magiquement une solution parfaitement fonctionnelle, et cela semblait très collaboratif.
Les autres
En comparaison, les entretiens chez Facebook et Google semblaient beaucoup plus mécaniques. Ils ont un ou deux entretiens téléphoniques techniques, et cinq à six tours de codage sur place. Chaque tour implique du codage sur un tableau blanc, et vous êtes censé trouver une solution presque parfaite en un temps raisonnable.
Facebook a deux tours de codage, un tour de conception et un tour comportemental.
J'ai passé un tour d'ombre supplémentaire à la fin de la journée, qui ne comptait pas pour mon score global.
Google avait cinq tours de codage, aucun d'entre eux ne se concentrait sur les conceptions, et aucun intervieweur ne m'a demandé mes projets précédents. Je ne pense pas nécessairement que ce soit mauvais. Mais je pense que cela semblait très mécanique et ne donnait pas beaucoup d'opportunités à l'ingénieur de montrer ce dont il était capable. Certaines personnes s'en sortent bien dans ces scénarios, tout comme certains étudiants s'en sortent bien aux examens.
Je n'ai pas apprécié mon entretien avec Pinterest. Je pense que le produit lui-même est intéressant, et leur équipe d'ingénierie semble travailler sur des problèmes techniques très cool problèmes. Mais j'ai définitivement eu une expérience négative lors de mon entretien là-bas.
Pinterest a trois tours de codage et un tour de conception. Parmi ces quatre tours, le tour de conception a été le plus décevant pour moi. Voici pourquoi :
L'intervieweur est arrivé en retard, et il a passé quelques minutes à parcourir mon CV avant de procéder à dessiner quelques API sur le tableau. Il a donné une courte description de ce qu'il attendait de l'API, et a demandé comment je la résoudrais. Nous avons clarifié les fonctionnalités de l'API, et j'ai commencé à décrire ma solution en utilisant le tableau blanc. Environ 5 minutes après, je me suis retourné et je l'ai vu faire la sieste !
Pas cool.
J'ai donné mon avis au recruteur dans une enquête, et je n'ai plus eu de leurs nouvelles après cela.
Je ne vais pas entrer dans les détails des questions qu'on m'a posées lors de tous les entretiens. Au lieu de cela, je vais partager quelques-unes des informations et des conseils utiles que j'ai appris lors de mon processus de préparation.
Ce que j'ai appris :
- Soyez honnête sur votre CV. La plupart des entreprises vous poseront des questions sur votre CV, et elles peuvent dire si vous avez inventé quelque chose. Il est préférable de tout savoir sur un projet que de savoir 10% sur 10 projets différents.
- Les CV d'une page sont recommandés. Cela est particulièrement vrai pour les entreprises technologiques, et il semble que la sagesse dans la sphère technologique soit que vous devriez réserver deux pages et plus pour les travaux post-doctoraux, ou si vous avez fait beaucoup de projets que vous connaissez et qui vous tiennent à cœur. Un ami à moi dirige une entreprise appelée Jobscan qui analyse les CV et apporte des améliorations spécifiques et actionnables. Ils sont assez géniaux, alors essayez-les :)
- Socialisez et établissez un réseau. Il y a beaucoup de compétition pour les emplois en ingénierie logicielle, et ces grandes entreprises technologiques filtrent des milliers de CV par jour. Avoir une recommandation vous aidera à attirer l'attention sur votre CV.
- Maîtrisez votre pitch. Chaque entreprise qui s'intéresse à vous veut savoir pourquoi vous vous intéressez à eux. Une mauvaise réponse : J'ai juste besoin d'un emploi maintenant pour payer les factures. Une réponse moins mauvaise : Je naviguais en ligne et je vous ai trouvés. On dirait que vous travaillez sur des choses intéressantes. Une bonne réponse : Je sais que vous faites un travail intéressant dans X pour atteindre Y. J'ai fait un travail dans le passé et voici ce que j'ai appris sur A, B, C qui pourrait être lié à X. Je suis passionné par Y parce que blah. (Ne utilisez pas cela comme un modèle. Au lieu de cela, vous devriez voir le schéma ici — faites vos recherches, utilisez votre parcours, et montrez à l'entreprise pourquoi vous seriez bien ensemble.)
Quelques conseils supplémentaires
Les entretiens techniques sont incroyablement difficiles, et parfois c'est un coup de chance. Les meilleures opportunités, cependant, sont réservées à ceux qui sont préparés.
- Préparez-vous tôt, préparez-vous bien. Tout le monde sait qu'il doit se préparer pour un entretien, mais la plupart ne savent pas comment le faire bien. Comme pour toute chose qui vaut la peine d'être faite, cela prend une pratique délibérée pour bien faire quelque chose. Et une pratique délibérée signifie que vous devez avoir un système.
- Construisez un système pour pratiquer les compétences techniques. J'ai commencé par me noter de 1 à 10 sur ce que je faisais bien, et j'ai travaillé sur ceux où j'étais le moins bon. J'ai passé des jours sur différents types de questions jusqu'à ce que je maîtrise parfaitement chaque concept. Et j'ai écrit des notes quotidiennement sur Evernote. J'avais une note qui sert de déversoir pour tout ce qui concerne la programmation. Elle est remplie de conseils et astuces de programmation, d'erreurs courantes et de idées fausses, de cadres pour résoudre des types spécifiques de questions, et bien plus encore.
Mon carnet
- Tenez un carnet des choses que vous avez apprises. J'utilise à la fois Evernote et OneNote pour garder une trace des choses. OneNote pour les trucs techniques/code, parce que j'aime le fait que je peux facilement formater la note de la manière que je veux. J'utilise Evernote pour les essais/pensées. L'image ci-dessus montre une note que je garde sur l'architecture et les conceptions de systèmes.
Evernote pour les pensées/conseils
- Notez tout, même si vous ne pensez pas que vous l'utiliserez. J'ai tendance à oublier très facilement, donc tout ce que j'apprends, je l'écris, y compris les commandes shell. Je lis des blogs techniques de temps en temps, et si je trouve quelque chose d'intéressant, je le note immédiatement sur Evernote. Je le réviserai chaque semaine ou chaque mois et je le réorganiserai en conséquence. Cela m'a énormément aidé tout au long de ma carrière.
- Faites des entretiens simulés. Cela a été définitivement très précieux et je le recommande vivement. J'ai fait des entretiens simulés avec des amis et j'ai essayé de m'entraîner autant que possible. Si vous ne trouvez pas d'amis avec qui vous entraîner, alors je recommande Refdash, qui est un service d'entretien en tant que service. Ils ont un groupe d'intervieweurs qui travaillent dans de grandes entreprises technologiques comme Google, Facebook et Microsoft. Ces intervieweurs évalueront vos compétences en codage et en conception. Le meilleur aspect est qu'ils vous donneront un score à la fin avec des éléments spécifiques et actionnables sur la façon de vous améliorer.
- Il est OK d'échouer. J'ai échoué à plusieurs entretiens pendant tout ce processus. Parfois, vous avez juste une mauvaise journée. Ce n'est pas la fin du monde si vous échouez. Les entreprises sont biaisées pour dire non car c'est un risque moindre pour elles. Un faux positif coûte plus cher qu'un faux négatif à long terme. Les premiers rejets ont définitivement fait le plus mal. J'ai échoué à plusieurs entretiens téléphoniques lorsque j'ai commencé à passer des entretiens, et mon niveau de confiance a chuté. J'avais des doutes dans mon esprit sur mes capacités et j'ai commencé à craindre que mes compétences ne soient pas pertinentes sur le marché du travail actuel. Cependant, je me suis donné un conseil : Si vous échouez 10 fois, alors essayez 10 fois de plus. Tout ce dont vous avez besoin, c'est d'un succès. Cette assurance m'a donné beaucoup de confiance pour continuer à avancer et lorsque ma première offre est arrivée, les autres offres sont venues beaucoup plus facilement.
Il m'a fallu environ 2 mois de pratique et de préparation délibérées pour mes entretiens. J'ai passé environ 20 heures/semaine, ou 80 heures/mois, à apprendre et à écrire des notes en plus d'un emploi à temps plein.
Pour construire mon CV, il m'a fallu 3,5 ans de travail concentré et délibéré. J'ai intentionnellement choisi des choses qui étaient difficiles et désagréables afin que je puisse apprendre plus que quiconque. Même si je n'ai pas une université de marque ou une entreprise technologique de premier plan sur mon CV, j'ai compensé cela par une compréhension claire et approfondie des projets sur lesquels j'ai travaillé. Et cela a été possible parce que j'ai fait des recherches et j'ai écrit des notes sur tout ce que j'ai appris, et j'ai un système pour les réviser.
Rappelez-vous : le fort survit, le résistant prospère.
TL;DR: Ne abandonnez pas, préparez-vous pour les opportunités, pratiquez beaucoup, et restez optimiste. Concentrez-vous sur le processus, et adoptez une approche disciplinée et dédiée au processus.
Outils que je recommande
- Designing Data-Intensive Applications: Excellent livre pour apprendre à mettre à l'échelle des systèmes distribués ! Très recommandé.
- Elements of Programming Interviews: Idéal pour résoudre des problèmes de codage.
- Cracking The Coding Interview: Idéal pour couvrir les problèmes de codage fondamentaux en informatique.
- Daily Coding Problem.com: Il s'agit d'un site web à essayer gratuitement qui propose des problèmes de codage quotidiens gratuits. Vous pouvez vous inscrire pour des défis de codage quotidiens intéressants, et vous pouvez payer pour des solutions si vous le souhaitez.
- Dropbox: Je garde tous mes fichiers, images, CV ici. Accès facile, installé une fois et disponible partout. Je l'adore — (Si vous vous inscrivez via ce lien, nous recevrons tous les deux 500 Mo gratuits !
- CodeRunner: J'adore cette application Mac ! Je l'ai utilisée plusieurs fois pour exécuter des scripts/fonctions Python ad-hoc et cela fonctionne incroyablement bien. ?
- Kafka the Guide: J'ai utilisé ce livre comme guide de référence, et j'ai apprécié la description de haut niveau.
(Je partage plus de ressources que j'ai personnellement utilisées et recommandées sur zhiachong.com, si vous êtes intéressé à en apprendre plus.)
Merci d'avoir lu mon histoire ! Vous pouvez me trouver sur Twitter et LinkedIn. J'adorerais me connecter et parler plus de technologie, de startups, de voyages :D
Crédits :
Brandon O — brien, mon mentor et bon ami, pour la relecture et les commentaires précieux sur la façon d'améliorer cet article.
YK Sugishita, une étoile montante de YouTube qui a quitté son emploi chez Google pour poursuivre ses rêves, pour la relecture et les commentaires critiques.