...And honestly it seems that I'm screwed. And I need about 6 months of study to learn all this stuff. What I'd do right now is finish Crafting Interpreters, then grab that other book on Interpreters that was recommended here recently[2] and written in Go because I remember it had a followup book on Compilers, and THEN start going through the technical stuff that Rona suggested in the article.
And my interview is on Monday so that's not happening. I have other more general interviews that should pay better so I'm not too upset. If only I wasn't too lazy during my last position and kept learning while working. If the stars align and somehow I get that Compiler Engineer position, then I will certainly reach out to Rona and thank you again lalitkale for sharing this post with HN!
There are three versions (C, ML, and Java). The language isn’t all that important; the algorithms are described in pseudo-code.
I also find the traditional Dragon Book to be somewhat helpful, but you can mostly skip the parsing/frontend sections.
>In 2023, I graduated from MIT with a double major in math and computer science.
I'm a bit shocked that it would take significant effort/creativity for an MIT grad with relevant course/project work to get a job in the niche
I would have thought the recruiting pipeline is kinda smooth
Although maybe it's a smaller niche than I think -- I imagine compiler engineers skew more senior. Maybe it's not a common first or second job
I graduated at the bottom of bear market (2001), and it was hard to get a job. But this seems a bit different
That bit was heartbreaking to me too. I knew the economy was bad for new grads but if a double major from MIT in SF is struggling, then the economy is cooked.
Beyond that, I've definitely interviewed people who seemed like they could have been smart + capable but who couldn't cut it when it came to systems programming questions. Even senior developers often struggle with things like memory layouts and hardware behavior.
> I’m not involved in any open-source projects, but they seem like a fantastic way of learning more about this field and also meeting people with shared interests. I did look into Carbon and Mojo but didn’t end up making contributions.
This sounds like the best way to learn and get involved with compilers, but something that's always been a barrier for me is just getting started in open source. Practical experience is far more valuable than taking classes, especially when you really need to know what you're doing for a real project versus following along directions in a class. Open source projects aren't usually designed to make it easy for anyone to contribute with the learning curve.
> So how the hell does anybody get a job?
> This is general advice for non-compilers people, too: Be resourceful and stand out. Get involved in open-source communities, leverage social media, make use of your university resources if you are still in school (even if that means starting a club that nobody attends, at least that demonstrates you’re trying). Meet people. There are reading groups (my friend Eric runs a systems group in NYC; I used to go all the time when it was held in Cambridge). I was seriously considering starting a compilers YouTube channel even though I’m awkward in front of the camera.
There's a lot of advice and a lot of different ways to try to find a job, but if I were to take away anything from this, it's that the best way is to do a lot of different meaningful things. Applying to a lot of jobs or doing a lot of interview prep isn't very meaningful, whereas the most meaningful things have value in itself and often aren't oriented towards finding a job. You may find a job sooner if you prioritize looking for a job, similar to how you may get better grades by cramming for a test in school, but you'll probably get better outcomes by optimizing for the long term in life and taking a short term loss.
The way to become a compiler engineer by definition is to try and write a compiler , for which the best course of action is to focus on learning how tokenizing, ast building, typechecking, and various intermediate representations work.
I don't pretend to know what's the best tutorial for this, but I think this is a fairly good one:
https://llvm.org/docs/tutorial/MyFirstLanguageFrontend/index...
This is for LLVM, but I think doing basic codegen from generic SSA is not a huge leap from this point if one wants to build an entire compiler from scratch.
You do not need to be 'goes to MIT' level of smart, but you do have to understand the basic concepts, which I think is an absolutely manageable amount - about a scope of a couple hundred page paperback or a single challenging CS course worth of info to get started.
You certainly don't need to be from 'top 3 college in US' at all. Neither did the creators of Zig (Andrew Kelly) and LLVM, Swift and Mojo (Chris Lattner) ever did.
All you need is genuine interest in compilers, the basic CS fundamentals including data structures and algorithms. Start by building a toy compiler and then study the existing open-source ones and make some contributions to understand how it all works.
what exactly are those even? that she went to MIT? from her linkedin she's at some blockchain startup (for only 4 months) doing "compiler work" - i put it in quotes because these jobs actually happen to be a dime-a-dozen and the only thing you have to do to get them is pass standard filters (LC, pedigree, etc.).
All that said, she seems nice. I'm just not going to expect much good advice about to get hired from a fresh MIT grad who checks off a bunch of HR checkboxes.
Just search for either of the words "Triton", "CUDA", "JAX", "SGLang" and "LLVM" (Not LLM) and it filters almost everyone out on "Who wants to be Hired' with 1 or 2 results.
Where as if you search "Javascript", 200+ results.
This tells me that there is little to no interest in compiler engineering here (and especially in startups) unless you are at a big tech company or at one of the biggest AI companies that use these technologies.
Of course, the barrier is meant to be high. but if a recruiter has to sift through 200+ CVs a page of a certain technology (Javascript), then your chances of getting selected against the competition for a single job is vanishingly small.
I said this before and it works all the time, for compilers; open-source contributions to production-grade compiler projects with links to commits is the most staightforward differentiator and proof one can use to stand out against the rest.
YMMV, I guess, but you're better off demonstrating experience with what they're hiring for, not random tech that they aren't and never will use.
I would like to read in the future about what is the usual day of a compiler engineer, what you usually do, what are the most enjoyable and annoying tasks.
Which is to say that all it takes is an interest in compilers. That alone will set you apart. There's basically no one in the hiring pipeline despite the tech layoffs. I'm constantly getting recruiting ads. Current areas of interest are AI (duh) but also early-stage quantum compute companies and fully-homomorphic encryption startups. In general, you will make it farther in computer science the more niche and hard you go.
Doesn’t need to be a YT channel, a blog where you talk about this very complex and niche stuff would be awesome for many.
Building the Linux kernel with LLVM: https://github.com/ClangBuiltLinux/linux/issues
LLVM itself: https://github.com/llvm/llvm-project/issues?q=is%3Aissue%20s...
phendrenad2•2h ago
est31•2h ago
cube2222•2h ago
First, LLMs should be happy to use made up languages described in a couple thousand tokens without issues (you just have to have a good llm-friendly description, some examples). That and having a compiler it can iterate with / get feedback from.
Second, LLMs heavily reduce ecosystem advantage. Before LLMs, presence of libraries for common use cases to save myself time was one of the main deciding factors for language choice.
Now? The LLM will be happy to implement any utility / api client library I want given the API I want. May even be more thoroughly tested than the average open-source library.
achierius•1h ago
phendrenad2•56m ago
cube2222•47m ago
To be clear, I mean specifically using Claude Code, with preloaded sample context and giving it the ability to call the compiler and iterate on it.
I’m sure one-shot results (like asking Claude via the web UI and verifying after one iteration) will go much worse. But if it has the compiler available and writes tests, shouldn’t be an issue. It’s possible it causes 2-3 more back and forths with the compiler, but that’s an extra couple minutes, tops.
In general, even if working with Go (what I usually do), I will start each Claude Code session with tens of thousands of tokens of context from the code base, so it follows the (somewhat peculiar) existing code style / patterns, and understands what’s where.
torginus•46m ago
And this is for generic backend stuff, like a CRUD server with a Rest API, the same thing with an Express/Node backend works no trouble.
phendrenad2•56m ago
DonaldPShimoda•1h ago
No, LLMs are not going to replace compiler engineers. Compilers are probably one of the least likely areas to profit from extensive LLM usage in the way that you are thinking, because they are principally concerned with correctness, and LLMs cannot reason about whether something is correct — they only can predict whether their training data would be likely to claim that it is correct.
Additionally, each compiler differs significantly in the minute details. I simply wouldn't trust the output of an LLM to be correct, and the time wasted on determining whether it's correct is just not worth it.
Stop eating pre-chewed food. Think for yourself, and write your own code.
phendrenad2•1h ago
Actually, your whole point about LLMs not being able to detect correctness is just demonstrably false if you play around with LLM agents a bit.
dullcrisp•1h ago