still working on this, please don't link to it

Corrupting the youth

http://cacm.acm.org/blogs/blog-cacm/45725-how-we-teach-introductory-computer-science-is-wrong/fulltext http://www.nytimes.com/2010/04/18/education/edlife/18philosophy-t.html http://plato.stanford.edu/entries/children/

The Pythagorean Theorem was once a profound and mysterious secret. Today we teach it to innocent children. I'd say that's a pretty good test of whether we fully understand something. So what parts of computer science can we teach to kids today? Remember that computer science has nothing to do with computers per se, any more than geometry is about surveying land.

Alan Kay has a classic talk about different modes of thinking and an experiment he did with young people of different ages. Imagine a robot that can do four things: move forward some distance, move backward, rotate some number of degrees, and make a mark on the floor. The goal is to write a program that tells the robot to draw a circle.

Before I tell you what happened, take a minute and try it yourself. It's a pretty problem.

Precocious teenagers are stuffed full of facts about circles and curves, πR2 and calculus and all of that. More to the point, they have been trained in school to think abstractly and to leave aside visual or visceral thinking. Given this robot exercise they would spend 45 minutes on the blackboard writing equations and looking up things in books and scratching their heads before giving up.

Then Kay found some 10-year-olds and gave them the same problem. A 10-year-old doesn't know much about equations. She's a visual thinker. She doesn't know much about circles either, but she does know that a circle is defined as all points that are the same distance from the center. After about ten minutes of thinking and doodling she writes the program this way:

  1. Start at center.
  2. Move forward N inches.
  3. Make a mark.
  4. Move backward N inches.
  5. Rotate 1 degree.
  6. GOTO 1

That is a significant result. Ten-year-olds beat the pants off teenagers by using an officially discouraged mode of thinking. Not satisfied with that, crazy old Kay invited in a bunch of five-year-olds. You don't let little kids play with chalk if you want to get any work done, so for them he turned it into a game:

"Ok kids, you are robots. Say 'Beep beep beep!' Good, now cover your eyes, and I want you to walk in a circle."

The kids would cover their eyes and cock their heads for a few seconds, thinking about how to walk in a circle while blind. Then they did it. They walked forward just a little, then turned a little, then walked forward again, and so on until their inner ear told them they'd done a full circuit. Not only did these children solve the problem immediately using visceral thinking, their solution was hundreds of times more efficient. Somehow they were intuiting differential equations.

What can I teach a child about computer science? It may be better first to ask what a child can teach me. I don't mean that in the Romantic sense of noble savagery or the wisdom of innocence. Computer science is the study of process: how to do things, how to figure out things, and especially how to figure out how to do things. We have to investigate everything that seems to work, wherever we find it.

One of Alan Kay's favorite sayings is that having the right point of view is worth 80 IQ points. No matter how clever you are, if you're trying to figure out the orbits of planets using Ptolemaic epicycles, you are not going to get too far. The right point of view can make the difference between an elegant solution and a pile of steampunk.

Fortunately it cuts both ways. If something you are working on seems to be inelegant, too steampunky, ie, too full of random details and not enough clear principles, that's a sign you might be approaching it with the wrong point of view. Being able to recognize that state and pull yourself out of it is a valuable problem-solving skill. It quite literally means you can swim on the current of ideas. The most interesting, perhaps defining, characteristic of highly creative people is their ability to shift their point of view at will.

So, back to the question: what can we teach a child about computer science? It isn't an abstract set of laws you learn because it's good for you. Computer science is the study of how to do things --anything-- faster and better.

If you want to know What something is, you look it up in the dictionary or encyclopedia. If you want to know Where something is you look at an atlas. When is covered by history books. Why and Who are kind of scattered about, but a lot of the answers are in history books and encyclopedias. All of these tools: encyclopedias, atlases, histories, were invented. They were invented one halting step at a time in response to need.

Computer science is, possibly, an attempt to write a book of How. We don't know what it will look like, kids, but you're invited to help us find out.