Last week Doug Peterson pointed me to an article called “Let’s not call it computer science if we really mean computer programming.” My initial reaction was “Let’s not call it computer programming if we really mean software engineering.” Really the author was talking more about the difference between CS and SE than much else.The ACM has a great Computing Careers web site which lists a number of computing fields and degrees. I recommend this series to teachers and guidance councilors all the time. They list five different degree paths:
- Computer Engineering
Typically involves software and hardware and the development of systems that involve software, hardware, and communications.
- Computer Science
Currently the most popular of the computing disciplines; tends to be relatively broad and with an emphasis on the underlying science aspects.
- Information Systems
Essentially, this is computing in an organizational context, typically in businesses.
- Information Technology
Focuses on computing infrastructure and needs of individual users; tends to involve a study of systems (perhaps just software systems, but perhaps also systems in support of learning, of information dissemination, etc.).
- Software Engineering
Focuses on large-scale software systems; employs certain ideas from the world of engineering in building reliable software systems.
For many of us we tend to focus on computer science as if it were the single area. It is the area that most research institutions focus on of course but it’s not everything. I do like the analogy for the article I lead off with that “Computer programming is like writing and performing music, and computer science is like music theory.” Like many analogies you have to be very careful about taking it too far. I think that you’ll find a great many musicians who find that a solid knowledge of theory helps them write and perform music. While there are for sure talented musicians who have not studied theory and there are talented programmers who have not studied computer science I don’t think you can take that as evidence that theory is unnecessary.
I hear things like this “I meet thousands of software developers every year, and the majority are self-taught. I cannot tell the difference by watching them develop software.” taken from the article I referenced all the time. Well I’m sorry the author can’t tell the difference but generally speaking I can. I’m not saying the self-taught are worse, though often they are, or that the CS degreed are always better, sometimes they are not, but they are different. They look at problems differently and they tend to use tools differently. There is value in both but it takes a special sort of person to derive on their own what they could have learned in school. And if you want to be a programmer than study software engineering. Real software engineering is where the self-taught really show up – and not in a good way either!
I think that in high school we are fine talking about computer science and squeezing a tiny bit of software engineering in with our programming, some computer engineering into our discussions, and at least reference IT and IS. The goal in high school is to build interest and expose students to their options. Sure computer science is more theoretical than software engineering and SE is more “practical” by some definitions of practical than CS. That doesn’t make one better than the other though. Sheldon Cooper on TV’s The Big Bang Theory may deride experimental physicists as less serious/important than theoretical physicists but in the real world of education we should avoid such petty comparisons.
As long as we make it clear to students that things open up a bit when they get to college let’s talk about and teach real computer science concepts. They’re going to need these basics no matter which division of computing they eventually wind up in. In fact they will benefit from them even if they go into a completely different field.