I’ve enjoyed Ted Neward’s recent posts on software craftsmanship. I 100% agree that software craftsmen need to be vigilant about coming off as holier than thou and condescending. I say this as someone who takes pride in my code. Though I’ve never identified myself as a software craftsman, the title probably fits how I approach my work in software. What I hope to contribute to the conversation is perhaps a reason to be a little more humble about it: Condescending to people from a position of software craftsman is akin to condescending to people about winning the consolation prize of the matching washer and dryer on Jeopardy.
I think that’s an appropriate analogy for many (most?) software craftsmen. I have a hunch that almost nobody got into software with a burning desire to be a software craftsman, there was some other driving force. Nobody goes on Jeopardy to try and get second place, they are trying for the big prize. If someone was condescending about how intelligent they are, and offered as proof their 2nd place finish on Jeopardy, you would probably chuckle, at least on the inside. Similarly, condescending about software craftsmanship is in all likelihood bragging about making the best of your 2nd, 3rd, or maybe 4th choice in life. People get into software for all kinds of reasons, but a burning desire to be a craftsman was probably not one of them.
Some of you probably got into software to be the next Jobs, Woz, Gates, Brin, etc. You wanted to build a software empire and change the world. Guess what? You failed, at least so far. Keep that in mind when touting software craftsmanship.
Some of you were really excited about the science fiction-y aspects of computers. You were enthralled by artificial intelligence, robotics, etc. If you are touting software craftsmanship instead of your latest advances in AI or robotics, then you failed at your original intention.
I know for a fact that some of you got into computer science as a second choice after not gaining entrance into a computer/electrical engineering department. At my undergraduate institution, the CE/EE requirements were really difficult and I heard more than one person complaining about this during my stint as a physics TA at my university. Just remember, computer science was your second choice.
Or maybe your first choice in careers was totally unrelated to software. That’s my situation. In 1999 I failed at getting into the graduate schools I wanted to attend, in a field unrelated to software. I did manage to get into my last choice school, the utter fallback position. But it wasn’t even in the field I wanted to study. It was related to the field I wanted to study, but getting a Masters degree in that field would largely have been an exercise in resume padding in the hopes of getting into one of the schools I had already failed in attending. I attended one day of classes, realized there was no way I could go though 2-3 years of that on the possibility that it might lead to my eventual goal, and dropped out. Luckily this was the height of the dot com boom and anyone with a pulse and who could spell HTML got a job in software. So even though I now take craftsmanship seriously, I always try and remember that I got here after failing and because the entrance requirements to the guild of programming were incredibly lax at the time I started.
Anyway, there are lots of other reasons people get into software. However, I have never heard people say that they got into this field to write unit tests, write elegant code (whatever that means), use agile methodologies, refactor code, write correct object oriented code, write correct functional code (we can’t even agree on what type of code to write), use a continuous integration server, or any of the other dozens of things that constitutes “software craftsmanship.”
But that’s o.k. in my book. Almost nobody gets their first choice. The good life does not consist in getting your first choice, it consists in being a good person. Making the best of what you have, and being a software craftsman certainly can be a part of that, is noble and honorable. But being a prick about craftsmanship negates that, which turns a noble pursuit into something petty.
Just remember, software craftsmanship is a matching washer and dryer. It does no good to condescend about your matching set because everyone you know already has one too.