Saturday, March 20, 2010

Blaming your tools

This blog post "Human-tool intellectual partnership" made me think on our own field. Here's some thoughts of mine.

As long as I've been around, I've heard people bring up the phrase "a poor craftsman blames his tools." With the rise in the software craftsmanship movement and the associated (oft-misrepresented/misunderstood/misapplied) terminology, this happens even more often.

When someone talks about how you are more productive with Rails than with some other frameworks, out comes the 'a poor craftsman blames his tools.'

When you talk about how using a dynamic language offers affordances and design possibilities that a static language, such as C# or Java, doesn't you can hear the cries of 'a poor craftsman blames his tools.'

How often would you see a professional, custom-furniture maker use a saw to pound in a nail, or use an awl to attach a screw. Could they pound in a nail with a saw? Sure, I bet they could. But they don't. They choose the right tool for the job. And therein lies the rub, I think: 'the right tool for the job.' Everyone has their favorite tool, but, for everyday work, I'm sure the furniture maker tries to keep their general toolset up-to-date, replacing older, less-effective versions of a tool with more productive ones. Having a manual screw-driver is great and very important for certain situations, but having an electric one can help tremendously when trying to be productive. A professional tends to have a whole slew of tools, used effectively at the right time.

Why do we, as programmers, have a tendency to defend our possibly old, less-effective tools. Personally, in the past, I've fallen into the trap where I made judgements about a new tool before giving it a real shot, assuming I understand it before I've given myself a chance to become familiar with at least the rudimentary subtleties. Perhaps I held to the belief that 'all tools are equal, it is just a matter of how you use them.' Over time, with experience in different realms, it becomes abundantly clear that this is patently false. Can you do most anything with any tool? Sure. Should you? No.

Does this mean that there is only ever one 'best tool for the job?' No, I'm not saying that. But, there are certainly a whole slew of tools/languages that are average-at-best with their appropriateness. Here's a statement: the more 'general-purpose' a language is, the worse it is for the majority of the tasks we use it for. This is why you see an significant increase in productivity in languages built on top of Ruby, such as Rails. They are fine-tuned to be effective and productive in a constrained set of tasks. This is why you often see people writing the solution to a problem in the language they wish they had, then implementing it in their underlying, general-purpose language.

Snarky comment: ever notice how, in general, the people who like to chime in with 'a poor craftsman blames his tools' tend to be the ones who use crappy tools. :)

As always, thoughtful comments are appreciated. Blog posts are even better.


  1. I believe that the phrase “a poor craftsman blames his tools” is widely misunderstood.

    A poor craftsman blames his tools, not because his tools are not poor, but because he lacks the skill to choose and maintain them properly.

    Once, long ago, I was a mechanic in the Army. I recall a cold, dreary, morning when I was new and inexperienced. I was struggling to remove a bolt in a difficult to reach spot behind an engine. This bolt was of the class affectionately known as “bitch bolts.” In the midst of my curses and bruised knuckles, a more experienced mechanic tapped my shoulder with a different wrench and growled, “here, try this one.”

    The wrench he handed me was the same size and type as the one I was using. However, it was made of a higher quality steel. Its head was smaller and its shaft more narrow, allowing it to fit more easily into the narrow confines around the bolt head. Its head was at a steeper angle, allowing me to rotate the bolt farther with each turn of the wrench. He had handed me a better wrench than the one I was using.

    A true craftsman never blames his tools because he chooses them with care and maintains them meticulously. No craftsman settles for rusty saws, or cheap wrenches that don’t fit behind engines. Nor should a software craftsman settle for cumbersome tools that make his already challenging job harder.

    An apologist who throws out “a poor craftsman blames his tools” damns only himself.

  2. If i may extend the craftstmanship/tools analogy a bit further - i am finding it interesting that some of the software craftstman types are starting to use (or at least try) some old-fashioned tools. VI, Emacs, etc. Tools which are had gone out of style - replaced by some new tool.

    Makes me think of how sometimes you find a modern tool looks great and has lots of nifty features - but just doesn't do the job as well as the old drill that your father had tucked away in the garage - with bits and a chuck wrench that are even older.

    Not to say that the old tools are always better - but sometimes they just fit the hands better.

    (or sometimes the hands fit them better - i sometimes think that my hands have evolved for Emacs use - my left pinky stretches out a long way to keep hitting that control key!)

  3. @TobyTripp

    Great points. Sometimes it is the same type of tool that is needed, just a bit more fine-tuned.

    I like how you mention that you should choose your tools with care and maintain them meticulously. It reminds me of when I first read The Pragmatic Programmer and was struck by the section when they say you should find an editor, learn it well, customize it to work seamlessly with you, then live in it. I was using Homesite at the time for doing my web development, and I had it tricked out like crazy. This was before Macromedia bought it and started making it less palatable. :)

  4. I really like this idea, and that phrase (this being the first time I have heard it) rang true to me, but for a different reason. The craftsmen I know in other fields would say this: "A poor craftsman blames his tools.. a master uses the best tools without comment."

  5. @Steve,

    Thanks for the comment. I love that phrase
    "A poor craftsman blames his tools.. a master uses the best tools without comment."

  6. As I've always said, you can be given the tools of a master craftsman, but that in itself will not produce masterful works. A fool with a tool is still a fool.


Please don't post anonymously; I won't use your name/url for anything insidious.
Comments by Anonymous are not guaranteed to make it through moderation.
Constructive comments are always appreciated.