To quote my Twitter profile, I "learn, create, teach, and repeat." Well, since I do most of my learning in the space of computer science, that's where I do most of my creating and teaching too.
In middle school, one of my first web pages was titled "HTML iz FuN!" and gave gory details of using the
<font> tag to create rainbow colored text. In high school, I helped my dad with his "Saturday Java Academy", where we tricked my friends into spending their weekends learning Java. That's also where I first got asked out - with a Java applet - and of course, I couldn't say no to an object-oriented solicitation. In college, I ran workshops on graphics, 3d scripting, and web programming, the kind of programming that made me love CS, but that we never had time for in our pointer-laden intro classes. At Google, I got to teach developers how to use the Maps API, and as it turns out, there are few things more fun in life than making maps. Nowadays, I get out my teaching urges in GirlDevelopIt web development workshops.
I looked back on all that recently and realized that I've spent many hours of my life teaching programming and thinking about how to teach programming. What order should topics go in? How can students figure out what level they're in? When should students pair, and when should they go at it alone? What exercise will help a student learn a topic and challenge them, but not to the point of giving? In an in-person workshop, what's the allocation of lecture time vs. exercise time? Online, how can you provide hints without making it too easy? Should a student's first language be the most practical or the most newbie-friendly? What language features trip a student up the most?
Khan Academy, working with John Resig on the Computer Science curriculum that he kick-started last year. I'll be both an engineer, coding up the pieces to make it a great interface to learn, and I'll be a content creator, putting together tutorials and exercises. I also hope to visit schools that are using the curriculum and watch how they incorporate it into classrooms. In this role, I'll be learning how to create tools that teach the next generation about programming, and man, I'm excited.
I know that many before us have thought about how to make programming easier to learn, and I'm looking forward to learning from them. I've started reading related research papers, watching talks, and building up an Amazon wishlist of books on programming and early education. If you have any suggestions to add to those lists, let me know. I've also started to find out about the feedback that Khan has received on the existing curriculum framework, and well, I better finish this blog post soon so I can get started on addressing that feedback.
If you've ever read one of the great blog posts by Ben Kamens or forked one of their open source repos, then you know they have a great culture of sharing and openness - one that I look forward to contributing to. Stay tuned!