This module introduces the concepts that serve as a basis for hundreds of programming languages.
It aims to provide the students with a basic understanding and appreciation of the various
essential programming-languages constructs, programming paradigms, evaluation criteria and
some language implementation issues. The module covers concepts from imperative, object-oriented,
functional, logic, and constraint programming. These concepts are illustrated by examples
from a variety of successful languages such as C, Scala, Python, OCaml, Haskell, Prolog.
The module also introduces important langauge issues, such as type systems and