50.005 Computer System Engineering

No. of Credits: 12 Subject Credits

Pre-requisites: 50.002 Computation Structures

Course Description

Topics on the engineering of computing and networking systems: design challenges; techniques for controlling complexity; operating systems and networking systems: performance; strong modularity; client-server; naming; security and privacy, atomicity and coordination of concurrent activities; user and end-to-end applications.

Case studies of working systems and readings from the current literature provide comparisons and contrasts.

Students will complete two design/implementation projects.

Learning Objectives

At the end of the term, students will be able to:

  • Explain sources of complexity in computer system design, e.g. incommensurate scaling and emergent properties.
  • Exploit systems design principles to cope with the complexity, e.g., modularity, hierarchy, layering, indirection.
  • Command software tools to measure performance and understand how actual computing and network systems work.
  • Explain the design and implementation of real-world computing and networking (i.e., Internet) systems, e.g., DNS, HTTP, OpenSSL.
  • Develop programming skills to develop OS and networking tools and software.

Measurable Outcomes

  • Use software tools to understand, measure, and design modern computing systems.
  • Implement concurrent and network programs in Java.
  • Explain the conceptual underpinnings of modern computing system design; apply relevant principles and techniques in conceptual problem solving.

Topics Covered

  • Key challenges and basic principles in the design of large-scale computing systems
  • Process management and multithreaded programming
  • Process scheduling, synchronization, deadlock
  • Memory management, file system, and I/O system
  • End-to-end network performance (e.g., loss, throughput, and delay) and impact on network applications
  • Network security: applied cryptography; key certification; confidentiality, integrity, authentication, and availability; types of network attacks; design of secure network protocols
  • Network naming and addressing; DNS as a scalable and distributed infrastructure for name resolution in the Internet
  • Client-server network programming; HTTP and the World Wide Web

Course Notes


This set of course notes was graciously shared by Tey Siew Wen , updated as of 15 October 2019.

Follow her on GitHub and give her your messages of appreciation!


View Source Code


This set of course notes was graciously shared by Shaun Toh and Joel Huang , updated as of 24 April 2018.

Follow them on GitHub and give them your messages of appreciation!