Computational Thinking in Primary Schools
The change in the primary national curriculum from ICT to Computing, which takes effect this September, is undoubtedly a significant one, but perhaps not for quite the reasons you might first think. Given that much of the attention in the media has focussed on pupils being taught to program computers, you might be forgiven for thinking this is something new – this is far from the case. Even before the first national curriculum, programming BBC Micros was a common sight, and ‘control’ or sequencing instructions has been part of the National Curriculum right from its start. For me, the significant change is the shift of focus from the skills of using ICT to developing an understanding of computer science.
The new programme of study is ambitious. It begins with the assertion that
‘A high-quality computing education equips pupils to use computational thinking and creativity to understand and change the world’.
Creativity has long been a feature of school ICT, with great work done across a wide range of digital media. ‘Computational thinking’, on the other hand, looks like something new, and yet this is a golden thread running through the whole of the computing curriculum.
Although it’s tempting to equate ‘computational thinking’ with thinking like a computer scientist or a software developer, the sort of thinking that these professionals use when tackling problems or analysing systems is something they’ll have acquired through study, practice and experience, and it seems unfair to expect children to be able to operate at this level whilst at primary school.
For me, computational thinking is about looking at problems or systems in a way that considers how computers could be used to help solve or model these. This can be simply about learning certain practices, processes and perspectives through programming, but there are aspects of computational thinking which transcend mere computer programming. Just as much good ICT education, particularly in primary schools, took place across the curriculum, so too can computational thinking be developed through its application across the curriculum, not just in computing lessons,.
There is a degree of consensus around what computational thinking might involve, with much of this making it into the programme of study.
Algorithms are step by step instructions to get something done or the set of rules describing how something works. A recipe, or a set of dance steps, or the storyboard for an animation are algorithms. Teaching children about algorithms is a matter of teaching them to think of the steps they, or a computer, needs to follow to do something.Think, for example of classroom routine at the beginning or end of the day. Part of the challenge of computer science is about finding more efficient algorithms for the same problem: can you (or your pupils) find more efficient daily routines for the class?
It’s also worth getting pupils to guess at the algorithms that have been programmed into the apps they use or the computer games they play, building up their appreciation for developers’ creativity, as well as their ability to use software more effectively, as they come to understand it better.
Computers are entirely deterministic machines: they simply follow the programs they’re given, using whatever data or input they’re provided with. With an understanding of their algorithms, it’s possible to predict exactly what a computer will do. Getting pupils to make predictions about when using software helps develop children’s ability to reason logically and to make deductions from the information they have. There’s something akin to the scientific method here. When children write their own programs, more often than not these will contain errors or ‘bugs’ – fixing these isn’t a hit and miss affair: looking carefully at the code they’ve written and using logical reasoning to explain what the program is actually doing are good starting points for debugging code,
I remember a former colleague giving an assembly on how to eat an elephant: it’s one mouthful at a time. The same approach works for developing software – to solve problems or understand systems involves breaking things down into smaller parts and dealing with each separately – programming languages make this easy though procedures, functions or objects. This approach to problem solving can be used whether pupils are programming or not – planning a story, working on collaborative projects, solving multi-step problems in maths or putting on a play: all, typically, involve converting one big, complex problem into many smaller ones.
A good computer scientist is a lazy computer scientist, at least in the sense of always looking for the easiest or more efficient way to get something done – thus the strive for finding faster algorithms, but also much gets done through building on the work of others. After even a little time coding, pupils will recognise that they keep writing similar, blocks of code time and time again – programmers might describe these as patterns: common solutions to common problems. Often these will become part of standard code libraries available to all, to save each from having to re-invent the wheel. When learning to code, it can be useful to look at or remix others’ code. Introductory languages like Scratch, Kodu and TouchDevelop make this easy, but the culture of open source software development applies the same idea to big applications and even a whole operating system. Recognising and re-using patterns will be familiar to children from other subjects too, from spelling rules to musical refrains.
Abstraction lies at the heart of what sets computational thinking apart from other approaches. Abstraction is about capturing the important structure of a system or problem, but not worrying too much about the detail. The Tube map is a great example: this captures the order of the stations and the interchange between lines but almost entirely ignores physical distances and locations. In programming a computer game or simulation, we capture the important detail, but ignore much else. Learning about computers also involves layers of abstraction – we might start by being content with what a program does, then learn about how to program, then perhaps about how data is represented, then about how fetch-execute cycle of the CPU and then, but only if we’re really interested, in the electronics and ultimately physics of the hardware. Effective programming can sometimes mean working at more than one abstraction layer: thinking about both the big picture and the detail.
I’ve no doubt that practical programming work on meaningful, interesting and challenging projects should be a part of the primary school curriculum, but I would worry if this became an end in itself. Primary school should be about a balanced, broad education and about developing a love of learning, not about vocational training. Music, poetry and art aren’t on the curriculum to train future musicians, poets and artists; they are there because all should have an entitlement to a liberal education which includes these elements. The same applies to programming: we teach it because it’s interesting and important, not just because it’s useful. The real interest, importance and utility though lies with computational thinking, which seems much more important than learning to code. That said, learning to code may well be the best way start thinking computationally.
The above was published in the March edition of Teach Primary, under the title Does not Compute. © Teach Primary 2014, all rights reserved. Reproduced here by permission.