Whilst there are plenty of applications of computational thinking outside programming, this page is all about programming and developing the right skills for success.
I would say that the biggest challenges of teaching programming are developing the right logical approach and persistence in your pupils. Computational thinking is the process of breaking down a problem using decomposition and then considering a logical pathway to solve the problem(s).
When you teach a new programming concept or construct to pupils, it can appear very simple, even trivial. However, when they try to apply it, they often get confused. This is compounded when they need to choose which constructs to use in less structured problems. I think it is important to focus on computational thinking before you start teaching any kind of programming.
I hope that throughout my lessons, I ask pupils to think, explore and work things out for themselves. I probably drive them a little crazy by answering many of their questions with questions or asking them to go and look something up for themselves.
This is the approach I take in specific teaching units:
I run this challenge in lessons for all classes from Year 7 - Year 10. Chris Roffey works really hard on this and creates a really interesting and thoughtful set of challenges every year. They are split by age group and it is very distinctly not a competition; everyone should be able to participate. Age groups range from 6 up to 18 and all problems are graphical in nature. This means that pupils can take part even if they have not done any programming at all. There are a few block-based programming challenges but pupils can work them out. It is a computational thinking challenge, not a programming challenge.
This is the first programming unit my pupils encounter at secondary school and most of them have little or no experience from primary school. My aim here is to help pupils to begin to develop an appreciation of a logical approach to computational problems and begin to grasp sequence, selection and iteration. I use Code for Life's Rapid Router which I think is an excellent resource. (Yes, I am their Educational Consultant but that came after I started using Rapid Router!)
We start with a computational thinking task. Last year I showed them a card trick and asked them to try to work out what was going on. They watched it a couple of times and then I asked them what they noticed. This questioning led most of them to figure out most of it; I then showed them the steps. This year, we made paper aeroplanes and pupils were tasked with writing detailed written instructions for another pupil to follow.
Exploring these ideas led to these ideas:
you must understand the solution (algorithm) to something before you can express it to someone else (or a computer)
the instructions you write down must be clear and unambiguous.
I have heard of other teachers using Lego blocks; there are lots of ways you can explore this.
We watch excerpts from Marcus du Sautoy's wonderful Secret Rules of Modern Living documentary, which is periodically available on BBC IPlayer and is also on Amazon Prime. I have it on an educational streaming platform. It is getting a little old now (2015) but is still very relevant and useful. I have written some worksheets to check understanding of these video clips.
Looking at why natural language is not suitable for writing algorithms is quite fun. We look at sentences like these and talk about why they are ambiguous:
The lady hit the man with an umbrella.
He gave her cat food.
I saw her duck.
Phil Bagge's jam sandwich robot is another lovely way of demonstrating the need for unambiguous instructions. I don't do this live (no chance!) but have found some good videos (Phil Bagge, Cody Henrichsen and Josh Darnit) which save the mess.
I used to use Scratch next but found that I was spending too much time teaching pupils how to use Scratch as a tool and the lack of structure meant that pupils did more playing than working! I like the fact that Rapid Router has very structured levels which progress from concept to concept; they reuse levels in a really effective way when they introduce new concepts as well (e.g. level 2 and level 19)
I use Rapid Router to introduce sequence, selection and iteration. Code for Life provide comprehensive (and free) teaching materials. I have tweaked their lesson plans for my own use and use several of their unplugged resources; it's great to get pupils away from the crutch of trial-and-error. One of the things I like about Rapid Router is the two scores for each level: you get one score for getting to the target but a separate algorithm score for doing it in the most efficient way.
In our second programming unit, we use the micro:bits to explore the same concepts. There is less direct focus on computational thinking so this is discussed in block-based programming.
The story of how Dr John Snow isolated the Broad Street water pump as the source of the 1854 Cholera outbreak gives lots of opportunities for computational thinking.
As well as looking at how to actually construct a flowchart (see Flowcharts) , pupils are encouraged to break down problems and develop solutions in stages rather than just rushing in and using trial-and-error. For example, the Greenhouse task is quite complex.
This is a significant part of the Computer Fundamentals unit. We use the LMC (RISC) to further develop pupils' ability to think logically. Writing assembly programs is challenging and they can't fall back on trial and error. It takes quite a lot of effort on teacher's part to get pupils to engage with this topic as some can decide it is too hard and give up. I find that breaking down even the simplest problem (add two numbers), developing an informal algorithm and running the program very slowly does get them there eventually.
Given even the first line from the first program on the left, I have found that some pupils cannot explain what it does. I have had them tell me that INP(ut) R0, 2 adds two numbers because they are using their recall rather than thinking...
This is a challenging topic but I think it is worth the effort. If they can develop solutions to simple problems using the LMC, it makes the flowcharting and, ultimately, Python much more achievable.
We start this unit with a computational thinking challenge: I show them stick multiplication without explaining what it does. Pupils are then asked to try other examples, including some that require a carry. The questions is then asked:
What would you need to do if you were going to tell someone how to do this? [understand, identify steps, test]
Do you need to understand the underlying maths to follow these instructions? [no]
Do you need to know the objective to be able to follow the steps? [no]
All of these questions are highly relevant to computational thinking, of course.
The need for unambiguous language is discussed, along with some new ambiguous sentences:
This animal has four legs and flies.
Kim saw the astronomer with the telescope.
The chicken is ready to eat.
The analogy of a recipe for an algorithm is explored: ultimately, ingredients become data and the method is the algorithm.
We use Raptor to further develop a pupil's ability to write flowcharts. Raptor takes away the mimics of Flowol and flowcharts are much more like those they will encounter at GCSE. Again, pupils are encouraged to break down complex questions into small chunks and test as they go; they also need to fill in test data and test their flowcharts.
This unit spans and entire term. Text-based programming is a challenge for many and, if you are to avoid just giving them answers, many different strategies need to be employed. This is covered in much depth here.
Grover, S. & Pea, R. (2018). Computational Thinking: A competency whose time has come. In Computer Science Education: Perspectives on teaching and learning, Sentance, S., Carsten, S., & Barendsen, E. (Eds). Bloomsbury.
Heintz, F.; Mannila, L.; Färnqvist, T. A review of models for introducing computational thinking, computer science and computing in K-12 education. In Proceedings of the Frontiers in Education Conference (FIE),Erie, PA, USA, 12–15 October 2016; pp. 1–9, doi:10.1109/FIE.2016.7757410 available from here
Piaget, J., 1958. Growth of Logical Thinking: From Childhood to Adolescence. New York: Basic Books
The Royal Society, 2017. After the reboot: Computing Education in Schools, London: The Royal Society.