Jay Shirley

Striving to be a man of gallantry and taste

If Programmers Were Carpenters…

| Comments

I write software and part of that requires a lot of reading. Every day I try to read something about my craft and how to improve, but lately I’ve realized that I’m more focused on the finished product. Subsequently, the books I read are more about products and less about code. I don’t care so much about the code anymore. I really just care about the product.

I need to be cautious, though. Focusing on any single part without respecting the whole can lead to inferior products. Especially not understanding the history and heritage, understanding how I happen to be building this specific product right now.

Upstream knowledge is imperative!

If programmers were carpenters, many wouldn’t know that wood comes from trees.

For all practical matters wood simply comes from the store. They use the type of wood recommended for their task. They shape it in a way they’ve seen before or read about online. They may even know how to make a very, very nice bench. But when a table is made it conspicuously looks like a bench.

This is a symptom of not knowing the history and heritage of the craft and the product.

Lately I’ve been reading Design for Hackers and Coders at Work. The two books have dovetailed nicely and created this train of thought.

Specifically, Joshua Bloch’s interview and focusing on simply knowing where things come from. You don’t need to know the details and certainly not the ugly warts (looking at you, C++). Learning and understanding the history, differing philosophy and concepts is of paramount importance to producing quality craftsmanship.

It’s not about knowing everything about trees. Leave that to an arborist. Simply knowing that wood comes from a forest, different woods grow different because of climate and ecology and whatever else. Use that knowledge to make better products. Use any knowledge to make better products.

History repeats itself…

We often hear that history repeats itself until a lesson is learned, however this mentality also (unfortunately) pays the bills. Reproducibility is a good trait to have, because when someone sees something they like they want to have one. In software products you see this frequently.

There are always clones of software. There are always employees leaving to try to recreate the product, but in their own way. And yet, somehow, it typically is just a failed knock-off. Or just developers who constantly write the same type of code, even using different programming languages in a way completely unintended.

The medium in which products are created must be understood so that the best products can be made.

The fit and finish are different depending on the ingredients of any product. Treating every type of wood as equivalent will result in some brittle, ugly and broken furniture. In software, we get ugly mismatched clones. How many Facebook killers have been built?

The reason isn’t because the builders fundamentally cannot make good products. No, instead they failed to study not only the medium, but the upstream knowledge that went into creating the product.

Understanding the need and heritage of any product is just as important as understanding what tools are used in its construction. Failing to understand either is disastrous.