Programming Languages: Application and Interpretation
This book is the fruit of a vision for teaching programming languages by integrating the ‘two cultures’ that have evolved in its pedagogy. One culture is based on interpreters, while the other emphasizes a survey of languages. Each approach has significant advantages but also huge drawbacks. The interpreter method writes programs to learn concepts, and has its heart the fundamental belief that by teaching the computer to execute a concept we more thoroughly learn it ourselves.
While this reasoning is internally consistent, it fails to recognize that understanding definitions does not imply we understand consequences of those definitions. For instance, the difference between strict and lazy evaluation, or between static and dynamic scope, is only a few lines of interpreter code, but the consequences of these choices is enormous. The survey of languages school is better suited to understand these consequences.
The text therefore melds these two approaches. Concretely, students program with a new set of features first, then try to distill those principles into an actual interpreter. This has the following benefits:
- By seeing the feature in the context of a real language, students can build something interesting with it first, so they understand that it isn’t an entirely theoretical construct, and will actually care to build an interpreter for it. (Relatively few students are excited in interpreters for their own sake, and we have an obligation to appeal to the remainder too.)
- Students get at least fleeting exposure to multiple languages, which is an important educational attribute that is being crushed by the wide adoption of industrially fashionable languages. (Better still, by experimenting widely, they may come to appreciate that industrial fashions are just that, not the last word in technological progress.)
- Because they have already programmed with the feature, the explanations and discussions are much more interesting than when all students have seen is an abstract model.
- By first building a mental model for the feature through experience, students have a much better chance of actually discovering how the interpreter is supposed to work.