I am not a carpenter. I know carpenters. One of my friends and co-workers is a well-trained restoration carpenter. The work he has done in his own house is to drool over. That’s not me. I am a bit of a do it yourself sort of person who is not afraid to try things. Or to read the instructions! So I take on some tasks around the house. A deck here and there. Some shelves. Ok some walls once and I’ve laid some flooring. On and off the last year or so my wife and I have been redoing our kitchen. Today was replacing cabinets under the sink. While that has nothing to do with computer science it has a lot to do with problem solving. Sometimes you don’t really know what you are getting into until you start. In this case you can’t tell what sort of changes you will have to do to make the new pre-built cabinets to make them fit until you remove the old cabinets. I ran into three issues – one expected but not well known and the other two not quite so expected.
The expected issue was fitting the cabinets around the plumbing. I wasn’t sure where all the pipes were going to fit but I was pretty sure a little work with a jig saw would do the trick. And it did – mostly. This brings in the first unexpected part. I had to separate the two main cabinets because I could not cut around one of then to fit a pipe without giving up too much of what I wanted. That was pretty easy because I had bought a spacer. This meant only a little moving around of some pieces. The other unexpected part was more of a big deal.
It turns out that the spacer I had planed on using on one end would not work. I had removed more of the old cabinet than I realized had to be removed and so I needed to “do something.” Now deciding what I needed to do was not so hard. I needed a spacer with a T connection to finish off the end of the cabinets and I needed a board placed across the top between the counter top and the stove. Three pieces of wood whose measurements were easy to get. And with a nice compound miter saw (one of my favorite tools) the wood was easy to cut. Assembly though promised to be tricky. You see where the brackets had to be meant that getting to them and installing the pieces one by one in place would have required a very small person or a contortionist or maybe both. I am neither.
Fortunately I have been assembling IKEA and other “some assembly required” furniture for years. OK decades. In all that time I have learned a few things. One of them is that sometimes what you need to do is build an assembly of parts and then install them as a unit. Extrapolating this to my current needs turned out to be fairly trivial. Well once I figured out how to make sure I had it all solidly together before installing the unit. And my wife, the only opinion I really care about for this task, says it came out pretty good.
So what’s the point? Well several points. One is that understanding the problem is the first step towards solving it. Secondly, that knowledge gained in one task often does have applicability to others if we are smart enough to see the similarities. Of course patience is a good thing. Sitting still, examining the situation and planning before starting work on a possible solution goes a long way. This is true in programming as well. Planning and design before coding is a very good thing. Remembering design patterns, tools and techniques from previous projects can help you plan out solutions for a current problem. No knowledge goes wasted if you live long enough and remember well enough.
Oh one last thing. Good tools are important as well. I went out and bought a 16 inch channel lock pliers to deal with a reluctant pipe fitting and a very difficult task became a snap instantly. So it pays to have a lot of tools (think programming languages, IDEs, etc.) in your tool box no matter what your field. Students don’t forget you can get a lot of professional software tools at DreamSpark. Hint hint
A great analogy, and I'm glad Thel is happy!