'Good Ideas - Revisited', Niklaus Wirth
We present an entire potpourri of ideas from the past decades of Computer Science and Computer Technology. The quick rise of the subject was largely the result of such great ideas. Thus we became used to expect more of them to appear with ever increasing frequency and brilliance. Expectations were cultivated with great vigor, and new ideas were promised that would even revolutionize the technology and with it the world. But not all promises and claims must be taken literally in these times of flashy advertisement. On hand of a number of examples, we would like to show, that sometimes caution is wiser than exuberance.
Widely acclaimed at their time, many grand ideas have lost their splendor and brilliance under today's critical scrutiny. We try to find reasons. Some of these ideas are almost forgotten. But we believe that they are worth recalling, not the least because one must try to learn from the past, be it for the sake of progress, intellectual stimulation, or fun.
The ideas discussed here stem from various branches of computing. Some concern the subject of Computer Architecture, where new ideas flourished in the years between 1960 and 1980. In recent years, however and alas, the urge for innovation has given way to the acceptance of a single standard, in spite of its - to say the least - mediocrity. Here, we discuss the early invention of the stack for evaluating expressions, critically analyze solutions for implementing subroutine calls, relativize the usefulness of virtual addressing, and - on a more general level - investigate the once popular drive for complex instruction sets, which has survived although it is widely known to be a bad idea.
Programming Languages turn out to be a rich source of ideas that were praised as great, but which on closer inspection - or rather during practical use - turned out to be less than spectacular. Once again, the times of the flourishing ideas, of the avant garde, were the years 1960 - 80. We notice a similar trend as in computer architecture towards a standard, towards industrial products, that once again leave very much to be desired. Here we may find a surprising number of flaws, if not even blunders. First come some ugly aberrations in the realm of notation and syntax. They are followed by examples borrowed from Algol 60, the language that created and stimulated a whole field of research, but never found wide acceptance outside academic circles. We pick the topics of the for statements, the concept of own variables, and the intriguing name parameter for procedures. These topics were among those which kept discussions among language designers lively and sometimes emotional for many years.
The next example of a "good idea" stems from the category of Implementation Techniques. It is the so-called display for speeding up the addressing of variables in block-structured languages. Here, the reason why the clever idea turned out to be less than successful was the technological change in computer architecture. This is a phenomenon often encountered with "optimization" measures. It is a typical example, where ingenious techniques of software were devised on order to overcome the inadequacies of the available hardware.
The last category of problem cases are Programming Paradigms. Almost every time the discipline of programming was believed to be in insurmountable difficulties, promptly a new paradigm appeared on the stage, which was widely acclaimed to be the panacea for all illnesses and grievances. In hindsight we acknowledge that every presented paradigm has some appeal and some qualities, but we must also confess that none has held the hopes high for a long time. We briefly use our critical looking glass for inspecting Functional, Logic, and Object-oriented Programming.
In the end, we cannot avoid asking ourselves the question: Which are today's Great Ideas? Will they also turn out rather mediocre in the future?