Programming concepts taken from the arts and humanities
- by Joey Adams
After reading Paul Graham's essay Hackers and Painters and Joel Spolsky's Advice for Computer Science College Students, I think I've finally gotten it through my thick skull that I should not be loath to work hard in academic courses that aren't "programming" or "computer science" courses. To quote the former:
I've found that the best sources of
ideas are not the other fields that
have the word "computer" in their
names, but the other fields inhabited
by makers. Painting has been a much
richer source of ideas than the theory
of computation.
— Paul Graham, "Hackers and Painters"
There are certainly other, much stronger reasons to work hard in the "boring" classes. However, it'd also be neat to know that these classes may someday inspire me in programming.
My question is: what are some specific examples where ideas from literature, art, humanities, philosophy, and other fields made their way into programming? In particular, ideas that weren't obviously applied the way they were meant to (like most math and domain-specific knowledge), but instead gave utterance or inspiration to a program's design and choice of names.
Good examples:
The term endian comes from Gulliver's Travels by Tom Swift (see here), where it refers to the trivial matter of which side people crack open their eggs.
The terms journal and transaction refer to nearly identical concepts in both filesystem design and double-entry bookkeeping (financial accounting). mkfs.ext2 even says:
Writing superblocks and filesystem accounting information: done
Off-topic:
Learning to write English well is important, as it enables a programmer to document and evangelize his/her software, as well as appear competent to other programmers online.
Trigonometry is used in 2D and 3D games to implement rotation and direction aspects.
Knowing finance will come in handy if you want to write an accounting package.
Knowing XYZ will come in handy if you want to write an XYZ package.
Arguably on-topic:
The Monad class in Haskell is based on a concept by the same name from category theory. Actually, Monads in Haskell are monads in the category of Haskell types and functions. Whatever that means...