The course introduces the principles underlying the theory, algorithms, and systems aspects of distributed computing. The instructor can decide the focus of the course and select the algorithms accordingly. For instance, if the focus is on systems-like problems, the selected algorithms can consist of logical time, causal communications, snapshot, mutual exclusion, leader election. The instructor can also choose topics like wireless networks, peer-to-peer networks, security etc. A software tool can be introduced for the analysis and verification of the algorithms.