Approach

How one should approach an honours course, is less obvious. One can broaden the already broad survey done in the undergraduate course and/or deepen the study of particular topics, but this inevitably involves considerable duplication of the undergraduate course.

Another problem is to find a suitable textbook: The typical programming language textbook (for example[1, 2, 6, 9, 12, 13]) amounts to a broad and shallow survey of languages and paradigms and does not lend itself to being split up into an undergraduate and a graduate course. One can choose a thin book such as the one by Bal and Grune[1] for the undergraduate course and a thick(er) one such as the one by Sethi[9] for the graduate course, but this makes it very difficult to avoid duplication.

An alternative to the concepts+paradigms+survey type of course is to model the honours course after the typical American graduate PL course, which deals with the formal semantics of programming languages. If you choose to do this, you can use the brilliant textbook by Bertrand Meyer[7] or one of the many others (for example [3, 4, 10]). However, this approach may swamp the students with formalism to such an extent that the goal of providing them with a thorough understanding of real programming languages is not achieved. I am equally sceptical that a comprehensive study of the Functional and/or Logical Programming paradigms will achieve the above goal.

I am therefore about to embark on a course which combines the traditional, but perhaps less vital, compiler course with the programming language course, resulting in a course where the students study a number of programming languages in depth by actually implementing them. This not only solves the duplication problem, but helps to find a space for the course in the very packed honours curriculum.

To make this approach feasible, the traditional study of scanners, parsers and code-generation techniques must be sacrificed in favour of an emphasis on the semantics of the programming languages. In other words, the students must be given a system that generates language implementations from the formal descriptions of their semantics.

Students can then study a programming language, formalize its semantics and generate an implementation which they have to test. In the process they should gain a thorough understanding of the power and limitations of the language and the impact of its design trade-offs.


next up previous

Prof Herman Venter
Wed Apr 17 16:00:03 GMT 1996