Always two there are, a master and an apprentice
When learning a trade, the master/apprentice relationship can be tremendously useful. It is a slow path, but an effective one. It's a great way to pass on the lessons from the past.
And not only is the knowledge of skills passed on to future generations, so is the knowledge of common pitfalls. As an apprentice begins to make mistakes, the master can correct them immediately, potentially avoiding much of the headache associated with recovering from the error. And we all know that the earlier an error can be recovered from, the smaller the consequences.
However, you don't see very much of this in the programming world. I think there are a few reasons for this.
- Being self taught is encouraged. If you can learn yourself just by rtfm, then you haven't wasted anybody else's time.
- Programmers all think that they can solve the problem better themselves.
- There tends to be a high turnover in the programming industry.
But then, each generation is doomed to repeating the same mistakes. And with programming, it's difficult to know when you're making a mistake. But, a master can point this out right away, and correct it before it becomes a major problem. This can save an enormous amount of time, and greatly speed up the learning process.
Programmers, and those expecting programming based solutions, are usually impatient. There's enormous pressure to release the next best thing yesterday. The programming field also changes rapidly, and it will probably continue to change at an even faster rate in the future. It should be no surprise then that programmers are in a rush.
But the flip side is that it takes a while to become a great programmer. We really need to experience many failures before we can identify how to architect successes. And contrary to popular belief, it takes years to become proficient.
If there are no silver bullets, then I think that encouraging master/apprentice relationships can help propel us as a whole in the right direction faster.