- Derleyici mühendisi, programlama dillerini doğrudan tasarlamak yerine mevcut dillerin daha hızlı ve verimli çalışmasını sağlayan bir yazılım mühendisliği alanıdır
- Bu rol, tüm yazılım mühendisliği işleri içinde son derece küçük bir paya sahiptir; giriş bariyeri yüksektir ve talep sınırlıdır
- İşe alım yapan kurumlar startup'lar, büyük teknoloji şirketleri, akademi, finans sektörü ve açık kaynak projeleri gibi çeşitli alanlara yayılır, ancak çoğu yapı deneyimli aday odaklıdır
- Mülakatlarda özellikle C++ tabanlı algoritma uygulaması, dil tasarımı, derleyici optimizasyonu ve düşük seviyeli sistem bilgisi değerlendirilir
- MIT dersleri ve açık kaynak öğrenme materyalleriyle yapılan hazırlık süreci ile sürekli networking ve referral iş bulma başarısının anahtarıdır
Derleyici mühendisi nedir?
- Derleyici, bir programlama dilinde yazılmış kodu başka bir dile dönüştüren bir yazılım aracıdır
- Derleyici mühendisleri bu dillerin gerçeklenmesi ve optimizasyonundan sorumludur
- Yeni bir dil tasarlamaktan çok mevcut dillerin çalışma verimliliğini artırırlar
- Yazının yazarı, San Francisco Körfez Bölgesi'ndeki büyük bir teknoloji şirketinde programlama dili performansını iyileştirme işiyle uğraşıyor
Bu yazıyı yazma nedeni
- Derleyici alanında işe girişle ilgili internette neredeyse hiç bilgi olmadığından, yeni mezunlar ve kariyerinin başındakiler için pratik bir rehber sunmak amacıyla yazıldı
- Makine öğrenmesi ya da full-stack konusunda çok sayıda kaynak varken, derleyicilerle ilgili içerik az
- Yaklaşık 1 yıllık deneme-yanılma sürecinin ardından işe girmeyi başarma deneyimi paylaşılıyor
Kişisel kariyer özeti
- 2023'te MIT'den matematik ve bilgisayar bilimi çift anadalı ile mezun oldu
- Araştırma odaklı yüksek lisans programını bıraktıktan sonra 2024'te New York'taki bir startup'ta açık kaynak bir dilin genişletilmesi üzerinde çalıştı
- Sonrasında San Francisco'da halka açık bir teknoloji şirketine geçti
Derleyici mühendisi işe alan yerler
- Indeed'e göre “software engineer” için 116.000, “compiler engineer” içinse yaklaşık 400 ilan var
- Startup'lar: yeni mezun alım ihtimali daha yüksektir; yazar da ilk işine bir startup'ta başladı
- Büyük teknoloji şirketleri: Tesla, Waymo, Nvidia gibi daha çok donanım ve otomotiv şirketleri öne çıkıyor
- FAANG şirketlerinde stajdan tam zamanlıya geçiş örnekleri de var
- Akademi: araştırma fonlarındaki daralma nedeniyle fırsatlar sınırlı
- Quant finans şirketleri: Jane Street, Five Rings gibi firmalar yüksek performanslı hesaplama becerileri arıyor
- Açık kaynak projeleri: bazı startup'lar bu alanda işe alım yapıyor
Özgeçmiş ve networking stratejisi
- Referral en etkili yaklaşım
- Tanıdıklar ya da tanıdıkların tanıdıkları üzerinden referral istemek
- SNS profilinde "Rona likes compilers" yazarak ilgisini açıkça belirtti, bu sayede networking fırsatları yakaladı ve gerçekten mülakata kadar ilerleyen bağlantılar kurdu
- Kişisel arka planı (ABD vatandaşlığı, MIT diploması vb.) avantaj sağlamış
Mülakat türleri
- LeetCode tarzı algoritmalar: BFS, öncelik kuyruğu gibi veri yapılarıyla whiteboard çözümü; çoğunlukla C++ kullanılıyor
- Dil tasarımı: belirli kısıtlar altında basit bir dil için grammar yazma
- Programlama dilleriyle ilgili sorular: en sevilen programlama dili ve nedenleri
- Ara temsil (IR): x86 assembly yorumlama ve dönüştürme; MLIR tabanlı ödevler de dahil
- Optimizasyon pass'leri: MLIR ödevinde cebirsel sadeleştirme optimizasyon pass'i yazmak, sabit yayılımı ve ölü kod silme pass'lerini uygulamak
- Derleyici temelleri: derleyicinin bileşenleri, optimizasyon teknikleri, statik ve dinamik derleyici farkı
- Graf teorisi: kontrol akış grafiği, register allocation gibi graf tabanlı derleyici gösterimleri hakkında sorular (yazarın lisans tez konusunun etkisi)
- Düşük seviyeli sistem konuları: deadlock, race condition, özel amaçlı register'lar, komut pipeline'ı, bellek tahsisi, ikili gösterim ve işlemler, garbage collection vb.
- Davranışsal sorular: “Neden derleyiciler alanında çalışmak istiyorsun?” gibi motivasyon odaklı sorular
Mülakat hazırlık süreci
- Öğrenme sürecinin merkezinde MIT OCW dersleri vardı
- Computation Structures: pipeline, assembly, ikili işlemler gibi düşük seviyeli kavramlar
- Computer Language Engineering: C++ ve büyük kod tabanları deneyimi
- Performance Engineering: performans optimizasyonu odaklı; mevcut işe girişte belirleyici oldu
- Theory of Computation: dil grameri tasarımını anlamaya yardımcı oldu
- Cornell'in Advanced Compilers kendi kendine öğrenme içeriğine de başvuruldu
Geliştirilmesi gereken noktalar ve çıkarılan dersler
- Mentor eksikliği: LinkedIn üzerinden networking yapma gerekliliği fark edildi
- Uzman kitaplar (Engineering a Compiler, Dragon Book) kavram tekrarında yararlı ama gerçek mülakat hazırlığında sınırlı
- Mülakat sorularını kaydetmeme: mülakatlardan sonra soruları not alıp tekrar etmemek bir hataydı
- Açık kaynağa yetersiz katılım: Carbon, Mojo gibi projeler incelendi ama gerçek katkı yapılmadı. Açık kaynak öğrenme ve networking için etkili
Neden derleyiciler?
- Matematik doktorasını düşünüyordu, ancak REU yaz araştırma programından sonra daha doğrudan etkisi olan bir iş istediği için bilgisayar biliminde çift anadal ekledi
- Teorik düşünce ile düşük seviyeli programlama arasındaki benzerlikten etkilendi
- Düşük seviyeli programlamanın, matematikte olduğu gibi ilkelerden yola çıkarak bütün bir dünya kurma hissi çekici geldi
- Makine öğrenmesinin deneysel doğasına kıyasla, aksiyomlardan bütün bir evren kurma yaklaşımını tercih ediyor
- MIT'de derleyici topluluğunda sevdiği çok insan vardı; diğer alanlara göre daha az para ve prestij olduğu için bunun biraz mazoşist bir eğilim de gerektirdiğini söylüyor
Teknoloji işe alım piyasası ve tavsiyeler
- Yazarın Oregon'daki arkadaşları (Oregon State gibi seçkin olmayan eyalet üniversiteleri) yüzlerce başvuruya rağmen yalnızca yaklaşık 4 mülakat alabildi
- Kaynakları sonuna kadar kullanın ve farklılaşın: açık kaynak topluluklarına katılın, sosyal medyayı kullanın, üniversite kaynaklarından yararlanın (kimse gelmese bile bir kulüp başlatın)
- Yüz yüze tanışın: sistem okuma grupları gibi etkinliklere katılın (Eric'in New York sistem grubu anılıyor)
- Derleyiciler üzerine bir YouTube kanalı açmayı da ciddi biçimde düşünüyor (kamera karşısında rahatsız hissetse bile)
- Bu faaliyetler doğrudan iş garantisi vermez ama fırsat olasılığını artırır
Sonuç ve kişisel deneyim
- 2024'teki startup işinden önce derleyiciyle ilgili bir sektör deneyimi yoktu
- 2025'teki işe alım sürecinde saatlik ücreti düşük pozisyonlara da başvurdu, ancak fırsatlar doktora adaylarına gitti
- 10 ay boyunca onlarca mülakatın ardından sonunda işe girdi; şu anda programların milisaniye düzeyinde performansını iyileştirmeye odaklanıyor
- Derleyici alanında çalışanlardan kendisiyle iletişime geçmelerini istiyor ve Palo Alto bölgesindeki yeni başlangıcından söz ediyor
- Son olarak kendi romanı **『You Had Me at Hello World』**ün yayımlandığını paylaşıyor
2 yorum
Diğer alanlara kıyasla para ve itibar daha az olduğu için biraz mazoşistik bir eğilim gerekiyor
Vay be
Hacker News görüşleri
Derleyicilerle ilgilenen biri için katkıya ClangBuiltLinux projesinden ya da LLVM issue tracker'ından başlamayı tavsiye ederim
LLVM ile Linux kernel issue listesi ve
LLVM'in good first issue listesi incelenebilir
Yazının konusu biraz kişisel PR amacı taşıyor gibi geldi
Ama gerçekten derleyici mühendisi olmak istiyorsanız, asıl önemli olan doğrudan bir derleyici yazmaktır
Tokenization, AST oluşturma, type checking, IR (Intermediate Representation) gibi temel kavramları öğrenmek önemlidir
LLVM tutorial'ı tavsiye ederim.
MIT seviyesinde bir dahi olmanız gerekmiyor; bir dönemlik CS dersi kadar bilgiyle başlamak mümkün
İlgili işler az olduğu için birçok kişi yapay zeka gibi başka alanlara yöneliyor
MIT mezunu olsanız bile derleyici mühendisliği alanında iş bulmanın kolay olmaması şaşırtıcı geldi
Bu alan düşündüğümden daha dar ve giriş seviyesinden çok kıdemli odaklı bir pazar gibi görünüyor
2001 dot-com balonu patladığında iş bulmak zordu, ama bugünkü durum da farklı bir açıdan epey zor görünüyor
Sistem programlama bilgisi zayıf aday da çok
Başlık birçok yöne dağıldı ama derleyici mühendisi işe alan yerleri toparlamaya çalışayım
AMD, Nvidia, Intel, Apple, Google, Jane Street, Bloomberg, Qualcomm, Modular, AWS, ARM bunlardan bazıları
Daha fazla bilgi CompilerJobs listesinde görülebilir
Gerçekte ise başvuran sayısı işlerden çok daha fazla
LLVM, Rust, Swift, Carbon gibi projelere katkı vermek en gerçekçi giriş yolu
Kaynaklar: PL Resources,
How to Learn Compilers (LLVM Edition),
Compilers YouTube kanalı
Onun sözünü ettiği “You Had Me At Hello World” kitabının başlığı çok sevimli geldi
Yazının ortasında bir anda “bu benim fotoğrafım” denmesi şaşırttı
80'lerde derleyici mühendisi olmayı hayal ederek yüksek lisans yaptım, hatta LR parsing üzerine makale de yayımladım,
ama o dönemde bile iş neredeyse yoktu. PCC ve GCC kaynaklarını inceleyerek ayakta kaldım,
sonra GUI geliştirmeye geçtim ve Java/Swing çıktıktan sonra fırsatlar o tarafta çok daha fazlaydı
20'lerinin başında Simon & Schuster ile ilk kitap anlaşması yapmış olması daha da ilginç geldi
“Bir derleyici YouTube kanalı açmayı düşünüyorum” demesi akılda kaldı
Karmaşık konuları blog yazılarıyla anlatmak bile başlı başına değerli olur gibi geliyor
Sanki araba tamircisi olmak için önce kendi arabanı yapıp sürerken video çekmen gerekiyormuş gibi
Derleyici mülakatı öncesinde bu yazıya tesadüfen denk geldiğim için minnettarım
Crafting Interpreters(bağlantı) ile çalışıyordum,
ama interpreter ile compiler'ın farklı şeyler olduğunu ancak şimdi fark ettim
Mülakata kadar zaman kalmadı, ama sonrasında Go ile yazılmış interpreter kitabı(bağlantı) ile
Rona'nın tavsiye ettiği teknik kaynakları sırayla incelemeyi planlıyorum
backend algoritmalarını anlamakta çok yardımcı oldu. Dragon Book da bakmaya değer ama parsing kısmı atlanabilir