Some computer scientists and software engineers write about the history of their fields. Others analyze and document the philosophy of their own discipline. In this latter regard, I am happy to announce the publication of Edward A. Lee's book on the philosophy of engineering:
One of the questions that keeps me awake (during the day) is the following one:
What did a “computer program” mean to Actor X in 1973?
For example, both Christopher Strachey and Edsger Dijkstra viewed a “computer program” as a mathematical object, albeit of a very different kind . (A decade or more earlier, both men did not associate computer programs with mathematical objects pur sang). But what about large parts of the North American computer industry in 1973? How did actors in this field view a “computer program” in 1973?
Category mistakes and incomputability claims seem to go hand in hand. I have given one modern example in connection with programming languages and Michael Hicks and another one directly concerning the diagonal argument. In the present blog post I shall give one more example, based on an excerpt from my rejected POPL paper entitled: `Category Mistakes in Computer Science at Large.' Specifically, I shall zoom in on the “code improvement problem,” as discussed by Albert R. Meyer and Dennis M.
A recurring theme in my blog posts is the appropriation of the term “computer program” by Dijkstra and other researchers. The “computer program” concept has acquired at least four different meanings during the course of history. It can refer to:
There is an obvious distinction to be made between computers (which include laptops and iPads) on the one hand and mathematical models on the other hand. Strictly speaking, it is wrong to say that “a computer is a finite state machine.” That's like speaking about a mathematical model as if it coincides with reality. Unfortunately, it is unusual to make these kinds of observations explicit in computer science, as I am doing now and as I have done in my paper entitled `Category Mistakes in Computer Science at Large.'
The topic of `Category Mistakes,' which I have discussed in my four previous blog posts is not limited to digital systems. Engineers in all areas use models and they, too, can potentially fall into the trap of mistaking the model for reality.
Before really discussing category mistakes in computer science in follow-up posts, I will first continue testing my aforementioned categories on the writings of people I admire the most. I shall take a 2014 blog post, written by Michael Hicks in connection with the Heartbleed bug. (His post was written on July 1st, 2014 and I accessed it on September 19th, 2016.)
Before discussing several "category mistakes" in computer science in follow-up posts, it is much preferred to first introduce a few categorical distinctions and definitions and to subsequently test these concepts on the writings of computer science's greatests (i.e., the writings of the people I and many others admire the most).
In 2006 I defended my Ph.D. thesis at KU Leuven. Dr. X from abroad was in my defense committee. He had taken the liberty a few days earlier to share with me some of the "fundamental limitations" he had found with regard to transformational systems, such as the system I had designed, implemented, and documented for my Ph.D. defense. (A comprehensive overview of my system later appeared in Science of Computer Programming ). Dr. X had already published his theoretical insights and he wanted me to incorporate his findings into my Ph.D. dissertation.