This post previously appeared on my blog, 'Absolutely No Machete Juggling'.
Whenever there is a discussion about what Computer Science is and what it is not, it is a near-certainty that a particular quote will soon be used.
Computer science is no more about computers than astronomy is about telescopes.
This quote, attributed to the brilliant Edsger Dijkstra is such a perfect little summary of what Computer Science is, and it explains so much about the field in a very short space, it’s ideal for explaining CS to those outside of the field.
The problem is, it’s bullshit.
This quote is an attempt to explain that Computer Science is about Computation, not Computers. It’s about algorithms, complexity, and so on; those whirring boxes under our desks are just TOOLS for studying the real SCIENCE. I’ve been guilty of using this quote myself on more than one occasion, largely as a way to make my degree sound more academically pure (harder) somehow.
If the quote were about “purely theoretical computer science” then perhaps I could agree. Indeed, Alan Turing created the foundation of computer science well before computers existed, and the Church-Turing thesis suggests that “computer science” can be studied with purely theoretical models of computation such as Turing machines, or with just \(\lambda\)-calculus. But anyone with a CS degree will tell you that turing machines and calculus generally only come up in classes with the word “theory” or “model” in the title. Whether originally intended or not, Dijkstra’s quotation is generally used with regard to the entirety of the modern-day Computer Science college degree. And in that context, the quote is nonsense.
When you major in Astronomy, you take courses about the galaxy, physics, gravity, cosmology, black holes, and so forth, but not telescope construction, telescope optimization, historical telescope engineering, and lens alignment.
A typical Computer Science degree will include computer architecture, compiler design, compiler construction, networking, and operating systems. These are courses that are unquestionably about actual computers. Sure, they are informed by the theoretical material, but ultimately the thing being studied is an actual machine. Go find a CS major in an architecture class, studying the way that processes are laid out in memory and how to optimize memory allocations to be in multiples of the cache size for memory optimization, and tell them that their degree has nothing to do with computers.
I’ve also often heard “Computer Science is a branch of mathematics.” This, too, is nonsense. Computer Science uses a lot of math, but it’s no more a subset of math than physics is a subset of calculus. You could take every single math course offered at every single school in the world and never wind up learning anything about how file systems are implemented. It’s not a subset. Go ask a mathematician if CS is a branch of math.
Despite the constant drive to figure out which thing Computer Science is most like, the truth is that no analogy is good for Computer Science. Computer Science isn’t like any other discipline. It’s a weird hybrid between science, mathematics, and engineering. It’s all of those things at once, and none individually.
When I was an undergrad, my school had 3 divisions under their College of Arts and Sciences: humanities, social sciences, and natural sciences. Computer Science was categorized as a natural science. A few years after I graduated, the major was moved not only out of that category, but out of that entire school, and into the School of Engineering. It went from being considered a science to being considered engineering. I think it’s bizarre that so many people try to claim they can explain what Computer Science is with a 12 word pithy quote when universities can’t even seem to settle on it.
I respect Dijkstra immensely, and this quote may be true of theoretical computer science, or even CS within academia, but it’s not based on what a typical Computer Science major will study. I can understand using this phrase as a way to avoid providing technical support and virus removal services to friends and family, but in terms of actually understanding the nature of the degree, I think it’s quite unhelpful.
When high school students post to various forums asking about CS, expressing interest in computers and programming, inevitably some pompous jerk will roll his or her virtual eyes and explain that CS has as much to do with computers as astronmy does with telescopes. I think someone who truly has that view of Computer Science has about as good an understanding of the degree as the people who “just want to make games”.
Computer Science isn’t really a natural science, but it’s also not really a math, nor is it really engineering. Computer Science isn’t like anything, it’s like Computer Science.