Monday, January 22, 2007

Start at the Beginning - Understanding the Problem Domain

To kick off the project, I called the kids together. We did it yesterday (Sunday) after morning tea, which I figured would be their peak time in the day for learning. I told them we were starting a new project together.

I gave them a brief overview of what we were doing: building our own creature on the computer, like their Tamagotchi. We can't make the plastic bit with buttons and screen, but we can make the creature on the computer, and we've got a bigger screen so maybe we can do some better things.

I laid out some ground rules for when we work on the project:
  1. No being silly or distracting others when we're working together, so we can all focus.
  2. If any of the children don't want to be involved at any particular point, that is OK, but I will still show them the outcomes of each step. This provides a minimum level of involvement, while it allows those who are most interested to have most involvement.
Emily, the youngest, commented that she didn't want to build it, but she wanted to play with it. We'll see!

Moving right on, I got a few big pieces of paper. On the first piece of paper, we worked out some things about the creature. I wrote two headings on the paper, "Properties" and "Actions". Under the first, we listed properties a creature may have (name, age, gender [maybe], level of hungriness, level of sickness. This required a little prompting, but they got the hang of it quickly. (Emily and Benj sat with their Tamagotchis trying to find the answers to the questions - maybe their first attempts at reverse-engineering!) [I had spoken to Olivia, the older child, before we sat down, to ask her to let the others try to answer questions first, so all the children would get a chance to be involved. She went a step further, helping to elicit answers from them.] Each of them was involved, each thinking about their experiences with their Tamagotchi, and relating that to what we were talking about. It was cool.

Then we wrote down some of the things that we do to the creature: feed it, play with it, take it to the toilet, give it medicine, etc. I wrote these under the "Actions" heading.

On another piece of paper I drew a big rectangle, and told them this was the screen. I drew a box down the left with rectangles in it, captioned with the actions. On the right, another box, showing the properties. In the middle, a big white area where I drew a stick figure. I said we were going to build this.

As we were working through this, it occurred to me that the cognitive complexity is high, but as long as the time between introducing a concept and seeing the realisation of the concept is kept short, they will generally understand what's going on. This means introducing as few concepts as possible, as late as necessary. It also means leaving out detail.

Explaining this to children was much the same as explaining technical things to adults in a business environment - business people usually want as simple an answer as possible, but sufficient to deliver what they want. All the years that I have been trying to perfect the art of making the complicated sound simple is paying off in helping my children!

By this stage we had been talking and thinking for perhaps 20 minutes. Time for a change, and leap into the project, so they could see something tangible getting done. I fired up MonoDevelop on the kids PC (Ubuntu Edgy), created a new project, and built a main window in the rough layout we had drawn on paper. (I have installed Mono 1.2.2, although Edgy isn't up to that yet, so I could get the latest version of Stetic for the forms design.)

So they were very quickly introduced to the concept of a window, and widgets on the window. Then I ran the program. It basically showed a form with buttons. I asked them if I thought we had finished building the creature yet. They laughed in that you're-weird kind of way, so I said we had some work to do, and we closed off at that point. Olivia noted however that although we had a program, we didn't have a creature yet, a distinction I think she understands. So that's cool.

After they went to bed I added some plumbing - a timer object and event handler so we could implement the time aspect, a menu bar and toolbar, and a few rearrangements of things. I've got to do as much of the plumbing work as possible, while exposing to them the key conceptual design items.

No comments: