Programming work is essential pedagogy
This blog continues the series of blogs on the Practical Importance of Programming in Computing Education by the NCCE Academic Board, based on the white paper, Practical Programming in Computing Education. In previous posts we argued for the importance of practical programming work in computing based on the fact that it is an intrinsic part of the subject, and that programming is a generally useful skill beyond just in computing itself. Here we argue that it is an important pedagogical tool for teaching computing more generally.
Computing is rich both in concepts and in skills. However, practical programming activity is not only an important skill in its own right - it is a vital part of learning the subject as a whole. Developing programming skills is an important part of the pedagogy of learning the underlying concepts too. It is a solid part of getting good grades generally, not just good grades in questions asking for programs to be written.
Why does programming boost learning?
Programming gives an enormous boost to learning, both of computing itself and other aspects besides. Indeed, it is indispensable in learning the theory of computing, both in terms of better understanding and getting better grades. Why?
● Programming brings theory to life. While some will love the subject for its intellectual beauty alone, academic computer science divorced from learning-by-doing can become for many a dry, unmotivated subject. The experience of deploying knowledge to solve problems illustrates and motivates that knowledge, and also consolidates it into a form that is actually retained. Practical building work is thus one very strong (if not the only) way to avoid the trap of turning an exciting subject into a boring, difficult one.
● Programming is enormously motivating for some. Learning is hard work, and learning to program can be very hard work, so it is incredibly helpful that programming is so rewarding. Getting their program to work powerfully motivates many students to learn and gives them a sense of ownership and agency through solving a programming task they set themselves.
● Programming can build confidence. If they manage to develop strategies to solve new and unfamiliar problems, students can gain confidence, especially when the initial solutions may not work. To gain such benefits universally requires careful scaffolding.
● Programming environments offer immediate, non-judgmental feedback. If your program is wrong, it won’t work, and the computer will tell you so, remorselessly, but non-judgmentally (and for certain kinds of mistakes immediately). It will give you the opportunity to form a hypothesis about what is wrong, devise experiments to verify that hypothesis, leading to understanding the cause of the bug and a path to fixing it.
● Programming consolidates learning. When doing practical programming work, students repeatedly draw on and give concrete form to knowledge and ideas learned in class. It involves them actively processing the material: in semantic wave terms doing unpacking and repacking activity themselves (Maton, 2013). Learning by doing in general and practical work (programming in particular) is a vital part of this activity. This unpacking/repacking process consolidates learning through working with concrete examples linking theory and practice, repetition and giving the ideas a practical context. Furthermore, it leads to deep rather than shallow understanding.
● Programming develops a learner’s initiative and creativity. The majority of school work is closed-form. Well-scaffolded practical work can put the student in the driving seat, inviting them to create systems or programs that have never before existed. Their solutions can be eye-opening.
A note of caution: while practical work is a strong motivator for some, it can be very demotivating for others, especially if not carefully scaffolded with immediate help to overcome hurdles. Bad experiences of practical work can destroy confidence and lead to some believing the subject is not for them and even that they can never do the subject.
Why does programming lead to better grades?
Although practical programming is not formally assessed outside exams (as a part of the grade for GCSE Computer Science), students who are able to engage in well-scaffolded practical work are likely to get much better grades in written exams than students who do not. Why?
● Firstly, practical programming promotes good learning, as discussed earlier, and good learning leads directly to good grades in written exams.
● Secondly, it is an explicit goal of the awarding organisations to design written exams that are hard to do well in without extensive experience of programming. This is much more possible in computing than it is to do the equivalent in (say) natural science. For example, if a question asks a student to predict what a particular code fragment will do, they are much more likely to succeed if they have had plenty of experience of reading and writing code themselves.
Programming is part of a well-rounded education
We are not arguing that computing should be taught only, or even primarily, through practical programming work. Theory is important as well as practice. Deep conceptual understanding underpins practical skills as well as vice versa. Program comprehension is important as well as program development. A balance is essential.
Nor are we arguing that all practical work in computing should take the form of programming: computing can also be enriched by many other forms of practical work across all areas, such as unplugged activities, physical computing, debates, competitions, digital media, and the like. Rather, we have chosen to address programming specifically both for its singular importance, and to maintain a sharp focus.
There are many reasons for ensuring that your computing students do plenty of practical programming, but the key point is this: practical work will lead to both better learning and better grades.
Maton, K. (2013) Making semantic waves: A key to cumulative knowledge-building. Linguistics and Education. 24(1), 8–22. For an introduction to semantic waves in computing, see the NCCE Quick Read on semantic waves
You can find our full white paper Practical Programming in Computing Education on the Impact, evaluation, and research page of our website. In this article and subsequent blog posts, we are taking 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!
What is the NCCE Academic Board?
The Academic Board of the NCCE 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. Its members, and the authors of this post, are
● Professor Miles Berry (University of Roehampton, London)
● Professor Paul Curzon (Queen Mary University of London)
● Professor Quintin Cutts (University of Glasgow)
● Dame Professor Celia Hoyles (Institute of Education, UCL)
● Professor Simon Peyton Jones (chair) (Epic Games)
● Shahneila Saeed (UKIE)