A modern computer system spans many layers: applications, libraries, operating systems, networks, and hardware devices. Building a good system entails making the right trade-offs and understanding emergent behaviors. This course helps you acquire a deep understanding of computer systems and prepares you to become a great system designer, i.e., one who make the trade-offs in a principled fashion, not by trial-and-error.