我的小堂弟叫聪聪,今年三岁,跟他同龄甚至包括比他大很多的孩子相比,他都算是十分聪明的。不仅记忆力好(所有亲戚朋友见过一两面说过几句话的,他都能记住别人的称呼),还特别善解人意,不仅从不像别的孩子那样无理取闹,还常常能通过察言观色了解大人们的心意。比如他去姑姑家做客,看到桌子上有西瓜想吃,他既不直接去拿,也不是张口就要,而是指着西瓜说:“看,这个西瓜好香哦~”,然后表兄见了笑着说:“我去给你切西瓜吃好不好?”,他就一本正经地说“好~”。还有一次他来我家玩,那天我跟老婆闹了点不愉快,老婆惩罚我替她洗衣服,我不乐意,他见了就一本正经的问:“姐姐,你为什么要哥哥去洗衣服呀?”(因为我们刚结婚,所以聪聪还是按之前习惯的称呼叫姐姐),老婆假装可怜地说“因为水这么凉,姐姐怕冷,所以让你哥哥帮忙洗咯”,他却说“可是哥哥是男生,他不会洗衣服啊”,老婆听了是又生气又好笑:“不会就学!我教他洗!”,聪聪见劝不动老婆,又来劝我:“那哥哥,你就去帮姐姐洗一下衣服咯~”,我在这个萌货面前也真是无气可生了,只好无奈地去洗衣服了。。我们俩闹矛盾竟被这个三岁的善解人意的小萌物给调解了,真是想想都好笑。
就是这么个可爱的小盆友,居然特别地爱玩麻将,大人打麻将的时候他就喜欢在边上围观,大人不打麻将的时候,他就喜欢一个人摆弄麻将。有一次,我见他一个人在码麻将,就凑过去陪他,当然也顺便测试一下他数学学得如何啦。我先拿出3个麻将,问“聪聪,哥哥这儿有几个麻将?”,他很认真地一个个数:“1、2、3,有3个~”,这个当然太简单啦,然后我又加大难度,拿出了9个麻将问他“那这是几个呢?”,他又认认真真地数了一遍“1、2、3.。。这是9个~”。这个小家伙可不一般,自从他学会数数起,他见到一堆一样的东西他就要数一遍,从他认识颜色之后,他见到鲜艳的颜色丰富的东西,就要把所有颜色认一遍。对于这种简单的数数问题自然是难不倒他的,不过我倒是好奇他会不会数10以上的数字或者说要进位的数字,所以又在之前的9个麻将上面又加了1个,然后问“聪聪这是几?”,然后他又挨个数了一遍“1、2、3.。。9、10,是10个~”,的确是10个没错,不过这时候我心里却有了一个新的问号,我注意到一个很有意思的现象,聪聪知道数到9之后数10,却不知道9个麻将增加1个麻将之后是10个麻将,否则他不应该从头再数一遍。
这个现象很有意思,为了重现这个现象,我又问了聪聪几个问题。我先拿出3个麻将,然后问“这是几?”,聪聪数了一遍回答“是3”,接着我把这3个放到左手下面,然后右手拿出2个麻将,然后问“聪聪,这是几?”,聪聪很配合“1、2,这是2”,最后我把这两个麻将放到右手下面,然后把左右手并在一起,伸到聪聪面前问“聪聪,那这些一共是几?”,于是聪聪就开始从我手掌的缝隙底下数了起来,我见他要数,果断双手捂紧了,然后继续问“聪聪,你不数能不能知道这是几呀?”,聪聪没有办法了,乖乖地说“不知道~”。
要么就是聪聪不会算加法,要么就是聪聪虽然会计算加法,却不清楚两个数字的相加的结果,和两堆麻将合并之后的个数之间,存在联系。我心里当然清楚聪聪是会算加法的,不过为了证明的严谨(或者说演示的效果,因为老婆也在旁边)我又紧接着问了聪聪“聪聪,3+2等于几?”果然聪聪很快就答出“等于5~”。
是的,真的是这样! 聪聪知道我左手底下藏了3个麻将,右手底下藏了2个麻将,也知道3+2=5,但他就是不知道我左右手底下一共藏了几个麻将!这样的问题我又问了好几轮,聪聪都没办法在不数数的情况下回答我“两只手下面一共有多少麻将”的问题。
之后,我尝试着帮助聪聪建立起中间缺失的这种联系。我继续问着类似的问题:“左手这是几?”,“是3”,“右手这是几?”,“是2”,“3加2等于几?”,“等于5”,然后我摊开手(让聪聪数)问聪聪“这一共是几个?”,“1、2、3、4、5,一共是5个!”。第二轮我尝试直接测试他:“左手这是几?”,“是4”,“右手这是几?”,“是5”,“4加5等于几?”,“等于9”,“左右手一共是几?”,他有些犹豫,然后我摊开手让他数了一遍“1、2、3.。。7、8、9,是9!”,他这次喊出结果的时候声音明显兴奋了许多,仿佛他之前猜测的结果被证实了。果然,接下来我再也难不住聪聪了:“左边是几?”,“是3”,“右边是几?”,“是3”,“3加3等于几?”,“等于6”,“左右一共是几?”,“是6!”。下一次我把中间过程也省略了:“左边是几?”,“是2”,“右边是几?”,“是5”,“一共是几?”,“2加5等于7,所以一共是7!”,这个小家伙学得好快,要不是亲眼所见,我都怀疑他是不是演员!
让我们重新整理整理整个事情,如果用形式化的语言(也许这里你需要一点抽象代数的知识)来表达我们数麻将这件事情: 用大写字母,如A、B、C,来表示一堆麻将;用Merge来表示两堆麻将的合并运算,即Merge(A, B)表示A,B两堆麻将合并后的新麻将堆;用小写字母,如a、b、c,来表示一个数字符号;用Plus表示两个数字符号的相加运算,即Plus(a, b)表示两个数字符号a、b相加产生的新数字符号;用Num来表示取一堆麻将个数的运算,即麻将堆A中麻将的个数所对应的数字符号可表示为Num(A); 那么,你将看到两个代数结构和它们之间的一个同态关系:两个代数结构为 (所有麻将堆的集合, Merge) 和 (所有代表自然数的符号的集合,Plus),而Num函数就是两个代数结构之间的同态映射。 我们知道,聪聪会数数,会把一堆麻将映射到一个数字符号,这说明他会作Num运算;聪聪也能合并两个麻将堆,这说明他会作Merge运算;聪聪会计算加法,这意味着他会Plus运算。在之前的例子中,聪聪通过数数知道两堆麻将的个数分别为 Num(A) = a ; Num(B) = b,聪聪又通过计算加法知道Plus(a, b) = c,我们问聪聪A、B两堆麻将合并后的个数,其实是问Num(Merge(A, B)),然而由于我阻止了聪聪数Merge(A, B)的个数(即阻止了对Merge(A, B)作Num运算),所以聪聪无法知道结果,而大人们很自然地知道结果是因为他们默认了两者之间的这种同态关系,即利用了Num(Merge(A, B)) = Plus(Num(A), Num(B)) 从而知道它等于 Plus(a, b) 即等于 c
是的,我们教过学生怎么把问题变成符号,也教过如何对符号作运算,却常常忽略了重要的一步,就是告诉他们:这些符号运算的结果仍然具有怎样的实际意义!
事实正是这样,我常常认为数学计算中的每一步都对应着真实的含义,这些含义真实而有趣,奇怪的是,老师们却从来闭口不提。也许老师们总觉得这是不需要过多强调的事实,然而他们错了,事实是,他们对此总是强调得太少而不是太多!
一旁的老婆见证了这有趣的整个过程,直呼神奇。我却开始反思了:我今天忙活了一晚上,并没有教会聪聪数数,那是他很早就会了的,也没有教会聪聪计算加法,那也是他早已经会了的。如果我是一个数学老师,学校要给我计算KPI,那么今天晚上的工作,怎么算KPI都是0。可我却并不觉得今天晚上对于我和聪聪是毫无意义的0,而且恰恰相反,我觉得今天晚上的经历是宝贵的:对于聪聪,他今天学会的不是任何一种新的算术,却是运用算术去解决问题的宝贵能力;而对于我,我发现的则是一个bug(bug常表示程序里的错误,这里泛指错误、漏洞),一个天大的bug,这个bug让我们的教育成为了纸上谈兵,把我们辛苦传授给学生的宝贵知识变成了学生脑子里永远倒不出来的符号。
这里本应该结束了,我想我应该总结点什么,可我的确不知道应该总结点什么,总结了对于大多数人来说也没有用吧。我只是在想,也许我们可以做得更耐心一点:多告诉孩子一些为什么,少告诉孩子一些怎么做。
PS:为什么我们要学习数学?因为操作数字符号可以比直接操作实物更容易。但我们操作数字,最终还是为了得到一个跟实际问题相关的结论。当然随着不断抽象,我们会越来越习惯地省去最后那个得到结论的步骤。但在开始建立一切抽象之前,先提出我们要解决的实际问题有哪些,这是我认为教学中必不可少的一步。这大约也是为什么国外的公开课,第一节通常都用来讲故事吧。