Saturday, December 23, 2023

Spelunking CACM, Vol. 14 (1971)

 Let's start with a real gem from Niklaus Wirth, perhaps the greatest programming language designer of all time, who will turn ninety next year. In Program development by stepwise refinement, he lays out how to refine programs that perform combinatoric (although he never uses that word) searches, using the example of the 8 queens problem (a problem he attributes to Gauss in 1850). Begin with the general idea of iterating through all possible solutions, then progressively refine the generation of candidates so that the computer (whether electronic or human) doesn't have to do the full calculation on all candidates. He discusses backtracking. The term itself isn't referenced, but I doubt it was original to this paper. Wirth advocates deferring the actual data structure design until the development of the alogirhtm starts to make it clear what characteristics the data structure should have.

In the acknowledgments, Wirth mentions extensive discussions with Hoare and Dijkstra. Oh, to have been a fly on that wall -- but even with my current brain power, let alone that of a fly, I doubt I could even follow the depth of the discussions!

I couldn't figure out how to get the high-res version of the cover (which I presume still exists), but this article was the cover for the magazine in April 1971.


Michael J. Flynn proposed his taxonomy of parallelism the year I was born. In 1971, Allen B. Tucker and Flynn had an article in CACM that provides a clear description of microcoding in processor design, though tracing back references leads back to at least 1964 when Amdahl himself had a paper on the topic, so I don't think Flynn gets credit for the idea.

In an early premonition of Mechanical Turk, Krolak, Felts and Marble proposed A man-machine approach toward solving the traveling salesman problem. They don't make any mention of paying the human to contribute to the solution, though!

I am going to have to go back and look at Amarel's article on a CS curriculum. Off the top of my head, the view of the field itself is too simplistic, but the figure on applications looks pretty good. Maybe it's just very broad?

Also gotta say, it's impressive that there were multiple competing visions for how to get computers to do integrals for you, all the way back in 1971.

Hope you all have had a good 2023, and have a better 2024. I may try to do one or two more of these before the end of the year, but if don't, see you on the other side...

No comments: