A Terrible Name for this Business
I double-click on the video I’ve just downloaded from the MIT OpenCourseWare online collection. The recording of the 1986 lecture begins with a nostalgic musical intro, before Harold Abelson walks across the room. He addresses the desks of corporate trainees before him;
“I’d like to welcome you to this course on Computer Science”.
The camera zooms in as his chalk slowly scratches the name of the topic on one of those old green blackboards: C O M P U T E R, S C I E N C E… Finally, he turns around to face the class.
“Actually, that’s a terrible way to start,” he admits. “Computer Science is a terrible name for this business”.
It’s not really about computers
Hal goes on to explain that Computer Science is not really about computers, in the same way that Biology isn’t really about microscopes and Petri dishes. The problem is, when you’re starting a new field, it’s very easy to confuse the ‘essence’ of what you’re doing with the tools that you use.
History is filled with examples, like the origin story of Geometry. The creators of Geometry—the Ancient Egyptians—surveyed their land to restore farmland boundaries after the annual flooding of the Nile river. Doing so involved reasoning and calculating with spatial information. Eventually, these ideas formed the foundations of modern Geometry, and perhaps all of modern Mathematics; a formal way of reasoning with knowledge about space, about truth, about what is.
Of course, realising all this takes thousands of years of hindsight. At the time, the Ancient Egyptians literally just called what they were doing ‘land measurement’:
How about ‘Problem Solving’?
In the same way, we might not really be in a position to come up with a truly appropriate name for what it is, exactly, that Computer Scientists study. In my experience, it really has very little to do with computers.
You see, Computer Scientists study problems. That’s everything from solving an integral, to taking two DNA sequences and counting how many gene transformations it takes to get from one to the other, to finding the quickest route from here to there on a map.
But it’s not that simple; we’re not just coming up with solutions to a particular case of a problem. Instead, we’re looking for a procedure for finding these solutions. We want instructions that you could follow to find an answer once you have the problem specifics, regardless of what they might be.
These are the ‘problems’ we’re trying to solve. The ‘solutions’ aren’t tangible answers, but general strategies.
Imagine trying to solve an integral, but without me telling you which integral it is. Or, trying to count the transformations between two DNA sequences, without knowing what the DNA sequences are. How do you find the quickest path from here to your destination, without knowing where you are? Or where you’re trying to go? Or what the map looks like?
These are the ‘problems’ we’re trying to solve. The ‘solutions’ aren’t tangible answers, but general strategies for producing the answer to any particular problem. We call these strategies algorithms.
Okay, how about ‘Solving Problems about Problem Solving’?
That’s what Computer Scientists study: algorithms. We create algorithms. We analyse algorithms, comparing different strategies for the same problem to see which one is faster, or more economical. A classic example is the armamentarium of algorithms available for sorting (that is, say, ordering a hand of cards by their value, to plug my last post).
We study the inherent difficulty of particular problems, by finding the least possible effort required by any strategy to find a solution. We also relate problems to one another. For example, it turns out that problems involving protein folding—a process underpinning diseases like Alzheimer’s and Cancer—are essentially the same as solving Sudoku puzzles. Actually, so are hundreds of other practical problems with incredibly useful solutions in the real world.
More profoundly, we study the limitations of algorithmic power, asking questions like ‘are there problems that can’t be solved with any algorithm at all?’. As it turns out, there are.
A clever sudoku strategy might solve all the world’s problems.
Image by Tim Stellmach via Wikimedia Commons (public domain)
What’s a better name?
An important part of the study of algorithms is expressing them as clear, unambiguous instructions. That brings us to computers, which happen to be really great at following simple instructions quickly. If we make our instructions so simple and clear that a computer can follow them, then the computer can quickly test our strategy for us, showing us whether the strategy works the way we wanted.
Maybe, thousands of years from now, looking back, it will seem obvious that what we’re really studying here isn’t the computers, but the methods that we can use to solve problems. We’re dealing with how to knowledge: knowledge about the process of finding answers to the kinds of questions that we are faced with every day. That’s my take on the ‘essence’ of Computer Science. What would a better name be?