Software Systems: Behind the Abstractions

Next running

21 Mar - 19 May
5:00pm-6:30pm PT Tue/Fri
Live online

(and one subsequent session)



Apply for this course

As a field, computer programming advances from one abstraction to another. It's hard to imagine a world without high level languages, operating system services, network sockets and database query languages. However, no abstraction is perfect—some very far from it! Unfortunately, a software engineer who can't peer through, subvert, modify or replace these abstractions thus has a cap on their abilities.

This course is a first look under the hood of many important systems including the CPU itself, compilers and interpreters, operating systems and computer networks. It is intended for professional software engineers with some working familiarity with these systems, but little or unsatisfactory fundamental understanding of them. It also serves as a preview of our Computer Science Intensive program.

Projects and exercises

Almost all individual classes involve a pre-class exercise, to motivate the topic and bring a programmer’s perspective. Some examples of exercises are:

  • Writing a few short programs in x86-64 assembly
  • Writing a tree-walk interpreter for a simple language
  • Implementing a stack-based bytecode virtual machine
  • Write a basic shell program
  • Implementing a basic container runtime
  • Parsing a packet capture file
  • Writing a small HTTP proxy
  • Writing a traceroute clone
  • Writing a basic database query executor, including a join node (hash join or sort-merge join)

Assumed knowledge

This course doesn't assume any prior computer science background, however we do expect that you are comfortable with your programming language and tools of choice, ie that you will not require assistance with any of the programming aspects of exercises. In addition, if you don't have experience with a systems language (such as C/C++, Golang or Rust) we would encourage you to pick up some basic familiarity with such a language before the course starts, e.g. by working through The C Programming Language.

Available sessions

21 Mar - 19 May
5:00pm-6:30pm PT Tue/Fri
Live online
19 Sep - 17 Nov
5:00pm-6:30pm PT Tue/Fri
Live online