Is there really such a thing as “programming IQ”?

analysis
Jul 29, 20085 mins

A new standard test or a silly time-waster? You be the judge.

I thought I’d put in a plug for my “Programming IQ Test,” which went live Monday morning. The list of twenty questions is designed to puzzle and confound — or, as one reader observed, it’s “remarkably weird.”

Don’t worry, folks! It’s just for fun, and not intended to be any definitive metric of your coding capabilities. In fact, in my time I’ve even encountered some developers who don’t drink soda at all (though I never did a comprehensive quality audit of their code).

Despite the slightly tongue-in-cheek tone of the quiz, however, some readers still managed to have their feathers ruffled. For example, one slightly-miffed reader with the handle HomerTNachoCheese asked in the comments on the answer key, “So how does this even remotely measure programming IQ?”

Good question. And despite the fact that the quiz really was designed mainly as a fun way for you to kill some time when you should be working, there may actually be an answer.

It may help to consider just what an IQ test measures in the first place. Popular wisdom says they’re meant to measure “how smart you are.” But if you can ace a calculus exam you’re probably pretty smart, too, so why isn’t that the metric?

The answer, of course, is that not everybody knows calculus, including a lot of very smart people. You have to be taught calculus. The IQ test, on the other hand, is designed to determine how well-suited you are to learn it in the first place.

OK, so our “Programming IQ Test” isn’t really a true IQ test in that sense. For starters, you do have to know something about programming to take it. That’s just the way it goes. But you don’t necessarily have to know anything about any one language, platform, or methodology. In fact, you’ll do better if you have an overall, general knowledge of development — both its practice and its history.

On to the questions, then. HomerTNachoCheese asks who cares whether Python was a successor to Pascal. And indeed, you might not. But if you’re given a list of three languages from the Pascal lineage and one that is unrelated, and you can’t spot the unrelated one, you’re missing a big chunk of knowledge about the history of software development.

It probably means, for example, that you don’t know very much about Ada — a security-conscious language, derived largely from Pascal, which is still heavily used in many high-availability applications, particularly for U.S. government contracts. A good developer should at least be aware of such things.

Or, in the worst-case scenario, not knowing that Python is unrelated to Pascal might mean that you don’t know the difference between compiled and interpreted languages. Now you’re moving past the foul zone, into strike territory.

The other questions mostly follow along similar lines. If you’ve never heard of “the Gang of Four,” for example, you may never have learned about design patterns, which have become an important facet of modern object-oriented software design. Similarly, for question 10, you don’t actually have to know anything about Ruby, but you do need to know what makes object orientation tick.

And some of the questions, of course, are just for laughs. (Personally, I drink Red Bull in the 8.3-ounce can.)

All this leads us back to HomerT’s original question: What does this list of questions tell us about developer IQ? Does being able to answer these questions really make me a better developer?

I say maybe it does. I’m a firm believer that having a thorough technical knowledge of a single tool does not a good developer make. You can be the greatest Visual Basic hack in the world, able to make Windows do back flips, and still be a pretty poor programmer if you write code that’s insecure, inefficient, or impossible for anyone else to maintain.

It’s the difference between tactical knowledge and strategic understanding. Really good developers don’t just know their own tools; they know what other tools might be out there, and equally important, they know where they came from, so that they can judge which tool is best for a given job. They know best practices, but they also know what makes those practices better than others and what mistakes they’re designed to avoid. It’s this comprehensive background and sense of history that the “Programming IQ Test” is designed to tease out of you.

As an additional aside, every so often the parent of an eager teenager will ask me what classes the wee one should take to become a computer programmer, and I always answer the same way. I say to sign that kid up for public speaking or debate at the earliest opportunity, and don’t neglect English class, either.

To anyone with a genuine affinity for software development, the ins and outs of programming will come naturally. Knowing how to evaluate all the available options and arrive at decisions, on the other hand — and then being able to defend those decisions, whether it’s to a supervisor, a customer, or the chairman of the board — those are the skills that set the “high IQ” developer apart from the simple tradesman.

Of course, having a sense of humor always helps.