This course is designed to cover the main concepts in concurrent, parallel, and distributed programming. The ultimate goal of the course is to provide a strong basis for future work in the area. The course concentrates both on paper-and-pencil type work and hands-on experience with parallel and distributed machines.