Friday, May 22, 2009

Software Engineering, Furniture Making, and Craftmanship

Put up your hand if you were a bit of a geek back in highschool. You didn't take many, or any, shop courses (woodworking, metalworking), you focused your academic attentions on the maths and sciences and you belonged to the chess club. Oops. Looks like I'm the only one in the room with my hand up. Well, anyhow, let's move on.

I've been learning a new hobby, perhaps in order to fill a void from my misspent youth ... furniture making. Or perhaps I've been learning it to fill a craving for some 'artistry' or 'craftmanshp' since if feels like it has been missing from my software engineering. I've come to think that the craving isn't from what I've been making, but rather from how I've been making it. Watching and learning the methods of furniture making has been satisfying that craving in a strange way.

It might not be everybody's cup-of-tea, but if you want to get a glimpse of what I mean you can watch some of the video tutorials on 'www.finewoodworking.com'. For example, there is a a series on making a small cabinet: http://www.taunton.com/finewoodworking/small-cabinet-video/index.asp.

What really impresses me is how confident and capable the instructor is in his practices and even the vocabulary he uses to describe what he is doing. When you watch him work it is clear he is capable of repeatably building and assembly high-quality wooden structures. He's a master craftsman.

What I find very interesting to watch are the techniques/tricks the furniture makers use to make sure the reality of what they build matches up with their intended results. The woodworkers seem very aware of how easy it is to make a wrong cut. A big part of the craft of woodworking seems to be about using methods that reduce the chances of those wrong cuts from happening. In order to do that woodworkers use jigs, fixtures, clamps, fences, and various other techniques to hold the wood product, guide the tools, or place boundaries on the cutting. They put these things in place before they start shaping the product. It is almost as if the woodworker is trying to create an environment, before they start their cutting, where the only thing that can possibly emerge from the wood shaping processses is their desired end product. It leaves the impression that there is as much a skill in creating that environment as there is in actually operating the tools.

I suspect it is not a coincidence that the word 'fixture' appears both in software engineering and woodworking. In woodworking a fixture is something used to hold a wood product in place in a way that makes it easier for the woodworker to shape it. For example if you wanted to cut a board at a particular angle then you might use a fixture to hold the board at the correct angle so that a table saw can be used to produce an angled cut in the board. In software engineering a 'test fixture' plays a similar role; it 'clamps down' the unfinished software product and guides the engineer in the shaping of the product. In theory it makes it harder for the engineer to make the wrong 'cuts'.

If you watch the woodworking videos I mentioned above then you will see another recurring theme. The master cabinet-maker in those videos is well aware that no matter how carefully he measures things the end products do not come out exactly as specified. He often talks about techniques for transferrring information from reality to a yet to be shaped product. For example, imagine a board has already been cut to a certain thickness and a grove must be shaped into which the board is to be fitted. Perhaps the board was supposed to be 1/2 an inch thick but for whatever reason it did not come out that way. What he must be able to do is to transfer the information of the real thickness of board to the grove that is about to be shaped. Although he plans all his cuts he also has techniques that ensure his wood products will match with the reality with which they must interact.

Do I have any great insight into how to apply these woodworking techniques to software engineering. No, not in any earth-shattering way. But from watching the woodworkers do beautiful work I am starting to form an appreciation for what is beautiful about the way they work. I believe, or hope, that with that appreciation I might start to develop a skill for recognizing and nurturing those traites when, or if, they begin to appear in my own work.

Overall it makes me think about what it is I find pretty about woodworking methods and what it is about software engineering that makes the methods less pleasing. I'm starting to form some theories. Perhaps some of you guys have some too.

cheers
Tony