Teaching kids to code is not a new phenomenon. As a fifth grader in 1992, I learned to program in school by blindly following photocopied tutorials and type-in programs on a 10-year-old PC. I attended a fairly diverse public magnet program in high school where every student had to take at least three years of daily programming classes. By the end of high school, I had a semester each of Logo and Hypercard, a semester of Pascal, a year of Fortran, a year of C, and a year of C++.
A significant portion of developers started to learn to code in middle and high school long before click-n-code tools like Scratch and Snap. Kids used to learn to program because the experience was new and fascinating. They'd have to learn and think about memory usage and video processing. Every few years some new fangled, game-changing hardware or tool would come out and require inspection. They learned because computers were open to examination just within their grasp.
The new tools like Scratch remove the mystery and the barriers. Don’t get me wrong--they’re great at introducing kids to concepts for moving jpegs around on a screen. Kids with an inclination toward programming will give Scratch a go, but those that are not interested will never be interested because it's a multimedia tool, not a programming tool. It's like teaching kids math only using Math Blaster.
We all learn best when we are motivated and the material is just outside of our grasp. To teach code in school, we need to motivate kids with projects that actually interest them and then be there to help guide them toward the knowledge they need.
Being paid to program is rarely as fun as doing it for free, so I started teaching small groups of kids at a local elementary school how to program, make robots, and other DIY tech skills. Good news: 10-year olds can still type out code like I did 20 years ago. After piloting nearly every tool out there, Processing and Arduino stand out as the clear winners.
Processing is designed for visuals and Arduino is designed for hardware (think talking stuffed animals and GPS trackers). They share a syntax and are both open source. Simple IDE, small grammar, and real world prototyping make them ideal for kids that know how to type and read and have someone nearby to explain syntax errors. Although those programs are targeted toward adults with little programming experience, it turns out 10-year olds are about on par with the average liberal arts major in terms of ability to program.
Kids in my classes have built all sorts of fun projects. I always let them lead the way and decide what we want to make and what we need to learn to make it. No surprise, students don’t want to be told what to do if they don’t have a vested interest in the project. This is where being an experienced developer comes into play. I help the students figure out what we need to learn to make their project work.
My students haven’t officially learned geometry or algebra yet, but they know it’s important because we learned the equation for Bézier curves for a visualization and modulus arithmetic for their own encryption scheme. We even learned the importance of statistics when we use frequency analysis to crack each other’s cipher texts.
A pair of sixth grade girls learned about filesystems and FAT tables when one of them asked me if I knew how to recover her PSP save files after a sibling purposely deleted them. We spent a week learning how computers store and delete data and ended with a completely recovered set of game save files.
All this over breakfast at their schools, before they went to class and I went to work.
Last week I came across a website, Cut Down Testing, where students at a local high school shared their stories about mandatory city and state tests. In their goal to voice their displeasure, students also likely learned about purchasing domain names, Wordpress, themes and a slew of other tech skills and concepts, all while participating in a project important to their world.
Now more than ever, a good class in programming and technology will help kids control their century. Program or be programmed.
The coding education movement lacks significant grassroots organizations and passionate communities. If you’re a developer with a flexible work schedule, think about volunteering at a school on your way to work. If you’re a teacher, try reaching out to a tech company or university nearby. I’ve learned much more in the last five years by teaching kids for 45 minutes a day than I have working in startups. Teaching and outreach is such an important aspect of programming, I won’t even consider a job that doesn’t make room for it.
The best resource to learn to program for kids of any age is an adult who knows how to program. Young or teen, students need teachers with a nuanced understanding of programming and a breadth of knowledge to help them engage and investigate their environment. Schools should make room for professional programmers to teach or co-teaching classes. You’ll be surprised at how many developers out there are willing and able to lend a hand.
There are those who still say, “Those who can’t, teach.” Wrong. Those that love, and have passion for what they do, teach.