How does one generally get to work on compilers? Is it mostly through academia? Through open source contributions to compilers?
How does one generally get to work on compilers? Is it mostly through academia? Through open source contributions to compilers?
I've been meaning to write a blog post about this because I get asked about my personal journey to working on the team a bunch.
The makeup of the current team is a split of:
- people who worked on programming languages & compilers in academia
- people who worked on developer productivity/product infrastructure at large tech companies
- people who just really like types (me)
Which is to say: there's a deal of luck involved, but there are also some fairly straightforward ways to inch closer to PLs/compilers job in industry.
That all being said, the piece of advice I always give people who bring this up: there's nothing stopping you from working on PLs/compilers right now! Find a ticket labeled "good first bug," show up in the #internals channel on the Sorbet Slack[1], and someone would love to help you get started.
Don't care about Sorbet? That's fine! Pick your programming language of choice, find where the developers hang out, and repeat the process. Oftentimes, there's nothing holding you back from working on PLs and compilers except yourself.
If you start looking for mini languages in a normal project (or where they would fit) you will see that there are frequently many opportunities to do something useful with small domain specific languages.
I suggest starting with parser combinators rather than page 1 in the Dragon Book. They are a nice way to get things done quickly.
FB isn’t as steeped in modern service-oriented ideology as most similar companies, so that `www` monorepo represents a lot more code than you probably expect, including stuff you’d normally think of as “services”.
True backend services do exist outside the PHP application, and are typically written in C++. Java, Rust, and Python also exist in various niches.
The only mainstream language I have never seen anywhere at FB is Go, although I’m sure any language you can imagine is used by _some_ random team out there.
I’m not sure why Hack would be unpopular. On the contrary, it’s the default choice for starting new projects since all of the internal tooling is built mostly with Hack in mind, so it’s the path of least resistance for developers.
You can just do it! As a place to start I'd recommend looking for tutorials on recursive-descent parsing, and just try to make a program that parses a toy language and transpiles it into C, or some other language you're familiar with. Then you can grow it from there.
You can get really fancy with things automatic parser generation, and using an LLVM back-end to enable optimization, but writing a simple compiler is a reasonable project for someone with even a basic handle on programming and a little creativity to just jump in and figure out.