Programming Distributed Computing Systems: A Foundational Approach (The MIT Press)