- コンパイラエンジニアはプログラミング言語そのものを設計するのではなく、既存の言語をより速く効率的に実行できるようにするソフトウェアエンジニアリング分野
- この職種はソフトウェアエンジニア全体の求人の中でもごく一部しか存在せず、参入障壁が高く需要も限られる
- 採用企業はスタートアップ、大手テック企業、学術界、金融業界、オープンソースプロジェクトなど多様だが、大半は経験者中心の構造
- 面接ではC++ベースのアルゴリズム実装、言語設計、コンパイラ最適化、低レベルシステム知識などが重点評価項目
- MITの講義やオープンソースの学習資料を活用した準備過程、そして**継続的なネットワーキングと紹介(referral)**が就職成功の鍵
コンパイラエンジニアとは何か
- コンパイラは、あるプログラミング言語で書かれたコードを別の言語へ変換するソフトウェアツール
- コンパイラエンジニアは、こうした言語の実装と最適化を担う
- 新しい言語を設計するというより、既存言語の実行効率を高める役割
- 筆者はサンフランシスコ・ベイエリアの大手テック企業でプログラミング言語の性能向上を担当している
この記事を書くことにした理由
- コンパイラ分野への就職情報がオンライン上にほとんどないため、新卒・学生向けの実践的ガイドを提供する目的で執筆
- 機械学習やフルスタック関連の資料は多い一方で、コンパイラ関連のコンテンツは不足している
- 約1年間の試行錯誤の末に就職できた経験を共有
個人経歴の要約
- 2023年にMITを数学・計算機科学のダブルメジャーで卒業
- 大学院の研究ベース修士課程を中断した後、2024年にニューヨークのスタートアップでオープンソース言語の拡張作業に従事
- その後、サンフランシスコの上場テック企業へ転職
コンパイラエンジニアを採用している場所
- Indeed基準で“software engineer”は116,000件、“compiler engineer”は400件程度
- スタートアップ: 新卒採用の可能性が比較的高く、筆者自身も最初の仕事をスタートアップで始めた
- 大手テック企業: Tesla、Waymo、Nvidiaなど、ハードウェア・自動車企業が中心
- FAANG企業ではインターンからの転換で入社した事例もある
- 学術界: 研究資金の縮小で機会は限られる
- クオンツ金融: Jane Street、Five Ringsなどで高性能計算の能力が求められる
- オープンソースプロジェクト: 一部スタートアップが関連採用を実施
履歴書とネットワーキング戦略
- **紹介(referral)**が最も効果的なアプローチ
- 知人や知人の知人を通じて紹介を依頼
- SNSプロフィールに "Rona likes compilers" と関心を明示してネットワーキング機会を確保し、実際に面接につながった
- 個人的な背景(米国市民権、MIT学位など)が有利に働いた
面接の種類
- LeetCodeスタイルのアルゴリズム: BFS、優先度付きキューなどのデータ構造ホワイトボーディングで、ほとんどが**C++**を使用
- 言語設計: 特定の制約条件の下で簡単な言語の**文法(grammar)**を作成
- プログラミング言語関連の質問: 好きなプログラミング言語とその理由
- 中間表現(IR): x86アセンブリの解釈と変換、MLIRベースの課題を含む
- 最適化パス: MLIR課題で代数的簡約の最適化パスを作成し、定数伝播とデッドコード削除パスを実装
- コンパイラ基礎: コンパイラの構成要素、最適化手法、静的 vs 動的コンパイラの説明
- グラフ理論: 制御フローグラフ、レジスタ割り当てなどグラフベースのコンパイラ表現に関する質問(筆者の学部論文テーマの影響)
- 低レベルシステムの話題: デッドロック、レースコンディション、特殊目的レジスタ、命令パイプライン、メモリ割り当て、二進表現と演算、ガベージコレクションなど
- 行動面接の質問: 「なぜコンパイラをやりたいのか」など動機中心
面接準備の過程
- MIT OCW講義を中心に学習
- Computation Structures: パイプライン、アセンブリ、二進演算など低レベル概念
- Computer Language Engineering: C++および大規模コードベースの経験
- Performance Engineering: 性能最適化が中心で、現職への就職に決定的な役割を果たした
- Theory of Computation: 言語文法設計の理解に役立った
- CornellのAdvanced Compilers自習コースも参考にした
改善点と学んだこと
- メンター不在: LinkedInを通じたネットワーキングの必要性を認識
- 専門書(Engineering a Compiler、Dragon Book)は概念の復習には有用だが、実戦対策には限界
- 面接質問の記録不足: 面接後に質問を書き留めて復習しなかったのは失敗だった
- オープンソース参加不足: Carbon、Mojoなどのプロジェクトを検討したが実際の貢献はしなかった。オープンソースは学習とネットワーキングに効果的
コンパイラを選んだ理由
- 数学博士課程も検討したが、REU夏季研究プログラムの後でより即効性のある影響を持つ仕事を望み、計算機科学のダブルメジャーを追加
- 理論的思考と低レベルプログラミングの類似性に魅了された
- 低レベルプログラミングには、数学のように原理から世界全体を構築していく感覚があり、それが魅力だった
- 機械学習の経験的な性質とは対照的に、公理から宇宙全体を作り上げていくようなアプローチを好んだ
- MITではコンパイラコミュニティに好きな人たちが多く、他分野に比べてお金も名声も少ないため、ややマゾヒスティックな気質が必要だと感じた
テック就職市場と助言
- 筆者のオレゴンの友人たち(Oregon Stateなどの非名門州立大学)は、数百件応募しても面接は4回程度しか得られなかった
- 使えるリソースを最大限活用して差別化すること: オープンソースコミュニティへの参加、ソーシャルメディア活用、大学の資源活用(誰も来ない部活でも始める)
- 直接会うこと: システム読書会などに参加(Ericのニューヨークのシステムグループに言及)
- コンパイラのYouTubeチャンネル開設も真剣に検討中(カメラの前ではぎこちないが)
- こうした活動は直接的に就職を保証するものではないが、機会の確率を高める
結論と個人的経験
- 2024年にスタートアップへ入る以前は、コンパイラ関連の業界経験はなかった
- 2025年の採用過程では時給の低いポジションにも応募したが、博士課程志望者に機会が回った
- 10か月間で数十回の面接を経て最終的に就職成功し、現在はプログラムのミリ秒単位の性能向上に集中している
- コンパイラ分野の従事者からの連絡を歓迎しており、Palo Alto地域での新しいスタートにも言及
- 最後に自身の小説『You Had Me at Hello World』の刊行を共有
2件のコメント
他の分野に比べて金も名声も少ないので、少しマゾヒスティックな性向が必要
ガクブル
Hacker Newsの意見
コンパイラに興味がある人なら、ClangBuiltLinux プロジェクトや LLVM のイシュートラッカーで貢献を始めてみるのがおすすめ
Linux kernel with LLVM のイシュー一覧と
LLVMの good first issue 一覧を参考にできる
記事のテーマが個人宣伝っぽく感じられた
でも本当に コンパイラエンジニア になりたいなら、自分でコンパイラを作ってみるのが核心
トークナイズ、AST 構築、型検査、IR(Intermediate Representation)のような基本概念を身につけることが重要
LLVMチュートリアルがおすすめ。
MIT レベルの天才である必要はなく、学部の1学期分の CS 科目程度で十分に始められる
関連求人が少ないので、AI など別分野へ転向することも多い
MIT 出身でも コンパイラエンジニアリング 分野への就職が簡単ではない点に驚いた
この分野は思ったより狭く、初級よりも シニア中心の市場 に見える
2001年のドットコムバブル崩壊時も就職は大変だったが、今の状況はまた別の意味で厳しそう
システムプログラミングの知識が不足している応募者も多い
スレッドはあちこちに散らばったが、コンパイラエンジニアを雇っているところを整理してみる
AMD, Nvidia, Intel, Apple, Google, Jane Street, Bloomberg, Qualcomm, Modular, AWS, ARM などがある
関連情報は CompilerJobs一覧 で見られる
実際には 応募者数が求人よりはるかに多い
LLVM や Rust、Swift、Carbon のようなプロジェクトへの貢献が最も現実的な参入ルート
参考資料: PL Resources,
How to Learn Compilers (LLVM Edition),
Compilers YouTubeチャンネル
彼女が言及していた本 “You Had Me At Hello World” というタイトルがとてもかわいいと感じた
記事の途中で突然「これは私の写真です」が出てきて驚いた
80年代に コンパイラエンジニア を夢見て修士号を取り、LR パーシングの論文まで出したが、
当時ですら仕事はほとんどなかった。PCC と GCC のソースを読みながらしのぎ、
その後 GUI 開発へ転向したが、Java/Swing 登場後はそちらのほうがずっと機会が多かった
20代前半で Simon & Schuster とデビュー契約を結んだことのほうが気になった
「コンパイラの YouTube チャンネルを作るか考えている」という話が印象に残った
ブログで複雑な内容を整理するだけでも十分価値がありそう
まるで自動車整備士になるには、自分で車を作って運転する動画まで撮らなければならないような状況だ
コンパイラの面接を控えていて、偶然この記事を読めてありがたかった
Crafting Interpreters(リンク)で勉強中だが、
インタプリタとコンパイラは違うのだと今さら気づいた
面接まで時間はないが、その後は Goで書かれたインタプリタ本(リンク)と
Rona がすすめていた技術資料をじっくり学ぶつもり
バックエンドアルゴリズムの理解に大いに役立った。Dragon Book も参考になるが、パーシング部分は飛ばしてよい