Course Unit Page

Academic Year 2018/2019

Learning outcomes

In recent years there is a renaissance of the development of programming language, motivated by the introduction of multicore processors and the need of finding simpler way to exploit them. Go, Scala, Erlang, Clojure, Rust are examples of languages that are interesting to the industrial world and that are rooted into both new and old programming paradigms. At the end of the course the student will know the main emerging programming paradigms, how to critically weight their weak and strong characteristics and she will have acquired new programming skills.

Course contents

The course introduces the student to several programming languages, highlighting the principles and characteristics that are the strong points or at least that are peculiar to the language (e.g. error management in Erlang, memory management in Rust, etc.).

We will also see recurrent problems in programming language designs, comparing the linguistic solutions available.

The list of topics will include at least:

- agent based programming vs object oriented programming vs functional programming

- homoiconic languages vs higienic macros vs meta-programming vs staged programming

- type inference vs type checking

- functional constructions: first class functions, algebraic data types, pattern matching, extensible records, polymorphic variants

- different flavors of polymorphisms: parametric polymorphism vs bounded polymorphism vs dynamic dispatching vs ad-hoc polymorphism via type classes

- monads and monad transformers


There is no main book.

Slides will be prepared by the teacher.

Manual and other on-line material will also be suggested in class.

Teaching methods

Frontal lessons where slides are presented or code is developed on-the-fly. Each student will be required to learn a couple of programming languages and, later, present them to the other students in discussion sessions or during talks.

Students could be assigned mini-projects to be done individually or in groups. The assignments are meant to highlight the main differences between the various programming paradigms and programming languages.

Assessment methods

Presentations to be given during the course; mini-projects; final oral exam.

Links to further information


Office hours

See the website of Claudio Sacerdoti Coen