Skip to main content


Welcome to the Course!

This course gives an introduction to all major programming concepts, techniques, and paradigms in a unified framework. We cover the three main programming paradigms: functional, object-oriented, and declarative dataflow. We explain the four ways to do data abstraction and discuss the trade-offs between objects and abstract data types. We present declarative dataflow, the most useful paradigm for concurrent programming, and show how it avoids race conditions. We give a simple formal semantics for all concepts and illustrate them with practical code that runs on the accompanying open-source platform, the Mozart Programming System. This course is targeted toward people with a basic knowledge of programming. It will be most useful to beginning programming students, but the unconventional approach should be insightful even to seasoned professionals.

To learn more about the practical organization of the course, watch this video:


Basic knowledge of programming in at least one programming language. For the semantics, basic knowledge of mathematical concepts such as sets, lists, and functions.


Students are expected to spend roughly 2 to 4 hours a week watching the videos and responding to the problems and exercises, depending on the number of lessons that given each week (about 2 hours for each lesson, one or two lessons per week).  The programming exercises should not take too much time; we recommend that you think a little before using trial and error to find the right answer (an ounce of thought is worth a pound of brute force)!


All required readings are available within the courseware, courtesy of The MIT Press. A print version of the course textbook, Concepts, Techniques, and Models of Computer Programming, is also available for purchase. The MIT Press is offering enrolled students a special 30% discount on books ordered directly through the publisher’s website. To take advantage of this offer, please use promotion code CTMCP30 at The MIT Press site.

The required readings in the textbook cover in great detail all the material up to lesson 6.  The slides cover the whole course, but in less detail.  Together, the textbook and the slides give all the information needed to succeed in the course.


The course will be graded in three parts: the homeworks, the midterm, and the final.  These are weighted 1 - 1 - 2 (homeworks and midterm are each one quarter of the grade, the final is half of the grade).  To pass the course successfully you need a grade of 50% (B) or 85% (A).

Course Schedule

Week Date Lessons and recommended readings
Due date
1 February 17 1. Introduction (chapter 1, section 2.2) March 25
2 February 24

2. Recursion/invariants (section 1.3, sections 3.2-3.3)

3. Lists/patterns (sections 1.4-1.5, sections 3.4.1-3.4.3)

April 1
3 March 3

4. Higher-order/records (section 1.9, section 2.3, section 3.6)

5. Trees (section 3.4.6)

April 8
4 March 10 Midterm exam April 14
5 March 17 6. Semantics (section 1.6, section 2.1, section 2.4) April 21
6 March 24

7. State/abstraction (section 1.12, section 3.7)

8. Object-oriented programming (sections 1.13-1.14)

April 28
7 March 31

9. Java/exceptions (section 2.7 for exceptions)

10. Dataflow introduction (sections 1.10-1.11, section 1.15)

May 5
8 April 7 11. Dataflow techniques May 12
9 April 14

12. Multiagent(Bonus)

13. Paradigms redux

May 12
10 April 21 Final exam (including multiagent bonus section)  May 12 : Deadline for final exam and end of course