Apprenticeships in a trade tend to be such that with sufficient hard work and determination, anyone can fill the trade requirements. The problem solving skills of software development don't seem to fit that model - there are some people, no matter how much you train them, don't seem to be able to move beyond "follow instructions" to "give tasks" when it comes to developing software.
The second part is that the trade has a bonded period. Depending on how that is written, this becomes more difficult to enforce with at will employment. It can also lead to companies taking significant advantage of their bonded juniors. I mean... if you think this is a good model, revature is out there.
For developers that have the academics, but not the experience, I've always said that the industry needs to adopt the apprenticeship programs that other trades have. Where you do a mixture of work for the company, and trade schooling run by the industry to teach you the specific skills you need.
For example, an IBEW apprentice will do a lot of gruntwork on the job site. Pulling wire, for instance. But they'll get exposed to how things are done, to trade industry expectations, and what a project looks like from start to end. Part of the week, they spend in a classroom learning the specifics of their trade. Not just the high level theory, but the nitty gritty, based on real world applications and problems. This apprenticeship lasts from 2-5 years depending.
I don't see why this model wouldn't work really well with programming.
Honestly, an apprenticeship model is probably fairly well suited for a lot of types of software development. In my mind it's superior to a CS degree or bootcamp in terms of teaching practical skills.
There's definitely challenges in not turning it into a protectionist thing, but done well I don't think it's a bad thing.
There are several specialty domains in software development that would benefit immensely from a true multi-year apprenticeship program. That said, people tend to gravitate toward software that doesn’t require that level of commitment to make good money quickly. I don’t know that we actually know how to do apprenticeship in software, culturally.
It is why we have chronic shortages of expertise in some software domains even though they are extremely well paid as specialties.
The problem with an apprenticeship model is that the field is moving so quickly. In many cases the younger programmers are better than the older ones whose experience is already going obsolete. The tech they learned is no longer used, and the best practices of yesteryear are now frowned upon.
I wasn't disagreeing. It's sort of "apples and oranges."
I'm a big believer in the apprenticeship system, but I have found it to be profoundly unpopular, with software engineers (in the US), as can be noted by the reaction to my comment.
I consider my software engineering to be as much craft, as it is, vocation, and I had some good mentors.
I've often idly wondered if you could do Software Development as an apprenticeship. Use industry tools in your work day, and theoretical computer science at night schools/block courses.
On the contrary, there are multiple industries where apprenticeships are the norm. There are even a few very successful companies doing software with the apprenticeship model.
I’m quite intrigued by the number of SWEs you’ve trained through an apprenticeship. I think there’s often this tension between those who have been trained at some university and now have a CS degree and those who have “learned on the job” or by some other means. I think that tension also exists elsewhere in other careers - it is not unique to software.
I’d like to think the reality is more nuanced and complicated. Everyone has their preferences for learning. But I wish apprenticeships weren’t so undervalued and under appreciated. This is how we often trained specialized experts for thousands of years. I don’t mean to suggest it doesn’t have its own problems, but I think if it became more normalized it would be an overall positive change.
Not the same problem. Many of the skilled trades not only require an apprenticeship to learn, but also to be licensed to perform the work independently. Coding could probably use more of an apprenticeship path, but there is currently nothing preventing a coder from pursuing just about any type of job that they can talk their way into.
While the apprenticeship model is a good one and can work in software, I would be wary of such an effort considering how rapidly software evolves. Guilds work well for technologies that are fairly stable and require years of practice and study to get right (metal working, carpentry, plumbing, surgery etc.), while with software you could specialize in languages and frameworks that become obsolete in the order of decades.
However, the idea of working closely with Senior Engineers and learning from them is certainly something that I vehemently agree with. I've been fortunate to have had that opportunity.
Apprenticeship has been a thing as long as professions have existed. A common way to justify training an apprentice is to indenture them - they agree to work for you for a set number of years at a given wage, in exchange for training. Then you get professional organizations who negotiate on behalf of trainees/apprentices to make sure that the training wages are fair and the conditions aren't too onerous. Membership in the professional organization is contingent on keeping your indentureship agreements. Programming is such a young profession that we don't have any of that, and I think we need to evolve it.
A master probably could pass it onto their students though. Imagine if we had apprenticeships for software dev the same way we do for other trades. A first year would come in and see how things are done, work on some minor things. Later on when they have skills they can handle more projects themselves and eventually take on their own apprentices. Most of the programming people do is the same old crap and anything new can be learned by self-education there are science components but overall I think we're far closer to trades than a lot of people want to admit.
I'll start off with apologizing the "trade" comment - in my mind I was more thinking the landscape / basic construction. I hadn't really thought about the mental model of hvac.
The "skilled trades" with hvac, electrician, plumbing, carpentry and such where the apprenticeship is more appropriate do have that issue again.
There are people, for whatever reason, can't accept a different mental model than what they've got in their head. Software development is about twisting how you think to that of how a computer works.
I've presented this very light model of "levels":
A junior follows instructions
A mid completes tasks
A senior solves problems
There are people who plateau at each level and never go beyond that for whatever reason. In many cases it is a failure of putting the proper problem solving / learning skills in place to be able to think in a way that isn't the easy way.
I agree. I think the apprenticeship model would work far better for programming than the lecture/assignment/exam model. Solving real world problems and learning on the job under the eye of a mentor would be invaluable.
The person/company offering the apprenticeship would get cheap labour for a few years in return for helping the young apprentice learn everything they need.
There is a whole movement around this called Software Craftsmanship. There are a lot of companies involved and typically they are using the apprenticeship model to bring on new employees and grow the company. The one I'm most familiar with is 8th Light which started in Chicago but is now in Los Angeles, London, and New York City too.
Their approach is more spend 5-9 months having the apprentice do mostly directed self-study, then a kind of final project and other work and, if they pass, an offer of employment. It's a really interesting model that seems to have worked well for them -- they attract developers from both traditional backgrounds and non-traditional.
Sounds like a good argument for apprenticeship-style training. The trades do it fairly well, and I reckon you could probably skill up a number of IT folks and jr coders with a similar approach.
of their own creation or as a contributor, on their own time - even if it means taking on a reduced academic load.
But that's why the apprenticeship model would work so well. I've always thought the way union electricians are trained (a four year apprenticeship, which includes a lot of practical and theoretical schooling, until becoming a journeyman) would be a great fit for software development.
The second part is that the trade has a bonded period. Depending on how that is written, this becomes more difficult to enforce with at will employment. It can also lead to companies taking significant advantage of their bonded juniors. I mean... if you think this is a good model, revature is out there.
reply