teaching
CMSC 226
Principles of Computing Systems (S2020)
overview |
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.