Skip to main content

05 May 2022

The Crucial Importance of Practical Programming

Simon Peyton Jones profile image
Written by

Simon Peyton Jones

Practical programming is a vitally important part of any computing education, one that is both fundamental and useful in its own right, as well as fantastic pedagogy for learning computing. The recent removal of the non-examined assessment from GCSE Computer Science is an opportunity to introduce far more exciting and relevant practical work than was previously possible. We want to invite computing teachers to ensure that practical programming, in diverse forms, is deeply integrated into your schemes of work, throughout all key stages.

In 2014, the new English computing curriculum re-envisioned computing as a foundational subject, rooted in a body of knowledge and ideas rather than a vocational equivalent. Our vision for Teach Computing (a 7-minute video) paints the big picture, narrating how this seismic change to computing as a school subject underlies everything the NCCE does.

A danger is that the pendulum swings too far - that we come to see computing as a mainly theoretical discipline, divorced from the practical activities that animate it, especially programming. That is a perception which would be a tragic betrayal of the vision.

The truth is that practical programming is central to a good education in computing. There are three distinct reasons for embedding practical programming deeply into our computing education.

Firstly, programming is intrinsic to computing. The importance of programming is explicit in the second of the four aims of the National Curriculum for computing: All pupils can analyse problems in computational terms and have repeated practical experience of writing computer programs to solve such problems.

Why is this? Programming is not just a means to an end: it is a fundamental part of the subject itself - just as music performance is to music, and writing is to English. A computing education without programming would be a dry, eviscerated husk, lacking not just motivation and enjoyment but intrinsic content. The core purpose of the subject is to build things that change the way we live, work and play, so actually writing programs is key.

Second, programming skills in computing are exceptionally useful throughout a young person’s life - not just if they become a software developer. In a world in which digital technology increasingly pervades our lives, an understanding of how that technology is programmed, and the ability to write elementary programs, gives our young people agency: it allows them to be empowered actors, rather than passive and powerless consumers.  As Rushkoff's book title says, the choice is "Program or be programmed".

Moreover, programming projects develop many “soft skills” that are highly prized by employers including teamwork, planning, logical thinking, communication skills, and resilience.

Lastly, programming work is essential pedagogy. "Practical programming" is much more than "write a program for task X, starting from a blank sheet of paper". It includes understanding an existing program, predicting its behaviour, modifying it, explaining it to another person, devising tests, identifying bugs, forming a hypothesis about what is wrong, performing experiments that confirm or refute that hypothesis, and so on. These practical activities bring together the theoretical knowledge students gain in class, and consolidate and integrate their understanding. Moreover, the immediate feedback from a running program can be incredibly motivating.

All of the above applies at every Key Stage, but there is a particular opportunity and danger at Key Stage 4. In 2019, Ofqual removed non-examined assessments from the grade of GCSE Computer Science. Many schools read this as a signal that practical work is unimportant. But that is completely backwards! The real message is that programming work is too important to be conducted in 20-hour hermetically-controlled assessments – it is hard to imagine a less authentic or motivating setting. Instead, freed from the onerous demands of formally-assessed work, schools can now design imaginative, creative, and ambitious programming projects, incorporating collaboration and teamwork, connections to “live” data, industrial mentors, and iterative review. Such projects offer a far richer learning experience than was previously possible.

Our call to action is this:

  • Computing subject leaders and teachers: ensure that practical programming is deeply integrated into your scheme of work, in diverse forms ranging from program comprehension, through short exercises, up to capstone projects.
  • Senior leaders: actively support your computing department to make rich, creative, practical programming a priority in your computing timetable, and your resourcing, at every Key Stage.

You can find our full white paper Practical Programming in Computing Education on the Impact, evaluation, and research page of the NCCE website. In subsequent blog posts, we will take each chapter of the white paper and invite your comments on it.

Please share thoughts about the role of practical programming in the taught curriculum with us and your colleagues at CAS. We need a conversation, not a monologue!  Just use the comments facility below :-).

What is the NCCE Academic Board?

Our Academic Board provides oversight and guidance for the work of the NCCE, ensuring that quality and rigour, informed by evidence from research, are at the heart of the NCCE's professional development programmes. The members, and the authors of this post, are:


Please login to post a comment

Leila Mckenna
30/05/2022 10:22

I completely agree with this. When I became computing lead for my school, even though programming was being taught, it was far too abstract for the children to comprehend and fully understand. Since then, we have implemented a practical curriculum, using robot, to reach specific code in order to solve problems. This has had a real positive impact on the children’s learning and understanding as well as supporting their development of computational thinking and the skills required to engage in it.
Using a practical approach, children gain a concrete hands on experience which helps them to experience the problem in real life. We encourage then to engage in the problem solving process by becoming the robot and moving through the code. They can then experience it themselves as well as see the robot execute the code and use this to identify errors and debug their code as an iterative process.
We do always try to link their learning to activities in their every day life such as using selection to make decisions which helps them to grasp the learning, however it isn’t until they engage in the practical process that the deeper learning takes place and the children make progress…

Pete Dring
07/05/2022 11:21

