What (probably) works when teaching computing

Dec 01, 2017

Miles Berry

Computing education has undergone significant transformation over the past decade. As we move into an era where digital literacy is as essential as traditional literacy, educators must ensure that computing is taught effectively. This article draws on both research and practical experience to highlight what works — and what doesn’t — in computing education.

The Challenges of Computing Education

Unlike subjects such as mathematics and science, which have well-established pedagogical frameworks, computing education is still in its formative stages. Five years ago, our expert panel submitted recommendations for a national computing curriculum. The government responded with requests for more mathematical content, leading to an emphasis on binary, logic, and algorithms. While these additions were valuable, the challenge remains: what constitutes effective teaching in computing?

Debunking Myths About Programming and Computational Thinking

One of the long-standing assumptions in computing education is that learning to program changes how students think. Seymour Papert, a pioneer in the field, argued that programming helped children develop problem-solving skills applicable beyond computing. However, empirical studies suggest otherwise. A controlled study on Code Club, an extracurricular coding initiative, found that while participants improved their coding skills, their computational thinking did not significantly surpass that of students who had not participated. This suggests that computational thinking does not automatically transfer to other domains—it must be explicitly taught.

Another persistent belief is that sitting children in front of programming environments like Scratch will naturally lead to learning. While Scratch is an excellent tool, it is not self-explanatory. Research shows that children frequently develop inefficient coding practices if left to discover concepts independently. Effective instruction is crucial—students need guidance to understand variables, loops, and conditionals rather than relying solely on trial and error.

What (Probably) Works in Computing Education

1. Explicitly Teaching Computational Thinking
Computational thinking involves designing solutions so that a computer can implement them. It should not be mistaken for general problem-solving skills. Effective teaching involves helping students develop an understanding of computation before expecting them to write code. This can be done through structured activities where students break problems down into sub-goals before coding.

2. Subgoal Labeling
Before writing code, students should outline the steps needed to solve a problem. This approach—used widely in professional programming—helps clarify the logic before diving into syntax. For example, when writing a program to calculate an average from a list of numbers, students should first plan how to store and update values before translating their plan into code.

3. Logical Reasoning and Debugging
Students should be encouraged to predict the outcomes of programs before running them. This helps them develop a mental model of how a computer executes instructions. Debugging exercises, where students analyze faulty code to find errors, reinforce this skill and deepen their understanding of programming concepts.

4. Collaborative Learning
Pair programming—where two students work on the same problem—has been shown to improve learning outcomes. Research indicates that struggling students benefit significantly from working with peers, leading to better performance and increased motivation. Similarly, peer instruction, where students discuss and explain concepts to one another, has been found to enhance understanding and retention.

5. Developing a Growth Mindset
A key factor in computing education success is a student’s attitude. Studies show that those with a growth mindset—who view challenges as opportunities to learn—perform better in computer science courses. Encouraging students to embrace mistakes as part of the learning process can significantly impact their success.

6. Early Exposure to Computing
Students who have had years of experience with computing before taking formal courses perform better. Unlike physics, which is introduced early in school curricula, computing is often a late addition. Schools should ensure that children engage with computational thinking from an early age, progressing from block-based programming (such as Scratch) to text-based languages (such as Python) by secondary school.

Striking a Balance Between Blocks and Text-Based Programming

There is often debate about when students should transition from block-based to text-based programming. Research suggests that block-based programming helps students focus on problem-solving rather than syntax, leading to higher engagement and better learning outcomes. Once students have mastered fundamental concepts in a block-based environment, they can transition to text-based languages without the cognitive overload of syntax errors.

Moving Forward

Computing education is evolving, and best practices are emerging. Educators must focus on structured teaching, logical reasoning, collaborative learning, and fostering a growth mindset. Early exposure and a gradual transition from block-based to text-based programming can provide a solid foundation for future learning. By refining our approach, we can ensure that students not only learn to code but develop computational thinking skills that will serve them well in an increasingly digital world.

Based on a talk I gave for ICT for Education in Brighton.