This course gives a broad introduction to programming concepts, with a special accent given to concurrent programming.  The course covers higher-order programming, symbolic programming, declarative (deterministic) concurrency, lazy evaluation, message-passing concurrency, multi-agent systems, state, active objects, and shared-state concurrency including locks, monitors, and transactions.

The course is taught in the third year of the bachelor of applied science program.  The prerequisite is a mastery of programming and algorithmics in a high-level programming language.  The course textbook is "Concepts, Techniques, and Models of Programming Languages", by Peter Van Roy and Seif Haridi, MIT Press, 2004.  The textbook is mandatory; it can be bought at the SICI or lent from the INGI library.

During the course we will cover the following sections of the course textbook:

  • Sections 2.1-2.6: Declarative model and kernel language
  • Sections 3.2-3.4: Declarative programming
  • Sections 4.1-4.6, 4.8: Declarative concurrency
  • Sections 5.1-5.6: Message-passing concurrency and multi-agent systems
  • Sections 6.1-6.3: State
  • Sections 7.2, 7.7, 7.8: Classes and active objects
  • Sections 8.1-8.6: Shared-state concurrency (locks, monitors, transactions)

The course will be evaluated as follows:

  • There will be a mid-term exam near the middle of the semester worth 5 points.
  • There will be a programming project in the final third of the semester (week 12).
  • The final written exam will have three parts: (1) main part worth 10 points, (2) part corresponding to the mid-term (do only if you want to improve the mid-term), (3) the project points (the project cannot be redone).

The exam is both theoretical and practical: understanding of theoretical concepts and ability to apply them in real programs.