The reason that we think computer science is about computers is pretty much the same reason that the Egyptians thought geometry was about surveying instruments: 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.

Hall Abelson, 1986

As Abelson suggests, computer science is more than knowing how to use a computer, it’s about understanding the problem and finding systematic methods for solving well-defined tasks. Before the days of the existence of electronic devices we call computers, ‘computation’ referred to the large numbers of calculations that

needed to be carried out manually by teams of skilled human ‘computers’. What connects

these human computers and a contemporary electronic computer is that both use the

processes of computation to carry out their work, executing sequences of clearly defined,

formulaic steps which give a precise answer to a clearly stated question.

So computation is about processes, and studying computation involves understanding

these processes and reasoning about them. By studying the processes that all computers

use, we can start to investigate the potential and limitations of computing machines.

The study of formal models of computation based on logic and mathematics has come to

be commonly known as ‘computer science’. This discipline focuses on the concept of

the algorithm, the fundamental process that defines what a computer actually does, and the data structure, a collection of data organised in some particular way. By

considering the algorithm separately from the computer, we can consider computation to

be about problems, rather than about machines, however fast the processor or shiny the casing.

Computational thinking is not merely knowing how to use an algorithm or a data structure, but,

when faced with a problem, to be able to analyse it with the techniques and skills that

computer science puts at our disposal.

Computational thinking can be defined as consisting of the skills to:

- Formulate a problem as a computational problem
- Construct a good computational solution (i.e. algorithm) for the problem, or explain why there is not such a solution.

The first skill involves formulating a problem with sufficient precision so that it is possible to attempt to solve it with an algorithm. In particular, it involves thinking systematically about problems (in particular sorting, search and optimisation problems) in terms of their input, output and the relation between the two.

The second skill comprises the selection of appropriate algorithms and data structures for bridging the gap between input and output. Both logic and the analysis of algorithmic complexity are tools for establishing the goodness of a computational solution: logic to hep with determining whether an algorithm does what it supposed to do (e.g., through logical analysis of the guard of a loop) and algorithmic complexity to assess its efficiency.

## 0 Comments