The subject was highly technical and there was a crowd of people from all around the Romandie to listen. Let’s be honest, when he started talking, I was hella proud of him and the successful developer he has become. Was that thanks to me, his apprenticeship coach? Of course not! The only person he needs to thank to is himself and his discipline in learning and progressing every day. He earned his success alone and I congratulate him for that!

What is the point of teaching apprentices?

In my opinion, development is closer to a form of art than to technical work. And I don't think art can’t be taught; it has to be found inside oneself and develops with time. The technical part of programming is by far the least important thing I am teaching my current apprentices, as this becomes almost natural after the first months. Martin Fowler once said «Any fool can write code that a computer can understand. Good programmers write code that humans can understand.». This couldn’t be more appropriate when learning how to code. In the beginning their realizations are complex blobs of terrible code đŸ€­.Review after review, the code becomes cleaner, simpler and readable. Eventually the solutions apprentices find tend to be unique and reflecting their own personality. Even though you didn’t even think of doing it their way, you have to admit it’s a pretty cool way to do it...
The trickiest thing to teach are

  • the understanding of why we do things
  • how to make complex things simple
  • how to find astute solutions with elegance
  • how to write code that is maintainable in the long term

Those aren't fixed goals to achieve, nor is it something that can be read in books: it's a work philosophy. I found that the best way to achieve this is to work in real world situations, and let them craft code that is used and appreciated. Working with a purpose matters more than everything else. Fortunately by helping us develop our internal tools, they can do that with less pressure and less fixed deadlines compared to client projects. In these conditions magic can and will happen!

The value of coaching

In many companies, apprentices are considered to be cheap employees only. Trying to catch bits of wisdom from the all-knowing “seniors” who don’t have time for them is not helpful either. Often they are going to work because they have to. Without a learning environment, they are left to their own and miss critical parts of the knowledge needed in the future. I despise this approach and am saddened by the associated waste of talent.

We integrate the apprentices into meaningful tasks right from the start and give them time to find their way around. Simply put, we consider an apprentice as a colleague who needs more time to get things done and try their own way. Sure, it requires patience, and sometimes the ability to explain the same thing 5 times in 5 different ways, but nothing is for free. When you have successfully explained what a javascript closure is to a beginner, you have reached your daily(or weekly) target!
Eventually, it’s them who will teach you technical things, and it happens faster than you’d like to admit. If you still think that teaching is a waste of your time, think about the fact that it might be the best and only way to ensure that the future developers applying to be your colleagues have been taught in a sensible way. It can be a challenging, sometimes frustrating, tedious job. But the feeling you get when they succeed is fantastic!