Programming Distributed Systems


Instructor: Dr. Annette Bieniusa

Lecture: Monday, 10:00 - 11:30, Room 48-453

Exercises: Thursday, 15:30 - 17:00, Room 42-110

The lecture and course material will be in English.


  • Good programming knowledge, including usage of code repositories (git)

As this is a 4CP lecture, you will spend on average around 120 hours on the lecture and the exercises, plus exam preparation. If you do not have much experience with programming systems of medium size, you need to plan to spend more time on the practical exercises! If you lack some of the theoretical prerequisites (definition of formal languages, finite-state machines), you should also incorporate this into your planning.


You will be able to

  • explain the challenges regarding time and faults in a distributed system
  • provide formal definitions for time models, fault models and consistency models
  • comprehend and develop models of some distributed system in a process calculus
  • describe the algorithms for essential abstractions in programming distributed systems
  • implement basic abstractions for distributed programming
  • explain the virtues and limitations of major distributed programming paradigms

Topics of the Lecture

  • Basic primitives in programming distributed systems
    • Leader election
    • Consistent snapshots
    • Consensus
    • Distributed state machine replication
  • Theoretical foundation
    • Failure modes
    • Time in Distributed systems
    • Process calculi (e.g. CSP, CCS, pi calculus, TLA)
    • Consistency models
  • Programming paradigms for Distributed Systems
    • RPC
    • Futures and promises
    • Message passing and Actors
    • CRDTs
    • Streaming / Data-Flow