Education and Software Engineering

Recently I read Michael Fox’s post on Australia needing more software engineers and Mitchell Harper’s SMH opinion piece on the deficiencies of our university system for teaching software engineering. Interesting. I’ve done a bunch of hiring of engineers in Sydney over a number of years, so I’ve an opinion in these areas too.

Is it true?

Wanting to know if it was an accepted statistical fact, I quickly scanned the Department of Education, Employment and Workplace Relations skill shortage lists, but this didn’t reveal any particular shortage in IT generally. Anecdotally and through my own experience, recruiting engineers can be difficult, but we’ve also never had a shortage of applicants, even for niche roles. A lot of the difficulty arises in finding top notch talent, not finding people to interview.

So the issue is not volume, but talent, and it is a skills shortage. We have the people, but the people don’t have the skills. This makes sense: people in software engineering are well paid, and get to do interesting, challenging work, so there is no doubt that it’s an attractive role. Knowing that you want to work in software engineering and having desirable skills are two separate things.

Does university teach how to be a good software engineer?

Reflecting on my own undergraduate education (studying Information Systems at the University of New South Wales), the computer science curriculum was geared towards fundamentals. The first year course was taught in Haskell, which I think many professionals would agree is a great introduction - it makes prospective engineers think in functions and side effects and is an ideal teaching language. The sum of these subjects is a good background in computer science, not an industry ready developer.

Even today (review the curriculum here), the focus is mostly on core computer science and mathematics. There is nothing related to practical industry needs, or web development, or best practices for organising work and teams. Reviewing Stanford’s computer science curriculum shows a remarkably similar set of subjects, so if we have a problem I don’t believe it is restricted to Sydney or Australia.

What is the role of university anyway?

The big, age old question is whether it is the role of university to prepare students for industry? For Harper, the answer is “yes”: “Australian universities are not producing workplace-ready engineers”.

While in my opinion it’s not the job of university to prepare “workplace-ready engineers” (I’m of the opinion that the fundamentals and theory perspective is the proper focus for 90% of a degree, and that a career ready engineer will develop on the job), I do think that there should be some level of preparation, and a suitable level of preparation would be relatively easy to deliver to students. One or two semester long courses on industry practices would be give an undergraduate student a good head start.

In reality there will never be enough time in an undergraduate degree to fully prepare a student for industry (my suggestion of one or two semester long courses would have to take a strong opinion on languages and processes, and would just be the start). Harper says that “They’re quite simply not being taught the right languages, methodologies, processes and problem solving concepts”, but even to teach the “right” languages in the “right” way would take such a chunk of a student’s time that there’d be precious little time left for the real science to be learnt. Indeed, for Harper’s BigCommerce, the right language would be PHP, and would most certainly be counter-productive for young engineers to learn. I’m surprised to read Harper saying that they’re not being taught problem solving concepts at university, and I’d like to know more precisely what he means by that.

Students are being taught to be engineers, but mostly industry is more interested in half-engineers, half web-developers. The best web developers have built on fundamentals, the type of fundamentals a student learns at university. Some good web developers have self-educated and not attended university, and for the right individual there is no doubt there are probably few careers that accomodate the self taught so well. There are precious few shortcuts to learning those fundamentals though.

The real problem

So, industry wants graduate engineers who can hit the ground running and can deliver value straight away with the particular languages and processes that a specific company has chosen, and has no time to develop individuals with potential. Why blame universities for not catering to this type of demand? University needs to deliver timeless knowledge built on science and learning, not cater to the whims of a fast paced industry, trying to predict every fad that comes along.

Companies can complain, but there’s a quick way to solve this problem: take students with potential and train them with your languages, your processes, your engineering ideals. This is also the slow way to solve the problem, but hey, better than complaining.

(I plan to write a separate blog post about what my training for a graduated software engineer would cover).