Try this little exercise sometime. In Google, enter your favorite language, followed by the word “sucks”. And then do the same with a language that you just despise. If you can stomach the results for the first page in both cases, you’ll notice:
- Each language always has its strong Fan Boys (or Girls I suppose, but this seems to be primarily male dominated)
- No resolution ever comes of ANY flame war
…despite the fact there are no end to the results that are relevant to the war at hand. We all know flame wars are pointless, and yet we get some perverse satisfaction watching them in the same way people slow down on the highway when they see an accident with an ambulance present. Why is it you can’t seem to get away from them?
That would be the Blub Paradox. First posited by Paul Graham close to a decade ago, I came across it for the first time (yes, I live under a rock sometimes) recently and had an “Aha!” moment with it. Maybe you’ve known about it for years because you crawled out from the rock ages ago. I don’t think it’s all that well known, considering just how many flame wars continue to pop up on blogs, discussion threads and forums.
The Blub Paradox
If you’ve never heard of it before, here’s a brief summary:
(Paul) argues that some languages are more powerful than others and posits a hypothetical middle of the road language called Blub. He describes the gist of the paradox thus:
- As long as our hypothetical Blub programmer is looking down the power continuum, he knows he’s looking down. Languages less powerful than Blub are obviously less powerful, because they’re missing some feature he’s used to. But when our hypothetical Blub programmer looks in the other direction, up the power continuum, he doesn’t realize he’s looking up. 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.
Most people without the experience of them can’t see language features as really useful things. I know an otherwise extremely talented programmer who can’t see the value of garbage collection and thinks it simply encourages “lazy programming” even as he struggles to find the right location to delete objects shared and referenced by many others. Are you claiming to be such a renaissance person as to be able instantly to recognize the value and worth of every new programming feature to which you are exposed?
Furthermore, I posit that the language developers spend the most time in becomes their Blub. Meaning that, after some magical point in your development career, switching languages becomes more difficult because you’re trapped in the Blub Paradox.
Flame On, When You’re Stuck with Blub
If you’re stuck on your Blub, you’re going to have that same cynic view of newer programming languages. And there are plenty around today that are getting press that, depending on your perspective, you may have that same “well, they’re probably powerful but they have all that hairy stuff in there I don’t understand” reaction. That’s Blub at work.
I’ve become painfully aware that Java is my Blub. You can see evidence of me stuck in the Blub Paradox in my posts about Google Go. The continuum viewing paradigm above is absolutely bang-on: Spotting a more powerful language is incredibly difficult once you have a long series of programming habits in a particular language. Maybe it’s just a consequence of a long programming career. Could be mental inertia. It doesn’t really matter where it comes from, as long as you are aware of the effect.
You can probably spot any programmer’s Blub, just by asking what he or she works in daily. Jeff Atwood’s is probably C# or ASP by now. Larry Wall’s is perl. Bjarne’s is C++.* The list goes on and on. If you’ve been programming more than 5-7 years in a language, you’ve probably got a Blub too.
What makes this even harder is that your day-to-day work totally absorbs your programming time, particularly as you get older with a family. Finding time for new programming projects on the side gets squeezed and you find yourself falling back on things you already know instead of digging into something you view as weird, but potentially useful. That squeeze may ultimately turn into, “Well, why bother with X when I already have Blub?” That’s the danger of Blub.
It’s OK to have a blind spot. But, you should be aware that it exists and avoid the prejudice filter that comes with it.
The next time you’re tempted to look down on a language because it’s weird, as opposed to just inferior, remember the Blub Paradox and maybe spend some time in it before you strike the match and grab the gasoline. You can bet that I will.
* I am completely guessing on these, based solely on the fact of what I read about their current exploits. I reserve the right to be wrong about any particular programmer’s Blub, while still retaining the right to assert that Blub Paradox is still in effect.
Does this post imply that you didn’t give Go enough credit due to your blubbiness for Java?
Since I gave Go a review based on the features & language spec, and wrinkled my nose at the “weird hairy stuff”, it means that I ought to go back (time permitting!) and revisit it in more depth on some project to get a much more in-depth feel for it. In my defense, I did speak with a developer who was evaluating it in great depth (at the ‘bytecode’/assembly level) and his insights were very valuable, but he could have been under his own Blub as well. It could still be sub-par.
Umm, just because you stick to one language for many years, it doesn’t make you a blub programmer. Is Paul Graham a blub programmer because he primarily uses lisp?
Blub describes someone who can’t imagine how a different programming paradigm could be better. There are many seasoned vets who are well aware of the advantages of different paradigms, even if they tend to stick to the same language for their work. I’d wager this includes all the people you specifically mentioned; I don’t think any of them are blubs.
Well, I think we may have to agree to disagree here. How you think is dramatically shaped by what language you tend to stick with. That’s the Blub Paradox. Only when you don’t have many languages, or have fully transitioned out of a well-tread language (for you) are you able to exit that particular Blub Paradox. Maybe some of the guys you mentioned are highly facile in multiple languages and can easily see the features of other languages as valuable, but that’s a guess, just as mine is.
A good clear post but at the same time that is why it pays to start young and it is what your university degree is supposed to teach you: that every language out there is just a tool to get the work done in the most efficient / beautiful way available. I have been programming for nearly ten years now and I am only twenty but I have many languages under my belt: ruby, python, C/C++, Visual Basic, Haskell, Perl, Java, Web Based Markup Languages and the list goes on. I am primarily a Haskell fan because it is just pure awesome but it is not the language that I am most proficient in. Ultimately it is all about choosing the right tool for the job: http://therighttool.hammerprinciple.com/
There is no power continuum. We’re dealing with Turing complete languages here (well, mostly, and when I have to deal with language that aren’t I whinge incessantly).
Don’t get me wrong, I don’t think all languages are created equal, far from it. ‘Power’ and ‘expressiveness’ are just not useful criteria by which to judge them.
I think better metrics are simplicity and consistency.
I really liked your post, and I agree with most of it. I just think you are underestimating the language designer you talk about.
I’ve had the luck to chat with Larry Wall in real life, and I’ve read interviews with and publications from Bjarne. In both cases I’m sure that they both aware of many good features in other programming languages, and that they can appreciate their value.
In fact Larry (and the other Perl developers) “stole” a good many interesting features from other languages for the design of Perl 6.
The Blub paradox comes from being well versed in any particular language? Only from moving away from this obviously stable and well rounded language can you over come it?
I call BS. At many times any decent programmer can utilize one of several means to overcome a task. The reason he chooses to use one particular language more often then others speaks to the languages qualifications, not his blindness to others.
@Joshua:
No, that’s not what the Blub paradox states. It states that once you become very familiar with a language, and as long as you are not actively learning other languages, you tend to become blind to more “powerful” languages — you simply see them as weird and fail to recognize that they are useful or that the may make easier tasks which are difficult to do in Blub. In fact, you may even fail to acknowledge those tasks are needlessly difficult!
In other words, it’s easier to tell languages which are *clumsier* than Blub, but not those which are more elegant or powerful.
If your decent programmer has many languages in his toolbox (and as long as those languages aren’t all of the same “family”), then he won’t fall in the Blub paradox.