Coding & Programming as Theory Building

I recently came across Peter Naur’s 1985 essay “Programming as Theory Building.” I am unsure how well his argument holds up nearly 30 years later in professional software development, but in computer science education, especially at a liberal arts college, it is an absolute revelation. In many ways, it perfectly captures why I detest the term "coding" and prefer “programming”. I wish I could find a hard-copy of Computing: A Human Activity.

As evidence, I quote the following excerpts with minimal commentary to celebrate its prescience. Please reflect on modern concerns such as coding bootcamps, code plagiarism, and stack-overflow scaffolding with Naur’s 1985 insight:

“Programming as Theory Building

…programmers form or achieve a certain kind of insight, a theory, of the matters at hand. This suggestion is in contrast to what appears to be a more common notion, that programming should be regarded as a production of a program and certain other texts…

Programming and the Programmers’ Knowledge

I shall use the word programming to denote the whole activity of design and implementation of programmed solutions. What I am concerned with is the activity of matching some significant part and aspect of an activity in the real world to the formal symbol manipulation that can be done by a program running on a computer

The Theory To Be Built By The Programer

…what has to be built by the programmer is a theory of how certain affairs of the world will be handled by, or supported by, a computer program. On the Theory Building View of programming the theory built by the programmers has primacy over such other products as program texts, user documentation, and additional documentation such as specifications…

… the programmer’s knowledge transcends that given in documentation in at least three essential areas:

  1. The programmer having the theory of the program can explain how the solution relates to the affairs of the world that it helps to handle…
  2. The programmer having the theory of the program can explain why each part of the program is what it is, in other words is able to support the actual program text with a justification of some sort…
  3. The programmer having the theory of the program is able to respond constructively to any demand for a modification of the program so as to support the affairs of the world in a new manner…

…Also the very use of the program itself will inspire ideas for further useful services that the program ought to provide. Hence the need for ways to handle modifications.” [I often inform students: as soon as your program works, it’s time to move on. CS students are designing & debugging 99% of the time!]

Excited to employ these ideas in assessing my intro & data structures courses this term.