Are you a programmer-mathematician or a programmer-handyman?

I always assumed that programmers hate complex tools and, if given the option, choose simple tools that get the task done over complex multi-purpose ones. (And that complexity we encounter in the tools these days is mainly because develops are paid by hour rather than by delivery. If dealing with a complex tool meant you'll miss your kid's baseball game rather than just the project schedule slipping slightly, there would immediately be an enourmous pressure on tool developers to keep the tools simple and make them just work.)

Recent blog post from Tim Bray confirms that sentiment (to keep it short, he says that the tools today got so complex that programming ceased to be fun) but the subsequent discussion on Reddit shows that lot of people disagree wih him and say, in essence, "Stop whining and start learning the tools."

Putting aside the convenient explanation that it's just the Stockholm syndrome speaking, there are, as far as I can say, two possible explanations for the phenomenon.

Theory 1: People become less tolerant of complexity as they grow older.

While you are a newbie programmer, learning new technology is fun. It allows you to do new cool stuff and improve your skills in overall.

However, after 20 years in the industry learning a new framework that does exactly the same thing for umpteenth time gets annoying and makes you feel that you are wasting your time rather than doing anything useful.

Theory 2: Some people are born complexity-lovers while others are born complexity-haters.

According to this theory there are programmers who are mathematicians in their hearts. They love abstract problems and divising formally sound solutions for the problems. Once the solution is known, only the trivial task of implemening it remains. Programmer-mathematician wants to get rid of this boring task as fast as possible and thus prefers simple tools which don't require him to learn new stuff or spend his time trouble-shooting the tool.

And then there are programmers who are handymen under their skin. They love to assemble stuff. They are McGyver types capable of knitting an anti-shark suit out of old firehose. The ideal milieu for the handyman is a junkyard. After all, junkyard means many more cool anti-shark suits and fire-extinguishing slippers, many more Rube Goldberg machines and Frankenstein monsters. Handymen love complex multi-purpose tools because they are easy to repurpose and to use essentially as spare parts.

Finding out wheher theory 1 or theory 2 is correct is relevant for tool developers. In the former case there's no much point in creating complex tools unless, of course, you want to address specifically the segment of newbie developrs and become a star among teenage programmers. In the latter case, on the other hand, your complex tool is meant to be used by handymen and you should thus expect your shiny new web-development framework to become a component in an improvised cheese slicer. You should thus try to relax restricions placed on the user, make the tool easy to take apart, modify and be used it in unexpected ways.

Additionally, determining which theory is correct would make an interesing data point for psychology of programming research.

So, here's a simple way you can help with finding out what's the case. In the comments below specify numer of years you are programming and choose one of the following options:

A: Tim is right. Tools have got too complex these days and should be thoroughly simplified.

B: Tim is wrong. He should stop whining and learn the tools.

After we have sufficient numer of answers, I intend to chart the percentage of complexity-lovers vs. complexity-haters according to the experience level. If the resulting graph looks like this:

Then the theory 1 is correct: People get less complexity-tolerant as they grow more experienced. If, on the other hand, the graph looks like this:

Then the theory 2 is correct: Some people are mathematicians while others are handymen. The latter love complexity. It has nothing to do with experience level.

July 25th, 2014

Discussion Forum