Skip to main content

Using CRC cards to improve programming design

Last month, I was delighted to get the opportunity to visit the 14th Workshop in Primary and Secondary Education (WiPSCE), which was held in the magnificent surroundings of Glasgow University. WiPSCE offers attendees the opportunity to listen to the very latest research in computing education, delivered by those at the forefront of their field. The delegate list read like a who’s who of researchers in computing education. So, it was also a great opportunity to catch up with old friends and make new connections.

Context: industry

As someone who has had considerable IT industry experience prior to my teaching career (although not in programming), I am drawn to research and ideas which apply industrial solutions to educational problems. For this reason, I was particularly drawn to a short paper by Sebastian Keller, Martin Kraft, Goron Fraser, Neil Walkinshaw, Korbinaian Otto, and Barbara Sabitzer: Improving Scratch programming with CRC-card design.

The theory is simple, and draws on research conducted by Waite et al. (2018), which identified that the importance of design is undervalued in the teaching of programming, particularly at an early age. I have explored this in the current issue of Hello World (P62) and in the online course — Programming pedagogy in primary schools: developing computing teaching. This paper seeks to provide teachers with a simple design aid commonly used for teaching object-oriented programming, adapted for use with Scratch.

The initial scope of this study was relatively small: 41 participants, aged 11–13 years old, in Passau, Germany. As such, the results need to be viewed with caution. However, a small improvement in the ‘completeness and correctness’ of programs was observed in this study, suggesting that there is scope for further investigation.

What are CRC cards?

CRC (Class-Responsibility-Collaboration) cards are divided into three sections. In Scratch terms, the ‘class’ is the object, or ‘sprite’, the responsibility refers to important attributes (such as position, task, or if statements), and the collaboration element describes interactions with other classes, or in this case, sprites. There are a couple of obvious qualities of CRC cards that suggest they may be well suited to helping younger learners:  they help decompose a problem — a core component of computational thinking — which can be difficult to introduce, and they are intentionally brief.

In this study, learners created a simple game, which involved moving a bowl to catch fruit falling from the top of the screen. They planned the code for each sprite (the pieces of fruit and the bowl) on CRC cards, as a distinct design exercise. A similar game can be found online. The CRC card below is an example for the ‘bowl’ sprite. Do you agree? What could a CRC card for the ‘fruit’ sprite look like?

Fit with other models

By using this strategy, learners are introducing an element of design before they begin to code; thus the strategy moves on from a tinkering led approach, which is still common in many classrooms. Models including Use, Modify, Create, and PRIMM recognise the importance of design in programming. However, these high level theories need to draw on practical strategies to be implemented successfully. CRC cards could be another option for teachers to explore.

Application in the classroom: useful for teachers?

To develop this study further, I would also be interested in teachers’ perceptions. Waite et al. (2018) found that fewer teachers see the value in design when programming, than they do in planning when writing. Perhaps simple, easy strategies such as this could help remove some of the barriers.


Read more

  • Keller et al (2019): Improving Scratch programming with CRC-card design
  • Sentence (2017): Exploring pedagogies for teaching programming in school
  • Waite et al. (2018): Abstraction in action: K-5 teachers' uses of levels of abstraction, particularly the design level, in teaching programming


About the author

Ben Hall, Learning Manager at the Raspberry Pi Foundation.