当爸爸后,我很快就知道了一个词——早教。有时候真的感觉现在中国的孩子太可怜了,为了让他们赢在起跑线上,从小就要被父母投入轰轰烈烈的教育事业中。什么脑电波音乐、幼儿简笔画、蒙氏数学、右脑识字、语训、跳舞班......,花样层出不穷。想当年我小时候,哪有这些东西,父母不管,到处乱跑,忙着打架、偷邻居家种的西红柿之类工作。这不,又被老婆大人抓差,陪孩子研究新到的”巧虎“学习本。(没小孩的朋友别笑,等你当父母后,可能就知道”巧虎“是嘛东西了。)
看看,巧虎书对四岁小孩就开始进行计数训练了。巧虎摘了3个苹果,桃乐比摘了2个苹果,都放到这个篮子里,总共有几个苹果?只见我宝贝女儿伸出手指,从1数起,数到3,再到5个。我再问,”那3加3等于几?”。她又开始数手指,从1数到6。这么低效的算法,怎么行?我马上对她进行了一番辅导,教她“以后尽量不数手指,要心中默默的算”。
过了几天,我又考她:“宝贝,3加3等于几?别数手指,用我上次教你的方法。” 女儿说:”现在我早不数手指了”。不错,没伸手指,不过,怎么回事?我晕,她开始眨眼睛,从1眨起,连眨了6下。难道我们家孩子没数学特长,不会吧,当年哥可是参加数学竞赛的(没得奖),论遗传没这么差吧?
我心中一动,说不定小孩在这个阶段的数学思维就是这样具象的。你看,我的程序员职业病又患了,可以试试用抽象代数类型来给宝宝的数学思维建模啊!宝宝这个阶段,肯定只知道最简单的自然数了,她已经懂得数数,比较数的大小,还有低效的加法。
抽象代数类型定义——
sorts: 集合名
nat自然数 bool布尔值
operation: 操作
true : bool
false : bool
0 : nat
succ : nat -> nat
< : nat * nat -> bool
> : nat * nat -> bool
+ : nat * nat -> nat
axiom: 公理
0 < 0 = false
0 < succ n = true
succ n < succ m = n < m
n > m = m < n
0 + n = n
(succ n) + m = succ (n + m) ***
抽象代数类型的特殊之处在于,它的集合元素全是用操作定义的,用了基本的归纳法。集合元素之间的关系,用公理来定义。
比如,0是自然数的基本情况,succ是构造操作,那么
1 = succ 0
2 = succ (succ 0)
3 = succ (succ (succ 0))
......
3~4岁的小孩处于计数初始阶段,他们对数的认知也许就是这样,所以他们在做加法时,是用上面打*号的那条公理来实现的。比如3+2,相当于
succ (succ (succ 0)) + succ (succ 0) = succ ( succ (succ 0) + succ (succ 0) )
= succ succ ( succ 0 + succ (succ 0) )
= succ succ succ ( 0 + succ (succ 0) )
= succ succ succ succ (succ 0)
每succ一次,相当于数一次手指,或眨一次眼睛。象我的宝贝不懂得加法的交换律,算完3+2,你问她2+3,她从头再来一遍。所以在模型的公理中,没有这条:
n + m = m + n
随着孩子的长大,对计数掌握的越多,我们就要不断扩充模型的能力。首先要增加记忆的定理一项,什么 2+ 3 =5 都变成她熟练掌握的定理,不用算了。操作要扩充,增加减法、乘法、除法等等。公理随之也增多。
到了初中,就是把自然数扩展成整数,要有负数的观念。她还要懂得分数,也就是有理数。然后是无理数,实数集合。上了高中,她还要学会复数,算算三角。再到大学,她要是和老爸一样,读computer science,她就会知道抽象代数。等她有小孩,她又教她小孩计数。我正在那里傻乐着瞎想呢,突然女儿的一声召唤把我从梦里带回来,“爸爸,妈妈叫你带我去上画画课”。 唉,早教这个烦人的东西又来了!