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.