Developer Education vs the Real World

I had a really good discussion recently with a masters student in software engineering revolving around volatile technology and how to avoid learning something that won’t be relevant in the next year (specifically Flash). It quickly moved to the topic of learning / keeping up with technology in a post-secondary setting vs the real world.

I went to a technical college (SIAST Kelsey) and took a Computer Systems Technology course. It was a two year program that focused primarily on software development, also touching on networking, hardware, and server administration. I get asked pretty regularly if I did it again, if I would take a university Computer Science or Software Engineering course, and every time my answer is no.

Don’t get me wrong – those courses are great, but I think they focus on different things. This was solidified for me after a recent conversation with a Com Sci professor. We were discussing the co-op program (where students work for semesters at a time at an actual business) and why a large majority of grads have little-to-no web development experience. His reply summed it all up for me – universities aren’t concerned with students having jobs when they graduate. If that’s the outcome of their 4 (or more) year degree, that’s great, but that’s not the primary focus of a university. The focus is to further academics.

Now that I hear someone say it, it makes a lot of sense to me. Unfortunately I don’t think a lot of students realize this is the case. I imagine your average university student picks their major based on either what they’re good at or the career they want when they graduate. And having a com sci / software eng degree doesn’t impede that by any means, most employers look for some manner of post-secondary education. What I think this means is as a student, you’re going to have to focus separately on skills that are valuable to the industry rather than what you were taught at university.

Missing Skills

My course was a lot more focused on the “applied” aspect of software development, to the point where we had a project class in which we worked with an actual local business client to create an application for them over the course of a year. Even with this modified and focused workload there were still several things that I didn’t learn until after I graduated, including

  • How to debug someone else’s (legacy) code. This is HUGE. Almost all projects I worked with in school were “greenfield” in that they started from scratch and didn’t involve working with an existing codebase. This is an immensely valuable skill and odds are as a new grad this is the first thing you will do at your new job. I would love to see schools have some sort of course where you picked up from last year’s project team and had to debug / add features to a legacy codebase.

  • Retrospectives. Whether you’re agile or not, setting aside time to critically look at your processes as a group has been one of the most useful tools I’ve used in my career. This has enabled me to take a objective approach to software development techniques and analyse whether what I’m doing is actually helping or hindering the process.

  • How to keep up to date. School can only teach you so much, and in most cases what they are teaching is years behind current industry trends. A class on the why and how to keep updated in the industry would be beneficial, if not to get students into the habit of keeping ahead of the curve and staying relevant in the job market.

  • How to analyze tools. Technologies that we work with every day, from a project-management level like Kanban to a code level like JSON.NET, are all tools. As tools, they are good at certain things and they are bad at certain things. Knowing how to identify the pros and cons of a certain tool, as well as the practice of viewing technology as tools (as opposed to religions or “golden hammers”) would equip students to make smart business decisions in the real world.

A few of these things can’t really be taught by anything other than experience, but there are a few ways that we can at least prep students to be prepared to learn these things. Incorporating these into applied / practical courses would do nothing but benefit students and the industry as a whole.