The purpose of this course is to equip students with advanced knowledge and skills in the design, implementation, and analysis of distributed systems. The course introduces the fundamental principles, architectures, and algorithms that enable multiple autonomous computers to cooperate as a single system. Emphasis is placed on concurrency, communication, coordination, fault tolerance, consistency, and scalability, preparing students to design robust distributed applications used in modern cloud, networked, and large-scale computing environments.