Coding is a difficult subject to teach well. It largely focuses on abstract concepts and a way of thinking that is different to what we humans are used to. The slightest error will stop the program from working at all, which means that a specialised teacher is required to teach the subject. And engaging projects can be much harder to use in teaching compared to the more boring and simpler tasks.
As part of our parents' coding guide series of blog posts I will discuss the key areas of our coding curriculum.
Back in 2016 codetoday was set up to fill a gap in the teaching of coding: our aim was to teach coding in a comprehensive and meaningful manner while still making it accessible, engaging and fun. This is still the core of our teaching philosophy and methods.
One of the main themes in our curriculum is the focus on ensuring a deep understanding of the concepts being taught. Often it is too easy in coding to show a code snippet to students, show them what it does, and then get them to copy it. However such concepts cannot be truly understood unless we dive deeper.
One technique we use a lot is the use of analogies and imagery to make sense of abstract concepts. The image above is one I ask students to picture for example when introducing a command in Python that brings in an external module. I don't actually show students the image but ask them to visualise a large library with high ceilings and thousands of books from floor to ceiling. We then imagine our computer program going to this library and fetching the book we have requested, a book that has many commands inside it that we can then start using in our program. These methods help students understand abstract concepts by visualising images that they are more familiar with.
A common issue with coding curricula is that it can take a long time to get to a point when interesting projects can be used in teaching. This does not have to be so. Indeed, this should not be so as those early boring stages is when students lose interest in coding.
We have designed our curriculum in such a way that we can start working with engaging projects from the first session. We then progress through introducing basic versions of the fundamental topics in coding that therefore allow us to make our projects more complex (and interesting) very early on. In later stages we then return to those topics and start adding more detail and extend them.
Another foundation stone on which our curriculum is built is the focus on making students independent coders. Learning coding often follows a similar path to learning a foreign language: there is a stage when reading text in a foreign language is possible but writing or speaking is much harder. Often, students can understand code that's presented to them very well but starting from a blank page and writing code from scratch can be a lot harder. We therefore put a lot of time and effort in areas that help with this: planning of a program and deconstructing ideas into small steps, and translating those ideas into Python code.
As with every subject, practice is essential for gaining more independence. This is the reason why we provide support during and after each course so that as students practise their coding and encounter problems (as they definitely will), they will be able to get feedback and pointers to how to solve the problem from us.
A brilliant curriculum is not enough though. The delivery of that curriculum is just as important. Good communication skills are of course essential. Another important requirement for a coding instructor is coding proficiency. This may seem like an obvious point, but if a coding teacher is not sufficiently proficient with coding, they will struggle to spot errors in students' code, leading to plenty of wasted time. The slightest error in a computer program will cause the program not to run. Unlike in other subjects where students can carry on with a task even if they have made errors, in coding a student will be completely stuck if they have an error that they cannot resolve. This is where the instructor's proficiency and skill makes a big difference in the delivery of a coding session.
Different age groups and advanced coding
Beginners always need to start from the basics. However the pace at which we can cover the early topics varies greatly between a group of 7 year olds and a group of 15 year olds, say. We follow the same path through our curriculum for all ages, although at a different speed. We also adapt the projects we use to the relevant age group, and indeed to different groups depending on their interests, whenever possible.
For the more advanced, typically older, students, in addition to introducing further coding topics we also incorporate coding with other aspects of the curriculum, such as Maths and Science for example. This is key to showing coding's true potential and to showcase real world uses of coding.