(Some writings on) some crucial writings in computing

Here’s a series of blog posts by Scott Rosenberg, each introducing and discussing one important historical paper on software or computers. Useful as pointers to the papers, at least! Commonly enough, the papers haven’t been read or understood by people who’ve heard of the titles, and contain rather more than the title implies - as a good paper should!

There are comments too, although I haven’t yet read them. I see @cjs is one of the commentators.

Here’s a selection which caught my eye:

Code Reads #1: Frederick Brooks’ The Mythical Man-Month

Code Reads #2: Dijkstra’s “Go To Statement Considered Harmful” (a paper retitled by Wirth, apparently)

Code Reads #3: Edsger Dijkstra’s “The Humble Programmer”

Code Reads #4: Dijkstra’s “Notes on Structured Programming”

Code Reads #5: Knuth’s “Structured Programming with go to Statements”

Code Reads #7: Parnas’s “Star Wars” paper

Code Reads #9: John Backus, “Can Programming Be Liberated…?”

Code Reads #10: Guy Steele, “Growing a Language”

I think I landed on this series because I’d very recently had another look at Steele’s 1977 paper Lambda: The Ultimate GOTO, a paper which has a more complicated title than I remembered (Debunking the ‘Expensive Procedure Call’ Myth, or, Procedure Call Implementations Considered Harmful, or, Lambda: The Ultimate GOTO) and which tells us that structured programming was still controversial, and even argued against, as late as the latter half of the seventies, and - surely related - in some cases a simple procedure call could push hundreds of bytes onto the stack and cost nearly two hundred microseconds. So, our judgement can be biased by bad experience. All the more reason to try to learn from others, and from history.


I consider several of these (The Mythical Man-Month paramount) must-read for modern programmers, however long the original writings may be in the tooth. They are joined by nearer contemporaries such as Programming Pearls as well as more modern comers like The Practice of Programming and The Pragmatic Programmer.

1 Like

Peter Wegner tried to get people to actually read Alan Turing’s 1936 paper in order to debunk the myth that modern computers are Turing-equivalent. That is taught to students as the key concept in computer science theory. He was completely unsuccessful and people still prefer to read about the paper instead of actually reading it.

The key part they miss is the first definition in section 2:

Automatic machines.

If at each stage the motion of a machine (in the sense of § 1) is completely
determined by the configuration, we shall call the machine an “auto-matic
machine” (or a-machine).

For some purposes we might use machines (choice machines or
c-machines) whose motion is only partially determined by the configuration
(hence the use of the word “possible” in §1). When such a machine
reaches one of these ambiguous configurations, it cannot go on until some
arbitrary choice has been made by an external operator. This would be the
case if we were using machines to deal with axiomatic systems. In this
paper I deal only with automatic machines, and will therefore often omit
the prefix a-.

Early batch computers, with their paper or magnetic tape inputs and outputs, were indeed equivalent to Turing Machines (the a-machines studied in the paper). Adding interactivity converts them to c-machines which can do different things. No Turing Machine can drive a car, for example. Though a TM can simulate a whole world and drive a simulated car in that world. A very subtle, but important difference. Which is clearly stated in the original paper.

1 Like

Another one, one of my personal favorites, would be “The Soul of a New Machine” by Tracy Kidder (1981). One of the takeaways is, “What is a product?”. Essentially a tar pit for skilled man power. Meaning, when you launch a product, most of the original team will be bound to this for several years, maintaining the product, delivering all the add-ons, interfaces and software promised along with the initial announcement. Adding another product or product cycle essentially means multiplying the man power bound to your line-up and fast growth (somewhat inevitable with the fast iterations in computing) becomes a life threatening challenge for your company. – Which is also the short version of the story of Data General.
(The modern solution to this in software is, of course, forced updates to a single, evergreen version. Which should in theory allow you to iterate without growth.)


The Computer History Museum has just released a video of Guy Steele’s “Growing a Language” talk. It has been previously available on Youtube in other channels but in this version they replaced the hand drawn slides with computer generated ones. A bit like the changed special effects in the Blue Ray of the Star Trek original series.

1 Like

Missing from the above list is perhaps my favourite paper of all time, John McCarthy’s “Recursive Functions of Symbolic Expressions and Their Computation by Machine, Part I”. Even now it’s a thing of beauty, introducing a few once-radical (but now commonplace) ideas and from that building an incredibly simple yet extremely powerful language for expressing programs. So much work since then (including the brouhaha over GOTOs) seems like pointless and time-wasting bumbling around in comparison.


How about NEW web page. The wayback machine
works on just HTMLs. Other stuff was often un searchable,

I’m not clear on what the issue is here. The page I linked has further links to HTML, DVI, PDF and Postscript versions of the paper, and checked both the HTML and PDF versions, which seem to work fine. (I recommend the PDF version; the HTML version is very slow and not as nicely formatted.)

It seems to working now. The wayback machine is not great
to search for things. I lot of stuff I liked vanished leaving the net just for mostly paid or login sites.

The way some papers are written, you can just tell that the writer is in full command of their subject and of their language. I do like the way some very general, even universal, tools came out of a very specific project requirement.

Well, personally I think it’s a fantastic resource since stuff there is much more likely to be there a few years from now than any random web page. That, in fact, is the very reason I gave an archive.org link for this; the original site for that has been giving “Page not found” since at least last year.