[ Content | View menu ]

Needed: Apprentice Programmers

Mark Mzyk | May 5, 2008

Jay Fields has an excellent article up at InfoQ talking about software development.  He compares software development to playing poker.  It’s an analogy that works incredibly well.

In the article is this quote:

“Many programmers sit in cubes, tackling problems all on their own.”

While most of us don’t think about that statement often, if at all, it hits upon a truth of programming:

Programming is a solitary exercise.

I’m sure your first response upon reading that is to think of paired programming.  Yes, when pairing, by definition, you aren’t solitary.  Now, how often do you pair program?

I’m sure there are some people who pair all the time.  They are the exception to the norm.  Most programmers sit at their terminal with only their own thoughts to guide them.

There exist tools to help break the isolation.  Coding reviews, scrum, agile, and a million other processes.  You’ll find many books and blogs focused on and around programming that look at how to deal with others, like your teammates and your manager.  The focus of all of it boils down to one thing: figuring out how to get others to leave you alone so you can get back to writing code.

You.  The screen.  Some text.  Nothing else.  Heaven for programmers.

Now answer me this:

How often do you watch someone else program?  And of those times, how often is that person a better programmer than you?

I’m sure you’ve seen the blogs that mention the stat about the ten percent of programmers that are better than everyone else.  Why haven’t we figured out a way to transfer that knowledge from those ten percent to everyone else?  Why haven’t we found a way to break the solitary nature of programming so that knowledge spreads?

Book and blogs can only teach so much.  First hand experience is better.  Learning first hand from someone more experienced is the best.

So instead the industry just throws young programmers into the fray.  They have to sink or swim on their own.  It’s no wonder mediocre programmers abound.

How do you rectify this?  Take a page from the Renaissance and bring back the guild structure.  Have master programmers take on apprentices.  For a year, make young programmers work and learn from those better than them through direct observation.  In fields such as therapy, would be therapists have to perform a number of hours of supervised therapy before they are allowed to practice on their own.  Why is programming different?

There will be resistance to an apprentice program.  It will be complained loudly that it ties up the best programmers and slows them down.  Exactly.  It slows them down so they pass on their knowledge to those who need it.  And then when the apprentices have finished serving their time, they can enter the work force and be more productive than they ever would have been in their first few years directly out of school while they floundered searching for their way.

It’s an initial slow down to achieve a long term speed up.

Programming is a solitary exercise and for too long this has held the profession back.  I’m asking that for a short period of time, expert programmers give up that solitude to take a novice under their wing and train them to be an expert.  Then they can return the favor, and so it will continue down the line, and the industry will be better off for it.


  1. Comment by Tom:

    On a smaller scale, many companies do “apprenticeships” for programmers. Whether it’s an internship or a co-op, there are opportunities to be on both ends of the relationship. One thing we do at work is have new programmers mentored by mid-level programmers to get feed back from what people are learning in college, and giving new programmers a resource for stepping into the work environment in a productive way. No one is ever left not knowing who they can ask for help. We also review the code for new hires till we’re confident that they’ve adjusted to their job and the company. These reviews are informal but also allow more experienced programmers to guide newer ones towards tricks and concepts they might lack as they come up.

    May 18, 2008 @ 20:35
  2. Comment by Mark:

    I know that many companies claim they do but I’m not convinced that most companies give it more than lip service. It’s the problem that all companies face of the long term vs the short term. Training costs you in the short term but saves you in the long term. I think too many companies still view software as a manufactured good as opposed to a creative good, which it truly is. Developers are seen as interchangeable parts and their degree is supposed to prove that they are skilled enough to perform the work needed, even though that isn’t likely the case unless they receive extra training or work to better themselves.

    I think you should count yourself lucky that you work for a company that appears to understand what is needed, because I think those types of companies are few and far between.

    May 18, 2008 @ 22:34