Part I: In the Beginning Introduction Preliminaries Part II: Deterministic Programs while Programs Recursive Programs Recursive Programs with Parameters Object-Oriented Programs Part III: Parallel Programs Disjoint Parallel Programs Parallel Programs with Shared Variables Parallel Programs with Synchronization Part IV: Nondeterministic and Distributed Programs Nondeterministic Programs Distributed Programs Fairness