Surprise and wonder in computer science

Last week I attended a workshop day at Stevens Institute of Technology where Michael Kolling, University of Kent and creator of Greenfoot was the keynote speaker. Some of the things he said really resonated with me. One of them was that students should be given projects that require a computer. I’ve heard that before and have long agreed that something that can easily be done in ones head or with a simple calculator really don’t communicate things to students well. But the thing he said that impressed me the most was that some really good projects inject a little surprise in the results.

He showed a program he had put together in Greenfoot that simulated any colonies foraging for food. It was a reasonable sized and fairly uncomplicated simulation of simple behaviors. But in the results there were surprises. For example clear paths showed up indicating the success of various finds of food. Add added benefit was that the simulation lent itself to tinkering – to “what happens if I change this” – and experimentation. These give students the opportunity to experiment.

I remember on my my first projects that interjected surprise for me. I was experimenting with graphical programs. This was back in the old drum plotter days before we had color monitors or even much in the way of affordable graphic capable monitors. In any case I wrote a simple program that drew geometric shapes, rotated and shrunk them and drew them again around the same center. As the first of these designs arrived from the plotter I discovered Moiré patterns. Cool. And it sparked an interest in learning more about this unexpected feature.

Conway’s Game of Life was another project that lent itself to all sorts of experimentation. Not only could you try different starting patterns but you could also try different algorithms for births and deaths. Tinkering was a natural.

Even relatively simple projects, for example Pong, lend themselves to tinkering and to asking one’s self - “what else could I do with these concepts/ideas/techniques. What happens if one paddle moves faster than the other? Could I use these same pieces of code to create a breakout style game?

I think it is important for students to develop a sense of wonder about many things. I think that they learn more when they learn by discovery – from tinkering a bit. That is why I really like the idea of open ended projects that offer the opportunity for surprise. What do you think? Do you have examples of projects that let students tinker, discover, and feel a little sense of wonder?