Rapid software development with my 8-year-old
by jgn on Monday, February 28, 2011
Technology, Ruby, and Code
So my 8-year-old daughter has been increasingly interested in what computers can do, and how to make them do things. We've done some Scratch ( http://scratch.mit.edu/) together, and we've done some Lego/software integration with MIT's kit (not Mindstorms -- we used the earlier kit MIT made that doesn't have Lego branding and so forth). That was pretty fun.
But what she really wanted was a multiplication drill-and-practice program. I said to her: "Are you sure?" (because I personally find drill-and-practice dead boring). Well that's what she wanted. So we did it.
We did it in Ruby for my convenience. I decided that the hassles would be worth it. For instance, we talked a lot about what it means to convert a string typed by the human into an integer for the computer's math. I wrote the code, and explained each and every line to her. The program would show a random multiplication (e.g., "7 x 8 = "), and she would have to type in the answer.
Here are the iterations we went through, and my observations regarding kids' games based on this single case:
Report the number correct in a row. She likes the idea of breaking her longest streak of correct answers. Kids like self-created goals. I had introduced the idea of a variable to her earlier, but now we talked about it at greater length, since the counter had to be updated only under certain conditions.
Every 5 correct in a row, pop up a funny image. We used some lolcat images from icanhascheezburger.com. My observation here is that kids like frequent rewards. But not too frequent! We allowed that launching the browser to show an image would just be "magic."
She got interested in the basic stats: Number correct, number wrong, percent correct. We talked a lot about percentages, which is a bit ahead of where she is in math. I noticed shortly afterwards that she could correctly predict that if she got the next one right, she'd have 75% correct. To me, this suggests that there are a lot of possibilities for passive learning; she started to "get" percentages without a lot of direction from me. Some of this coding I just did without a lot of explanation: In particular, rounding for the percentages seemed to be too hard for her at this point.
As she was doing this, she told me that her goal was to get 100 in a row. At 90, she got one "wrong" because she just pressed return instead of entering a number (a case we hadn't thought of). We had to stop the program to fix it, but that broke her streak. She suggested that there be some means to go backwards. So we introduced a cheat: If she types "cheat" the most recent answer would be forgotten. This suggests to me that kids love to "win" but at the same time they can become very unhappy if there is a glitch that seems "wrong" to them. Providing a means to get past a "mistake" seems to be very appealing. I am not sure that the availability of "cheats" is a good lesson to teach; it might set up the wrong expectations about the real world. On the other hand, it's called a "cheat" for good reason, so I encouraged her to feel guilty about using the cheat. We decided to report on the number of cheats used over the course of a game. That way, if she never uses a cheat, she can brag about it ("I got 20 in a row, and didn't use a cheat!").
Finally, she wanted a bigger payoff at the end. She asked if she could enter her goal (20 in a row), and, if achieved, get a big fat message. So we did that. Now when you get to your goal, it prints out "You Win!" with a lot of asterisks around it. To a kid, a "big" reward is something that is different from the rest of game flow (there are no asterisks elsewhere in the experience).
So that was fun. The quality of the technology -- the bells and whistles for the platform -- seemed to matter a lot less than iterating through the game design, and thinking about the right rewards and punishments to encourage sticking to the activity.