This tutorial gives an overview of methods and languages for programming distributed algorithms. It includes (1) an introduction to distributed algorithms, including Paxos for distributed consensus at the core of distributed services; (2) a method for programming distributed algorithms with (a) high-level control flows that are easy to understand as in pseudo-code, and (b) precise semantics for rigorous analysis as in specification languages; (3) a language, DistAlgo, that minimally extends conventional object-oriented programming languages for such programming of distributed algorithms; and (4) demonstrations with an implementation of DistAlgo in Python. DistAlgo has been used to easily implement distributed algorithms and services in dozens of course projects.