What is PRIMM?

Do your students find programming difficult? Are they staring blankly at a blank Idle window not knowing where to start? Well they are not alone. Research in higher education has shown that many students find it difficult to write a program from scratch [1]. As an educator, you probably use a variety of techniques to help them, presumably some of the strategies that helped you yourself to learn to program.

PRIMM is an approach to planning programming lessons and activities and includes the following stages:

  • Predict
  • Run
  • Investigate
  • Modify
  • Make

These stages are used in planning lessons and activities and are designed to support learners at all stages of learning programming in school, not just complete beginners.

Why might this be useful?

Many teachers are able to recognise that students can find programming difficult and they can identify the stages that novice school-aged programmers go through in developing skills. However, it is not as easy to specify a particular teaching strategy that will support learners in gaining confidence and a deep understanding of programming concepts. A substantial body of research has identified that reading and tracing code is useful in understanding how program code actually works (and before writing), and other research has focused on adapting existing code to support developing problem-solving skills prepare students for ownership of (and resultant responsibility for) code. Another strand of research is around moving between different levels of abstraction when programming. By recommending a PRIMM approach, we are combining these three research contributions to develop guidelines for teachers that support student learning.

The Predict phase involves students looking at short program and trying to decide what it will do. This can be a starter, can be done in pairs, or you could even spend a whole lesson on this phase.

The Run phase involves downloading the code and then running it to check your prediction. It does not involve any copying in of code (not my favourite strategy for children learning programming), and as the program is written by the teacher, the student can focus on what it does and not whether they typed it in correctly.

The third stage is Investigate, which should be varied – there are many, many lovely exercises that you can do to get into the nitty gritty of the code – annotate it, use Parson’s puzzles to get it in the right order, put errors into it and do some debugging, trace through it (use the PLAN C TRACS activities for this), label the variables, etc.

The fourth stage is to modify the code by changing first something simple, and then make more and more modificatons, which can add lots of differentiation to your class.

Finally the students make a brand new program, when they can borrow bits of code from the original program but it will have a new function, context or problem to be solved. These five phases may not be in every lesson, depending on the topic. And you may cycle through the first three or four phases several times.

Go to example teaching materials 

[1] Grover, Pea and Cooper, 2015. Designing for deeper learning in a blended computer science course for middle school students. Computer Science Education, Vol 25, No 2