Becoming an apprentice is a blow to the ego. It is submitting to publicly acknowledging that you do not know all the answers. It is sharing that you are open to being a student. It is accepting to be mentored by another person.
Those considering apprenticeship who have just finished school may feel that a computer science or similar degree means they are ready to join the workforce with no further preparation. And that is true. The results may be less than optimal but it is an extremely common path to take. After graduating college, one may take the first opportunity at hand and then jump from company to company gaining a year or two of experience with a particular approach, language or toolset during that time. After all, today's workplace no longer matches what our parents enjoyed, with loyal companies providing career-long employment. So this path seems like a perfectly reasonable approach.
Those considering apprenticeship who have already started down the path of regularly jumping from employer to employer may feel like they are committed to that path. It may appear that this is the only way to continue to get experience with new technology because companies seem to be so focused on doing the minimal to get by that the market will accept. As an industry, we shy away from new technology even though we know change is inevitable because we are afraid. Maintaining the status quo is paramount.
The truth of the matter is that you are only as stuck on a particular path as you allow yourself to be. I found myself confronting this conundrum a couple of years ago. I was working on developing a platform used for new websites which was being forked for each new site. The platform itself was an iteration on a prior platform in an older technology. The new platform was desired in order to simplify our approach as the old platform had become unwieldy. In that regard, the new platform was a success. However we still had the issue that there was no clear separation between the platform and the websites built on top of the platform. We had no clear way to bring bug fixes made on one fork of the platform back to the core platform. One way to do this might have been to use unit tests. It would be possible to cherry pick the unit tests and bug fixes back to the main branch of the platform. If we also used testing for development, we could ensure that two branches of the platform did not end up with differing implementations of the same thing that would be incompatible if brought back to the core platform.
I faced this thought in the back of my mind every day that I added a new feature to the platform or forked the code for yet another project. I knew that while it was immensely satisfying to develop, the new platform felt that it was doomed to the same fate. I became incredibly frustrated and ultimately my employer (who I truly enjoyed working for) recognized this. I knew that I needed to figure out another step. Clearly, I was the wrong person to continue in my current position.
I saw that I did not have all of the answers. I had a strong feeling that test-driven development would prove to be immensely useful. But I did not know how to do it. I knew one wrote tests that failed (show as red) and then wrote code that made the tests pass (go green). But beyond that, I was lost and frustrated. So I looked for a next step. While working on the platform, I was faced with many design decisions. One of the resources I often turned to was the blog of Robert Martin. One day, I happened to see mention of 8th Light and was surprised to find not only was Robert Martin in the Chicagoland area but there was a company associated with him with a location near my workplace.
I had many doubts after my initial meeting with some of the software craftsmen at 8th Light. I already was on a good path to keep on jumping employers. The idea of becoming an apprentice was a real blow to the ego and I didn’t know if I should listen to those who advocated against test-driven development.
However, I remained convinced that my experience with developing the new web platform was important. If I was to follow the ethos of my computer science degree, my path was clear: do not turn away but forge forward to figure out how to develop software in a way which is sustainable. Maybe the critics of TDD had a point, but I would need to experience it myself to be certain.
That is how I became an apprentice at 8th Light. Having completed 8th Light's apprenticeship program, I know that as a Software Craftsman I have the skillset to develop sustainable software. I am also part of a company that is committed to developing my skills. I do not think it is by chance that a culture of learning is present at a company that has an apprenticeship program. I no longer feel the need to jump from employer to employer to learn new skills. There are many companies involved in Software Craftsmanship and I encourage you to seek them out if you too feel that there may be a better way to develop software. It is true that my ego took a slight blow. But what I have learned as an apprentice more than made up for it.