I'm Simon Whitaker and in late 2011 I started teaching a programming course at my daughter's school. This blog is my record of how I got on. To get in touch or comment on a post, visit me on Twitter.
We just had fibre broadband installed today, after which it took me a mere 10 minutes to download the latest version of Apple’s developer tool, Xcode — a 1.7GB download. In this evening’s class I asked the class to work out how long that download would have taken on my first Internet connection, a 9600bps modem, and how much the call would have cost assuming a call cost of 10p per minute.
The answer: it would have taken about 18 days and added £2,500 to my phone bill. (They’re young enough not to question whether you could sustain a modem connection that long.)
They were amazed. One actually said, “eighteen days? But it’s less than two gig!”
Imagine where we’ll be in another 20 years.
Today I was back at my daughter’s school taking the first of eighteen (eighteen!) weekly sessions, split into two 9-week courses. We’re using Scratch again, and our first project, which we’ll be working on over the first three weeks, is to write a beat box (a bit like Beatwave for iOS). We had a lot of fun, and the classroom ended up echoing with some pretty funky beats.
Meanwhile, I’ve been itching to play with iBooks Author since Apple announced it last week, so I’m thinking about putting together an iBook of cool Scratch projects. Interested? Got chapter suggestions? Want to be a beta reader? Tweet me!
Exciting news! My daughter’s school have asked me to go back and take a fresh course on programming to run from now until the end of the summer term. Potentially it starts in three days time so I need to think of some stuff to teach them, sharpish! We’ll start with Scratch this time and may or may not delve into other languages, depending on the level of enthusiasm for them.
Here we go again!
On Tuesday evening, after six weeks of fun and frollicks, the course came to an end. Here are some reflections on how I thought it went.
Too much too soon
My original plan was to teach programming using Lua. I sweated for hours over my slides, obsessing about whether the detail was too much or too little, honing it down to just the basics and presenting those basics in a way that I just knew the students would love.
They hated them.
After a long day at school I don’t think anyone had the appetite to sit and look at slides for an hour and a half, no matter how beautiful they were. This wasn’t a conference, it was an after-school club for young people aged circa 13-17. Although the slides contained lots of hands-on exercises — they were coding Lua within a few minutes of starting the first session — it was still too dry, disconnected and theoretical.
After the second session one of the teachers who was sitting in on the class kindly advised me, “they need something to do”. I knew he was right, but I didn’t know how to make it happen. They hadn’t really learned enough Lua (or picked it up sufficiently well) to be let loose on a challenge.
I abandoned the remaining slides and ran for refuge to the Coding for Kids mailing list. Help!, I said, I should have asked this two weeks but… how the hell do you teach coding??
The suggestions came thick and fast. A common theme was: make it hands on, make it easy and make it graphical. Scratch was mentioned more than once. In my heart I knew they were right but I felt as though I was failing in my stated aim of teaching them programming it I bailed out from Lua and switched to Scratch, a completely drag-and-drop programming language, no text editor, no fun syntax mistakes — a programming language for children, dammit!
So I opted to let the students decide. In week three I gave them a choice: I showed them Corona, a toolkit for writing physics-based games for mobile that uses Lua, and I also showed them Scratch. I gave them the option to use whichever they preferred. It turned out the majority preferred Scratch. They loved the fact that you could just get productive with it and not have to worry about missing brackets. Within minutes they’d picked it up and were all writing games. Before I knew it our time was up and for the first time in three weeks we had to remind the students to go home at the end of the session.
The remaining three weeks took a common format: I’d start with the students gathered around the front of the classroom while I demonstrated how to code a particular feature for their games. In week four I showed them how to write a simple sideways-scroller game, where the player stays stationary on the X axis and stuff flies across the screen right to left. In week five, I showed them how to add jumping - hit the spacebar to make the player jump up in the air then fall back to earth under gravity. In week six, since it was nearly Christmas, I showed them how to add snow to their games, using different sizes and speeds of snowflake to suggest depth. After this demo at the start of the class, the students went off and started coding, typically using what they’d just learned to improve the game they were writing. This format seemed to work well. It certainly worked a lot better than slides!
The Path to Cluefulness
If you’ve ever done any management training courses you’ll no doubt be familiar with a diagram the name and source of which escape me, but which I’ll call the Path To Cluefulness. It describes four stages that someone goes through on the path from novice to expert. Starting with bags of enthusiasm but no actual knowledge, the novice soon has the enthusiasm drained away as they realise how little they know, before earning it back the hard way as they learn their skills. (In the management training course I attended, the course leader illustrated the four stages with clips from The Karate Kid.)
I had imagined the students would go through these four stages during the course, but I’m not sure that actually happened. The path they took was more along the lines of:
- Not sure what this course is all about but at least it keeps me warm and dry
- OH MY GOD THAT LUA CODE IS SCARING ME AND WHY DOESN’T IT WORK WHEN I TRY IT???
- Ahhhh, Scratch!
- I am now a game-programming God.
However, I definitely went through the four stages - or at least the first two. Having arrived in week one full of confidence that all I needed in order to be a good teacher was purity of intent and some good slides, I faced a pretty rude awakening. Teaching, I can now tell you, is hard! I have a new-found respect for teachers as a result.
Not everyone finds coding intuitive! When planning a course, take what you as a geek consider to be the easiest possible aspects of coding and try to understand that they’re only easy because your brain’s wired that way - you’re a geek, after all. Other people will find it hellishly complicated and opaque.
Start simple. A natural consequence of the understanding that not everyone finds coding intuitive. Give serious consideration to Scratch or another graphical language for beginners. No-one’s ever going to write a commercially successful app in Scratch (or indeed, any commercial app), but it’s the perfect gateway drug; free, easy to get started with and highly addictive! They’ll learn concepts like if statements, for and while loops, variables and so on that will be useful as and when they transition to a “harder” language.
If you are not a teacher, you are not a teacher. I suspect lots of people think they can teach. I made the mistake of believing that expertise and enthusiasm would tide me through, when what’s really needed is the ability to convey that expertise and enthusiasm to a room of people who are not experts and in some cases not enthusiastic.
Would I do it again?
You betcha! But there’s a baby on the way in the Whitaker household and she’s due any day now, so I’m hanging up my Scratch spurs for a few months while I immerse myself in the world of dirty nappies and sleepless nights. And maybe try to teach the baby just a few lines of Lua…