Having re-read Erics article more carefully I see it very thoroughly covers this.
It never once occurred to me that “nil punning” was to do with the word “pun”. I’ve been trying to work out what I thought it meant:
- onomatopaic perhaps (“take that nil!” … pung!)
- like “dead panning”, (not reacting to a wierd result)
- nil “punting”, (“this is not my problem…”)
To me what I find wonderful about nil punning is the ability to cope gracefully with a lack of information - thereby handling unreliable data sources, expansion of a contract prior to new information becoming available, and software “growth” in the sense that Rich covers brilliantly in “Maybe Not”. The act of information processing becomes like panning (that word again) for gold in a river of nils, letting them flow on without caring … It is a wonderful asset of Clojure and yet such a difficult one to understand why you would miss it - and therefore a hard sell for those from a Java background who are conditioned to be strict with contracts to the point of letigiousness. I wondered if all those outcomes was prefigured in the origin of the term. It’s not really - but the actual origin of the term is quite poetic enough.
The word “pun” itself apparently stems from the verb “pound” as in “consolidating earth”. Perhaps anything is polymorphic when you pound it into a protocol (Nil points for that pun!)