The course is entitled Advanced Programming Languages, and we will cover all the topics in the syllabus, and here is a sketch of how they fit together.
We will study the fundamental concepts that define the design space for programming languages. We look at the trade-offs between properties of languages such as level of abstraction and time to produce code. For example, you can write a program in binary, or you can write it in a high-level language like Lisp which allows you quickly to generate reams of binary code (and often with fewer errors than if you wrote them by hand).
We will present the current theories that attempt to classify the different kinds of programming languages and to explain the evolution of programming languages up to now, that is, why some succeeded and others failed. We will try to match our theories to the design space to explain what's going on.
This year we will also cover some object-oriented programming, which doesn't fit the theoretical classifications yet.