Distributed systems help programmers aggregate the resources of many networked computers to construct highly available and scalable services. The course covers general introductory concepts in the design and implementation of distributed systems, covering all the major branches. The main principles underlying distributed systems will be investigated: processes, communication, naming, synchronization, consistency, fault tolerance, and file sharing.

The course gives some hands-on experience as well as some theoretical background. Moreover, the course will go in deep of several technical issues in cloud systems, such as multithreading, socket programming, and Hadoop. Three instructor-led class time including discussions, lab work and problem sets.