Core Programming Concepts in Distributed Computing