This undergraduate course motivates and explains the principles of computer systems. We will introduce all relevant layers and study their connection: architecture, algorithms, computability, complexity, languages, syntax, semantics, compilers, data structures, memory management, concurrency, kernels, virtual machines, and cloud computing. For this purpose we use code examples from the Selfie Project which is an educational system of a self-compiling C compiler and a self-executing MIPS emulator.
Time, Location: First class is on Monday, October 5, 2015 at 4pm in T02. Check the schedule (iCal) for updates.
This course is on principled engineering of computer systems. We will study all relevant layers, from the lowest levels of machine architecture via algorithm, programming language, compiler, kernel, and virtual machine design to the highest levels of cloud computing. The goal is to gain a deep understanding of the many development and performance tradeoffs in systems engineering.
At the end of the course students will be able to appreciate principled engineering of computer systems but also know how one really looks like and, as a consequence, through insights in architecture, algorithms, computability, complexity, languages, compilers, kernels, and virtual machines become fundamentally better programmers and computer scientists.
The final exam will be on January 25, 2016.