Teaching coding as a non-specialist can be daunting. There are many resources out there but choosing the correct one can be difficult and without an underlying structure, these approaches can be scattergun at best. At worst, they lead to increased confusion and frustration. Both on the part of the learners and the teacher. This is where PRIMM comes in…
PRIMM (Predict. Run. Investigate. Modify. Make) is an approach developed by Sue Sentance, from King’s College, London. It focuses on providing a structured approach to teaching programming, with each letter representing the different stages of a lesson or a series of lessons. PRIMM draws on the idea that you need to be able to read code before you can write it (similarly when children are learning to read. They can always read at a higher level than they can write). Talking through code is essential. Firstly, thinking out loud means children organise their thoughts in a coherent way and discussion fosters collaboration, which further develops many essential soft skills. The PRIMM approach reduces cognitive load by breaking down elements of code to aid understanding. Finally, there is a gradual increase in ownership and responsibility for programs. The approach begins with very low levels of anxiety and as competency and understanding increase, so does independence and ownership.
Learners are given a starter program and ‘Predict’ what it might do. They can discuss, draw, and write what they think the outcome could be. This element is never teacher assessed as it is meant to encourage collaboration, discussion, and ideas free from the worry of evaluation. In my online coding sessions, I provide the children with a screenshot of the finished game and ask them what they think the game will do or what they want it to do. This facilitates creative as well as analytical thinking and means the children are less likely to be stuck when it comes to tinkering or creating later.
Learners then ‘Run’ the code so they can test their prediction and discuss it.
The teacher provides a range of activities to ‘Investigate’ the structure of the code to develop the learners’ understanding and ability to manipulate the code. This could include debugging, annotating, tracing, and questioning. ‘The Block Model’, developed by Prof. Dr. Carsten Schulte, provides a framework to address the range of skills that learners need to have a full understanding of a program. It encourages teachers to question learners on an increasing scale, from micro to macro. It also allows us to focus on the structure of a program as well as its function.
The Block Model (Schulte, 2008)
|(M) Macro structure||Understanding the overall structure of the program text||Understanding the algorithm underlying a program||Understanding the goal / purpose of a program in the current context|
|(R) Relationships||Relationships between blocks||Sequence of function calls, object sequence diagrams||Understanding how subgoals are related to goals|
|(B) Blocks||Regions of interest that build a unit (syntactically or semantically)||Operation of a block or function||Understanding the function of a block of code|
|(A) Atoms||Language elements||Operation of a statement||Function of a statement|
|(T) Text surface||(P) Program execution||(F) Function|
|Architecture / Structure||Relevance / Intention|
When we come to ‘Modify’, learners have spent considerable time understanding a program, how it is constructed as well as how it works. At this stage, they edit the program to change how it works and what it can do. Learners begin to take part ownership of the program and gain confidence as they can increase its complexity. This is often the ‘tinker’ stage during our online workshops. The children have built a functioning program, usually a game, but now can play with it to see what it can do. This is where they put into practice their answer to “What do you want this game to do?” from the ‘Predict’ element of the workshop.
[Collaboration at its best]
Learners ‘Make’ a new program using the same structure but solves a new problem. This allows them to use the skills and concepts they have learned in a familiar but new context, deepening their understanding. Here, they have full ownership of their program.
[Solving new problems, together!]
PRIMM is a fantastic way of structuring programming lessons. It provides opportunities for collaboration, developing understanding in a low-risk way and progressive transfer of ownership when learners are ready. Making it an integral part of your computer science approach.
Schulte, C. (2008). Block Model: an educational model of program comprehension as a tool for a scholarly approach to teaching. Proceedings of the Fourth International Workshop on Computing Education Research, p.149–160.