Skip main navigation

PRIMM: Predict-Run-Investigate-Modify-Make

A look at the PRIMM methodology, used to encourage learners to read code and to explain their thinking.
2.3
How can you use PRIMM to teach programming in your classroom? I’m joined by the chief learning officer for the Raspberry Pi Foundation, Dr. Sue Sentance. Thank you for joining me. Thank you. So first of all, what is PRIMM? PRIMM’s an approach that you can use in the classroom for teaching programming. Stands for Predict Run Investigate Modify and Make. So predict means if I look at a piece of code, can I work out what I think it might do when it runs. So that’s an activity in the classroom. The run means running it to see whether it does what you thought you predicted.
40
What you predicted and then trying to work out why it didn’t do it, if it didn’t do what you predicted. Investigate is getting into the nitty gritty of the code and trying to understand its program comprehension. Modify is now you understand how it works, if you can extend it and make changes to have it add different functionality. And make is the creative part. So that’s when you can make something new using those skills. So PRIMM is the sequence of those activities. And the idea of putting them all together, is that teachers have sort of toolkit, of things that they could do in the classroom.
77.2
They don’t necessarily have to do all of those things in one lesson, but it gives us some guidance. Brilliant. So what made you want to develop PRIMM as an approach to learning programming? I don’t think we set out and went, oh, we’re going to develop a method of teaching programming. I mean, I’ve come from, I came as a, I started as a programmer and then I went into teaching programming. So I’ve got quite a lot of teaching programming experience myself. Then I trained teachers in teaching programming. At the same time, I was doing a lot of research around tracing and worked examples and using, what if I create these approaches.
109
And it seemed to me that the research was up here and all written in these papers that nobody can understand, and teachers’ practise was down here and teachers were learning about how to program, but not really how to teach it. And through my work with my trainee teachers, we were sort of working out how you bring the theory into practise. And I was, at the time, I was teaching a master’s module at Kings around the theory practise of teaching programming and teaching computing. And really, that’s how PRIMM came about, through that sort of thinking process and trying out different things. You mentioned use-modify-create when you were explaining there. Can you let us know how PRIMM develops that model?
152.2
The use, modify, create model. Yes. The use-modify-create, it’s been around since 2001. And the idea of that is that you use something, use a piece of software and then modify and create. Now the modify and make in PRIMM is the same. But the use is quite different from the PRIMM, the PRI. Use is quite exploratory. And it’s not very specific. PRIMM, predict, run, and investigate, is actually really, is quite detailed. It gives you some specific things to do. And it draws on other research. So the predict, run, investigate draws on research from the block model and from tracing and from abstraction, other areas of the research.
199.6
But the thing they have in common is that the idea of using something and then modifying it means you move from it’s not my program, it’s something that my teacher developed, to it’s my program. And both PRIMM and use-modify-create have that as a thing. And the reason that’s important, and that also relates to some of the education theory, is around if something’s out there and I don’t understand it or I can’t do it or it doesn’t work, it doesn’t matter, because I don’t have complete responsibility or ownership of it. If my teacher’s written a program that doesn’t work, I don’t have to feel so bad about it.
243.7
To it then gradually the responsibility for that program becomes yours as you then feel you understand it a bit better, rather than having to write a few lines of code, don’t really understand what it means, and it’s all your fault when they’ve gone wrong. That’s the commonality between the two approaches. And is there a particular age range that this approach works best with? Well, I’m a secondary teacher by background. So I was thinking of it in terms of secondary when learning text-based programming to be moving from scratch into Python or a block-based to a text-based language. But actually, I’ve been really surprised, because a lot of primary teachers that I know are really interested in it.
284.6
And Phil Bagge and Jane Waite have advocated it, which has been great. I’m not a primary expert at all. And I’ve also heard of people in higher education using it. And the University of Cambridge are trialling PRIMM in their Java course for first year starting this month. So I think the age range is wider than you might think. I’ve heard people say they can teach other things using PRIMM, not just programming, like statistics. So we were playing around with teaching statistics using PRIMM as well. So, who knows. So how would you recommend a non-specialist computing teacher approach using PRIMM in the classroom? Teachers are good teachers. They have lots of teaching strategies, whatever they teach.
332.3
And often, it’s a matter of signposting how you teach in another subject might be really useful for how you teach in computing. So for example, the idea of predicting what code might do is about reading and understanding. And we do that in all sorts of subjects. And the idea of having something that’s not mine and then becoming mine is something you would do in all sorts of subjects. Like in PE, you will demonstrate how things work. And in English, you will learn reading and read examples of writing. You know, in media and history, you look at different styles of writing and that sort of thing.
367.7
So I think if you can explain it in terms of generic actually good teaching strategies, it’s not really rocket science. Lots of people who’ve been teaching the programming a long time said to me actually, Sue, don’t tell me. I do that already. You just put it on, you just put it down in, you know, you’ve just given it a nice acronym to it. But actually, that’s what I do. So it’s just drawing on your own experience and finding strategies. I think that’s the problem with teaching computing is, it’s kind of like made people feel really lacking in confidence, because they don’t really feel very secure in the subject knowledge.
404.7
There’s this expression about having fragile knowledge, so I think if you have the confidence that you are a good teacher and you can use the strategies you’ve got in other things that you teach and bring those into programming, you might end up with something like PRIMM anyway.
The previous step emphasised the benefits of learners reading code. At the end of her blog post, Exploring pedagogies for teaching programming in school, Sue Sentance describes how she changed Use-Modify-Create to encourage learners to read code and to explain their thinking as they investigate that code.

Sentance expanded Use to become Predict-Run-Investigate, Modify remained as it was, and Create became Make:

  • Predict what the code will do
  • Run the code to see what it does
  • Investigate the code by changing values in blocks
  • Modify the code, making changes to the blocks to change what happens
  • Make something new based on what you have discovered

Sue Sentance and Jane Waite shared their findings from their work with secondary students and then worked with primary teachers to use the approach with younger learners. They emphasise the importance of reading code in order to write code. Use-Modify-Create develops fluency in coding by the learner seeing a rich variety of possibilities within a programming language. This followed the parallel of learners reading a rich variety of texts to become mature writers.

PRIMM in action

The following example of PRIMM is planned to reinforce your understanding of selection and to consider the possibilities it enables. Review the process below and think about what it adds to Use-Modify-Create.

Predict: Read the code for this keepy-uppy tennis game.

Screenshot of tennis game including green ground, a tennis racket sprite and a tennis ball sprite.

This is the code for the tennis racket.

Screenshot of tennis racket scratch code.

Predict what this does. How does it control the movements of the tennis racket? What movements can the racket make?

This is the code for the tennis ball.

Screenshot of the tennis ball Scratch code, consisting of three sequences each using selection.

Predict what you think each sequence will make happen. Each sequence demonstrates a different use of selection.

Run: Click on the green flag to run the keepy-uppy tennis game. Running the project will show whether a learner has read and understood the code. The tennis racket is set to move with the mouse pointer. It will move only along the x axis. See inside the project to check your understanding of the code. You will need to click on both sprites: the tennis racket and the tennis ball. If you are uncertain of what a sequence of code will do, you can scroll down in the script area to see comments that explain the sequences.

Investigate: Investigate changing the numbers for the direction and the amount of movement. What difference does this make to the game?

Modify: What modifications would you make to improve the game? This could be changing the numbers in any of the blocks you have investigated, or editing the message at the end of the game.

Make: Imagine a game of your own based on keeping things up in the air. This could be tossing pancakes, or keeping a plane or a kite flying.

Your task

Think about how PRIMM helped to increase your understanding of selection. Share examples of your modified games and discuss the changes you made.

What is the difference between Use-Modify-Create and PRIMM? What does PRIMM add to the learning experience? Add your thoughts in the comments section.

This article is from the free online

Programming Pedagogy in Primary Schools: Developing Computing Teaching

Created by
FutureLearn - Learning For Life

Our purpose is to transform access to education.

We offer a diverse selection of courses from leading universities and cultural institutions from around the world. These are delivered one step at a time, and are accessible on mobile, tablet and desktop, so you can fit learning around your life.

We believe learning should be an enjoyable, social experience, so our courses offer the opportunity to discuss what you’re learning with others as you go, helping you make fresh discoveries and form new ideas.
You can unlock new opportunities with unlimited access to hundreds of online short courses for a year by subscribing to our Unlimited package. Build your knowledge with top universities and organisations.

Learn more about how FutureLearn is transforming access to education