This course aims to equip students with a comprehensive understanding of the fundamental challenges and solutions of distributed computing. Through this course,
(1) students will explore essential distributed algorithms, develop the ability to reason about their execution, and gain hands-on experience in programming them.
(2) master and control the design of systems whose complexity does not allow for simple piloting.