- Graduate Level (Master) at the ULB (Université Libre de Bruxelles)
- Prof. Dr. Wolfgang De Meuter
Last change: 17 September 2012 (updated for new academic year)
The course starts out from scratch as if we were teaching computer science to 18 year olds, by teaching you the programming language Scheme. Scheme is a dialect of Lisp which is an old artificial intelligence language. The course is not really about Scheme. Nevertheless, a deep understanding of how Scheme works is essential for understanding the rest of the course. Mastering Scheme's concepts will give the student an extremely deep understanding of how programming languages work. And that is what this course is all about!
In the first part, we will explain Scheme's deep semantic concepts (evaluation, scoping, environment diagrams, symbolic data, sameness and change,…). As we go along we will study functional (higher order) programming, imperative programming, object-oriented programming, stream programming and constraint programming in Scheme. The goal is to show that Scheme's (very few) abstractions are universal abstractions that underly all these very different computational paradigms. The goal is to show you that Scheme is to sequential programming languages (C, Pascal, C++, Java, Visual Basic, …) what Latin is to roman languages (French, Spanish, Romanian, …).
In the second part, we will explain you the inner workings of programming languages by writing an interpreter for Scheme, in Scheme. This is known as meta-circularity. This will allow us to study all the deep semantic concepts from an implementational point of view. Having a metacircular interpreter for Scheme will allow us to discuss a number of variations of Scheme and experiment with these variations by modifying our interpreter. We will study an introduction to lambda calculus and explain how Scheme relates to this calculus.
This course will permanently change the way you think about programming and programming languages. And above all, it's big fun! The course is based on the famous “Structure and Interpretation of Computer Programs” (SICP) that has been used for more than 20 years as the introductory course in computer science at the Massachusetts Institute of Technology (MIT). Experience at the VUB since the early 90ies has shown that even experienced computer science students (year 3 or higher) had to radically change their view on computer science after having gone through this course.
Although SICP was meant as an introduction to computer science, this course will teach it at a fast pace. This version of the course assumes that students already know how to program in a mainstream imperative language such as C, C++, Java or C#, or, that the students are learning such a language in parallel at the master level (e.g. students that already have a master in some other subject).
In the first 2 weeks of the academic year 2012-2013, the course will be taught in room P.OF.2072, campus de la plaine ULB. The course is taught on Mondays from 16hrs till 18hrs. But this will change after a while since I have teaching duties at VUB in that time slot. This course is taught in English.
The course follows the SICP Book quite closely.
Here are the transparencies of the course:
- There are several implementations of Scheme. For didactic purposes, I recommend DrRacket .
- An R6RS-version of the stream procedures of SICP can be found here.
- The R6RS-version of the source code for the evaluators of chapters 5+6 can be downloaded here.
Students will be evaluated on two levels. An oral exam tests their understanding of the concepts. A programming assignment will test their technical skills. The programming project will be done with ARMpit Scheme