Vision for a numeracy activity

From OLPC
Revision as of 22:56, 29 January 2008 by IanOsgood (talk | contribs) (links to similar products and libraries)
Jump to: navigation, search

This page is a sketch of some ideas for an Activity providing an environment for exploring numbers, and through them, the world. It was started by MitchellNCharity 09:29, 28 January 2008 (EST).

A vision

Picture TamTam's synthLab. The screen is a workbench. You create various blocks, move them around the screen, and wire them together. Or Etoys(Squeak). You create things on the screen, edit their values and behaviors, and can connect those values together.

First, we create a new calculator block. Picture a normal screen calculator. Which you can use a usual. There's no need to be as big as the Calculate activity, so there is lots of screen space left over.

Now create a number-line block. It shows a normal number line. Since the calculator block is the only thing around, when you create the number-line block, a line appears connecting the two blocks. Since the calculator is showing "0", the number-line now puts its dot on 0.

Everything is kept in sync, like on a spreadsheet, but continuously. And bidirectionally. It's a constraint system.

When you use the calculator, and its number changes, the number-line changes to show the new number as well. And when you click and drag the dot on the number-line, the calculator changes too.

When you do arithmetic on the calculator, the number-line can show the "bouncing arrows" representation of the arithmetic.

There are lots and lots of different kinds of blocks. Let's look at another one.

You create a new n-dots block. It shows the same number of dots as whatever it is connected to. If the calculator says "3", the n-dots block shows 3 dots. If you click on the n-dots block to create or destroy a dot, the calculator (and number-line) change too.

You create a new n-sided-polygon block. When the number is 3, it shows a triangle. When 5, a pentagon. Create new sides, or delete current ones, and the number changes.

While we started this story with a calculator block, to make things simple, there is nothing fundamental about it. You can click away the calculator block, and just play with the number-line, n-dots, and n-sided-polygon blocks you have created on the screen.

So connected interactivity is one design principle. Another two are depth of behavior, and autonomous enrichment.

Consider the n-sided-polygon block showing a triangle. Instead of being a static picture of a triangle, it's like DrGeo. You can grab the corners, and change the shape of the triangle.

As the shape of the triangle changes, the block may "banter". The block may present enrichment content. Provide some enrichment content for a little while, and then go on to some other. It might label the angle of one of the corners, updating the number, of course, as you continue to change the shape of the triangle. It then might switch to labeling a different corner. Or characterizing an angle as acute or obtuse. Or labeling all the angles, and showing "23 + 72 + 85 = 180" at the bottom, showing them added up to 180 degrees. And updating the numbers of course, as you continue to change the triangle. As usual, you could also go down and change the equation, and the triangle changes shape to match.

Or the n-shape-block with a triangle, might banter about circumference, or area. It may react to particular values. If the shape is becomes a right triangle, the block may celebrate that. Perhaps by labeling the 90 degree angle. Or showing a picture of a t-square.

Show a picture of a t-square? But, where? We have a block, with a triangle we are flexing. Where does a picture go?

It's not just the individual blocks which banter and provide enrichment material, but the entire environment. If there is some screen space free, why not use it? So the program can decide, by itself, to put up a block. Unlike the user-create blocks, it may fade out after a while, like any of the bantering. So the program may pop up a pictures-associated-with-number-n block, to help the n-sided-polygon block celebrate its right angled triangle.

Any block might be shown for a time as enrichment. If you like it, you can click on it, and it becomes just like a block you created yourself. In the current story, we created a calculator block, and then some others. If we had just created one, the program might think "hmm, just one? that's boring. what might be interesting? ... have you seen a number-line block? what do you think? no, you still haven't touched it? well, hmm, I'll fade that one out. how about an n-dots block?".

It's worth mentioning the bunch-of-blocks block. It shows shrunk versions of assorted blocks. So if you started with the calculator block, the program would likely add a bunch-of-blocks block, which contains little copies of the n-dots block, and the number-line block, and others, so if you see something interesting go by, you can click on it to explore it further.

