The Paradigms of Programming by Robert Floyd is a 30 y.o. lecture. However, it is still surprisingly relevant today. It contains right vision on programming teaching and predicts such modern things like DSL. Worth to read for sure.
It is a brilliant concentration of deep thoughts and a clear vision of the future.
The state of the art of computer programming was recently referred to by Robert Balzer in these words: “It is well known that software is in a depressed state. It is unreliable, delivered late, unresponsive to change, inefficient, and expensive. Furthermore, since it is currently labor intensive, the situation will further deteriorate as demand increases and labor costs rise.”
Again from Kuhn:
The older schools gradually disappear. In part their disappearance is
caused by their members’ conversion to the new paradigm. But there are
always some men who cling to one or another of the older views, and they
are simply read out of the profession, which thereafter ignores their work.
In computing, there is no mechanism for reading such men out of the profession. I
suspect they mainly become managers of software development
If the advancement of the general art of programming requires the continuing invention and elaboration of paradigms, advancement of the art of the individual programmer requires that he expand his repertory of paradigms.
A paradigm at an even higher level of abstraction than the structured programming
paradigm is the construction of a hierarchy of languages, where programs in the highest level language operate on the most abstract objects, and are translated into programs on the next lower level language. Examples include the numerous formula-manipulation languages which have been constructed on top of Lisp, Fortran, and other languages. Most of our lower level languages fail to fully support such superstructures.
I believe that the continued advance of programming as a craft requires development and dissemination of languages which support the major paradigms of their user’s communities.
If I ask another professor what he teaches in the introductory programming course, whether he answers proudly “Pascal” or diffidently “FORTRAN,” I know that he is teaching a grammar, a set of semantic rules, and some finished algorithms, leaving the students to discover, on their own, some process of design.