Partial courses

High-level notions of computations and programming language concepts , a graduate course given at the University of Linköping (Sweden) by Anders Haraldsson (Spring 2005).

, a graduate course given at the University of Linköping (Sweden) by Anders Haraldsson (Spring 2005). Constraint Programming , an undergraduate course given at the Universidad del Valle (Cali, Colombia) by Juan Francisco Díaz Frias (Spring 2004).

, an undergraduate course given at the Universidad del Valle (Cali, Colombia) by Juan Francisco Díaz Frias (Spring 2004). PC111 , a final-year optional course on constraint programming given at the Pontificia Universidad Javeriana (Cali, Colombia) by Camilo Rueda (Spring 2004).

, a final-year optional course on constraint programming given at the Pontificia Universidad Javeriana (Cali, Colombia) by Camilo Rueda (Spring 2004). CS5340 , Advanced Operating Systems and Distributed Computing, a graduate course given at the University of Texas at El Paso by Juris Reinfelds (Spring 2004).

, Advanced Operating Systems and Distributed Computing, a graduate course given at the University of Texas at El Paso by Juris Reinfelds (Spring 2004). CS5223 , an introduction to distributed systems, algorithms, and computing given at the National University of Singapore by Seif Haridi (Spring 2004).

, an introduction to distributed systems, algorithms, and computing given at the National University of Singapore by Seif Haridi (Spring 2004). 2G1915 , a fourth-year course on concurrent programming given at KTH by Vladimir Vlassov (Spring 2002).

, a fourth-year course on concurrent programming given at KTH by Vladimir Vlassov (Spring 2002). INGI2655 , a fourth-year introduction to the semantics of programming languages, given at the Université catholique de Louvain, Louvain-la-Neuve, Belgium, by Peter Van Roy (Spring 2002-3).

, a fourth-year introduction to the semantics of programming languages, given at the Université catholique de Louvain, Louvain-la-Neuve, Belgium, by Peter Van Roy (Spring 2002-3). SOFTENG 325 SC , a third-year course on software architecture given at the University of Auckland, New Zealand. The course consists of three parts; the first part uses the book. The first part is taught by John Hamer (Summer 2003).

, a third-year course on software architecture given at the University of Auckland, New Zealand. The course consists of three parts; the first part uses the book. The first part is taught by John Hamer (Summer 2003). Multi-Paradigm Programming in Oz for Natural Language Processing , given at the Graduate School of Language Technology, Gothenburg University, Sweden, by Torbjörn Lager and Denys Duchier (Spring 2003).

, given at the Graduate School of Language Technology, Gothenburg University, Sweden, by Torbjörn Lager and Denys Duchier (Spring 2003). EE590, a graduate course on distributed computing given at New Mexico State University, Las Cruces, by Juris Reinfelds (Fall 2001).

The concepts-based approach for teaching programming

Scientific foundation

The two approaches most similar to the kernel language approach are the foundational calculus and the virtual machine. We explain how the kernel language approach differs from these approaches. A foundational calculus, like the lambda-calculus or pi-calculus, reduces programming to a minimal number of primitive concepts. This is especially useful for the theoretical study of computation. A virtual machine defines a language in terms of an implementation on an idealized machine. This is especially useful for language implementors and compiler writers. The problem with both approaches is that any realistic program written in them will be cluttered with technical details about language mechanisms. The kernel language approach avoids this clutter by choosing concepts wisely. The kernel languages are designed for programmers.

How concepts lead to multiparadigm programming

General models covered include declarative programming (functional and logic), imperative programming (component-based and object-oriented), and concurrent programming (both synchronous and asynchronous, including dataflow, streams, lazy execution, message passing, and shared state). Specialized models covered include graphical user interface programming, distributed programming, and constraint programming. All models are fully implemented for practical programming and incorporate many of the latest research ideas.

The current trend in computer science education is to restrict the student to one or two models. The most extreme case is where a single rather complex model and language, namely object-oriented programming in Java, is used as a general-purpose approach with which all problems should be solved. This trend is driven by market forces and has no scientific basis. One goal of the book is to be a counterweight to this trend, to situate object-oriented programming in a more general context. In addition to giving the student a deep insight, this has immediate practical benefits. Many problems that are hard to solve in Java become simple when viewed in the proper computation model. For example, both concurrent programming and graphical user interface design are difficult in Java. The book shows how these two areas can be much simplified.

History

The Mozart Board

The authors