Names are wrong, tacit/point-free is right

NOTE HXA7241 2012-07-08T09:07Z

In software, are names not a curiosity? They are like a mini embedded comment – nothing else is like that. But furthermore they seem structurally poor too. ‘Tacit-programming’ is the remedy.

Names are taken for granted in programming. All normal, common languages have them (even the great and noble Lisp is very ordinary here). And indeed, how could we not have names? – in the land of mainstream languages it might seem unimaginable.

Yet names seem significantly wrong. They seem like weak forms that degrade software.

What are names that makes them bad? Two features:

  • logical structurelessness – like mere points in space
  • ill-defined connotation – like informal human speech

What well-defined form they have is too simple, and what is substantial is ill-defined. Their pointness induces a structureless, arbitrary interconnection of parts. And their wordness distracts thinking about actual structure with vague comment.

The second weakness warrants a closer look. In a sense a name has a globalness: its exiguous logical structure means it can connect anything to anything else – it is in itself not limited by anything. That puts no bound on complexity. But if you do not use names you need some other structure to connect things: something restricted, like some kind of ‘adjacency’. And that seems more apt to control complexity.

———

One might respond that they are a valuable human-factors part of programming languages. But that is to say they are part of the presentation (“A programming language is a data structure with a presentation.”): and the proper solution there is to give the software a better (super-textual) presentation. The solution is not to pollute the data-structure with adscititious pieces of presentation.

We probably ought not to so carelessly interweave these suspect presentational forms throughout all our software, confusing and vitiating its logical structure.

———

Tacit, or Point-Free, or Function-Level, programming is the way. This structures the connection between things into a particular limited set of forms – as hinted above. There are different approaches but overall they gain from this increase in simplicity and formality.

Factor seems a good practical choice.

(Tacit removes variable names, but not function names. Removing function names is an interesting question for another note . . .)

Related: