I was attending a parents’ information evening at my son’s school the other day and they were telling us about the Singapore Maths approach they have introduced recently.
As a physicist I found these concepts most natural, indeed almost obvious (why did/does anyone teach Maths differently, I was wondering). Here is my executive summary:
Focus on a deep understanding on the concepts, not just learning methods to get the results;
Maths is about solving problems and should be treated that way, always making sure there is a context to topics being covered;
Experience things practically and visually before abstracting them.
Although I no longer work as a full-time research scientist, I still recall how whenever learning a new topic, whether in Physics or Maths, I felt I truly understood a topic when I got to the bottom of it after exploring it from various aspects. Reading a paragraph from a textbook and understanding the words alone would be no use to me if I wanted to use that particular topic effectively in my work.
And the reason I was learning that particular topic was because I needed it in whatever project I was working on, whatever problem I was trying to solve.
The third point is an approach I have always used - I remember pacing up and down the corridor at home while trying to visualise the concepts of special and general relativity as an undergraduate student (not an easy task, but the process helps nonetheless - also by pacing up and down, time would dilate with respect to the rest of my family which gave me more time to think! Sorry, couldn’t resist.)
And many years later as a lead research scientist, I wrote computer programs to simulate the physical processes behind the optical phenomena I was investigating (my field of research) and this allowed me to visualise, through the computational model, processes that cannot be observed directly.
Now, what has all this got to do with coding (or programming, which is my preferred term)?
Programming is another subject that could benefit from a “Singapore Maths-style” revolution in teaching it.
As a programmer you feel proficient when you can easily visualise what data structures to use for the data you are trying to manipulate, what processes to use in order to achieve your desired task. Indeed, like Maths, programming is a tool for problem-solving.
Often when people embark on learning programming they say they are learning a programming language. I get people asking me to learn Python programming, to which my reply is that we can help them learn programming, and we can use Python as a means to do so.
Children especially are often taught commands in the ‘copy-this-down-and-it-will-work’ fashion. What if they are trying to solve a slightly different problem, will they be able to realise that a similar method as one they had used previously would work, with some alterations?
So what does “Singapore Coding” look like?
As it happens it’s what we do already at codetoday in all our courses. Here’s another executive summary:
Focus on understanding how a computer “thinks”, or more accurately how it executes a program. We use the debugger often to run through the code line-by-line. This allows us to see the program being executed in slow-motion, the way the computer sees it.
For each concept, start with explaining it through a practical and visual approach. All our students will know of the "boxes stored on a shelf” inside a program, with a label on the outside of the box and stuff inside it. And they have all gone through the "for loop role play" to act out a for loop unplugged.
Never, ever write boring programs that don’t do anything interesting. Graphics, animations and 2D games are perfect projects to introduce all the key aspects of programming but in a way that is engaging straight away and to all students, not just to those who are naturally drawn towards coding.
And for my personal brand of “Singapore Coding”, let’s call it CodeToday Coding, there’s a final point:
Don’t use hardware gadgets or ‘specialised’ software platforms that distract from the actual programming and, by limiting what can be done with coding, stifle creativity. After all, when programming a robot you can only do what the robot can physically do. By teaching coding using just a computer and a well-suited but full-fledged programming language (Python is the unrivalled candidate for this in my opinion) you are making sure that programming is a creative subject, not a technical one.
Now, back to my son who has figured out that if you have three shelves and they all have three puppies each on them (he’s in a stage where he like puppies), then there are nine puppies in all. Certainly better than memorising times tables…