In this blog I shall look at what makes a great coding curriculum and how to deliver it effectively.
Coding is a relatively new subject in children's education. This means that the way it is taught, in schools and elsewhere, varies a lot. Sometimes it is treated as a lightweight subject, focussing on gadgets and other "entertainment" activities. Often it is taught by teachers who do not have extensive experience with coding. And another approach is to teach it using dry and, let's be honest, boring exercises that give children the wrong impression of what coding is.
But there is another way.
Coding is a Serious, Academic Subject
We don't need to look too far in children's education to know what's wrong with the approaches above. Compare it to how Maths is taught, for example. Maths is rarely (if ever) taught as a lightweight subject, but often it can be taught in a dry and boring manner. Modern ways of teaching Maths (these are not really new, they are just new in mainstream education) make sure the subject is taught in an engaging manner using practical examples from real life, especially scenarios that children can identify with.
The same should be true for coding.
Another lesson we can learn from enlightened methods of teaching Maths is to focus on going deeper into topics and making sure there is a thorough understanding of the concepts, exploring them from as many viewpoints as possible. Too often coding is taught in a superficial manner: "Copy this code and make sure you don't make any mistakes when copying the lines down" is not going to achieve anything, but it is a method used too often when coding is being taught.
Inside a Great Coding Curriculum
There are two aspects to look at in any curriculum: what should be included and what order should topics be taught in. These are areas the codetoday coding curriculum focuses on heavily. Unlike more established subjects, coding curricula vary a lot on both of these aspects. The early topics in any coding curriculum are fairly straightforward, but what comes next is far from standard.
Many coding curricula stop at the very basics. This includes, for example, the coding required for GCSE computing: the curriculum just about scratches the surface of coding. A' Level Computing only goes a bit further. But even at these early stages of learning coding, some less obvious but just as important topics are often overlooked: using coding good practices and teaching solid coding methods. Bad practices don't have much of an effect on short, simple programs but become very serious when programs become more complex. Choosing descriptive names for variables, structuring and commenting code, using data structures effectively and not declaring variables as global are just some examples of solid coding practices that tend to get "missed" too often.
The order in which topics are taught also varies widely and is an important aspect of a coding curriculum. Some topics need to always come early on: loops and a basic understanding of variables, for example, and if statements. These are the basic building blocks of structured programming. But even how these basic topics are introduced can make a big difference. At codetoday we have taken a very clear direction on how to tackle these early stages of our curriculum: introduce loops and functions first in their most basic form (followed by if statements) and this, coupled with using easy-to-use graphics modules (such as turtle in Python) allows us very quickly to work on exciting projects. This is important for two reasons. It makes sure students are engaged through great projects. And it allows students to be exposed to more complex projects relatively early, learning how to blend the various tools together rather than use them in isolation.
These "basic" topics are then revisited later to explore them in both more depth and breadth. Returning to these early topics repeatedly is key to mastering them. A common mistake made by beginners is to think that once they've learned the basic for loop, let's say, then they "know" the for loop. By revisiting these topics and adding new layers of complexity as we progress through the curriculum we are making sure students understand that there is more to these fundamentals than they learn about at first.
Breadth and Depth of a Coding Curriculum
So, there's more to the basic topics in coding then meets the eye. But what about further into a coding curriculum. For those students who wish to go deeper into coding than the basics, it is essential they get a broad perspective of coding.
Coding is not just about making an app, or making a robot move. Coding is the ultimate problem-solving subject and to learn coding, a student must tackle a varied range of problems to solve through coding. For example for children and teenagers, combining coding with other subjects such as Maths and Science makes both learning coding and those other subjects more effective, and it shows coding at its best.
How about more advanced topics in coding? Not all students will want to go far, but for those who do then a coding curriculum must be able to take them as far as they wish. A coding curriculum needs to have depth, both in terms of covering more advanced topics and in terms of covering more of what happens "underneath the hood" in coding.
A Great Curriculum Needs a Great Delivery
As with other subjects, a great curriculum needs to be delivered well. What does this mean for coding?
Students can only learn how to code if they can experiment, explore, make mistakes and learn from these mistakes. Every project used to teach any aspect of coding needs to have enough flexibility for students to be able to be creative take the project in a direction they want to. Writing a computer program is not the same as following a recipe from a book. A programmer is like the chef who is creating a new recipe using the ingredients available and some basic rules on how to prepare and mix those ingredients.
A serious coding curriculum treats coding as a serious academic subject while teaching it in an engaging and relevant manner
When projects are too prescriptive, students do not learn. Teaching coding in this way is not easy, though. The instructor needs to be very proficient in coding so that he or she can guide the students in whichever direction they go and spot errors quickly. A teacher needs to be able to plan a student's code in their head, live during a session, and do so for each student in the group. There is no alternative to experience and proficiency with coding. Being just a couple of steps ahead of the students is not enough.
A related difficulty with delivering a thorough coding curriculum is the ability to use complex projects for teaching. This, again, needs experienced programmers for whom these projects are well within their knowledge and capabilities. Many who teach coding stay well clear of complex projects and limit themselves to using simpler programs in their teaching. This approach leads to two problems: simple projects are often boring, and many important aspects of coding can only be learnt through projects that have many "moving parts". You cannot learn coding just by writing simple projects.
And One Final Ingredient
There's one more important ingredient for a great coding curriculum: a curious child who is ready to explore, experiment, make mistakes and learn from them…