[Evans] This is definitely a subjective question,
and it's kind of strange that a discipline like computer science is so poorly defined
that if you ask many computer scientists what it is you'll get very different answers.
But my answer to this is it is engineering, it is a science, and it's also a liberal art,
that all 3 are true, and I'll explain why next.
This is the way I tend to think about engineering
is it's building big, complex structures that solve physical problems
like getting cars across a bay of water.
With that narrow view of building physical things,
most of what we do in computing is not about building physical things,
it's about building virtual things, it's about solving problems.
A broader view of engineering views it as design under constraint.
When you're building a bridge, the constraints are the laws of physics.
You need the bridge to stand up, but you want to limit the cost of the bridge,
the amount of material that you use, you want it to not sway too much in the wind.
These are all the kinds of constraints that you have to think about in designing a bridge.
When we build computer programs, we don't usually have to worry too much
about the laws of physics.
We've seen that they do affect us--that the speed it takes for light to travel
affects how fast our programs will run--
but for the most part when we're designing programs,
this is not the main thing that we're thinking about.
The main constraint that we have to worry about is the limitations of human minds.
What we can do is limited by our creativity,
but it's also limited by how much we can keep in mind at one time.
The main tool that we have to solve this is abstraction.
The point of abstraction is to allow us to limit what we have to keep in our mind
to be able to solve problems by hiding those details
and thinking about things at the right level
and designing programs in a way that we can have a procedure
that solves the problem that we want,
and then we can forget about the details while we move on to the next part.
That's all about using abstraction to overcome the limits of human minds
in terms of how much we can keep in mind and understand at one time.
So from that perspective, computer science is definitely about engineering.
We certainly want to build things.
We're not building things like bridges, and we're doing that under constraints,
but the main constraints are not from the laws of physics--
because we're not building physical things--but from the limits of our own minds.
We tend to think about science as understanding nature through observation,
and our favorite example of this is Sir Isaac Newton.
If you can't recognize this, this is obviously Newton
because he's sitting under an apple tree
and the probably untrue story of him understanding gravity
because of an apple falling on his head.
In computer science we're mostly not focused on understanding nature,
at least not in a very direct way.
We're thinking about abstract things.
We're writing programs to solve problems, but they're dealing with
abstract representations of those problems.
Certainly computing is used all over the place
to build better models of the universe
and to test those models,
but that's a little different from saying that computer science itself is a science.
But there is a lot of computing in nature.
Certainly physical processes involve computation.
The other big example today is really in biology.
If you think about DNA as programming organisms,
it's a very complex way of programming,
but it's also very computational.
And if you think about biology, biology is really all about computation today.
So certainly if we want to understand nature better,
both how human minds work--that's largely about computation--
and how DNA produces biological organisms
and how DNA evolves over time, that's really about understanding computation in nature.
We didn't get to this too much in this class,
but this question about universality, questions about what can be computed
and how fast it can be computed are really fundamental questions about science.
They are questions about our universe.
They are abstract questions in the sense that we can form them
as mathematical, precise questions,
but they are also really questions about what are the limits
and what are the possibilities in our universe.
The final correct answer was liberal art.
In some sense this is arguably the easiest one to defend,
but it's probably the one that was most surprising to many of you.
Understanding why computer science is a liberal art
depends on actually understanding what the liberal arts are.
Here's a picture of the medieval view of the liberal arts.
There's grammar, rhetoric, dialect, which we think of as logic today.
Those are the 3 that have to do with language,
and then there are 4 that have to do with number.
The 4 that have to do with number are arithmetic, geometry, music,
which is number in time, and astronomy, which is number in time and space.
So how do each of those relate to computing?
We've certainly seen a lot with grammars.
We've seen rules like this.
Rhetoric is about using language to communicate between people,
especially to persuade people.
We've actually seen rhetoric a little bit.
This is a little less clear,
but we've seen it in terms of network protocols.
What protocols are are ways of computers communicating with each other
and making sure that they can understand each other.
So arguably, that's a form of rhetoric.
Logic is the art of thinking in the medieval view.
We've certainly used logic all over the place in this class.
All of our decision constructs are logical constructs,
so we've certainly used a lot of logic.
So those are the 3 traditional liberal arts, known as the trivium, focused on language.
And then we have the quadrivium, which are the 4 focused on numbers.
Arithmetic. We've certainly seen lots of arithmetic in this class,
and we can do lots of arithmetic in Python.
Geometry. We haven't used too much directly in this class.
There certainly is lots of use of geometry in computing.
The 2 that I'll mention most--
In computer graphics that's all about understanding the geometry of light
well enough to be able to simulate images
and to be able to draw things on the screen.
The other place where geometry comes up a lot is in networking,
and we saw that a little bit in Unit 4.
If we want to design a network, we care about the topology of the network--
how things are connected--and that depends on understanding geometry.
But we didn't get to either of those things too much in this class.
Music, which is about number in time.
We haven't really seen how computing relates to music very much in this class,
but certainly recursion occurs all over the place in music.
If you don't believe me, I would encourage you to read this book
by Douglas Hofstadter called Godel, Escher, Bach.
It's all about how the logic of computing relates to things in both the art of Escher
and the music of Bach.
And the final traditional liberal art was astronomy.
We haven't seen that directly in this class either,
but certainly almost all astronomy today depends on computing.