All Articles

Teaching Kids to Code

Volunteers from Code In The Community (Tiong Bahru Community Centre, May - Jul 2019)
Volunteers from Code In The Community (Tiong Bahru Community Centre, May - Jul 2019)

In 2019, I volunteered twice with Code In The Community (CITC), a Google-sponsored community programme which aims to teach kids from less privileged backgrounds how to code.

As a teaching assistant, I sat next to students (aged 7-12) and helped them navigate the world of Scratch.

CITC’s course runs for 8-10 weeks, which gives us enough time to cover a relatively broad range of concepts, such as variables, conditionals, and the publisher-subscriber model.

I’d like to think that my experience has taught me a few things about teaching kids programming, so I’m writing this to outline what I feel are important learning outcomes (and, to be clear, these thoughts aren’t meant to represent CITC’s philosophy).

Cultivating Perseverance

Students and Volunteers from CITC (Tiong Bahru Community Centre, Aug - Oct 2019)
Students and Volunteers from CITC (Tiong Bahru Community Centre, Aug - Oct 2019)

It almost goes without saying that the ability for children to channel their inner resources to figure out problems by themselves is an essential life skill.

Don’t get me wrong –– collaboration is important and people working on tough problems should look for help once they’ve crossed a certain effort threshold –– but there’s a clear difference between:

  • Asking for feedback when one has produced a reasonable but sub-optimal solution to a complex problem, and
  • Asking for assistance when one hasn’t attempted to understand the problem

Every CITC class is interspersed with short programming exercises. During these exercises, kids tend to ask for help a little too frequently. I respond to this by:

  • Asking guiding questions before giving answers, and
  • Urging them to try a little harder before giving up

I believe it’s important that kids to think to themselves, “I don’t know how to make this work, but there’s a good chance I can figure it out.” Such a mindset will empower kids to overcome bigger obstacles later in life. I’ve also noticed many other volunteers encouraging students to adopt this attitude.

Developing an Intuition for Subproblems

Perhaps kids will find it easier to cultivate perseverance if they learn to break problems down into smaller, more manageable chunks.

In schools, students are often taught specialised solutions to specific types of STEM problems. An extracurricular programming class provides an avenue for us, as educators, to present a broader framework for problem-solving.

An example of a simple exercise for CITC students might be:

Make the Scratch Cat move about on the stage, in a square, multiple times.

There is, of course, more than one way to do this. For example, students can combine loops (i.e. repeat blocks) with:

  • turn [i] degrees and move [j] steps to get cat to repeatedly move in one direction and shift its orientation, or
  • change x by [i] and change y by [j] to adjust the cat’s position (while maintaining a fixed, 90-degree orientation)

The end result would look something like this:

Scratch Cat Moving In Squares

As mentioned, the goal here should be to get students to think along the lines of breaking problems down into subproblems:

  • “I need to get the cat to move in a square.”
  • “This means moving the cat right, down, left and up.”
  • “First, I’ll worry about moving the cat from left to right.”
  • “Let me find a Motion block that will help me do this.”

And so on. The belief that most solutions have a simple, achievable first step is a powerful one. If students understand how to incrementally construct a solution and calibrate their approach (an idea explored in John Kay’s Obliquity), they’ll be well-disposed towards tackling tougher, more complex challenges.

Encouraging Exploratory Learning

One of the best parts about teaching kids programming is that they can take what they’ve learnt in so many directions. From the Scratch homepage, students can view the wide array of games and animations that others have created.

Collections on the Scratch Homepage
Collections on the Scratch Homepage

Every CITC student concludes their time in the course with a final assignment, where they bring their skills to bear and create a brand new project of their own (or remix an existing one). This phase of the course allows them to tap on their creative potential and blend art with science.

As a front-end engineer, I can relate to their joy when they create something visually interesting and share it with their classmates.

In the span of eight to ten lessons, students don’t get to explore all facets of the Scratch platform. Custom blocks (i.e. My Blocks), for instance, aren’t touched upon, but students sometimes ask me to explain their purpose.

I love it when this happens, because it gives me the confidence that these kids will spend their time outside of school exploring tools that aren’t covered in class –– another important trait for their success.

Concluding Thoughts

The details of what we teach, however important, matter less than the values we impart. By incalculating the right values, we plant the seeds for kids to grow up to become resilient, analytical, and creative thinkers.

It’s the start of 2020 and I’ve decided put my involvement with CITC on hold to do a bit of exploratory learning of my own! That said, I’m looking forward to giving the programme another shot when the opportunity presents itself.