Learning computational thinking
Tuesday, 1 April 2014
There has been much discussion recently about children and young people learning to 'code'.
From a new curriculum that sees programming taught to all primary and secondary children in England to campaigns such as 'Hour of Code' in the US and 'Year of Code' UK, it seems coding is potentially a new zeitgeist in learning.
However, amongst the networks of educators who have been active in this field for some time I am hearing two messages; that there is more to 'Computing' than 'Computer Science', and that there is more to 'Computer Science' than 'coding'.
Fundamental to Computer Science is 'computational thinking', but this term is slippery. It implies learning to think like a computer, but thinking is a human concept that computers are not actually capable of. What they are capable of, and extremely capable compared to humans, is calculating.
Computers can calculate simple mathematical problems at a speed almost unimaginable to those of us who have to think hard to do maths. Unfortunately simple maths at unimaginable speeds is fundamentally all they can do. Every complex problem we want them to solve, from figuring out how to get us from home to work on the tube, to putting us in touch with potential life partners has to be simplified and expressed as a basic mathematical calculation.
'Computational thinking' is the understanding of how to construct problems so they can eventually be expressed in binary mathematics. This is a complex and multi stage process involving an understanding of the key concepts of algorithms, logical reasoning, decomposition and abstraction. Leading computing education lecturer Miles Berry breaks down what each stage means clearly in his recent article on ‘Computational thinking in primary schools’.
A knowledge and understanding of these concepts is abstract and notably less visible than a child writing some code that displays a web page, but if the campaigns and curricula we are seeing emerge are to have a significant impact then I would argue that this area is of vital importance.
Enthusing about a focus on abstract concepts rather than practical activities is counter to much contemporary discussion in education. There is often a strong sense that, in order to be relevant and engaging, learning needs to be practical and applied. It could be argued that a focus in schools on the nuances of ‘computational thinking’ is likely to turn off children who could be constructing a website they can share on social media in a short time with immediate feedback.
As with most learning, it depends how it is framed. I spent the six months before joining Nesta developing a course to prepare new primary teachers to teach Computing and found that as long as these concepts were linked to their experiences and developed from what they already knew, most found them engaging.
When using logical reasoning to explore how messaging works, one group I was working with revealed that a Facebook message sent to someone in the next room went via an unknown number of other computers potentially in different countries. As we become more aware of the implications of this for the access that corporations and governments have on our lives this becomes a political point of significant relevance. Exploring the abstract concepts allows us to draw connections between how systems work and the social implications of this, something that is unlikely to be gained by initial forays into writing code and doggedly solving syntax errors until it will run.
What became clear to me is that now that digital systems so universally underpin how our world works, it is compelling to gain a deeper understanding of how they work and how they affect our lives. What also became clear was that through resources like ‘Computer Science Unplugged’, many of these concepts can be best taught without actually using a computer.
The abstract concepts of constructing systems for logical decision making, of unambiguously and succinctly communicating instructions and of designing processes that scale, are valuable well beyond their direct applications in programming. Seymour Papert wrote that programming gives children access to ‘powerful ideas’, but it is these ideas that are important for their learning rather than the programming itself.
This is not to say that practical programming and making are not important. These are the activities that will result in young people using computers to actually solve problems, to achieve something and to move beyond talk to action. Learning programming can let young people experience the power they can have by manipulating computers to solve problems which in itself demonstrates the relevance of further exploring ‘computational thinking’.
However, it is easy to get excited about a medium when we understand enough to know how powerful it is, but not enough to see its limitations. To many the visible act of 'coding' seems enticing, a secret language that can leverage massive amounts of the computational power that underpins systems in our society. It is easy to overstate the extent to which this little understood activity could transform our world and solve the social problems which we face.
Perhaps an important reason for creating a population that is well versed in the concepts and possibilities of ‘computational thinking’ is not just that they can solve the many problems technology is capable of addressing. It could also mean they can recognise those problems that technology cannot solve, problems for which we need to look elsewhere for a panacea.