Computer Science != Software Engineering
I like to think the title of this blog post is common knowledge, but I still see places where the terms are used interchangeably all too often. As Dijkstra is often quoted, "Computer Science is no more about computers than astronomy is about telescopes." Yet, at most universities, the closest thing you can get to formal training in Software Engineering is a degree in Computer Science.
My own college, NC State, was (and is) no exception. I still prefer the approach I took to others that come to mind (a different degree, or a technical school, or some kind of certification approach), but that doesn’t mean I don’t see an area for improvement. If you’re in college (or soon will be), wouldn’t it be nice to be able to focus on software engineering – basically, applied computer science, if that's your interest?
I’m curious what folks out there think we should do – or maybe what various schools out there ARE doing – to prepare the software engineers of the near and not-so-near future.
· Should schools provide a software engineering focus for Computer Science Degrees (there were semi-formal database, graphics, and AI foci available at NCSU when I was there)?
· Should Software Engineering become a formal degree in its own right? I imagine accreditation is the challenge here, but I don’t know.
· Is this something that should only be addressed at the postgraduate level (I don’t think so, but I would like to hear arguments for it if any come to mind)?
The gap between the ‘vanilla’ CSC program at NCSU – when I was there – and the skill training I would have liked (with 20/20 hindsight) would be a more in-depth look at these areas:
- Software development lifecycles
- Large-scale software projects
- Software testing
- (If you're feeling really motivated) A soc or psych class on work-life balance - this isn't really specific to software engineering, but I know 'programmers' are often the poster children for poor work-life balance.
There was a single required class that briefly touched the first two of those areas at NCSU; I tend to think each deserves at least a semester-long undergrad class in its own right. But of course, only if you want to either become a software engineer of some sort professionally, or want to study one or more of those areas academically – so making them all required in the standard Computer Science curriculum doesn’t necessarily make sense.
As always, I’m curious to hear other perspectives – what do other schools do (perhaps even what NCSU has done since)? How would you get more of the ‘professional groundwork’ into college coursework (or do you think it’s unnecessary)?