The term “Computation Thinking” came into public discussion in 2006, when Jeanette Wing, a professor of computer science at Carnegie Mellon University, wrote an influential article (Wing, 2006) suggesting that the new methods of problem solving required to handle the unprecedented complexities of constructing computer-based system were in fact important generic thinking skills that could be acquired systematically, and would of value to almost everyone who needs to deal with complicated situations – whether they involve a computer or not.
You may wonder whether this is just a relabeling of problem solving skills that we all acquire intuitively through experience and non-computing education. This would be a mistake - even though none of the ideas encompassed within the educational understanding of "computational thinking" are radically unfamiliar. Partly it is to do with scale: there are many skills that we can acquire informally (and often partially) that work adequately for small problems but fail catastrophically on big problems. (Many of us pick up enough cooking skills to enable us to feed a family; to operate as a professional chef in a large commercial kitchen requires very specific training.)
In my own experience of recent years, that many new university graduates in technical subjects were emerging from their courses with a belief that they could write programs (albeit at a modest level of scale) but having little explicit understanding of the fundamental computational thinking concepts. They also had little appreciation of the gaps in their knowledge and skills. (As a training-system "Subject Matter Expert" for my company, it was my responsibility to worry about stuff like this.)
The consequence has often been people taking on tasks that were beyond their ability to discharge at a fully professional level. That may not have been recognised either by themselves or their supervisors, because of a widespread lack of awareness of the fundamental competences and a general expectation and acceptance that building errors into software is normal and acceptable and there is not much one can do about it anyway. (I worked in an environment where we had a very rigorous skills accreditation programme to prevent that occurring, particularly in areas affecting nuclear safety. In other contexts, the general shortage of computational skills may lead employers into a more flexible attitude to competence requirements.)
Unfortunately, we are living in a World that is increasingly interconnected by computers and software. Driver-less cars are being tested on our roads and we may soon have autonomous pilot-less aircraft. Furthermore, cyber-attacks are increasing in frequency and in malicious intention. Weaknesses in system design that could once be regarded as no more than annoying (and sometimes expensive) failures could now perhaps lead to disruptions of our critical infrastructures. We can no longer afford the inadequately educated. It is possible to build essentially error-free software systems of high complexity, but you need well-trained engineers using the right techniques. (You might be thinking "I bet it costs a lot more to do that!" and it does but not vastly more. Furthermore, most of the lifetime cost of a software system - perhaps 90% - is in fixing the problems that turn up after it goes into service. Hence, doing a better job up-front seems to make good financial sense - except that he who gets to market first drives the competition to the margins and captures a money flow that makes even more financial sense.) When we really need to do it, such as with fly-by-wire systems on aircraft, we do it.
The point of the computational thinking approach is that it brings together and enhances a set of important thinking skills, which when systematically used together in a disciplined and structured manner provide a powerful approach to problem solving which continues to work when the scale of the problems get larger and larger.
There are several distinct areas recognised as the basis of computational thinking:
- Logic - using systematic reasoning make correct deductions.
- Algorithms - expressing methods of addressing problems as precise recipes, or sequences of operation carried out when specified conditions hold.
- Decomposition - breaking down a complicated problem into simpler problems, and those into even simpler problems, until they are easy enough to solve, and then re-integrate upwards into a comprehensive solution to the top-level problem.
- Patterns - what are the rules that underlie patterns and symmetries.
- Abstraction - recognising underlying similarities between things that look superficially different.
- Evaluation - have you created the behaviour you want? How do you identify what wrong and fix it?
Primary level teachers now explicitly promote a number of approaches to learning in computing (which are to a large extent simply a relabelling and codification of existing good practice at primary level):
- Tinkering - try it to see if it works; discover by doing.
- Creating - make something new.
- Debugging - working out what went wrong and how it needs to be fixed.
- Persevering - keep going until you get it right.
- Collaborating - working with others to share insights, skills and knowledge.
However, by applying and using these labels, we can now recognise pre-existing parts of the primary syllabus can help to inculcate computing concepts, and conversely the explicit teaching of computing can be used to reinforce learning in other areas. (See the Barefoot Computing website for more extensive discussions and resources. As a "Barefoot Computing" volunteer I have been helping primary teachers come to grips with the curriculum changes.)