A quote by Joel Spolsky: “you can go through thousands of job applications and quite frankly never see a great software developer. Not a one”. That is a problem Christian had too with his company. Finding a good programmer is hard.
And hiring is delicate. If someone doesn’t work out, you could be blowing a lot of money. And the programmer in addition also has to fit into the culture. And what comes out of the university often isn’t immediately usable for various reasons. Soustrup said something like “a lot of people can write a single function but haven’t build a full system before”.
Christian views programming as a craft. Craftmanship is something you learn from a master. Apprenticeships are also relatively cheap compared to the money you lose on a mis-hire. Apprentices are often young and thus are quick learners. They also adapt quickly to their working environment.
One thing they have to learn is to look for information themselves (google, man pages, RFCs).
A risk in apprenticeships is that they’re only training code monkeys. Without much theoretical background. That can be fixed by following a couple of courses at a university for instance.
Christian also supervises some apprentices in another company. He goes over every 6-8 weeks to work with them for a week: basically a sprint.
The most important things he learned:
Rubber ducking. Don’t immediately solve the apprentice’s problems but let them explain it to you. Most of the time they’ll discover it by explaining it to you. Keep yourself in check.
Allow them to make mistakes. Mistakes is what you learn from. Mistakes are important.
The trainer has to be a good programmer. Otherwise he’ll just try and solve problems instead of helping the apprentices figure it out themselves. The apprentices must actually be programming. And include them in your daily business. Three apprentices seem to be the optimal size. Be prepared to do a lot of explaining over and over again. They’ll get it eventually.
Summary: it is worthwhile and cost-effective to coach apprentices.
Laura’s tip: ask prospective apprentices why they want to do this. If the answer is not “I want to create something”, pick another.
My name is Reinout van Rees and I program in Python, I live in the Netherlands, I cycle recumbent bikes and I have a model railway.
Most of my website content is in my weblog. You can keep up to date by subscribing to the automatic feeds (for instance with Google reader):