

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

Alan Perlis&#x27;s Epigrams on Programming[1] are often repeated but less often analyzed.<p>Maybe he was saying that humans tend towards emotions and imprecise thoughts, and we must squash that tendency to become good programmers.<p>On the other hand, I think (although I don&#x27;t have references to back it up) many people believe that humans&#x27; capacity for &quot;algorithmic thought&quot; 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.<p>We could therefore read Perlis&#x27;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?<p>[1] http:&#x2F;&#x2F;www.cs.yale.edu&#x2F;homes&#x2F;perlis-alan&#x2F;quotes.html
======
YuriNiyazov
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.

~~~
blt
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.

~~~
YuriNiyazov
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.

------
brudgers
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](https://en.m.wikipedia.org/wiki/Double_entendre)

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

