Ask HN: What did Alan Perlis mean by “Programming is an unnatural act”?

5 points by blt ↗ HN
Alan Perlis's Epigrams on Programming[1] are often repeated but less often analyzed.

Maybe he was saying that humans tend towards emotions and imprecise thoughts, and we must squash that tendency to become good programmers.

On the other hand, I think (although I don't have references to back it up) many people believe that humans' capacity for "algorithmic thought" is a key separation from the rest of the animal kingdom. Under that belief system, programming must be a natural act because it comes from of one of the very traits that makes us human.

We could therefore read Perlis's epigram as a rejection of that belief. But it seems odd to make a sweeping, controversial(?) statement about human nature in such a roundabout way. Is there another interpretation?

[1] http://www.cs.yale.edu/homes/perlis-alan/quotes.html

4 comments

[ 3.0 ms ] story [ 23.6 ms ] thread
In every day life, average (non-programmer, non-scientist, non-mathematician) humans do many complicated things naturally. Walking, or driving a car, or ordering food at a restaurant are immensely complicated activities. Huge portions of the human population are not explicitly trained in symbol manipulation or algorithmic thought, and yet they perform those activities with fairly standard education. If you were to ask most of those people to write instructions (at the level that it would be executable by a von-Neumann machine) for performing those activities, you wouldn't get satisfactory results, because humans don't naturally break high-level processes down into their constituent components; only those humans that are explicitly trained to view common processes in terms of their constituent components can do so. This process of breaking processes down into components is a fundamental aspect of programming; it only becomes easy with significant training, which makes it unnatural.
What about higher-level languages that significantly abstract away the Von Neumann machine? Based on the other Epigrams, I don't think Perlis's definition of "Programming" was restricted to assembly or even low-level compiled languages.
I mentioned von Neumann architecture in my original description so as to make the distinction as clear as possible between computer architectures and human architectures, but the analogy works just as well with what you call high-level languages (presumably something like Lisp or Haskell?). You really have to be precise about why you think high-level languages make a difference. I claim that the distance between high-level programming languages and human languages is quite great; humans find it natural to express and understand instructions in human languages, but to express them in high-level programming languages still requires significant training.

Yea, we've attempted to create programming languages that are really close to human languages, but for whatever reason, those never became successful.

Epigram 119, Programming is an unatural act, is undoubtedly a double entendre [1] playing on the common lay use of 'unnatural acts' as a term for sexual practices which might be deemed a 'crime against nature' [2] by a person of less libertine views. A rough equivalent: Programming can get a programmer off more satisfactorily than the missionary position.

As an aside, the list at Yale does not contain Epigrams 121~130.

Note: Footnotes are to help non-native English speakers

[1] https://en.m.wikipedia.org/wiki/Double_entendre

[2] https://en.m.wikipedia.org/wiki/Unnatural_act