[ 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.