Over the summer I have been reflecting on what computational
thinking is and how it affects primary computing understanding and practise. In
this short article I am going to look at the following questions.

· What is computational thinking?

· Who first thought of the term?

· Is it a new idea?

· What thinking skills are included?

· What do these thinking skills mean for primary
pupils and teachers?

· Computational thinking in the Computing National Curriculum

· Cross curricular?

**What is computational thinking?**

Wikipedia

ITSE^{2}describes it as “problem solving method that uses computer science techniques”^{1}in their article on computational thinking describe computational thinking as critical thinking ideas combined with the power of computing. They also have a short video to help define it which is worth viewing 1a

**Who first thought of the term?**

The first

^{3}person^{ }to popularise computational thinking and call for computational thinking skills to be taught to all was Jeanette Wing,^{4}a prominent American computer scientist. She argued that,*“To reading, writing, and arithmetic, we should add computational thinking to every child’s analytical ability.”*^{5}**Is it a new idea?**

The idea that problem solving methods used by computer
scientists should be taught to every child is relatively new (2006) however the
toolkit of useful critical thinking tools are much older.

**What thinking skills are included?**

Computer scientists and educationalist are in broad agreement
as to what should be included. Miles Berry

^{6}included algorithms, decomposition, patterns, logical reasoning and abstraction. A recent CAS working group included algorithmic thinking, evaluation, decomposition, abstraction and generalisation in their very helpful framework document^{7}.**What do these thinking skills mean for primary pupils and teachers?**

I am going to limit myself to the CAS working group list of
computational thinking skills as I find these particularly helpful.

**Algorithmic Thinking**

Defining a precise set of instructions or rules to achieve
an outcome or solve a problem. A recipe can be an algorithm, musical notation
can be an algorithm. Instructional writing can be an algorithm. All working computer
programs started life as human ideas that were expressed as algorithms in
thoughts, words, symbols or flow charts. Programming is the challenge of
turning precise ideas (algorithms) into code that can be read by a machine.
When we define a precise set of instructions we save time as this algorithm can
be reused to solve a problem over and over again and adapted to solve similar
problems.

**Evaluation**

Evaluation is how we look at algorithms and determine how
useful they are, how adaptable, how efficient, how correct. There may be many algorithmic
solutions to a problem, evaluation asks which one was best and why? Evaluation
is also concerned with the people who use an algorithm. Did it solve their
problem? Was it better on paper than in practice? Evaluation is also a very
useful skill to extend into programming as well. Getting pupils to think about
an end user in the design (algorithm) stage can help focus ideas. I think there
is a lot of similarity between logical thinking in the national curriculum and
evaluation.

**Decomposition**

Decomposition is the skill of breaking a complex problem up
into smaller manageable chunks and solving these chunks separately. I have
found this to be a wonderfully useful skill in games design. Faced with the
task of creating a new game

^{8}pupils are often overwhelmed by the amount to think through. We use a decomposed planner where they jot down what they want the game to do first before circling objects and ideas and describing these in detail. This allows them to focus on designing a small parts of the game separately before recomposing these ideas into the whole.**Abstraction**

Abstraction is the skill of reducing complexity by hiding
irrelevant detail and focussing on the most important element. This is a really
useful computational skill as once the irrelevant detail has been stripped away
computer scientists can focus on what really needs doing. Imagine I wanted to
turn the game matching pairs into a computer game. The most important element
is; you win if items are the same. This can be abstracted further into A = B
win, A ≠ B lose. We recently used abstraction to turn a musical sound track on
a video into an algorithm and then into musical programming in Scratch. We
started by listening to a video and identifying all the elements on the video,
singing, high and low pitch notes, moving pictures, backing track etc. We then looked
at what detail was important to turn into notes on Scratch and what was
irrelevant. We ended up only keeping the high and low pitch notes. We swapped
to a much simpler music track with notes only and listened to this to write a
musical algorithm before converting this into code.

^{9}**Generalisation**

