Unlocking Programming: What is CS?
© 1 Aug 2011 Luther Tychonievich
Licensed under Creative Commons: CC BY-NC-ND 3.0
other posts

Unlocking Programming

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.

Computer Literacy
How to type, access email, use spreadsheets, install programs, etc. At the time of writing, the average person who “‍is good with computers‍” has computer literacy without any skill in any of the other topics in this list. The boundary between literacy, IT, and IS can be a little fuzzy.
Information Technology (IT)
Deals with how to set up physical equipment in order to achieve a particular computing environment. Sometimes used as an umbrella term for IT and IS. IT departments sometimes include all of the computing fields within a company, including CS and SE.
Information Systems (IS)
Deals with setting up large software environments by selecting, purchasing, and maintaining databases, productivity tools, software site licenses, etc. Rarely used as an umbrella term for IT and IS; when so used, often abbreviated “‍sysops‍” or “‍systems‍”. Most certification programs are IS certifications.
Computer Engineering (CpE)
The art of designing computer hardware, a branch of electrical engineering with overlap with CS.
Telling the computer what you want it to do. In particular, programming takes a well-defined process and translates it into simple enough steps for a computer to follow. Also called “‍coders‍”, both terms are sometimes used for developers as well, though I’ve known some to be offended by that. The boundary between programming, software engineering, and computer science can be rather fuzzy; most, if not all, software engineering and CS practitioners are also programmers.
Software Engineering
Software engineers translate vague requirements given by the customer into a crisp, well-defined processes that may be programmed. The term “‍software developer‍” or simply “‍developer‍” is used to refer to software engineers that are their own programmers. Software engineering includes requirement elicitation, software architecture, project management, software design, testing, and “‍maintenance‍”—the last being a catch-all term for software engineering that takes place after some version of a product is delivered.
Computer Science (CS)
The mathematical and scientific study of all elements of computation. CS contains many sub-fields which can generally be categorized into theoretic analysis of what computers can or cannot do, small-scale algorithms for problems that appear across computing fields, and the intersection of computation and topic X. CS is often used as a generic term for all computing disciplines, though some people get upset when it is used to refer to IT, IS, and CpE.

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.

Looking for comments…

Loading user comment form…