There’s some really interesting points in the white paper: thank you for sharing.

In regard to the call to action for curriculum leaders:

  • Computing subject leaders and teachers : ensure that practical programming is deeply integrated into your scheme of work, in diverse forms ranging from program comprehension, through short exercises, up to capstone projects.

Personally I’ve enjoyed teaching the revised Pearson / Edexcel GCSE specification (with a practical programming on screen assessment) much more than the previous iteration which had two paper exams plus (cancelled) practical programming NEA. Pupil voice surveys show that students have (mostly) also enjoyed the practical programming component alongside the theory. I’m an advocate for both-and rather than either-or when it comes to theory/programming.

Things that have really helped:

  • Having parallel strands of Computational Thinking (programming) lessons each week alongside Principles of Computer Science (theory) rather than discrete blocks. I think this helps build momentum routines and long term understanding: I found students forgot programming skills too quickly with discrete topics.

  • Addressing the blockages that cause some students to struggle with confidence in programming with the right routines, resources and pedagogy. We’ve identified three main blockages that can hold back students at the start of a GCSE course:

  1. Some students were still typing with one finger at a time. Regular code type race activities that incentivise accuracy and speed have helped students concentrate on the problem they need to solve with code rather than the layout of the keyboard to actually type the code. You can create activities from any python code shared on which are fun as starter activities to keep students entertained during the register.

  2. Some students didn’t know how to read code. We teach young children to read books before expecting them to become proficient at writing stories so it makes sense to get students to decode code before (or at the same time as) they write it. Regularly getting students to identify and explain key programming concepts in code snippets helps them use and understand the right terminology which helps them in exams, in dialogue with teachers and in knowing what to search for to get the most suitable solutions online. We use the keywords part of KPRIDE to help with this.

  3. Some students were afraid of error messages. Debugging can be intimidating at first especially if students lack confidence and resilience but it can be really satisfying and rewarding when you are able to use the clues to see debugging as a challenge to be solved. We try to get students to get regular practice debugging common errors. The D part of KPRIDE injects common mistakes into any python code.

Has anyone identified any other blockages which can stand in the way of students becoming confident programmers? Or has anyone found any resources or routines that can help address these blockages?

Richard Millwood
06/05/2022 12:55

Thanks Richard - an argument after my own heart.

  1. I have no problem with theory, unless it becomes the dominant notion to develop a pedagogy of theory first, performance second. I suppose I feel that theory is foundational, but is formed in the head as performance-related schema and conceptual frameworks, not a list of ideas read or reproduced on paper.

  2. I like very much this notion of ‘computational thinking’ arising from practice. I believe it has resonance in many other school and university subjects. For example in universities, researchers are often fed a course on research methods which is slide after slide of terminology, ontology, epistomology, statistics and philosophy - often with no practical exercises set! How on earth anyone learns from these courses, apart from some basic familiarity with the jargon, beats me!

  3. Unplugged is wonderful as a foundation for body-syntonic, ego-syntonic, and I argue socio-syntonic thinking, as proposed by Papert and Solomon so long ago, but equally often ignored, perhaps because ‘scientists’ tend to reject the subjective stuff. And unplugged suits only some problems. BUT more importantly, unplugged is surely only a brief interlude, not a detailed examination of a theoretical concept. It should be experience as fun, stimulus and focus before the serious stuff is learnt through the expression and evaluation of programs. The expressive power you allude to (‘no cost’) is quite unique and I would liken to a magician’s wand in the excitement it can generate, but is matched by the evaluative power of being able to run and re-run the program with alternative inputs and modifications and see it it works as predicted. (Sorry if I am simply restating your points in my own terms! -

Richard Pawson
06/05/2022 12:18

I couldn’t agree more. I see three present dangers to this critical aspect of the subject:

  1. (Covered in your post). If the subject becomes too theory-based.

  2. The rising emphasis being placed on teaching ‘computational thinking’ in the abstract. Computational thinking is what you develop automatically, from programming solutions to a lot of problems. It is not something you can learn in the abstract and then apply to programming. (Prof. David Hemmendinger makes a quite different complaint about ‘computational thinking’ - but one well worth reading here in his white paper ‘A Plea for Modesty’ - )

  3. The rise of the idea of ‘teaching computing unplugged’ and/or use of pseudocode as a substitute for executable code. Computing as a subject does not have any monopoly on rigorous problem solving: you learn it in maths, sciences, design technology, and even in English. What computing brings to the table that most of the others do not, is two things:

  • Once you have solved the problem, you can then execute your solution on multiple variants of that problem (e.g. on different values, data sets, scenarios, even games) with little or no additional effort.

  • You can ‘instantiate’ your solution (function, object, procedure) at no cost as part of a solution to another, larger or more complex, problem, as simply as though your earlier solution was a fundamental construct. No other sphere of learning comes anywhere close to this.

These ideas are lost when you lose focus on practical programming as the most important aspect of the subject.

To me, many of the aspects of the (A-level) syllabus that are not commonly classified as practical programming per se are best taught through practical (executable) programming (data structures, algorithms, automata, Turing machines, processor architecture, networking …)