Programming Apprenticeship

I’ve been watching a lot of Holmes Inspection on HGTV lately. If you’re not familiar with the show Mike Holmes is the general contractor who goes into a home that has some problems – usually bad renovations have left the home structurally unsound, mold problems, overloaded electrical boxes and a full list of instances of things not built to code. Holmes and his team then come in to rebuild the house right.

One of the interesting dynamics that you see on the show is the teacher – apprentice relation between Mike Holmes and his lead contractor Damon. Mike, being the expert, will asses the house first then watch Damon asses the house and quiz him along the way. It’s the tone of those conversations where you can tell there is a trusting relationship between the two of them and you can see over the seasons as Damon has grown more assertive and confident in his skills.

Construction is a lot like programming. A developer has to write code so that it is stable and structured to allow it to stay that way in the future. Rebuilding a house is akin to refactoring a code base – many of the problems are easy to identify, the solutions sometimes require some creativity to solve but generally follow patterns and best practices. Initial assessments rarely reveal the full extent of problems in a house which leads to time and cost overruns which is typical of software development as well.

With these similarities perhaps it makes sense to model programming education after the more established and historically proven teacher-apprentice style used in construction. This would serve to allow beginner and intermediate programmers to continue learning once they enter the job market. Constructive code review from peers is really just a start. Working in an environment where there is a good mix of senior and junior developers and where you are challenged to explain and defend your code and design choices is how to create a truly great development team.

Will the industry naturally move in this direction as it matures or is it doomed as companies are only interested in hiring the cheapest entry level programmers and only giving them time push out code?