Last Saturday I visited the “R|Evolution” exhibition at Silicon Valley’s Computer History Museum (more on that later). One reason why I went there was to see the “community wall” of plaques sponsored by small-time donors. I had sponsored one and my saying on it was:
In honor of Peter Naur: To program is to learn.
I’m sure Peter Naur is being honored by the CHM elsewhere and in a more appropriate style than my whimsical plaque, but I wanted to use this blog post to explain the plaque and the meaning of the saying on it.
Like every non-profit, the CHM is always looking for support and donations, and so they had called for financial support in late 2009 and promised a plaque on a community wall as a way of saying thanks for the support.
Community wall (of small-time donors) at the CHM, Feb 2011
I had made a donation and forgot about it, but the CHM came back asking for the text on the plaque. So I finally had to make something up. Assuming that the wall would be mostly about American computer scientists and above that Silicon-Valley-centric, I decided to try to honor Peter Naur, an early leading European Computer Scientist. His life’s work (excluding his recent work which I haven’t yet been able to read up on) is well summarized in the compendium book “Computing: A Human Activity.” I didn’t know how the plaque would look like, so I’m embarrassed to see that my name is printed there in bold while Peter Naur’s is just plain. (Funny how things like this repeat: The first edition of the German translation of the Design Patterns, which I did, had my name on the cover in larger letters than the Gang of Four.) Also, you had to be short like a tweet so the text is somewhat garbled. The version in my mind I provided above, the version on the plaque you can see below:
Plaque on community wall honoring Peter Naur
So what does it mean? Programs are intended to do something useful for their users. For this, people who program are trying to understand their users’ world, as it is and how it might be. The program (or model, I don’t make much of a distinction here) captures that understanding. The process of doing so is unrelenting: Your program runs or it doesn’t. (Usually it doesn’t.) So you are forced to deepen your understanding and improve your code. In a furious feedback loop, a programmer is exploring, understanding, and codifying the world she or he and their users are living in. It is a never ending loop, because we live in an open world. There will never be an end to such exploration: All code (or specifications for that matter) are buggy as well as underspecifications of what they are supposed to describe or do. All of this is to say:
To program is to learn (and understand the world).
I believe that Peter Naur’s work beautifully captures this, and I encourage everyone to read his summary book.