A programming language is the programmer's principle interface with the computer. More than just knowing how to program in a single language, programmers need to understand the different styles of programming promoted by different languages. In your professional life, you will be working with many different languages and styles at once. You will encounter many different languages over the course of your career. Understanding the variety of programming languages and the design tradeoffs between the different programming paradigms makes it much easier to master new languages quickly. Understanding the pragmatic aspects of programming languages also requires a basic knowledge of programming language translation and runtime features such as storage allocation.

This course will cover widely used parallel and distributed computing methods, focusing on datacenter-scale distributed software and methods such as Hadoop, MapReduce, Spark, and distributed graph algorithms. We'll study the types of algorithms which work well with these techniques, and have the opportunity to implement some of these algorithms.

This course is designed to give the student a practical experience in system administration. It covers a number of different topics and issues that faces system administrators in their daily activities.







