CS 1 Fall 2007

Big Idea

Precise Specification of Automated Computations

Monday, October 1, 2007


The big idea behind, and enabling, computers is that we can precisely specify useful ways to process information. That is, we can give a set of completely unambiguous and complete instructions which can be carried out completely mechanically in order to compute some result. We can automate at least a piece of what we might consider thinking. (We'll see later that there are fundamental limits to what we can automate.) Furthermore, we can build inanimate machines out of our physical world which can carry out these mechanical instructions.

As we'll see, it turns out that we only need a few simple concepts in order to create this power. But these few simple concepts, when combined, both give us great expressive and computational power and give rise to very complex and non-trivial interactions. The complexity grows quickly with the size of the problem making it difficult to understand and predict the behavior of even modestly sized programs.

Our computational model and the computations we wish to perform can be precisely specified, and we can reason rigorously about their behavior. However, the increase in complexity with problem size can make it extremely difficult to reason about arbitrary programs. This is no cause for despair---knowing this, we can take care to design programs where the power is exposed, but the complexity is contained.

As an engineering discipline, computer science is about harnessing this power in a controlled way, by

As you learn how to program, keep in mind the importance of having a precise understanding of the computational model embodied by the programming language you are using to write your programs in. This understanding is what allows you to look at each line of a program and figure out exactly what it will do when it runs --- as opposed to having to guess what will happen. Average programmers guess; great programmers know.