Programming languages are the backbone for software development. Each language has its own different syntax and semantics, but there are many common concepts that can be studied and then illustrated through the languages. The module concentrates on issues of object orientation, including delegation, iteration and polymorphism. It surveys how languages provide the basic building blocks for data and control, as well as exception handling and concurrency. At the end of the module, students will be able to appreciate the rich history behind programming languages, leading to independent principles that evolve over time. They will be skilled at using a variety of programming languages, including new paradigms such as functional, logical and scripting, and will know how to learn a new language with ease. From this experience, they will be able to apply evaluation criteria for choosing an appropriate programming language in a given scenario.