Coaching: why not for programmers?
Driving back from my goalie training session this evening, I got to thinking: why is one-on-one coaching so rare among technical professionals? Professional athletes work with individual coaches, so why not professional programmers?
I am by no means a professional hockey goalie. The rec leagues are my domain, not the NHL. Still, I have a incessant need to improve my skills. I want to be the goalie drinking the victory beer, not the sorrow beer. That’s why I work with a goalie coach. It’s not cheap, but the return on investment is significant.
I get instant feedback. I see how things should be done. I drill movements until they become second-nature. I interact with an expert who can identify my strengths and focus on areas where I need work. I develop good habits. I can’t get away with laziness or errors, because I’m always being watched.
Professional athletes work with coaches all of the time, for similar reasons. Granted, they are able to afford more time with their coaches, but the dynamic is similar.
Programmers, on the other hand, seem to receive little in the way of coaching. College is nice for training, but it works through practice and competition. Does the code do whatever it is well enough to satisfy the automated grading program? Great — you pass.
Industry is no better. There, code reviews are opportunities for evaluation and correction from peers, but they are too time constrained for extensive critiques, and they are certainly not the place for assignment of practice drills. Pair programming has the one-on-one aspect of individual coaching, but the partner is not necessarily an expert and may care little for your individual growth.
Instead of being coached, programmers stumble through years of individual study and marginal projects. Passion and practice seem to make the best coders, with those in the rarefied air being several times more productive than the norm. But are those elites reaching their full potentials? Could the 9-5ers be moved above their plateaus?
Programming should be coachable. It’s art, after all, and artists have long worked with coaches. Musicians, painters, and singers all have coaches (or go through apprenticeships). Photographers subject themselves to critiques. Authors have editors. I will go so far as to consider individual athletes as artists, for — like artists — athletes combine a deep knowledge of the physics of their domain with the creativity necessary to outshine competitors. Similarly, programmers take the rules of code and compose ASCII symphonies, with structure, elegance, patterns, and surprises.
So, then, why is the concept of coaching foreign to the software development profession? Is it a lack of time? Is it arrogance? Is it trust in exploration, forums, and side projects? Are there simply no coaches to be employed?
I’ll concede that coaching does exist in some corners of the programming world. Competitions like the ACM-ICPC tend to have coached programming teams. One might argue that a software project manager is a bit like a coach, too — though in that case, he’d be concerned with the performance of the team, not necessarily the skill development of any individual.
Maybe the professional coders are convinced that individual practice is the only way to get better. Maybe they believe that additional university courses will help them improve sufficiently. Maybe they simply haven’t thought about it.
I have no doubt that an excellent programmer could improve by working with a coach. But it doesn’t happen. Why not?
This is an excellent question. I believe I read it on Joel Spolsky’s blog that some in the professional world see coders as “glorified typists.”
I would predict university classes to offer little to no help in this area either, as one coach (teacher) would not be able to devote very much attention to an individual student in a sizable class. It also heavily depends on the persuasiveness and motivation of the instructor.
Maybe a class where a public peer review on a projector and handouts could provide incentive? It gives direct feedback and allows others to absorb the knowledge as well. Do that for a few volunteer students at first, and work your way through each student in the class throughout the semester? I don’t know… just brainstorming here.
Where I work has a ton of process where code is constantly being peer reviewed by other more experienced programmers, and I make it appoint to encourage my team to seek help outside of themselves on difficult problems. Additionally I have 2 mentors and a coach, but I guess none of them target my coding, they really more focus on my project leadership development.
there are definitely high priced consultants that will do just this. Bob Martin’s company Object Mentor comes to mind.