I recommend listening to this interview of Douglas Rushkoff on CBC Spark by Norah Young.
Rushkoff’s recommendation is that children should learn a little bit of a taste of programming right after they learn long division. His reasoning is basically this; once students see an algorithm like long division, and they learn how to make a computer compute long division for them, they’ll see that computers are devices which compute algorithms, not places for them to visit.
I’d like to add that teaching a computer to program something like long division would be very empowering for children. Having been through this process of learning what is one of the most complicated sequences of steps they’ve likely been exposed to in their young lives, they can then conquer this algorithm and "teach" a computer how to do it. As a happy consequence of teaching the computer the algorithm, they’ll probably understand how it works better.
Andy Mikula says:
Learning programming for myself when I was 12 fundamentally changed how I think about things. One of my favourite exercises is attempting to perform a simple task using only instructions from students, and following them to the letter. Taking three steps towards the door or picking up a book become fairly complicated tasks, but learning to think in terms of discrete steps with as few side effects as possible is a great way to introduce programming concepts. I hadn’t considered long division, but that or shoe-tying would be great candidates for introductions as well!
…I suppose what I’m saying is that I’m all for this – the earlier the better!
October 13, 2011 — 2:08 am
David Wees says:
I started my career in programming when I was about 8 or 9. My father had a Wang computer he didn’t need, so he gave it to me. It was either programming or word processing, so I picked programming. I just opened up the Basic manual and started reading. I think kids could almost certainly learn how to program earlier than long division.
October 13, 2011 — 8:48 am
Evan Weinberg says:
I completely agree – learning to do programs was where I had the revelations in both high school and college that made me most proud. Every time I found myself doing repetitive tasks or calculations, I found it was pretty easy to (at first) find a way for a spreadsheet to do it, and then later on a computer program.
One argument sometimes I hear about this is that students should learn a text based language such as C or Java before learning to program, otherwise it’s not real programming. This is in the context of the existence of fantastic tools such as Labview, Scratch, and Processing, that make it really easy to see how a program fits together to do some things that used to be difficult. Processing in particular makes it SO easy to do beautiful visualizations, which I used to get my calculus students programming at the end of the year last year. To my dismay, some of them reported after doing so that the two weeks we spent doing this were the ‘most interesting part of the course.’
I’ve heard similar arguments from folks saying why tools like Arduino aren’t good for really exposing newbies to the world of microcontrollers – as if it should be avoided because it’s not the real thing. This is an artifact of the sense that learning things like syntax or assembly code is important enough (because their teachers emphasized it, perhaps) that programming shouldn’t be done without it.
I think this is the same thing that goes on with the argument that kids can’t learn higher math until their fundamentals (such as math facts) are strong. It’s the same (incorrect) reasoning that says the discipline afforded by a student memorizing math facts enables a student to do more open ended explorations. Computers are really good at following instructions. They are good at taking tedious calculations out of our hands. We have to use logic, pattern recognition, and creativity to program them to do so. That’s a powerful tool.
October 13, 2011 — 4:16 am
David Wees says:
I agree with you Evan. I taught my students some graph theory one year way after I gave them the Seven Bridges of Königsberg problem. They really wanted to see why it had no solution. It was mind-boggling to them at the time that you could construct a perfectly reasonable sounding problem that they understood, could draw a diagram for, but which had no solution. They actually found the basic graph theory necessary to understand the "solution" fairly easy to understand.
October 13, 2011 — 8:53 am
Bon Crowder says:
I’m totally doing this for Daughter! I know that teaching is the best way to learn, and it never occurred to me that programming was merely teaching the computer.
You rock, David.
October 13, 2011 — 4:57 am
Ziad Baroudi says:
Thanks for the post, David. I fully agree about the importance of teaching kids programming. I also agree that it is an empowering activity for them to be engaged in. Given today’s visual environments, such as Scratch, they can be taught even earlier. Many primary (elementary) school students learn Fibonacci numbers and Pascal’s triangle. Both are candidate algorithms a kid could teach a computer to do.
BTW: I tried to listen to the audio but got the message: “File not found”.
Keep sharing your great ideas.
October 13, 2011 — 6:21 am
Ziad Baroudi says:
Sorry about earlier comment. It is working now!
October 13, 2011 — 6:22 am
@kimberdray says:
Checked out great video by Rushkoff last spring and rambled a little about his message(s) here: http://kimberdray.ca/blog/?p=259&more=1&c=1&tb=1&pb=1 I can attest to the sense of accomplishment, empowerment and pride felt by an 11 year old when she created her first Scratch program.
October 14, 2011 — 12:57 am