Roots of 'Program' Revisited
cacm.acm.org
cacm.acm.org
So, if "program" (πρόγραμμα) means "pre-written", like a royal edict that is posted publicly before it is to be obeyed, should we rename the field of "programming by demonstration" (for example, editor keyboard macros, spreadsheet formulas, or GeoGebra constructions) to "postgramming" or "epigramming"? (I suppose "epigram" already has a conflicting meaning.)
Because, in programming by example, the "program" is a log of the sequence of operations that were carried out, and perhaps why, so that we can repeat them, rather than being a prospective future plan for a sequence of operations to carry out in the future.
I guess what I was thinking was that when you're doing that, you're largely "postgramming". Some of the recent versions of Subtext that cater to test-first development are more "programming" in the etymological sense, but the "program" in that case is what we'd normally call a test suite—although other recent versions of Subtext turn the execution trace, complete with recorded results, into the test suite, which is more a question of "postgramming".
The abstractions that underlie computers, computer programs, and computer science were discovered by analyzing and playing with concrete objects that had a historical lineage, but the abstraction exists independent of the objects. It is the abstraction that's important, not the objects.
When we talk about the first computer and the first program we are talking about the first physical realization of an abstract idea.
It's not that we should study that instead of the concept of program, but that it adds a new thing to study in addition.
Is that actually important? Only in the sense that history is important at all. They trot out the "doomed to repeat it" cliché, which is true enough if a little scattershot. I mean, sure, all history is good history to study and we never really know what's going to inspire somebody to think in a particular helpful way.
So rather than try to justify it as "No, seriously, this is important", I'd say that it's better as "Hey, here's this cool thing we just realized." Which is probably more like finding an easter egg than anything of really cosmic importance.
When we use the word 'program' in computing, we pretty much always mean 'a program for a (previously or implicitly defined) computational model', I don't see in what sense this is comparable to 'program clocks', which are basically timers/alarm clocks, if I understand that paragraph correctly.
Similarly, when we say 'code' we mean 'textual representation of the concrete syntax', clearly distinct from 'code' as in 'morse code', which we would also call 'encoding'.
> This strengthens a computing discipline where one often cares more about formalism than about actual programming
This is (perhaps) a (somewhat) fair criticism of (parts of) computer science as an academic field of study, but I don't get how the pieces fit toghether.
It seems that a "program clock" was a clock that you could, more or less in the modern sense, program; you could put a plan into it, and then it would carry out the plan. Like those electromechanical outlet timers that you can set to turn on your floor lamps at certain times of day when you're not home. The "program" for those is the little slidy things around the dial that define when to turn the light on or off.
In the same way, a computer program is a plan that you can put into a computer, thus programming the computer to carry out the program. That concept isn't just comparable to that of the program you put into a program clock; it's identical, though there are some things the program clock can't do.
You're thinking in modern terms. When you had to program in octal, "encoding" was exactly what you were doing. Assemblers and, later, compilers made that less true, but originally that was in fact the meaning.
When Henry Maudslay designed, built and set up his 16 machines to make pulleys for the Royal Navy, he was also doing programming.
I think the main point of the article is that we need to greatly broaden the idea of what programming means. It doesn't have to involve a program counter iterating through a list of instructions.
Spreadsheets don't have a program counter (though of course, we use them in the process of making them work). Field Programmable Gate Arrays also don't have a program counter, and they do everything in parallel, yet they are programmed.
Programming is the process of breaking a problem down to a series of steps that are then mechanized.