Course Description:

This course covers the design and implementation of distributed systems. Students will gain an understanding of the principles and techniques behind the design of modern, reliable, and high-performance distributed systems.

Topics include server design, network programming, naming, concurrency and locking, consistency models and techniques, security, and fault tolerance. Modern techniques and systems employed at some of the largest Internet sites (e.g., Google, Facebook, Amazon) will also be covered.

Through programming assignments, students will gain practical experience designing, implementing, and debugging real distributed systems.

Prerequisites: COS 217 required. COS 318, COS 333, and/or programming maturity recommended.


  • Lecture: Mondays and Wednesday, 10:00am - 10:50am. Bowen Hall, Room 222.
  • Precepts:
    • P01: Friday 10:00am - 10:50am. Friend Center, Room 008. Theano Stavrinos
    • P02: Friday 11:00am - 11:50am. Friend Center, Room 008. Zhenyu Song
    • P03: Friday 11:00am - 11:50am. EQuad D Wing, D221. Chris Hodsdon.
  • Instructors:
    • Professor Wyatt Lloyd
      • Office hours: Immediately following lecture in Bowen 222 and Wednesday 3-4 in CS 323
    • Preceptors Theano Stavrinos, Zhenyu Song, and Chris Hodsdon
    • Lab TAs: Michael Friedman, Frank Li, Andrew Spencer, Njuguna Thande
    • Preceptor and Lab TA Office Hours
      • Held in either Friend Center 010 (FC010) or Computer Science 003 (CS 003)
      • Monday: 430-630 (CS 003)
      • Tuesday: 430-630 (FC 010), 6-8 (FC 010), 8-10 (FC 010)
      • Wednesday: 11a-1p (FC 010), 4-6 (FC 010), 8-10 (FC 010, x2)
      • Thursday: N/A. Start assignments early!
      • Friday: 2-4 (FC 010)
      • Saturday: 1-3 (FC 010)
      • Sunday: 1-3 (FC 010)
      • If office hours are changed, they will be updated in a pinned post on Piazza.
  • Grading: midterm (25%), final (25%), programming assignments (50%)
  • Questions: Please use the class Piazza site


There are no textbooks for this class. All materials will be covered in lecture, which students are strongly recommended to attend. There are several books that might be useful, however:

  • The Go Programming Language. Alan A. A. Donovan and Brian W. Kernighan. Web page
  • Distributed Systems: Principles and Paradigms. Andrew S. Tanenbaum and Maaten Van Steen. Amazon link
  • Guide to Reliable Distributed Systems. Kenneth P. Birman. Amazon link