Great projects are built by great programmers. The quality of your development team is your biggest indicator of success. We need to make programmers awesome. Not just processes or technologies, though they are excellent supporters and facilitators. An apprenticeship model is a proven and effective way to do that.
Electricians have 4 years of guided practice before they can apply for licensure to practice unsupervised. Professional engineers have 4-6 years in the state of Colorado. Doctors have residency and fellowship. What do we do with programmers?
We take a person with some kind of start and some basic knowledge. Sometimes self-taught, sometimes college lab work, sometimes a bootcamp. They do whatever they need to in order to get their foot in the door and then fight to keep their head above water for the next couple of years. Then, tada! They have arrived. From here, it is up to them to keep growing, which, for most, involves a lot of Google, StackOverflow, trial and error, and maybe just maybe the occasional conference seminar. Trial and error, by the way, is far more expensive for businesses than it looks in addition to being not terribly efficient or effective.
This results in a surprisingly large gap between the standard practice in the field and the state of the art and discussions of things like the "10x" difference in productivity of the best programmers and the average.
So let's define apprenticeship and what makes it different.
It cannot be about knowledge gained and repeated on a test, nor can it be about having 'put in the time' in a program or course. It has to be based on necessary skills that can be put into practice solving professional problems.
This is not about classrooms or books, but about a growing programmer working side by side with someone who has the skills they are developing. That is the way they get the details and nuances that are not on StackOverflow, the feeling of how things go right and go wrong, and get the feedback they need to correct and improve.
Learning by Doing
Classroom and lab projects and hobby projects do not bring the necessary complexities and challenges that professional practice does. Real learning must be done in working environments and real projects. The only way to get sufficient, meaningful practice is to be on the job doing the work full time.
A Defined, Structured Path
What skills must be learned, where are is a programmer in their skill development, and what do they need next? An effective apprenticeship program should have a well-defined path so that everyone involved knows where the programmer is at and what they need to move forward.
A Community of Practice
Professional excellence is more than just skills. It is also values that are lived out in practice. That flourishes best surrounded and supported by a community that shares, demonstrates, and reinforces those values.
To What End?
If we put all those things in place, what would the impact be on a company? In our experience, it results in faster, more robust, more sustainable and more innovative software delivery. Of course, delivering software is why we are here. However, we also see it improve communication, build staff loyalty, reduce turnover, and create sought after cultures in programming shops which makes it easier to hire great people. Economically, it broadens your hiring pool because you can bring in less experienced talent cheaper with the support in place to grow them quickly.
Does your shop give programmers a path forward?
Growing outstanding programmers is why the Rocky Mountain Programmers Guild exists. Let us come into your shop and help build this kind of practice, or send your programmers to us to keep them growing. Check us out here: https://www.rmprogrammers.com/tracks