A friend of mine forwarded a link to Mitch Resnick’s Ted Talk about teaching kids how to program computers. Resnick is one of the creators of MIT’s Scratch programming software, which is a wonderful way to introduce kids to the joys of being content creators instead of merely passive viewers.
With smartphones and tablets being the primary ways many kids now use the Internet, we seem to be pushing the next generation into being mere consumers of content, when their futures demand they be producers.
On the other side of the coin, there are some AMAZING tools that can be used by even very young children to create their own media, whether it’s movies, music or computer programs. In fact, there’s such an abundance of creative tools, it’s embarrassing how few kids get to use them in education.
For music, there’s AudioTool and JamStudio, both accessible online right from a web browser, storytelling and animation with Scratch, Creaza or XtraNormal; and programming with Microsoft’s Kodu, MIT’s Scratch and Carnegie Mellon’s Alice.
But there’s no reason to stop at visual tools. I disagree with Mitch Resnick when he says (at 6:20) that if programming is real code (non-visual) it is limited to only a small sub-set of the population. I think it is valuable for every child (and adult) to have the opportunity to learn how to code in a real programming language. They may not all become programmers, but knowing how to use a programming language to solve problems and do repetitive, boring tasks for them will improve their job prospects and their lives in the future, no matter what career path they choose.
There is something else that is missing from Scratch and Kudo and other simplistic visual programming tools. They miss out on the most important lesson a kid can learn from programming. Scratch blocks fit together like Lego. There’s very little that can go wrong. If the parts click together, they’ll work.
Real programming isn’t like that. The beautiful thing that programming teaches you is that it’s ok to fail. In fact, you can expect things to go wrong the first, second, maybe even the first ten tries before you finally diagnose all the problems and get things working the way you wanted them to. But the failures aren’t meaningless. Each time you fail, you get closer to finding out what works.
Our schools, and our society, tend to discourage us from failing. Failing is bad and should be avoided at all costs. If you fail, you get derided, moved to a ‘special class’, or just get lost when the next material is presented; you get an F, your parents ground you for bad grades, and you’ve irreparably damaged your GPA. After years of understanding that failing is bad, it’s no wonder we develop our fear to such an extent that we keep ourselves from doing things we think we might not be good at.
Programming expects failure. It’s fun to watch a kid understand this… that it’s not a bad thing that their program produced errors, it’s an expected part of the process. Working through those errors until finally the code does exactly what they want it to (whether that takes minutes or hours) is an amazing, frustrating and liberating process that every kid should go through.
So by all means let’s let our kids learn Scratch and other similar environments. It’s very empowering for kids to have the tools to create what their imaginations conceive. But lets not stop there and think that there’s no further “most people” can go in learning to code, because the life skills learned from learning to program go far beyond the language and syntax and could very well change a child’s life forever.