- Un ingénieur compilateur ne conçoit pas directement des langages de programmation ; il travaille dans un domaine du génie logiciel visant à faire exécuter plus vite et plus efficacement des langages existants
- Ce métier ne représente qu’une infime partie de l’ensemble des postes en ingénierie logicielle, avec une barrière à l’entrée élevée et une demande limitée
- Les recruteurs vont des startups, grandes entreprises technologiques, milieux académiques, finance, projets open source à d’autres structures, mais la plupart des postes visent surtout des profils expérimentés
- En entretien, les principaux critères évalués sont l’implémentation d’algorithmes en C++, la conception de langages, l’optimisation de compilateurs et les connaissances en systèmes bas niveau
- Une préparation fondée sur les cours du MIT et des ressources d’apprentissage open source, ainsi qu’un networking régulier et les recommandations (referrals), sont les clés de la réussite
Qu’est-ce qu’un ingénieur compilateur ?
- Un compilateur est un outil logiciel qui transforme du code écrit dans un langage de programmation vers un autre langage
- L’ingénieur compilateur est chargé de l’implémentation et de l’optimisation de ces langages
- Son rôle consiste moins à concevoir de nouveaux langages qu’à améliorer l’efficacité d’exécution de langages existants
- L’autrice travaille dans une grande entreprise technologique de la baie de San Francisco sur l’amélioration des performances des langages de programmation
Pourquoi avoir écrit cet article
- Comme il existe très peu d’informations en ligne sur l’emploi dans le domaine des compilateurs, l’objectif est de proposer un guide pratique pour les débutants et jeunes diplômés
- Il existe beaucoup de ressources sur le machine learning ou le full stack, mais le contenu sur les compilateurs manque
- L’autrice partage son expérience après avoir réussi à se faire embaucher au bout d’environ un an d’essais et d’erreurs
Résumé du parcours personnel
- Diplômée du MIT en 2023 avec une double spécialisation en mathématiques et informatique
- Après avoir interrompu un master orienté recherche, elle a travaillé en 2024 dans une startup à New York sur des extensions de langage open source
- Elle a ensuite rejoint une entreprise technologique cotée en bourse à San Francisco
Où recrute-t-on des ingénieurs compilateur ?
- Sur Indeed, on trouve environ 116 000 offres pour “software engineer” contre environ 400 pour “compiler engineer”
- Startups : plus susceptibles de recruter des juniors, et c’est ainsi que l’autrice a décroché son premier poste
- Grandes entreprises technologiques : surtout des entreprises du matériel et de l’automobile comme Tesla, Waymo ou Nvidia
- Dans les entreprises de type FAANG, certains sont entrés via une conversion de stage en poste
- Monde académique : opportunités limitées en raison de la baisse des financements de recherche
- Finance quantitative : des entreprises comme Jane Street ou Five Rings recherchent des compétences en calcul haute performance
- Projets open source : certaines startups recrutent aussi dans ce cadre
Stratégie de CV et de networking
- La recommandation (referral) est l’approche la plus efficace
- Demander une recommandation à ses connaissances ou aux connaissances de ses connaissances
- Indiquer son intérêt sur son profil social avec “Rona likes compilers” a permis de créer des opportunités de networking et a même mené à des entretiens
- Son contexte personnel (citoyenneté américaine, diplôme du MIT, etc.) a aussi joué en sa faveur
Types d’entretiens
- Algorithmes de style LeetCode : whiteboarding sur des structures de données comme BFS ou les files de priorité, le plus souvent en C++
- Conception de langage : écrire la grammaire (grammar) d’un langage simple sous certaines contraintes
- Questions sur les langages de programmation : langage préféré et raisons de ce choix
- Représentation intermédiaire (IR) : interprétation et transformation d’assembleur x86, avec aussi des exercices basés sur MLIR
- Passes d’optimisation : dans un exercice MLIR, écrire une passe d’optimisation de simplification algébrique, ainsi que des passes de propagation de constantes et d’élimination de code mort
- Fondamentaux des compilateurs : composants d’un compilateur, techniques d’optimisation, différence entre compilateurs statiques et dynamiques
- Théorie des graphes : questions sur les représentations de compilateur fondées sur des graphes, comme les graphes de flot de contrôle ou l’allocation de registres (influencées par le sujet du mémoire de licence de l’autrice)
- Sujets systèmes bas niveau : interblocage, race condition, registres à usage spécial, pipeline d’instructions, allocation mémoire, représentation binaire et opérations, garbage collection, etc.
- Questions comportementales : centrées sur la motivation, par exemple « pourquoi voulez-vous travailler sur les compilateurs ? »
Préparation aux entretiens
- Apprentissage principalement à partir des cours MIT OCW
- Computation Structures : pipeline, assembleur, opérations binaires et autres concepts bas niveau
- Computer Language Engineering : expérience en C++ et avec de grandes bases de code
- Performance Engineering : centré sur l’optimisation des performances, décisif pour obtenir son poste actuel
- Theory of Computation : utile pour comprendre la conception de grammaires de langage
- Le cursus d’autoformation Advanced Compilers de Cornell a aussi servi de référence
Ce qui aurait pu être mieux fait et les leçons retenues
- Absence de mentor : prise de conscience de la nécessité de networker via LinkedIn
- Les ouvrages spécialisés (Engineering a Compiler, le Dragon Book) sont utiles pour réviser les concepts, mais ont leurs limites pour la préparation pratique
- Absence de notes sur les questions d’entretien : ne pas avoir consigné les questions après les entretiens pour les réviser a été une erreur
- Participation insuffisante à l’open source : elle a étudié des projets comme Carbon ou Mojo sans y contribuer réellement. L’open source est efficace pour apprendre et pour networker
Pourquoi avoir choisi les compilateurs
- Elle envisageait un doctorat en mathématiques, mais après un programme de recherche d’été REU, elle a voulu un travail à l’impact plus immédiat, ce qui l’a amenée à ajouter l’informatique en double spécialisation
- Elle a été séduite par la ressemblance entre la pensée théorique et la programmation bas niveau
- La programmation bas niveau lui plaît par cette impression de construire tout un monde à partir de principes fondamentaux, comme en mathématiques
- Contrairement au caractère empirique du machine learning, elle préfère une approche qui construit tout un univers à partir d’axiomes
- Au MIT, il y avait beaucoup de gens qu’elle appréciait dans la communauté des compilateurs, et ce domaine apportant moins d’argent et de prestige que d’autres exige selon elle un léger penchant masochiste
Marché de l’emploi tech et conseils
- Ses amis dans l’Oregon (dont Oregon State et d’autres universités publiques peu prestigieuses) n’obtenaient qu’environ 4 entretiens malgré des centaines de candidatures
- Exploiter au maximum ses ressources et se différencier : participer à des communautés open source, utiliser les réseaux sociaux, tirer parti des ressources de l’université (même en lançant un club où personne ne vient)
- Rencontrer les gens en personne : participer à des groupes de lecture sur les systèmes, par exemple le groupe systèmes new-yorkais d’Eric
- Elle envisage aussi très sérieusement de lancer une chaîne YouTube sur les compilateurs, même si elle n’est pas très à l’aise devant la caméra
- Ces activités ne garantissent pas directement un emploi, mais augmentent les chances de créer des opportunités
Conclusion et expérience personnelle
- Avant son passage en startup en 2024, elle n’avait aucune expérience industrielle liée aux compilateurs
- Lors du recrutement en 2025, elle a aussi postulé à des postes faiblement rémunérés, mais l’opportunité est revenue à des candidats en doctorat
- Après 10 mois et des dizaines d’entretiens, elle a finalement décroché un poste, où elle se concentre aujourd’hui sur des gains de performance à la milliseconde près
- Elle invite les personnes travaillant dans le domaine des compilateurs à la contacter et mentionne un nouveau départ dans la région de Palo Alto
- Enfin, elle partage la sortie de son roman You Had Me at Hello World
2 commentaires
Comparé à d'autres domaines, il y a moins d'argent et de prestige, donc il faut avoir une légère tendance masochiste
Gloups
Commentaires sur Hacker News
Pour ceux qui s’intéressent aux compilateurs, il est recommandé de commencer à contribuer au projet ClangBuiltLinux ou à l’issue tracker de LLVM
On peut consulter la liste des issues Linux kernel with LLVM ainsi que la liste des good first issues de LLVM
Le sujet de l’article donnait l’impression de relever un peu de l’autopromotion
Mais si l’on veut vraiment devenir ingénieur compilateur, l’essentiel est d’en écrire un soi-même
Il est important d’apprendre les concepts de base comme le tokenizing, la construction d’AST, le type checking et l’IR (Intermediate Representation)
Le tutoriel LLVM est recommandé.
Pas besoin d’être un génie de niveau MIT : un volume équivalent à un cours de CS sur un semestre suffit largement pour se lancer
Les postes sont peu nombreux, donc beaucoup finissent par se réorienter vers d’autres domaines comme l’IA
Il était surprenant de voir que, même en sortant du MIT, il n’est pas facile de trouver un emploi en ingénierie des compilateurs
Le domaine est plus étroit qu’on ne l’imagine et ressemble davantage à un marché centré sur les profils senior que sur les juniors
Trouver un emploi était déjà difficile après l’éclatement de la bulle Internet en 2001, mais la situation actuelle semble compliquée d’une autre manière
Beaucoup de candidats manquent aussi de connaissances en programmation système
Le fil est parti dans plusieurs directions, mais voici un récapitulatif des entreprises qui recrutent des ingénieurs compilateur
On peut citer AMD, Nvidia, Intel, Apple, Google, Jane Street, Bloomberg, Qualcomm, Modular, AWS et ARM
Des informations connexes sont disponibles dans la liste CompilerJobs
En réalité, il y a bien plus de candidats que de postes
Contribuer à des projets comme LLVM, Rust, Swift ou Carbon constitue la voie d’entrée la plus réaliste
Ressources utiles : PL Resources,
How to Learn Compilers (LLVM Edition),
chaîne YouTube Compilers
Le titre du livre qu’elle a mentionné, “You Had Me At Hello World”, a été trouvé vraiment adorable
L’apparition soudaine de “c’est ma photo” au milieu de l’article a surpris
Dans les années 80, quelqu’un rêvait de devenir ingénieur compilateur, a obtenu un master et a même publié un article sur le parsing LR,
mais il y avait déjà très peu d’emplois à l’époque. Il a tenu en étudiant le code source de PCC et GCC,
puis s’est réorienté vers le développement GUI, où les opportunités sont devenues bien plus nombreuses après l’arrivée de Java/Swing
Ce qui a davantage intrigué, c’est le fait d’avoir décroché un premier contrat avec Simon & Schuster au début de la vingtaine
La phrase “j’envisage de créer une chaîne YouTube sur les compilateurs” a marqué les esprits
Il semble qu’un blog suffirait déjà à apporter de la valeur pour organiser ce type de contenu complexe
C’est un peu comme si, pour devenir mécanicien automobile, il fallait construire une voiture soi-même et publier des vidéos où on la conduit
Merci d’être tombé sur cet article juste avant un entretien sur les compilateurs
Étude en cours avec Crafting Interpreters(lien),
et c’est seulement maintenant qu’est devenue claire l’idée que les interpréteurs et les compilateurs sont différents
Il ne reste pas beaucoup de temps avant l’entretien, mais ensuite il est prévu d’étudier tranquillement le livre sur les interpréteurs écrit en Go(lien) ainsi que les ressources techniques recommandées par Rona