Languages, Compilers and Interpreters

Next running

14 Oct - 21 Nov
5:00pm-6:30pm Mon/Thu


San Francisco



Apply for this course

Most programmers learn languages, whereas most computer scientists learn about languages.

This gives the computer scientist a distinct advantage over the programmer, even in the domain of programming! Their knowledge generalizes; they are able to understand the operation of a new language more deeply and expeditiously than those who have merely learnt specific languages.

The course is scoped to give software engineers a first look under the covers of popular languages and their implementations. Compared to a typical compilers course, some of the details of compiler design are treated summarily, so as to afford more time building a stronger understanding of the general design of languages and operation of compilers and interpreters.


  1. Overview
  2. Lexical Analysis and Parsing
  3. Language Semantics and Evaluation
  4. Functions, Closures, Classes and Objects
  5. Bytecode Generation and Stack-Based Virtual Machines
  6. Runtime Environments and Garbage Collection
  7. Native Code Generation
  8. Optimization

Projects and exercises

This course has a significant practical component: you will write an interpreter for a simplified version of JavaScript, in your language of choice. Additional exercises are included where helpful, for instance profiling and optimization exercises to better understand existing sophisticated optimizers.

Assumed knowledge

This course assumes confident programming ability in any language. Familiarity with computer architecture is also advantageous.

Available sessions

14 Oct - 21 Nov
5:00pm-6:30pm Mon/Thu
San Francisco

This course will next be taught by

Tom Ballinger

Tom is a software engineer at Dropbox, prior to which he was the first facilitator at Recurse Center, a programming workshop for experienced programmers. For four years he helped participants learn new programming languages, build fancy terminal UIs and discover concurrent network programming, which resulted in a lot of BitTorrent clients being built.