A discussion of the terms “computer science”, “computer engineering”, “information technology”, “information systems”, “software engineering”, and “programming”.
One of the problems facing the the computing community is its name(s). In my work with high school teachers who teach computing classes I have become acutely aware of just how huge a problem this is. Everything from keyboarding to network administration to software engineering are included under the umbrella “computing” or, sadly, sometimes “computer science”. Which means that it is hard to convince a school that is teaching something like a Cisco/Microsoft/Novell/Oracle certification program that they should also teach an academic course on computing principles.
This problem means that it is not really possible to give “the” definition of various computing terms. In particular, it is quite common for everyone to claim that the most theoretic term, computer science, applies to themselves. I will outline the way that CS theorists seem to me to most often use common terms for computation-related disciplines as an introduction to the way I will use the terms in this blog. I may, occasionally, fall into the common habit of using CS to refer to a conglomerate of computing fields; indeed, that usage is becoming common enough it may be here to stay.
education It is my estimation that everyone ought to be taught to program. I think it ought to be integrated right into the core of education, even more tightly than is proposed by the computing in the core coalition. While I am strongly in favor of CinC, I also think they are confusing terms themselves and that they are guilty of the Pilate problem of taking the easy out instead of standing on principle. Stating that CS ought to be a core high school course fulfilling a math or science requirement may be the most likely way to get it in at all, but we really want it in the core all the way, not just as one of several viable options for HS students. I’d propose teaching programming from first grade on up, not as a glitzy “look what we can do with games” but as a fundamental element of a well-educated person’s knowledge in a world where computers are our principle slaves and workhorses. I expect to have one or more posts on this idea in the future.
Software engineering ought to be offered as a high-school option. This class would probably include a smattering of theory, too; ideas like tractability and big‑O notation, but probably not much more than that. I think colleges ought to require basic software engineering of all students, or at least as many as are required to take calculus.
The rest of computing ought to be taught to people who plan to use it in their careers. A decent exposure to computational theory is important for professional developers, but the random person in another field who occasionally whips up a small program doesn’t really need much IT, IS, or CS.