I really enjoyed university and much of what I learned on my undergrad engineering degree. However, most of the skills that I required for software development, I learned on the job at IBM on my student internship, not from my undergrad engineering degree. I was very disappointed in the software engineering course that I took in university, as it was primarily droning on about waterfall models and documentation driven development, and had very little substantive content. I learned a lot of mathematics and physics at UofT, but very little of it was useful. I was once really pleased with myself when I figured out that I could do compute some partial derivatives on the job to compute error-bars in some statistical performance analysis, but that one time calculation, was the only non-trivial math I ever used in about 20 years at IBM. In short, most of the specifics I learned at University were of little value.

My view of the engineering degree I obtained, was that it was mental training. They tossed problems at us, and we solved them. By the time you were done your undergrad degree, you knew (or at least believed) that you could solve any problem. There’s definitely value to developing that mental discipline, and there’s value to the employer as a filtering mechanism. Interestingly, my first manager at IBM as a full time employee told me that they preferred hiring new engineering graduates over new computer science graduates. That is despite the fact that many of the computer science courses are quite difficult (computer graphics, optimizing compilers, …), and arguably more relevant than all the physics biased courses that we did in engineering. Perhaps that preference was due to the problem solving bias of engineering school?

An apprenticeship based recruitment system can potentially save software companies a lot of money, as it should provide cheap labor for the company and a valuable opportunity to learn real skills for the apprentice. It’s a good deal for both parties. You can get paid to learn, vs. going to school and paying to learn things that are not truly valuable. I’ve actually been very surprised that IBM, who is offshoring so aggressively to save money, has not yet clued in that they can hire students directly out of high school (or earlier!), for much less than the price tag that a university/college graduate would demand. While offshoring is nominally cheap, unless the whole team is moved, it introduces large latencies and inefficiencies in development processes. Hiring out of high school would provide companies like IBM that are desperate to reduce their costs, the chance of acquiring cheap local talent, free of the hassles and latencies of splitting the team to pay some members offshore rates, less benefits, and so forth.

Assuming that a university degree is not actually useful, the problem to be solved is one of filtering. How does a company evaluate the potential of an untrained candidate without using (potentially useless) accreditation as a filter? I’d guess that we will see a transition to IQ style testing (although that is illegal in some locals) and a bias for hiring youth with demonstrated interest and proven open source project contribution history.