4th Generation Programming Resources

Code-it is changing

My programming resources are changing. I like what we have done so far but the enemy of the best is the good. Code-it is good but it can be better. If first generation was copy this code to make something. Second generation was a mixture of guided discovery and developing computational thinking skills through programming. Third generation was making the problem solving skills   more explicit. I see fourth generation as developing a full range of algorithmic thinking through much more explicit teacher explanation and greater pupil engagement with key algorithmic concepts. Programming concepts are linked to everyday concepts, making pupils think hard about these through role play and having to write their own examples before programming. Finally, pupils need to show that they fully understand these concepts in the design phase before programming. My initial observations when using this methodology is that when I have taken more time to develop pupils core understanding of algorithmic concepts it has yielded greater pupil agency. You can see this idea expanded in more detail here.

Pupils need good explanations of key algorithmic concepts before they can be expected to use and adapt these

Didau, challenges the commonly held belief that good lessons involve minimal intervention from the teacher. He writes that “Getting students to discuss ideas and puzzle out alternatives might be worthwhile if they already know enough about a subject, but it is much more limiting if they haven’t learned anything about it yet.1 Further on he explains that “Asking teachers not to talk is madness. If it is the case that teachers are dull, shouldn’t we be asking how we could improve their ability to explain the tricky underpinning concepts of their subjects rather than finding increasingly bizarre ways to minimise teacher talk?2Many of the introductory algorithmic explanations, role plays and writing scaffolds are an aid to help teachers introduce and explain some of the tricky underpinning concepts of computation. Pupils need clear teacher explanation if they are to grasp tricky algorithmic concepts like conditional selection, variable use and the use of procedures.

Relating new concepts to those a pupil has already grasped is important for helping to make learning sticky

If learning is to become sticky it needs to make it into our long-term memory. This will only happen if we can relate part of a new concept to ideas that are already part of our existing scheme of understanding. To put it bluntly if it has no connection to anything else pupils currently know it will fade from long term memory very quickly. Didau writes, “we remember when we transform new information so that it fits into our interconnected webs of information and makes sense.4 Concepts such as conditional selection, variable use and sub routines are totally outside most primary students sphere of current knowledge which means that it will be hard for them to integrate these into their existing web of long term knowledge that they are building up. Hence the need to develop links to everyday knowledge that they already have.

Steadily increasing complexity once the basics are grasped

Role playing and writing their own everyday examples are a good first step because pupils must actively engage with the new concept in a supported scaffolded way before needing to use it to plan and create something meaningful. In Matons semantic wave theory we encounter the idea of unpacking a concept for novices and packing it with more information as they progress. So once pupils have grasped the basics of an idea we need to add complexity gradually so they think hard about the concept in many different situations.

Introducing complex concepts using stories and scenarios

There is real value in the research by Grover et al 2019 that novice programmers benefit where
“story is a productive and universally accessible metaphor and proxy for program code in a context in which learners are not yet able to grapple with code explicitly” I see this as the next step after simple role play in developing harder concepts such as variables and procedures.

Introducing less algorithmic concepts at a time

In my third generation projects I will introduce less algorithmic concepts at the same time. Have a look at my new quiz module. It leaves out variable use but introduces lots more forms of conditional selection. I wonder if introducing too many concepts at a time has overloaded pupils memories and led to less retention of concepts. This has been influenced by the work of Swellers cognitive load theory who looks at how we can overload novices by introducing too many concepts at the same time.

Planning is key

My new projects will all involve pupils in the planning stages. I will also be modelling good algorithmic notation such as indenting to show what is being looped or what actions are being triggered by a condition. I have a range of support cards that all show algorithmic notation as well as programming examples so that pupils can remind themselves if they wish. I don’t plan on correcting primary pupils if they use incorrect notation as long as they understand the processes involved and can transfer their algorithmic plans into programming. Planning scaffolds will be available to reduce the amount of writing needed but these will be optional.

4 levels or Abstraction

Code-it will seek to follow the best research from Armani (7) & Waite et al (8) that pupils develop good thinking skills when their is a clear distinction between all four levels of abstraction and when the code level is not confused with the planning level. To this end algorithmic work will be developed so that their is a clear distinction between the language of Scratch and that of algorithms. There will also be a clear distinction between:

The Task Layer -Idea

The Planning Layer -Algorithms, objects & initialisation (where it is and what it is doing when it starts)

The Code Layer -Programming

The Execution Layer-What happens when we run this code?

Not every project will focus on every level but there will be a clear direction towards building up pupil agency in all areas and enabling them to think vertically between layers.

I would also add a concept layer where we introduce key algorithmic concepts outside of programming. This is not part of the four levels but supports them.

Use, modify create

I confess I have never been a fan of this but I recognise that on occasion it can be a useful strategy that has a research base behind it. I will be using it more often in new projects. I see a role for this when we come to packing more information into a concept rather than at the point of introducing a concept.

Revision of key concepts is important

Over the years I have noticed that even a little bit of revision helps pupils to tap into concepts learnt in previous terms or years. Even something as simple as asking them to match code samples from previous projects to what they do triggers memories and awakens understanding. Fourth generation planning will teach and revise key algorithmic concepts in different contexts.

Time to forget before revisiting a concept

Teachers have often asked me if I recommend grouping programming projects together. In the past I have answered that I think this is useful however there is good evidence to suggest that a period of time to forget before revising a concept is more beneficial to long term memory 6. I am interested to see if this holds true in programming so would now recommend that we leave at least a few weeks and ideally a month or two before revisiting the same concept in a different format.


Over the next months and years I would love you to come on this journey with me. In fact I welcome feedback as I am also going to write up the findings around this new direction and your feedback on any aspects both positive and negative will help to determine how useful these new directions are for all of us.

4th Generation Resources

Although you can use my new approach and resources to adapt previous code-it planning or indeed planning from any other source I am writing new planning that uses these methods. You can find these marked with 4th Generation.

1 Didau, What if everything you knew about education was wrong? Chapter 3: Challenging assumptions  Page 76. This belief that teacher instruction is useful and a necessary essential part of education has been a long held belief of mine and it was a relief to read of an evidential basis for this.

2 Didau, What if everything you knew about education was wrong? Chapter 3: Challenging assumptions > Page 78

4 Didau, What if everything you knew about education was wrong? (Chapter 9: The input/output myth > Page 181 This was a totally new concepts for me and I found the theory behind it fascinating.

5Didau, writes about this very clearly in chapter 10 of his book What is everything you knew about education was wrong? Although I had already decided to change my practice I find that his explanation as to why deductive might be a better opening strategy useful.

6 Didau, writes about this very clearly in chapter 12 the spacing effect of his book What is everything you knew about education was wrong?.

7, Armoni, On teaching abstraction to computer science novices 2013

8, Waite et al, Comparing K-5 teachers’ reported use of design in teaching programming and planning in teaching writing 2018

I heartily recommend teachers read David Didau book, What if everything you knew about education is wrong? It is well written and makes some compelling arguments. I mention only a few here.