I dislike the word “teach”. I think we do not learn much when we are “taught”; we know only those things that we learn ourselves.
The other day, I was looking through the textbooks of Chikku who is a girl in my neighbourhood. I was particularly struck by her computers book. It was a well produced book, with colour pictures and lots of words like “CPU”, “random-access memory” and a whole chapter on Microsoft Word. When I asked her about computers though, it turned out that she gets only half hour a week actually on the computer; most of the work in the course is in memorizing the definitions given in the book.
I look around me, and overwhelmingly, this is the fate of children around us. When I talk to school teachers about “programming” – they talk about languages such as C or Java and how these are taught in class 9 etc. Before that, computers are all about memorizing some meaningless words.
For this, Chikku’s parents even pay an extra chunk to her school.
I think, that it is time that parents took into account what their children really learn, and not what they are “taught”.
And one of the things that children need to learn is programming. The word “program” comes from the Greek – pro means before, and gramma means writing. (The sense of “gram” as a weight is from the writing on standard metal weights.) A program was a written schedule that was put up before the public (e.g. for a play). This sense of a list of actions lent itself to the meaning – “plan of tasks” which is what programming means in the context of today’s computers.
It is vital that our children learn programming from an early age – perhaps class three, certainly class six, and not class ten. This is because unlike almost anything else they are taught in school, programming trains the child in planning out her own tasks – and is directly relevant to real life success. As you are reading this paper, you are executing a “program” – pick up the paper, open it, hold it in front of our eyes, synchronize head and paper, find the column on which an article continues, etc.. . .
Programming gives a child immediate feedback. As anyone who has written any computer program knows, things don’t work the first time. You have to change things, try again. And again. There is a shair by Fakira which says “The value of victory is half a grain. Failures are the true diamonds." That is why debugging programs are so educative.
We must introduce our children to failure. That is the only way they can learn. And programming is the best tool I know for involving the child in repeated failures, ultimately conquering the task and gaining immense self-esteem.
What many people don’t realize is that teaching programming does not even require computers. Here is something you can do with a bunch of kids: give each kid two straws, and have them measure it. Say they are 21cm each. Now, using a ruler, have them cut both straws into exactly (8, 6, 4, 3) -cm pieces. Now have them draw a line 30cm long, and try to cover it exactly with these pieces (no gaps, no extras). How many ways are there of doing it? Now have them talk about the steps they did to get the straws to fit. This is a program.
Next, have them try the same for a line that is 40 cm. What lengths can’t they get? Why? This second program asks them to combine a lot of the earlier simpler programs (subroutines), and leads them to an important insight.
Next – draw a maze with many paths, and have them line up the straws so as to find a path from the Start to the End. Each piece must fit exactly in each path segment. This can be a challenging program.
In a recent workshop with some school teachers, we introduced some tools we use to help small children program the motion of a toy with a set of motors. After the teachers played with these, they spontaneously started talking about the importance of learning programming for schoolchildren. This weekend, Tikku will also be playing with these programs.
We don’t need to “teach” our kids computers. We need for our kids to “learn” programming. And it is not as costly as you think.
Amitabha Mukerjee (firstname.lastname@example.org) teaches Computer Science at IIT