Software apprenticeship programs are popping up all over the place in software. They are a response to the common notion that contemporary academia is not a perfect model for teaching software, as more employers feel the need to intervene and take some ownership in training their employees. Ideally there would be a complementary balance of training through both universities and employers; but until we get there, I think there are reasons to embrace these employer-sponsored apprenticeship programs. When I talk about an apprenticeship program, I am not talking about an apprenticeship itself. An apprenticeship is a time of learning a craft, traditionally around seven years long. For me an apprenticeship program is a 3-9 month employer sponsored kickstart to that apprenticeship. It is where a company has a mentor and provides the material for full time learning.
Demand for software is increasing
The demand for software professionals is rising every day. More software is written each day than the day before. Our world is dependent on software to run, and in my opinion that will only become more true for the foreseeable future. Software-related jobs are in high demand, counter to the larger economy where work is difficult to find. This means businesses can't wait 4-6 years for talent when they have to compete now. The consequence of not waiting is having a less than fully trained workforce.
The apprenticeship program will give an apprentice enough experience, knowledge, and discipline to reach the minimum standards of quality that the business demands. As a result, the business gets a professional who will be unlikely to make mistakes where the industry simply knows better. For example, using standard practices as TDD, refactoring, design patterns, etc.
Software industry is constantly evolving
We are inventing new techniques, processes, and even entire jobs almost every year. Adding to this rapid change is that the best talent in our industry is in demand for higher paying jobs than academia. This makes academia at its current rate ill-equipped to keep up. Academia has some of the smartest computer scientists, just not enough trained CS teachers to scale to the entire collegiate space. This is further exemplified with companies like Microsoft, Google, and Amazon having academic style institutions inside their culture (white papers, research, etc.).
As the software industry matures, this will likely change to a mixed education model that features different focuses on theoretical and practical learning. However, what it means currently to be a professional is still evolving on the front lines of software. It is the companies writing software that are defining quality and best practices. We see many effects of this with strong conference, blog, and user group communities. Software is being defined and taught by the professionals producing software.
An apprenticeship program embraces this reality. It matches a learner with a leader. A one-on-one relationship with someone who is on the front lines of software production and knowledge is the best way to learn to write high quality software.
Software is a practical learning
You learn how to write code by writing lots of code. You cannot learn to write code entirely by reading books. Software is a craft with a feedback loop intimately involved in the learning process. You perform, analyze, and refine the skills. This feedback loop repeated for years is what makes you a professional.
This practical learning shows itself in how software can be a self-taught industry. You can become good at writing software by doing it over and over. It is unlike being a nuclear scientist or a doctor, where the theoretical context required is incredibly large. Apprenticeship programs put some guidance to this practical learning.
Software is an industry that lends itself to apprenticeship programs sponsored by the employers. Education is the easiest way to move an industry forward by raising the bar of professionalism. The quicker that employers step in and grow these programs, the quicker we can raise that bar. Apprenticeship programs are a long term play that won't solve todays staffing needs, but will help grow quality professionals. As our industry codifies training, we can seek ways for a more traditional relationship between schools and employers.