new site();

Computer science education is not vocational training

2016-12-28

There's something I noticed in my Quora feed, that I couldn't quite put my finger on until now. It manifests itself even in the various social media gathering places specific to the Georgia Tech OMSCS community, in particular for candidates that are not in the program yet. It even seems to affect people who ought to know better, such as undergraduate computer science majors who work in the software industry. What I'm referring to is the belief that a computer science education is any more than tangentially related to software development work, as it is done in the real world.

The arguments in favor of a close relationship between the two are obvious: they both involve computers, to a degree of sophistication that is greater than that needed to do, say, accounting or finance or CAD. Having foundational knowledge about computers and how they do their thing is actually kind of helpful when making certain decisions in designing and creating software, specifically when writing low-level software. Also, in a CS program you often have to write programs, which is kind of like software development, so there's that too.

However, the arguments against are far stronger, including the huge number of successful, talented software developers that do not possess a CS education at all. There is the fact that software development is usually a single class taught in such a program, not a major or even a concentration, which should (but apparently doesn't) demonstrate that software development is a subset of, or maybe an application of, computer science. There is the fact that real-world software development is largely an exercise in framework and tooling choices, in architecture and design, and in learning how to write expressive, readable, and maintainable code--while none of these things are taught in any depth in a CS curriculum.

So why does it matter? Because by expecting a computer science education to make you a good programmer, you are both asking too much and too little of the experience. It is too much to expect that you could learn all these skills in a classroom, and too little to expect that software development would be the sole aim of computer science. There is also the fact that useful vocational training in software development is still kind of lacking, and though we use the term "software engineering" a lot (too much?) there is still no firm, industry-wide acceptance of the term or what it means, such that you could build a curriculum around it--and while students, employees, and employers continue to equate a CS degree to having a software development background, this curriculum will remain unfinished.