Computer Science isn’t
Computer Science is a terrible name for this business.
First of all, it’s not a science. It might be engineering, or it might be art. Or we’ll actually see that computer science actually has a lot in common with magic, and we’ll see that in this course. So it’s not a science.
It’s also not really very much about computers. And it’s not about computers in the same sense that physics isn’t really about particle accelerators, and biology is not really about microscopes and petri dishes.
And it’s not about computers in the same sense that geometry is not really about using surveying instruments. In fact there’s a lot of commonality between computer science and geometry. Geometry first of all is another subject with a lousy name. The name comes from gaia meaning the earth and metron meaning to measure. Geometry originally meant measuring the earth or surveying.
And the reason for that is that thousands of years ago the Egyptian priesthood developed the rudiments of geometry in order to figure out how to restore the boundaries of fields that were destroyed in the annual flooding of the nile. And to the Egyptians who did that geometry really was the use of surveying instruments.
Now the reason that we think computer science is about computers is pretty much the same reason that the Egyptians thought that geometry was about surveying instruments, and that is that when some field is just getting started and you don’t really understand it very well it’s very easy to confuse the essence of what you’re doing with the tools that you use. And indeed, on some absolutely scale of things we probably know less about the essence of computer science than the ancient Egyptians knew about geometry.
Well what do I mean by the essence of computer science? What do I mean by the essence of geometry? You see it’s certainly true that these Egyptians went off and used surveying instruments, but when we look back on them after a couple of thousand years we say gee, the important stuff they were doing was to begin to formalise notions about space and time. To start a way of talking about mathematical truth formally that lead to the axiomatic method that lead to all of modern mathematics. Figuring out a way to talk precisely about so-called decarative knowledge: about what is true.
Well similarly, I think in the future people will look back and say yes, those primitives in the 20th century were fiddling around with these gadgets called computers, but really what they were doing was starting to learn how to formalise intuitions about process: how to do things. Starting to develop a way to talk precisely about how-to knowledge [imperative knowledge], as opposed to geometry that talks about what is true.
Here is a piece of mathematics that tells you what a square root is:
Now that’s a fine piece of mathematics, but just telling you what a square root is doesn’t really say anything about how you might go out and find one.
Let’s contrast that with a piece of imperative knowledge, how you might go out and find a square root. This in fact also comes from Egypt, not ancient ancient Egypt, this is an algorithm due to Heron of Alexandria called how to find a square root by successive averaging:
That’s a method. That’s how to do something as opposed to declarative knowledge that says what you’re looking for.
That’s a process.
Defining process and procedure
Well, what’s a process in general?
You can think of it as like a magical spirit, that lives in a computer and does something. And the thing that directs the process is a pattern of rules called a procedure. So procedures are the spells, if you like, that control these magical spirits that are the processes. Now I guess you know that everyone needs a magical language, and sorcerers, real sorcerers, use ancient Arcadian or Sumerian or Babylonian or whatever. We’re going to conjure our spirits in a magical langauge called LISP, which is a language designed for talking about… for casting the spells that are procedures to direct the processes.
Now it’s very easy to learn LISP. In fact in a few minutes I’m going to teach you essentially all of LISP. I’m going to teach you all of the rules. And you shouldn’t find that particuarly surprising. It’s like saying, “It’s very easy to learn the rules of chess.” And indeed in a few minutes you can tell somebody the rules of chess, but of course that’s very different from saying that you understand the implications of those rules and how to use those rules to become a masterful chess player. Well LISP is the same way. We’re going to state the rules in a few minutes, and it will be very easy to see. But what’s really hard is going to be the implications of those rules, how you exploit those rules to be a master programmer. And the implications of those rules are going to take us to the whole end of this subject and of course way beyond.Harold Abelson – Structure and Interpretation of Computer Programs, Lecture 1
Here’s the first lecture (more links below)
Richard Hamming c. 1995 on why computers are (going to be) a thing
Writing Before: High-Level Language, Code and Subroutinity
Alan J. Perlis on Programming and Avoiding the Constipation of Philosophy
Resources: Software is eating the world
Podcast recommendation: Mark Andreessen on Software Eating the World (2019)
Technology (20): Software Eats the World (again)