I will never use that!
Jun 22nd, 2007 by phil
Matt and I were discussing domain-specific languages the other day and no discussion of DSLs is complete without mentioning Lisp macros. After I explained how macros work in Lisp Matt said something along the lines of “Huh, that sounds cool but I am not sure how I would use it.”
This is what Paul Graham called the “Blub Paradox.” According to Paul, the programming languages that you know and use affect the way you think about solving problems. A programmer using a hypothetical middle-of-the-road programming language called Blub feels that “Blub is good enough for him, because he thinks in Blub.” In a way, this is a programming language version of the Sapir-Whorf hypothesis which, according to Wikipedia, “states that there is a systematic relationship between the grammatical categories of the language a person speaks and how that person both understands the world and behaves in it.” Matt has some firsthand experience with the linguistic aspects as his wife is bilingual:
This is also true between speaking languages as my wife will attest. Poetry, for example, isn’t the same in both languages. The idioms, terms, or ideas in one language don’t necessarily translate well to another - sometimes both in meaning as well as in rhyme. Thus it gives you the ability to pull certain color from one language that isn’t necessarily possible with the other. That’s an interesting topic on many levels.
To me, the Blub Paradox means that programmers discount features from languages that are vastly different from the one they currently prefer because they don’t think those features are useful. The paradox is that they can’t understand the features until they actually use them and they won’t use them because they don’t understand them.
I think that the root of the resistance to the new features is a feeling that they aren’t really useful. Most programmers have an intuitive understanding that anything you can accomplish in a modern programming language can also be accomplished in any other sufficiently advanced programming language. It is a short trip here to believing that “If I can accomplish my task with either programming language A or B, then they must be equivalent.” It is easy then to believe that features are not useful since they do not enable you to accomplish something that you couldn’t with another language.
But, that isn’t the way it works. This common intuitive understanding of programming language equivalence, also known as Turing completeness, is misleading. Consider this line from the Wikipedia article on Turing completeness:
Being equivalent to the universal Turing machine essentially means being able to perform any computational task - though it does not mean being able to perform such tasks efficiently, quickly, or easily.
In other words, just because something is possible doesn’t mean that it is feasible. The mistaken belief that languages are power-equivalent leads to devaluing features from other languages out of a mistaken belief that the features aren’t useful.
When you think about it, this phenomena can be seen in other areas of the “real world” as well. Last year I decided to trade in my beloved Mustang Cobra for a new Honda Accord. The Accord had two features that I felt I would never use: heated seats and the ability to roll down the windows with the remote. I live in Houston, Texas which gets hot in the summer and isn’t known for harsh winters. Yet, the heated seats turned out to be very useful as it doesn’t have to be that cold before leather seats become uncomfortable. At least I understood what the heated seats were meant to accomplish. At first I didn’t quite understand why the remote-controlled windows were useful. Then one day as I was walking to my car in 90+ degree weather I put the windows down from halfway across the parking lot and by the time I sat down in the car it was comfortable inside. Lowering both of the windows at once let all of the pent-up hot air escape and allowed a breeze to freshen the inside of the car.
In a way, driving the Mustang for four years had shaped how I thought about operating a car. I had been able to get by without heated seats or remote-controlled windows and thus didn’t see the need for either. Now that I have both features I use them all the time during the appropriate seasons. Just as I improved my comfort while driving during very hot and very cold weather, programmers who are willing to explore languages like Lisp can make writing software more comfortable.
Update: This article sparked an interesting discussion at reddit.




