For some reason, this Wired story really got me into a tizzy: Forget Foreign Languages and Music. Teach Our Kids to Code. The thesis of the article is that you really can't start teaching kids to code young enough. And heck, rather than teaching them to say, Mandarin, in kindergarten, why not teach them how to program? Both are languages, right?
My first thought was back to my senior year of high school. I took my one and only AP course: AP Computer Science. In it, I learned Pascal (on a Mac no less, had I taken the class a year or two earlier, I would have been learning on a mainframe!). I hardly mastered the world of programming (scoring a whopping 2 out of 5 on the AP, the score you get for basically signing your name to the test), but it was enough to teach me I had a genuine interest in the subject, and to give me the skills to do well enough in CS 113, my first CS course at University at Buffalo. And from there, as they say, the rest was history.
At the same time I was learning For loops in Pascal, I was in my 5th (!) year of German class. As far as I can recall, despite years of instruction, I still had a sub-kindergarten level of German at this point. If I think back, I can still remember the teacher imploring us to learn the Die Der Das Chart, whatever the heck that was.
All this is a fancy way of saying, a programming language and a foreign language are not related in the least. The former, even for all it's initial confusing nomenclature (classes, instances, recursion, etc.) is amazingly tidy compared to the exception and massive-amounts-to-memorize nature of the latter. In other words, it's smart to teach Mandarin to kids when they can just absorb it. That's simply not necessary for learning to program.
I'm absolutely a big believer that programming is really problem solving, and that these skills should be learned by all. But the thought of having a 7 year old program Frogger seems silly; better he should be outside *playing* frogger, than inside coding it. Yes, young kids should experience age-appropriate versions of programming concepts like debugging, building abstractions and modularization. But most importantly, they should be working on that often neglected programming skill: using your imagination.
Now, by the time a kid a teenager, there's no excuse for them not to be coding. The recipe seems simple: for every N hours of game playing time, you should have M hours of coding time. Within a summer, any teenager can master all the skills he or she will need to know if this is a field they want to pursue.
Perhaps what annoys me most about this article is the potential formulation of another programming myth: like violin or Mandarin, if you don't start when you're 5, forget about it. You'll never be a pro. Like the persistent myth that programming requires math (What math? Most programs contain no more math than adding or subtracting 1 to a number), this isn't helping anyone.