Principles of Computing Systemsoverview | logistics | schedule | assignments | presentations | resources
This course takes a systems perspective to the study of computers. As our programs scale up from a single author, user, and computer to programs designed, written, maintained, and used by multiple people that run on many computers (sometimes at the same time), considerations beyond algorithms alone are magnified. Design principles and engineering practices help us cope with this complexity: version control for multiple authors, input validation for multiple (adversarial) users, build automation tools for multiple platforms, process and thread models for parallelism. From how numbers are represented in hardware to how instruction-level parallelism and speculation can lead to bugs: the design, implementation, evaluation, safety and security of computing systems will be stressed. Students will explore computers from the ground up, using a variety of programming languages (including assembly) and tools like the command line, debuggers, and version control.