In South Carolina, a Program That Makes Apprenticeships Work
npr.org
npr.org
We chose people with skills and experience we wanted, and selected for traits we felt would make good developers. (Passionate about learning for example). From the start we've been able to really teach good habits as well as focus on how we do things (testing, continuous integration, version control, etc). Some of the exercises involve rebuilding key components from management systems with the hopes we'll have not only great programmers, but experts on our business when they go from apprentices to full time developers. We're also going to get exactly the employees we want, starting from desirable employees with very little to no programming experience.
If anyone is interested in starting a similar program, I will be more than happy to share my materials, some of the things I would change about what I've done so far, etc. I highly recommend it. The cost is relatively low, we balance the pay with the fact that the people instructing can't do work while they're teaching/helping - so during the apprenticeship it's basically a decently paid internship. They're already producing higher quality work than we've gotten from any outsourcing we've done - we'll be finishing a project by the end of the program that we completely controlled the quality of, got an MVP done pretty inexpensively, and we'll have basically custom built the team for that application. All while teaching the group an entirely new career, I've seen what investing in career growth via continuing studies can do for employee retention, I really think that taking it to this level will give us some great retention numbers in the near future as well.
How long does your apprenticeship last? How much does it pay? How is it structured? Bootcamp style or intern style? Applicant pool versus actual apprentices?
My biggest failure so far was the talk I was most excited for. I put together a talk that went from doing math with voltages, to building logic gates with resistors/diodes, to building adders with logic gates, to building a register and then a really small CPU, then doing some basic assembly operations using those available items, and then showing the higher level function that was comprised of those instructions. I've always wondered how 1s and 0s can do all of this stuff, so going from the bottom up (simplified heavily) was something I thought others would enjoy hearing as much as I enjoyed writing. I really underestimated the amount of assumed knowledge I put into this talk and I had never given it before so it was greeted with confusion.
I've got some more talks I'm excited for I've actually tested out with my teacher coaches though who didn't know how to program. One of my favorites coming up is "comparative anatomy of programming languages".
I told them to budget for 4 months, we're blasting through it pretty fast though.
Pays $14/hr for projects that are for the company. So if I give a talk or they're in the office just working on a problem set, then that's not paid. But they have their apprenticeship project that will be delivered as part of the program, all of that is paid, and then any incidental projects (I may see if someone is around this weekend and wants to write some code that was really easy to abstract from something I'm working on for example). Any grey area goes their way -- for example company meetings they get paid for, or we have company training classes weekly that they've been going to and that's paid.
I basically start every morning answering questions, then I give a talk of some type and a problem set. Problem sets are basically designed to make them better at googling and reading documentation -- I don't introduce every concept, but I try to give a broad overview and then if something is confusing or frustrating I'll go into more detail. Usually just being around to answer questions is enough. I've discovered presentation mode in pycharm and phpstorm so that has been great for coming up with random problems and just walking through my problem solving process including my google queries.
Got 100+ applications (stopped counting after a while), I really wanted candidates so good I felt bad denying some of the others and that is basically what happened. I've got a really solid group of 4.
Hope that answers some of your questions, I really do want to write up everything though and share it -- including my notes, problem sets, etc. It's just about finding the time!
Given current market forces your interns will leave you in 4-6 months. At that point you will have spent the most resources in training them up and not reaped the benefit of cheap labor.
In Germany, apprenticeships last for over 2 years, with your employer responsible for your schooling (which the SC program is doing), in coordination with the unions and the government. It's a system of checks and balances. You can't go out and get work unless you finish your apprenticeship. Finishing your apprenticeship is cultural as well.
I'd definitely like to hear more about your program and what you are doing to address turnover.
Its a smaller group of apprentices, before the program started I talked to each one about salary expectations for them after the program and then also about how I'm investing a lot of my time into them, so I'm hoping they do the right thing and pay that forward. In the end, if someone doesn't want to be there then I think forcing them to stay is worse than talking to them about why and then how we can make it a smooth transition for both of us.
Plus, I'm super proud of what I've built here. If they left, I'm pretty confident they'll make a future manager happy. I'm working hard to create confident problem solvers -- so it's not really the worst thing for my ego if they do awesome somewhere else. As long as I retain a few over the next 5 years, I'll be happy.
So basically, we have some really interesting problems we're working on, the company is a pretty nice place to be, I don't want people being here against their will and business karma (I know if I can't keep them all I won't screw them over with no notice, hoping that comes back to me).
The cheap labor thing ends when they become full time -- my goal is to get them to full time as fast as possible since the goal of the program is to produce full time programmers. By that time, they're being paid what we would hire a dev for -- the biggest benefit is easier to find developers, we know exactly what we're getting, and most have other skills/experience that add more value to the team.
Speaking to the article itself, I can't imagine having gone through one of these instead of college; I was too set in the college mindset at the time and still treasure the experience (though I'm well aware of its shortcomings). On the other hand, any sort of "learn on the job" scenario would have been TREMENDOUSLY welcome a year and a half ago when I was suddenly without work and struggling to break out of the ".NET Programmer" label. Keeping this sort of option open to everyone can only be a good thing.