Well, what do you know about that! These forty years now, I’ve been speaking in prose without knowing it!
— Monsieur Jourdain in Moliére’s The Bourgeois Gentleman (new verse adaptation by Timothy Mooney)
A programming language is for thinking about programs, not for expressing programs you’ve already thought of. It should be a pencil, not a pen.
—Paul Graham
Programming languages should be designed not by piling feature on top of feature, but by removing the weaknesses and restrictions that make additional features appear necessary.
— Sperber et al. (2010)
WE have come to the end of our journey through the study of programming languages. Programming languages are the conduits through which we describe, affect, and experience computation. We set out in this course of study to establish an understanding of programming language concepts. We did this in five important ways:
We explored the methods of both defining the syntax of programming languages and implementing the syntactic part of a language (Chapters 2–4).
We learned functional programming, which is different from the imperative and object-oriented programming with which readers may have been more familiar (Chapters 5–6 and 8).
We studied type systems (Chapter 7) and data abstraction techniques (Chapter 9).
We built interpreters for languages to operationalize language semantics for a variety of concepts (Chapters 10–12).
We encountered and experienced these concepts through other styles of programming, particularly programming with continuations (Chapter 13) and logic/declarative programming (Chapter 14) and discovered that despite differences in semantics all languages support a set of core concepts.
This process has taught us how to use, compare, and build programming languages. It has also made us better programmers and well-rounded computer scientists.
3.143.255.36