Another block is the examples-of-n block. If there are 10 people in the class, then when n is around 10, the block might say "there are about 10 people in the class!". 7 days in the week. Etc. As always, this is an opportunity for banter. If n is 6, one might show the days of the week with one grayed out. Or show "6 < 7". Or so many other things.

So far we have taken one number, looked at it using different views (blocks), changed it, gotten enrichment content about it, including being able to play games with some of the representations (changing the shape of the triangle didn't change the number of sides, but let us explore other things).

Numbers get even more interesting when they are measuring things. Then you can talk about the things too. Just as with Calculate, you can set the units associated with a number.

For example, you can tell the calculator to talk about "number of people", or heaviness ("kilograms"), or money, or time, or lots of other kinds of things. When the calculator or number line says 3 kg, now we can banter about things which are 3 kg, rather than (or in addition to) the number 3. For 3 kg, we can show a picture of a cat, or a newborn human. For 30 kg, a dog or a child.

I'll take a moment here for a sidebar. A picture of a dog or a child? Which one? The right answer is obviously, which ever one you wish. The height of a door a nice reference for 2 meters. But some particular door may have far more resonance, more impact and familiarity and inspiration, than just some generic door. For instance, the door of the classroom which you measured yourself. So the program should let you put in your own pictures for things. A picture of a classroom door, taken with you laptop. A picture of an elephant, found on the web.

Which brings us to more customization. While door height is a good default association for 2 meters, it is neither a universal one, nor obviously, as before, the 2 meter thing which will most appeal to any particular kid at any particular time. So kids have to be able to add objects as well. Here is my 2 meter tall dad, or horse, or 2 meter wide path, or... anything. All of which is also a great excuse for measuring things.

Ok, back to our calculator, showing units. If it is 3 seconds, one could show a stopwatch arm sweeping it out. For 300 seconds, the 5 minute wedge of a clock. For 3 <whatever units of currency>, a picture of three coins. For 30, a pile of them. And as always, wherever possible, it is interactive. Change the height of the pile, and the number of course changes too.

Instead of just a picture of a cat, it might be a picture of a cat in a animal-length block. At 1/3 meter, it shows a cat. At one meter, a kid. At 2 meters, an elephant. At 10 m, a whale. And down from cat, to mouse, and louse, and flea. And perhaps to amoeba, and virus.

Which is a good time to point out one advantage about talking about the world. Instead of math concepts being introduced explicitly _as_ math concepts, they are instead just part of everyday life. Decimal fractions? Those are just something you see whenever you have the length of something shorter than you are. A cat might be "0.3 meters". Slide the slider on the animal-length block, and the number, and animal pictured, changes. Fractions are just a natural part of everyday exploration and play. You might teach about fractions, just like you might teach about cows. But just like cows, kids will often already know of them, and potentially be interested.

But back to our animal-size block and slider. Another nice thing about combining talking about numbers and the real world, is not only does it make numbers more fun to play with, but it lets us look more deeply at the world. As we slide the slider, and change the size of animal shown, we are also changing animal mass. How heavy it is. And, it turns out, just because the world is often interesting this way, how heavy an animal is tells you all sorts of things. It gives you a good guess at how fast it breaths, how fast its heart beats, how much it eats, and how long it lives.

So now I can tell a broader story. You sit down at the activity. There is a calculator. You press 3. And wait a moment. The activity, always interested in politely sticking its hand in, tentatively changes the calculator to kilograms. When I say tentatively, I'm picturing a light gray "kilograms", which will fade away if it doesn't prompt your interest. For younger kids, perhaps "heavy" or some such is spoken. So now the calculator is showing 3 kg. Which is a great excuse to show a cat. And showing a 3 kg animal is a nice excuse for showing a 120 beats-per-minute hear rate, by perhaps playing a heart sound, while for each minute counting the beats, 0-120, and filling up a one-minute-box (which empties itself once a minute) with dots, one dot per beat. Perhaps showing a little animation of a heart beating. Slide the slider to get different animals. When you have a 5000 kg elephant, you have a 30 beats-per-minute heart rate. A mouse, 500 beats/minute. Of course, since you are seeing beats per minute, you should be offered a number line with beats per minute, going from 10 to 1000, with little pictures of animals above the numbers. Perhaps you play for a time. Or perhaps you ignore it, and it all fades away. Perhaps you have a slider, so you can adjust between "I'm bored, show me lots of stuff!", and "I'm busy - don't distract me". But look back at what we've just seen. You were bored. You pressed 3. And without any great effort on you're part, just play, you've learned about weight, and differently sized animals, and heart beats, and counting, and time, and other things too. And five minutes later you go on to something else.

End of story.

Some additional concepts didn't make it into this draft of the story.

Blocks are views into the numbers, but they are also sets of related views. For example, a time-is-passing block might show a second hand sweeping continuously, or jerking once per second, or be a digital stopwatch showing hundredths of a second race by, or a light flashing once per second, or be a growing pile of dots, one per second, or be a collection of more than one of these things. For example, a light you can slide above a digital stopwatch, which flashes once per second, or 10 times per second, or 100 times per second, etc, depending on which column it's over, thus also teaching place values.

Some addition notes.

I'm not entirely happy with blocks being tightly tied to concepts. It might be nice for a single block, a location on the screen, with connections to other blocks, to slowly drift in meaning. The stopwatch, becomes heart beats, becomes animals, becomes size of animal foraging ranges, becomes geographical area, becomes surface area of squares, becomes surface area of cubes, etc. So I'm not sure I really understand the core conceptual building blocks (no pun intended) yet.

While more complex than some activities, writing this software does not seem burdensome given the impact. Other activities have draggable, connectible blocks. One needs a bit of a spreadsheet-like library to propagate values. Calculator code can be copied from elsewhere. A number line with a draggable dot is straightforward. Adding arrows to it a bit more work. Creating the infrastructure so volunteers and kids can collect pictures and associate with various values. Creating and tuning the bantering so it is interesting but not annoying or too confusing. And block by block, adding more neat stuff. Which can often be reused for other blocks. Even just a calculator plus number line would be of value, so you start with something easy, and build from there.

Comments would be most welcome

A wild idea, what if Home view was turned into such a workspace, which could leverage all the pre-existing activities? Imagine in the home view, you have 2 activities running, Calculate and Turtle Art. You program the little Turtle and somewhere in there, you create variables Widht and Height. You switch to the home view, and connect a line between Turtle-art and Calculate. You switch to Calculate, and somehow you now see those two variables, which you can use for your calculations. You do some calculations, inputing a final computation into the variables. You switch to TurtleArt, execute the Code, and voila, the Turtle draws based on the variables that were assigned in Calculate.

I had a look at the future design of the Home View, and it more-or-less will be a redundant one, serve as a way to get quicker access to the last activities used and to launch/resume activities, all of which could be done through the Journal (device and network icons will be moved into the bottom of the frame). So, instead, it could work as a Task switcher like it currently is, and at the same times as a way to programmaticaly use them together. This would leverage all activities, making each able to interact with others more cleverly than just the typical copy+paste of images,video,audio and sound. This would mean that activities should be coded in a way as to provide entry and exit points to achieve this as well. Then, of course, you could save the current workspace state for later retrieval. That "saved" state of the home view could also works for managing activities usage, so you could save a workspace called "OLPC development", which when chosen, would open a Browse which had bookmarks to OLPC places, XoIRC to the olpc channels, and future Develop. What do you think of this idea, inspired by your thoughts and Etoys (caveat: comming from a non-programmer person)? The biggest problem I see in acomplishing this is to get developers behind the effort, and convince Sugar and overall OLPC developers that it is a good idea. - User:HoboPrimate

It's a nifty long-term vision, though to fully realize it would be quite hard, requiring enormous developer resources in an environment characterized by their scarcity. Happily, the first steps in that direction are less daunting, and useful by themselves. Namely nudging activity authors towards greater code sharing - making their activities, and parts of activities, available as widgets and python libraries. Then we can start moving, at least a little bit, towards greater integration. Part of the difficulty is that sugar is built on raw python, so the security model is very coarse grained. It might be easier on say Java... perhaps sugar will someday be ported to Jython. :) MitchellNCharity 21:15, 29 January 2008 (EST)

External links