I often use a thesaurus while coding, and I mentioned this fact to a non-programmer friend today. He was shocked, and he said that he thought that programming was mathematical, not lexical. But it’s not so easy to separate out—naming is one of the most important parts of programming (and math!), because it’s how you reduce complexity down to something that you can understand, explain, and maneuver.

The conversation reminded me of a post I read from Jane Street’s blog a while back:

Newell once told me that this was just names, and then he explained his understanding of names: "They provide distal access." That is, a name is a local piece of data that stands for some other piece of data, which is presumably large and remote. You can now use that small, convenient, local datum instead of the large, remote thing for which it stands. The key act you perform with a name (that is, a symbol) is ship it to that remote location, and get back the chunk of data it named. Newell said the career-making, fundamental "aha" experience of his entire life was realising that computers were not, as was typically held in the 1960’s, "number crunchers." They were symbol processors—something much more general. They processed names.


To invoke my opening quotation from the novel True Names, cultures have always attached a kind of magic to names, reflecting an intuitive understanding that names convey power and control; the reason for this is reflected in Newell’s summary of names as being a means of access. According to the book of Genesis, for example, the first act of Man was the assignment of names,3 something which symbolically (there’s that word, again) represents a transfer of control over the material world, as it is handed from its divine source over to human dominion.

You can find my cached, annotated copy of the post here and the original article at Jane Street’s blog.