With colleagues from the Chair of Software Engineering, I had the great pleasure of organising the recent symposium in honour of Professor Niklaus Wirth’s 80th birthday. Likely you will have some familiarity with – if not his name – his many contributions to computer science, which this quote from the symposium website quite nicely summarises:
Niklaus Wirth was a Professor of Computer Science at ETH Zürich, Switzerland, from 1968 to 1999. His principal areas of contribution were programming languages and methodology, software engineering, and design of personal workstations. He designed the programming languages Algol W, Pascal, Modula-2, and Oberon, was involved in the methodologies of structured programming and stepwise refinement, and designed and built the workstations Lilith and Ceres. He published several text books for courses on programming, algorithms and data structures, and logical design of digital circuits. He has received various prizes and honorary doctorates, including the Turing Award, the IEEE Computer Pioneer, and the Award for outstanding contributions to Computer Science Education.
The symposium was held as a full-day scientific event with an impressive array of invited speakers, opening with “father of the Internet” Vint Cerf, and closing with Niklaus Wirth himself. Many of the speakers in-between were former PhD students of Wirth, but even the ones that weren’t had clearly been influenced by him throughout their careers; whether by his overarching stride for simplicity and clarity, or by the scientific insights that his papers so eloquently conveyed.
Of the latter, Carroll Morgan gave a wonderful talk that traced the influence of Wirth’s 1971 paper, Program Development by Stepwise Refinement. This paper put into words a principle that today would seem like common sense – that programs can be constructed by repeatedly refining tasks into subtasks that gradually approach executable instructions of the language. This insight subsequently inspired a rich mathematical exploration; a journey over four decades that Morgan’s presentation then illustrated for us. He concluded with some principles of his own behind his experimental undergraduate course, (In-)formal methods: The lost art: that students should be positioned to want to hear about the conceptual tools (and ways of thinking) of formal refinement. That they should be subjected to the pain of programming – exercises with which they will struggle and whose solutions will not satisfy them. To paraphrase: create a hole in their brains, then fill it with the conceptual tools that do the same job but with the elegance and satisfaction that the first attempts missed – only then will these tools find appreciation.
Simplicity, elegance, and clarity in language design – as promoted by Wirth – formed perhaps the most recurring theme of the day, with several of the speakers elaborating on how it guided their own work; from Clemens Szyperski’s at Microsoft on designing query languages for non-developers, to Hans Eberle’s at Oracle on designing minimalistic network switches and processors. The latter of these two presentations included a quote – due to Antoine de Saint-Exupéry – that seemed to really capture this aspect of the event:
“You know you’ve achieved perfection in design, not when you have nothing more to add, but when you have nothing more to take away.”
Bertrand Meyer too addressed the theme of simplicity in language design, but advocated instead a somewhat contrasting view: that good languages are the ones built around and consistent to a productive central metaphor; that languages should evolve in the direction of “less surprise”. He illustrated his principle through (of course!) the object-oriented language Eiffel – with more than a few little entertaining digs at the likes of C++.
The final session of the symposium concluded with a presentation from Wirth himself, who elaborated on his recent work to revive and revise Project Oberon, his 1992 book that described the entirety of the Oberon language and operating system. These recent efforts included the designing of his own processor, the construction of a new compiler and linker, and the subsequent rewriting of much of his book; this revival offering an opportunity for engineering education (an up-to-date description of an entire operating system, all the way down to the processor). Wirth’s final slide – included below – summarised the lessons of his long career in computer science, and was followed by a very warm standing ovation.
With this short post I have only attempted to convey the general spirit of this special event; there were very many more “Lessons of Wirth” (yes, there’s a terrible pun here if you know of the call-by-name/value anecdote) to take away from the presentations – both from those that I mentioned and those that I didn’t. Should you happen to have a few spare moments, then I would highly recommend exploring the materials we have just put online: video recordings (of all of the talks), as well as some slides (for a few).