Blub paradox

Excerpted from: Rust and the Blub Paradox by Jonathan Turner.

Whenever I think about how useful certain language features are, I almost always come back to Paul Graham's essay "Beating the Averages". In it, he observes an interesting phenomenon among programmers he calls "the Blub Paradox". To recap for those who haven't heard of it, the paradox goes something like this: let's say there's a programmer using a language called Blub. Blub falls somewhere in the middle of the programming language pack in terms of capability. It's not the lowest, most minimal language nor is it the most powerful.

When the Blub programmer looks "down" the spectrum of languages, they can easily see that those languages are less expressive than their preferred Blub language. Unfortunately, when they look "up" the spectrum of languages, they can't tell they're looking up. As Paul puts it:

"What he sees are merely weird languages. He probably considers them about equivalent in power to Blub, but with all this other hairy stuff thrown in as well. Blub is good enough for him, because he thinks in Blub."

When I read that years ago, I remember thinking "wow, that's pretty astute." Little did I know that years later it would become firmly ingrained as part of how I thought about teaching programming as a programming language PM.

As a programming language PM at Microsoft, I worked on TypeScript, a typed version of JavaScript. Without fail, if I was speaking to an audience of predominantly JavaScript developers, I would get many frowns as I tried to enumerate the advantages of adding a bit of type-checking to JavaScript. Even if it was optional. Even if I showed half a dozen powerful advantages. As Paul notes, it just looked "weird". To a JavaScript developer, TypeScript would often just seem like a language that was equally expressive with "hairy" stuff thrown in.

As I talked to more language PMs, and I met more and more people at conferences, I learned that Paul's observation was not only accurate, it was also surprisingly universal. Most programmers will struggle when looking at a new language they don't use. Often, they'll have allergic reactions to features that are foreign. It takes time to work with the features enough to understand why they aren't just unnecessary ornamenation gumming up the works.

In short, the Blub Paradox is something that as programmers we actively need to assume we're falling into and then work to get ourselves out of.