Computer Science as an Abstract Form of Engineering
I recently came upon a lecture on The Structure and Interpretation of Computer Programs by Hal Abelson and Jay Sussman from 1986, which compared computer science to other forms of engineering. I always thought software engineering had some fundamental property that made it more powerful than let’s say electrical or chemical engineering, but I couldn’t quite express what that property was.
The answer is that computer science is like an abstract form of engineering, as Abelson puts it - the constraints imposed in building large software systems are the limitations of our own minds.
This is an abstract of that first lecture:
Computer science, in some sense, isn’t real. You see, when an engineer is designing a physical system, that’s made out of real parts. The engineers who worry about that have to address problems of tolerance and approximation and noise in the system.
Computer science deals with idealized components. We know as much as we want about these little program and data pieces that we’re fitting things together. We don’t have to worry about tolerance. And that means that, in building a large program, there’s not all that much difference between what I can build and what I can imagine.
So as opposed to other kinds of engineering, where the constraints on what you can build are the constraints of physical systems, the constraints of physics and noise and approximation, the constraints imposed in building large software systems are the limitations of our own minds.
So in that sense, computer science is like an abstract form of engineering. It’s the kind of engineering where you ignore the constraints that are imposed by reality.