Distributed processing has a strong theoretical foundation, but many day-to-day practitioners make limited use of the advantages this theory can give them. The result includes unreliable systems with obscure and intermittent failures, that can cost time, money and in extreme cases, lives. Reliable construction of distributed and concurrent systems must incorporate theory in practice. This book provides a concise presentation of the theory closely linked to the practical realization of these concepts. This highly practical presentation contains all the elements needed for a complete development of a distributed system. The book includes examples from C, Java and Eiffel, and sample code is available online.