Since the youth Python programming course launched in 2018, it has now gone through more than eight years of classroom practice. After years of real teaching, refinement, and student feedback, I wanted to write this piece to share what I’ve learned.
Where the curriculum came from
My earliest course materials were written around Java. Because of the nature of the language, that course suited students around age 14. As my students got younger, those materials no longer fit. So I set out to write a new curriculum built around Python, suitable for the full 9–16 age range.
The Python materials are drawn directly from the textbooks and lecture notes of several well-known North American university intro CS courses — then simplified, annotated, and supplemented with examples and exercises before reaching the classroom.
Different ages, different pacing
The new Python course went live in early 2018. Across many cohorts and age groups, I’ve continuously refined the content. The most obvious difference is pacing.
Take 11-year-olds versus 14-year-olds: a single unit takes an 11-year-old at least 15 lessons, and the foundational stage has six units in total. So a student who starts at age 11 needs roughly 1.5 to 2 years to build basic programming ability — and they can’t take overly long breaks (such as summer or winter holidays), with continued practice between classes. For a 14-year-old, the same material takes about 12 lessons.
The course content
Take the first unit: with examples and exercises, I turned it into about 200 pages of classroom slides. As I mentioned, an 11-year-old needs 15 lessons to get through those 200 pages.
Personally, if it were just a matter of lecturing, I could finish quickly. But whether students truly grasp and apply it is another matter entirely. In programming, going from “I understand it” to “I can use it” are two different stages.
I’ve prepared six themed units like this, taking students from zero to being able to turn their own ideas into working programs. They cover:
- Programming fundamentals
- Variables
- Control flow
- Functions
- Sorting
- Object-oriented programming (OOP)
- Basic data structures
- Functional programming
- Simple algorithms
Beyond these six themed units, I’ve also prepared standalone modules — weaving in graphics, game building, and more — to use at the right moments and make the course more engaging.
Isn’t text-based coding boring?
A parent once asked me whether text-based programming, which looks a bit like typing, might feel dull and hard for a child to stick with. That worry is unfounded.
Learning to program isn’t nearly as monotonous as it looks. We use programs to bring features and ideas to life. When students enter the course and turn their own ideas and newly learned skills into code running on a computer, the sense of accomplishment from seeing the results keeps fueling their motivation to keep learning.
A closing note
As the final installment of “Reflections on the Youth Python Course,” I want to especially thank the students and parents who have supported and trusted me over the years. Seeing so many students discover their interests through learning — and ultimately head off to university and into the field — fills me with joy and gratitude. In realizing their own dreams, my students help me realize mine.