This year marked my 20th year as a professional software developer. The anniversary transpired without hoopla.
I’m going to talk about the subject of craftsmanship in general. Why?
Some of us strive to be very good at what we do. It’s my definition of craftsman. Regardless of what anyone else thinks about my work, I find it far and away much more critical to be able to look at my work years later and know that I performed it to the best of my ability. I hold my humility very dear; the lack of it is in direct conflict with the pursuit of knowledge and skill.
Wield a hammer and chisel, a paintbrush, wrenches, a pen, a chef’s knife, a chainsaw or a keyboard (or all of the above)… what’s worth doing is worth learning to do right. That doesn’t mean “It’ll never be finished”, it means “I will do my best, I will make mistakes and learn from them, I will be patient and persistent.”
In 2010 I discovered The Garage Journal, a wonderful forum. It has made me consider my collection of tools in every category… mechanical, woodworking, electrical/electronic, software, kitchen appliances… the things that enable a craftsman or craftswoman to work more productively, to take their work to the next level, to stand on the shoulders of those that preceded us. “What’s in your toolbox?” is a fascinating question to me that can lead in many directions and a long conversation. “What have you created, improved, modified or repaired with the tools at hand?” is an even better question.
I happen to be reflecting on the tools recently because I’m migrating my source code repository and it’s interesting to see what has collected in my software toolbox. The analogies to mechanical tools abound. There are the favorites we’ve used countless times; well-worn and intimate. On the software front, that would be C++ for me, in no small part because it’s a language that can cover a LOT of ground (from embedded to large desktop GUI applications to huge distributed systems). While I write C in automotive embedded environments professionally right now, I continue to write software for my desktop (FreeBSD), my servers (FreeBSD), my laptop (OS X), my iPhone, small embedded devices for home, etc. This means I’ve spent a reasonable amount of time using C, php, perl, javascript, flex, bison, objective-C, java, shell scripts… the list is long. On my web server alone, there’s a good chunk of my own code using php, C++ and javascript. My desktop… more than I care to admit.
Then there are the tools we’ve created ourselves. For a mechanic, it could be as simple as a custom cheater bar or a cut-up wrench to get to that waterpump fastener that seems near impossible to reach. For a woodworker it might be the bench you built. For a software developer, it might be the libraries you authored and use regularly (in my case, libDwm would be a good example).
Some tools find their way into our box out of curiosity, fascination, or just shininess, only to find their way to the bottom of a drawer to collect dust indefinitely. Others save our butt for one task, never to be used again.
Of course, let’s not forget the tools we lust after. For myself… I’d like a new Apple desktop computer, a new 4-channel oscilloscope, a 2-post car lift, a cabinet-grade table saw…
However, a true craftsman gets by with the tools at his disposal. And here’s where software is different than many other crafts; many of the tools are available with only a time investment, not a monetary investment. Download open source, spend some time learning to use it, and produce new software. There’s an up-front cost for the hardware to host the software, but beyond that it’s a wide open world for nearly free. If writing software for personal use, there is no monetary penalty for mistakes. It’s just time (which is worth more than money, but that’s not my point… my point is that the barrier to entry is low). In the embedded software world, if you choose your platform carefully, you can accomplish quite a bit with a small monetary investment. If you’re familiar with electronics, you can design your own circuit boards (and have them fabricated) at a fairly reasonable cost.
Interestingly, some of the “I can see and touch” stuff is also becoming easier for the single designer and craftsman to create. Sites like emachineshop.com allow us mere dabblers to design physical objects and have them machined or otherwise fabricated at a reasonable cost with convenience we could only dream about 20 years ago. And software is at the center of it, from Web servers to CAD software to procurement and logistics systems to the software running on the CNC machines. It begs the question: where would be be if computers and software had never been invented?
When it comes to producing things at home, we’ve also forged ahead rapidly. While I bemoan the fact that a considerable amount of tool manufacturing has moved overseas, the flip side is that many tools are now within the reach of the average consumer and it’s not difficult to choose the ones that meet your quality/price ratio. Reviews are fairly easy to find inline, as are tool and craftsman-related forums in nearly every category of interest: general, mechanical, woodworking, metalworking, machining, welding, finishing, electronics, software… you name it.
My hat’s off to everyone involved in making it easier for those craftspersons among us to convert what’s in our heads to something the rest of the world can see, hear, touch or use.