A friend of my wife’s (an artist and librarian) has recently started “learning programming” through a free online course that rations its information out via short lessons on Monday of every week. My jibbing to her about “Yeah, that’s all it really takes!” aside, I admire her open-mindedness as everyone can benefit from some level of computer literacy. I have no doubt, though, that too much of an increase in complexity would dissuade her enthusiasm.
In that respect, and a few others I’m going to mention, programming shares some similarities with weight training.
I weight train — a lot; not a hobby you find in a whole lot of developers, but there it is. My peers and I are a varied and interesting group. I’ve been weight training seriously for about half as long as I’ve been programming professionally, so whatever similarities there are between the two have become illuminated to me over time.
As in the case of my wife’s artist friend, anyone can pick up on the basics of programming, just as anyone can pick up on the basics of weight training. There are simple workouts in the pages of numerous magazines or websites, with a mere few sentences worth of description for each exercise. Conversely, there are books such as “Starting Strength”, 347 heavy pages dedicated to the excruciating detail of a mere five fundamental and integral weight training exercises. Compare this with simple online programming lessons vs. the dense but necessary “Design Patterns” book by the “Gang of Four”.
I’ve seen a lot of people at the gym either not getting the results they want or giving up out of frustration. The issue, I think, lies in the fact that “the basics” can only get you so far. If you want to produce a better product, whether it be software or a strong and healthy body, you need to exceed the basics, and learning new concepts must forever be a part of your effort. The liability, of course, is that the effort will probably not get any easier as you get better. In fact, if it does get easier, you probably aren’t trying hard enough. The goal posts must always move; otherwise, you get stagnation and complacency.
The devil is in the details. As it is with software development, so it is with weight training. Lifting heavy weights and not being vigilant in doing it correctly can be dangerous. There are many variables to consider; posture, balance, body alignment, and so on, ad nauseam. If you are not careful, you WILL hurt yourself. Maybe not today, but someday, over time, it will happen. Writing software may not be as dangerous as putting a couple hundred pounds on your back, but similar complexities are involved. The variables are consistently numerous. If you don’t keep them all in check, your software will fail. Maybe not today, but some day, over time, it will happen. Brittle software, like an improperly trained body, will result in damage and failure given enough time.
Take something from weight training like the squat. Fundamental in weight training, but far from basic; most people won’t even do them, due to the effort and difficulty involved. The payoff of making the effort, though, far exceeds the work involved. Sure, you could do a partial squat at a large amount of weight and probably impress a few people who didn’t really know any better. Just as you could forgo learning design patterns, or only learn them enough to fool those who don’t know any better. But without a full range of motion and proper technique, its not only your audience that’s getting fooled. Just as you could write some weakly thought-out code that executed spectacularly to users, but would either (a) be very poorly written or (b) not stand up to the realities of usage — more likely both.
I approach weight training the same way I approach software development. Both are lifelong activities, neither of which will ever cease to challenge and frustrate me, but also to educate me and to provide me with great joy and satisfaction.
That being said, there are probably just as many differences than similarities between the two activities, some more significant than others. I think, though, that there is one difference that is the most important to me. At the end of the day, before heading off to home, I don’t go and shower with all the other developers.
— Robert Rice, firstname.lastname@example.org