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