Generalisation is adapting a solution that solved one
problem to solve another. In our abstraction example earlier we reduced
matching pairs to A = B win A ≠ B lose. We could then use generalisation to
adapt this solution to think about creating a quiz. In a quiz, if the answer we
have thought of is the same as the users answer we say it is correct. If the
answer is not the same we say it is wrong. This is almost identical to A = B
win A ≠ B wrong so we can adapt one solution to solve a similar problem. In our
Scratch perimeter program

^{10}we discover a simple way to calculate the diameter of a circle by multiplying the radius by two. Pupils then use the principle of generalisation to adapt this solution to calculate the perimeter of regular 2D shapes.**Computational Thinking in the National Curriculum**

The opening statement of the introductory paragraph of the
2014 computing national curriculum

^{11 }says,*“A high-quality computing education equips pupils to use computational thinking and creativity to understand and change the world.”*This is a wonderful opening statement which highlights the importance of computational thinking. I also like the way it highlights that computer science is both a science and an engineering discipline. Understanding the world is a scientific endeavour and changing it is an engineering one. Computer science doesn’t just think about things it turns this thinking into digital artefacts to be tested and evaluated by society.
In the aims we find mention of abstraction, logic, algorithms
and evaluating and the exhortation to

*“analyse problems in computational terms, and have repeated practical experience of writing computer programs in order to solve such problems”*
In KS1 we find mention of algorithms and logical reasoning.
In KS2 we find decomposition and logical reasoning. In KS3 abstraction,
algorithms and logical thinking are included.

I see the national curriculum as a minimum entitlement and
would urge teachers to make full use of the full range of computational
thinking skills when they are appropriate.

**Cross curricular?**

The good folk at the Barefoot12 project are developing some
cross curricular computational thinking activities and I think it is a laudable
aim to include computational thinking ideas into the wider primary curriculum.
In my code-it.co.uk resources I have mainly focused on computational thinking
through algorithm design and programming. I think ideally we should do both.
Recognising that these ideas are special because they have grown out of
computer scientists desire to create artefacts and systems to evaluate and change
the world but that there is real traction in understanding that is broad and
multidisciplinary.

**References**

1 David Barr, John Harrison, and Leslie Conery (2011). “Computational
Thinking: A Digital Age Skill for Everyone” https://csta.acm.org/Curriculum/sub/CurrFiles/LLCTArticle.pdf

2 Wikipedia Computational Thinking http://en.wikipedia.org/wiki/Computational_thinking#cite_note-1

3 Seymour Papert mentions computational thinking but doesn’t
really expand what it means or call for these skills to be taught to all.
However I haven’t read all of his works so am happy to be corrected. He
mentions computational thinking in "An exploration in the space of
mathematics educations". International Journal of Computers for Mathematical
Learning (1996) http://www.papert.org/articles/AnExplorationintheSpaceofMathematicsEducations.html I couldn't find a comprehensive treatment of computational thinking in this journal.

4 Jeanette Wing http://en.wikipedia.org/wiki/Jeannette_Wing

5 Jeanette M Wing Viewpoint (2006) https://www.cs.cmu.edu/~15110-s13/Wing06-ct.pdf

6 Miles Berry (2014) http://milesberry.net/2014/03/computational-thinking-in-primary-schools/

7 Professor Paul Curzon, Mark Dorling, Thomas Ng, Dr Cynthia
Selby & Dr John Woollard (2014) Developing computational thinking in the
classroom: a framework http://community.computingatschool.org.uk/resources/2324 (second document link on right)

8 Primary Games maker planning including decomposed games
planner http://code-it.co.uk/scratch/primarygamesmaker/primarygamesmakeroverview.html

9 Scratch music as code planning http://code-it.co.uk/scratch/musicscore/musicscoreoverview.html

10 Scratch perimeter program http://code-it.co.uk/scratch/perimeter/perimeteroverview.html

11 Computing National Curriculum https://www.gov.uk/government/publications/national-curriculum-in-england-computing-programmes-of-study

12 Barefoot Computing Project http://barefootcas.org.uk/