Professor A. Udaya Shankar has recently published a book titled "Distributed Programming: Theory and Practice". This text presents a practical and rigorous method to develop distributed programs that correctly implement specifications. It also covers how to write specifications and how to use them. Examples address both classical problems (e.g., distributed termination detection) and non-classical problems (e.g., network sockets). The book bridges the gap between books that focus on specific concurrent programming languages and books that focus on distributed algorithms. Programs are written in a "real-life" programming notation (along the lines of Java and Python), with explicit instantiation of threads and programs.