I volunteer at a code club. It's not a large group (far from it) and I've only been at it for a handful of years. However I have had time to reflect on what I teach and why I teach it. My thoughts on it now are not the same as when I first started out.
The initial idea to teach programming to kids was not without its share of ego. Programming is important. I'm a programmer by trade. Kids of the future will need to code. Ergo I am important for the future. A nice story, but not entirely true.
Kids love making things, at least I certainly did when I was young. A tool such as Scratch, with its focus on making things using a set of Lego block like instructions, is a great gateway to real programming. Kids can animate, draw, play sounds, and make games. Later they can learn the important things, using a proper programming language.
On paper this all sounded great, but in practice this was a road map that fed my ego more than educated the kids. With an eye on getting to what I believed to be the good stuff, I tended to focus on the kids who learnt quickly. Those who where just mucking about in Scratch got less of my time and support.
Why is there this big drive to get all children to learn how to program? Programming is an activity that rewards a certain mindset. Logical, methodical, ordered, and pedantic. Talking to a computer (which is what programming boils down to) is often an exhaustive exercise.
Take the classic joke about programmers:
Did you hear the one about the programmer's wife? She asked him to buy a loaf of bread from the supermarket. As he was heading out the door, she said "If they have eggs, get a dozen.". He returned home with twelve loaves of bread!
Do we really want all children to grow up to become that punchline? There's no denying we will need some to grow up in that mould (as long as we continue our growing dependence on machines to keep society going), but they will still need to have learnt how to switch off and be human when the work bell says its home time.
I've given up on teaching what most people in the know would call real programming. Those kids who have an affinity for it will find their own way there, if they aren't there already. Instead I focus on teaching kids how to make something using a computer. Scratch as it turns out is perfect for this.
Amongst the many Christmas gifts I was fortunate enough to receive as a child, I have a vivid memory of once being given a bag of balsa wood. Someone at school had brought in a working Roman catapult they had made using the stuff, which must have impressed me enough to ask for some at Christmas. I was over the moon with it. There were all sorts of sized pieces in the bag, and simply looking at them filled my imagination with things I could make from it.
What we need from technology is not an army of kids who can talk like computers, but a future society that knows how to make stuff. I teach Scratch now. I try to split my time evenly between the kids making swift progress and those just mucking about. I hope all of them will leave each session a little more confident in their own ability to make something. That they see computers not as something they have to mimic in thought and word, but as tools to unleash their imaginations. Above all I hope they have fun.