Your Journey Is Important. Share it.
I realized that what it really is, it’s like a great wall, where everybody’s contributing bricks to the wall, and each brick… In other words, it’s the community enterprise that really has made it such a thriving field. I like to give credit to everybody who puts in one of these bricks.
— Oral History of Donald Knuth
Four weeks ago, my son Oliver turned seven. This last weekend, he gave his first tech talk at Vermont Code Camp, a day-long series of presentations about technology and software development held every September at the University of Vermont in Burlington. Oliver’s talk was a live coding demo of drawing and animating using the functional programming language, Pyret. Although the language is still in development, it is one of the best programming languages for new coders.
Looking back through my Twitter timeline, I see that Oliver actually started programming when he was five, using another great learning language, Racket. He couldn’t really type back then. It would take so long to find the next key, he would lose track of what he was doing. But after a year of sporadic sessions at the keyboard, he knew the drill. Learning to program is not unlike playing a musical instrument. You can’t make music until your fingers can make the notes. You can’t really solve a programming problem until you can pound out the syntax. Repetition. That’s the secret. Repetition and focus.
I suggested the idea of doing a talk to him back in May. I had two motives. One was to give him something tangible to work toward and focus on. The other reason was that I felt that it might inspire others. Surely, if a six-year-old can learn to program for real, then other people who have considered it, but felt daunted by it, might be encouraged to give it a try.
I also wanted people to see him make mistakes. See him forget a closing parenthesis or any parentheses. Confuse feeding a function a value with naming values that you feed a function. To leave out spaces around an equals sign. Confuse Run with Enter. Get the “Pink Box of Doom” — our term for Pyret’s error message box. I wanted people to see him look stuff up in the documentation. Most importantly, I wanted people to see how much you could do with just a few concepts, namely creating and using functions, and plugging them together. This is an important part of the teaching philosophy behind both Racket and Pyret, and I’m afraid it’s not as central as it ought to be in “learning to code” courses.
I’m sure there are cases where presenters are giving talks on something they’ve done for decades, that they are long-time experts in. But preparing a talk is a lot of work. I don’t think there are many people who would go through that trouble for something that wasn’t really interesting and exciting for them. Something new. Perhaps just a bit beyond their understanding or experience.
And the audience benefits. When you know something really well, you can no longer see what’s confusing about it. The book, “How Learning Works” calls it expert blindness. But when you have just discovered something and sharing it, the audience is seeing through your beginner eyes. It’s like you’ve gone through a gate, reaching back to help others to come through. Sure, you’ll make mistakes. You might even look human. But you are sharing something valuable.
When Oliver finished his demo, he said “Daddy, I want to do another talk.” He’s mentioned learning Java (he knows that Minecraft is written in Java), as well a making game for the iPhone. It will be interesting to see what, if anything, he proposes for next year.
I would be thrilled to see another young person share something they’re interested in at Code Camp. But I will be equally excited to see anyone reaching beyond their limits and getting up the nerve to stand in front a room full of strangers and talk about it.