I’ve been thinking a lot about the parallels between software development and carpentry as I’ve been doing quite a bit of both recently. The traditional parallel is between software development and building construction, of which I used to be an ardent believer. However, building out my own woodworking shop has led me to realize that carpentry is also an apt analogy, where tools can be considered languages and jigs are libraries. The amazing thing about jigs is how much repeatability and consistency you get out of a simple apparatus. Unlike bits in a computer (ignoring the tolerance of semi-conductors themselves), each piece of wood is unique and somewhat unruly with warps, bends and knots. Yet with a good jig, each board is transformed into a well-behaved component.
Libraries and frameworks can be viewed in a similar manner as a jig: they should yield a consistent, predictable outcome without being overly complex to use. Like a bad jig that messes up your work piece, a bad library introduces bugs in a system. The key is to build/buy a good jig and use it every time it is appropriate. So long as the jig works well and is kept in good shape, it doesn’t need replacement. For example, once you find yourself a good dovetail jig or mortise jig you can stop looking and focus on other things.
With software the analogy breaks down as innovations are constantly challenging the status quo. Just because a library was good a year ago, it doesn’t mean it will be the best choice this year. Charting is a good example, as there always seems to be a new charting library that knocks the socks off the previous generation. This time around it appears that Highcharts is such a library. A few years ago, the go-to library was JFreeChart. Regardless of how good the library is, the question nagging at me is when do you have to switch? Unlike with jigs, where you build it once and use it forever, with software you have to replace it and relearn a new methodology each time. Somehow the relationship between the irascibility of wood tempered by a consistent and permanent jig has been inverted with software. Now the medium is consistent and the jigs irascible.
Some would argue that the medium is constantly changing, and it can certainly be viewed that way. But the question for me is whether it is possible to create universal jigs that do not need to be replaced?