Jason Dyer’s teasing post got me thinking. About how Python could be used to give some insight into the meta-cognitive aspects of whole number multiplication. Natch.

When children solve a multiplication problem by *correspondence*, the objects in the multiplier set are mapped over for each object in the multiplicand set (hmm, or is it the other way around?). A typical procedure for multiplying 4 cakes by a price of £2 per cake might be to point to a cake with the left hand and then count up the 2 pounds using the right hand, then move the left hand to the next cake and repeat the count with the right hand, with the oral count continuing up; this is repeated until the left hand has exhausted all cakes.

We can model this in Python with the following program:

def mul(multiplicand, multiplier): count = 0 for i in range(multiplicand): for j in range(multiplier): count += 1 return count

Whereas children using *repeated addition* do something more like this:

def mul(multiplicand, multiplier): count = 0 for i in range(multiplier): count = add(count, multiplicand) return count

In this case, *add* is a subroutine. You could define one easily enough in Python or else you could go «`from operator import add`

».

Clearly the second program is more efficient than the first, both as a Python program and as a manual procedure performed by children; it’s more the latter that I’m interested in, I’m using Python to describe the procedures. However, the second procedure requires that *add* is already adopted as an internal procedure. Of particular note is that, apart from `count`, the second procedure uses only one state variable, `i`; the first procedure uses two.

At the stage where multiplication is introduced, many children will not yet be performing addition accurately without counting. Effectively *add* is not yet available to them as an internal procedure. This is likely to be a problem because this type of learner is unlikely to be able to accurately add the multiplicand to the count without getting confused about where in the multiplication procedure they were.

As an example of what might go wrong, imagine that a learner starts by using the left hand to maintain the `i` variable in the second procedure (above); this hand will count from 1 to `multiplier` (hmm, there’s a small sleight of hand going on here, the Python counts from 0 to *n-1* whereas most learners will prefer count from 1 to `n`). The count will be maintained orally (in other words by speaking out the successive multiples of the multiplicand). Begin by raising one finger of the left hand and uttering the multiplicand (the initial count). Now we need to add the multiplicand to the oral count. Maybe the learner can do that without using their fingers, maybe they can’t; in any case depending on the parameters chosen, at some point some learners may need to use their hands to perform the addition. So then the procedure for addition kicks in as the learner adds the multiplicand to the current count. Many learners will have personal procedure for addition that requires both hands. The addition may be performed accurately, but the `i` state variable will be lost. We lose track of where we were in the multiply procedure.

If the learner can accurately add the multiplicand to the count mentally, then they stand a much better chance of performing the second procedure. This is what I mean by having *add* available as an internal procedure.

The first procedure can be thought of as a way of simultaneously arranging to perform the multiplication and the additions required by the multiplication without having any state variables overlap. Thereby minimising the chance that confusion will result. Most learners will be capable of keeping track of the required state variables to perform the multiplication, but if left to their own devices may choose methods where the state variables overlap (in other words, they run out of hands). Thus, they can benefit by being guided towards a procedure which they can manage.

Another way to think about this is that at the sort of age where children begin to learn to multiply, their procedure for addition is *leaky*. It is not fully abstracted; performing addition may require the use of hands (for state variables), making the addition leak over any other use of the same hands to maintain state.

It seems to me that only when a learner can perform a typical `count` + `multiplicand` addition accurately in their head are they ready to *perform* multiplication as repeated addition.

Oh yeah, the original research on the whole “multiplication is/ain’t repeated addition” debate. It sucks. They test children at times *t0* and *t1* with a randomly chosen math related intervention in between. It seems to me that a more carefully designed study should have also included a non math-related intervention such as giving the subjects fish-oil pills or teaching them to conga. After all, if I was being tested on one day and then told that I was going to sit a similar test tomorrow, I would bone up on the material before the second test, regardless of what I was being taught. Wouldn’t you? They make no attempt to account for this effect.

## Appendix for Python hackers

The first definition of *mul* that I give is of course completely worthless as a practical implementation in Python. However, note the following: «10*10L» is `100L`

but «mul(10,10L)» is `100`

; in other words *mul* returns an `int`

if it possibly can.

2009-06-01 at 15:49:06

Thank you for alerting me to some of the on net debate about multiplication (which I don’t have time to follow in detail). A couple of remarks.

First, when I was studying maths education a key element of the then national curriculum strategy was a strong emphasis on building on pupils’ own mental methods. Child A may have 6+9=15 as a “number fact” (i.e. in a lookup table) and Child B may “bridge through 10”, i.e. 6=5+1, 9+1=10 => 9+6=15 (that’s how I work it out as it happens).

The view was that telling either child to stop and do things the “right way” was counter-productive. As a teacher you should be aware of the different methods that go on around you, diagnose for the ones that are erroneous (eg that give 0.2*0.2=0.4) and help people build on what they had.

It is certainly true that getting children who are stuck on (say) a standard presentation of long multiplication to try methods used in ancient China and/or renaissance Italy does show benefits.

Basically, brains work in different ways. Shock horror.

Second remark, by the time they reach secondary school an understanding of multiplication as area is really useful in developing the use of fractional multiplication (though its not the only way) most children find “half of three quarters” easier approached that way.

But an area understanding is not going to help you much with negatives – best way to get those is to understand – x – = + in terms of accounting (I earn -£600 on my mortgage what difference does that make to my bank account 5 months ago (i.e. -5 months from today)?).

I saw strong empirical evidence as well as my own anecdotal backing that intuitions strongly developed in primary education hampered further development of the concept. “5 into 3 *doesn’t go*” is a serious problem later on. I suspect that the almost total absence of anyone with reasonable maths education from primary school makes this worse.

NB: lest anyone think I exaggerate, though I do know good mathematicians in primary eduction (a friend had a distinction in part III and does the job) even in secondary things are worrying. I could not convince one girl on the PGCE course with me (with a good degree in maths) that 0.3 recurring times 3 was 1.

2009-06-03 at 12:55:33

I’m astonished that someone can get a good degree in maths and not have a firm grip on limits.

2009-06-03 at 13:19:25

I think the usual mental block is in realising (a fact which is not always explained) that 0.9 recurring is 1, they are just two different representations of the same number. That’s the problem with decimal notation, but is one we live with because it rarely causes trouble.

The usual question (what do you think 1-0.9 recurring is) often gives the answer (which she gave) of 0.0 recurring following by 1. You *can* do this in some forms of nonstandard analysis but not, alas, in the reals. Alas you would have to ditch a lot of useful facts about the reals if that were to work.

2009-07-06 at 01:12:20

so what would you actually type in for the program?

2009-07-06 at 07:25:57

@emelt for what program?