Hacker Read top | best | new | newcomments | leaders | about | bookmarklet login

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.



sort by: page size:

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.


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.


I actually think apprenticeships would be a great system for software engineering. I'm in no position to implement it, however.

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.

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.


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.

They have a page that goes into what apprenticeship means to them here: https://8thlight.com/apprenticeship/


That's another really good point. There's not much in the way of apprenticeship in software.

Companies will often pay for relo expenses for someone, providing they stay for X years (else they repay the relo money back). Companies could do something similar with education, whether it's local college classes, inhouse training, etc. If you leave within the first year, you pay the company back those expenses. Or... have retention bonuses for people for staying past 1 year, and invest in education for people at lower wages. Many companies would find some real gems out there, waiting to be discovered, and would engender far more loyalty than most currently get.


Does anybody else think that Software Engineers might benefit from a master/apprentice learning style?

Experienced devs could take on an apprentice for a year, kind of like an internship, and the apprentice moves does 3-5 of these before moving into a dev role themselves.


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.

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.


Totally agree with this. I've been saying for at least 10 years that Software Engineer should be a trade not something you go to university for. If you want to be a researcher then academia is the right path, but if you want to build software a trade program / apprenticeship would be much more effective imo.

I've interviewed 100s of university grads and most of them don't know how to actually do anything useful. They have the foundations to grow into the position, but they certainly need someone to hold their hand for a while.

One great example is IBEW electricians. They do a 5 year program. 6 months class room, 6 months on a job site as an apprentice applying the skills learned. Repeat for 5 years with gradual pay raises until you hit journeyman and it jumps up to full union scale.

I think the exact same type of program would work GREAT for software engineering. Learning for 4 months in a vacuum and THEN working in the industry for the first time is a terrible idea. However, doing 6 months back and forth would allow you to apply what you learn and more importantly to learn what you don't know so you can focus on those things during the classroom segments.


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.

Seems like a no-brainer to me. Most skilled professions provide some sort of apprenticeship track where you balance some mundane tasks with more complex tasks working with skilled professionals in the discipline to learn the trade better. You're not paid at industry high rates initially but provided a reasonable timeline for full competitive pay employment into the profession.

New and young surgeons don't start out day one on the job after six years or so expected to perform a successful open heart surgery, like software engineers are essentially expected to do. You also don't have civil engineers designing full dams or bridges on day one of their job after their bachelors or masters.

Software on the other hand thinks that for some reason, you transition from student to expert in the blink of an eye or can simply pick up what you need in a few weeks. It's completely unrealistic and businesses need to realize the value and necessity of apprenticeships and mentoring.

The problem with this though is that technology is so diverse (now more than ever) that a certain amount of skill you learn at a business is going to be non-transferable as opposed to other professions where their craft is mostly constant.

This means employees are a little less interested in these commitments because it can tie their skillsets to a specific employer if the employer isn't keeping with popular industry trends. It's also a cost employers and employees often don't want to pay in a world where employer/employee loyalty is non-existent. I think for apprenticeships to work, they need to provide transferable skills/knowledge and or provide some basis of loyalty and long term commitment goals between an employer and employee. Both of these seem like incredible obstacles in the current development climate.


Don't you have programming apprenticeships in your country?

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.

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.

This isn't just a hypothetical approach. In the Software Craftsmanship community, consultancies have run apprenticeship programs for years with very good results. Scaling to large businesses might not be easy, but they certainly aren't the only game in town.

I'm proud of my CS background and I wouldn't trade it, but it's interesting to work next to terrifyingly bright guys in their 20s with deeper grasp of design and modern technology than most CS grads.

next

Legal | privacy