- Large tech companies
- Financial institutions
- Companies with developer-facing products
- How did I do it?
I recently saw this posted to Twitter:
For people considering it: working in compilers / developer tools is a great career. The programs are deterministic and have testsuites, the problems to solve are intellectually engaging and high-impact, the colleagues are friendly and reasonable, and the hours and pay are good. https://t.co/d759G6g1fg— Graydon Hoare (@graydon_pub) September 11, 2018
It’s true! Developer tooling is a great space to be in, since you’re in the target audience for the products you’re building, so it’s easy to feel invested in your work. And the deterministic testing is great.
But how do you actually get a job in programming languages specifically? The sad truth is that there are not a lot of opportunities to work in programming languages professionally: it has to be your institution’s core competency, or your institution has to be so large that it’s economical for them to spend multiple developer-years on a programming language project.
I had figured out after having taken my compilers course in college that I wanted to go into programming languages as a full-time profession. This article is the guide I wish I had when I was searching for jobs.
The simplest way (but I won’t claim it’s the easiest way) to get into programming languages is to pursue a position in academia. You get to choose your institution and advisor to make sure that you find a position where you’ll be able to work on programming languages full-time. The downside is that you’re not compensated very well, relatively-speaking.
At my alma mater, the University of Michigan, we had no programming language faculty whatsoever. Apparently Carnegie Mellon University had taken them all. The state of programming language research seems to be a bit better in Europe than in the US, with institutions like Cambridge and INRIA. Many of my formally-trained coworkers reside in our London office.
Large tech companies
Large tech companies have so many developers that it starts to make sense to build tooling specifically for those developers. One minute saved per developer across 10,000 developers per day would pay for your yearly salary a few times over.
Some large tech companies with programming language teams:
- Microsoft (C++, C♯, VB, TypeScript, Chakra).
- Google (Go, Dart, V8).
- Facebook (Hack, Flow, Pyre).
- Apple (Swift, LLVM).
The good news is that you’re well-compensated for working at these companies. The bad news is that it’s hard to get such a job.
It surprised me when I was looking for jobs how many financial institutions had their feet wet in programming languages. This is mostly for two reasons: reliability by means of safer programming languages, and performance for handling massive data streams.
Some examples of banks with programming language projects:
- Morgan Stanley (Hobbes).
- Goldman Sachs (Slang).
- Standard Chartered. I had a coworker once who talked about their eager spreadsheet-based variant of Haskell designed for parallel computing.
Some examples of trading firms with programming language projects:
- Jane Street (OCaml).
- Jump Trading. One of my classmates joined there full-time out of college and mentioned that they had people working on eking out performance from their C++ compiler. They also sponsored his H1B, so trading firms could be a good fit for international candidates.
Companies with developer-facing products
The only other way a company can afford to spend time on a programming language is if it’s one of its core competencies. JetBrains makes the Kotlin language as well as excellent developer tooling. (It also has the advantage of being headquartered in Saint Petersburg, where presumably the developer salaries are lower than in the US). Mozilla develops Rust in the course of improving Firefox. (They are in a bit of a unique situation given how their income works.)
How did I do it?
I received a Bachelor’s degree in computer science from the University of Michigan. Once there, I heavily optimized towards getting a job at a large tech company. I got a job as an undergraduate teaching assistant, then interned at Amazon, and then interned again at Facebook, and ultimately joined Facebook full-time in Seattle out of college working on the Hack programming language.
New hires at Facebook go through a 6-week “bootcamp” process where you browse teams and try to find one that’s a good fit for you. Even though I interned at Facebook, I foolishly didn’t take the time to get a good sense of what teams were hiring. Nonetheless, I took a gamble and joined Facebook anyways out of college and did find a spot on the Hack programming language team, which had just started expanding in its Seattle office. (Fun fact: for a couple of weeks, my only coworker in the Seattle office was Eric Lippert, known for his work on C♯ at Microsoft.)
I didn’t consider academia at all when I was in college, thinking that I wasn’t cut out for it. I should have at least considered it given that I wanted to go into programming languages, possibly by participating in research as an undergrad.
I seriously looked at Microsoft and Google, both of which have top-notch programming language teams. While I was interviewing at Microsoft, I asked a hiring manager if it would be a problem for someone with only a Bachelor’s degree would be able to to get into programming languages. He reassured me that programming language teams needed entry-level developers just like most other teams, and that, indeed, PhD hires oftentimes just wanted to continue their PhD work, which only aligned with the company’s business needs perhaps three months out of the year.
I didn’t accept an offer with Microsoft because the pay was less and because I liked the culture at Facebook, although they did guarantee me a position somewhere in their developer division. I didn’t accept an offer with Google because they only got back to me about my interview results one week after the deadline of my Facebook full-time offer elapsed (!).
I’ll admit: I had a privileged upbringing which afforded me the resources and the confidence to jump through the set of hoops necessary to secure my current position. Frankly, the technical hiring process for these large companies is ridiculous, and not everyone has the resources to spend years aiming for one.
I’m writing about my experience because I believe putting the information out there is better than not putting it out there. Regardless of your situation, I hope that this article helps you make a concrete plan about how to get your desired job in programming languages as well.