Ever since I began programming, I’ve been interested in programming languages. Languages (both the natural kind, like English (the rules of which you’re using to parse this sentence inside your head (unless you’re a bot, in which case
01101000 01101001 00100001)) as well as the programming kind like Java or C) are tools which people use to make Stuff. Once you understand how to use the symbols of a language, you can compose them in arbitrarily complex patterns to write arbitrarily complex things like a novel or a search engine. Programming languages, in particular, are reminiscent of wizardry (to use a somewhat tired cliche). Invoking a language is spell-casting.
Now, knowing how to use a language (or a spell!) makes you powerful. But True Power comes from knowing the meta-language, and True Wielders of Awesome Power are language-writers like Richard Stallman, James Gosling and Grace Hopper; people who invent programming languages, who give our imagination hammers and chisels, who define the way we create things, who give us the abstractions we need to build the things we do.
I wanted to be a True Wielder of Power. I wanted to learn how programming languages work, and how they’re created, and what a compiler does. Also Steve Yegge says that students who don’t take Compilers “run the risk of forever being on the programmer B-list” (this is also good reading if you’re debating whether or not to take Compilers; it’s what convinced me!), and by golly, that was not going to happen to me. I’m a Good
The course was fun and hard and I learned loads. A massive component of the course was a project where you actually write a compiler for a high-level source language. Two source language options were given - a subset of Go, or an experimental oncology-research domain-specific language used for radio-oncology data (phew) called OncoTime. My friends Yusaira and Brendan and I decided to implement the latter, because as OncoTime is still under development, we would get to make language-design decisions and be creative and all that instead of just implementing a language spec.