数和字:教一年级的女儿学习数学

我从小就不喜欢数学。它难。因为它抽象。而且不知学了之后有什么用。

2001年我到清华开始读博士时,仍然不知数学有什么用。我问一位师姐。她迟疑了一下,说可能是为了训练大脑?

当我写这篇文章时,距离2021年只有十几天了。在从2001到2021这二十年里,很多人都知道了一种叫“深度学习”的人工智能技术;它已经让很多人(服装销售员、街边报刊亭、图书馆管理员、信用社的信贷员、大大小小的广告代理公司的职员)失业了,将来还会继续让更多人失业。

很多人不知道的是,这样深刻改变社会结构的技术背后,依赖的是数学 —— 大学一年级的高等数学的求导公式。

我的女儿今年六岁,在硅谷一所公立小学读一年级。作为老师们眼中的尖子学生,她的读写能力超出我小时候。但是和所有的小朋友们、和我、以及我的师姐一样,她也面对着抽象而烧脑的数学的折磨。

为了帮助她更容易的打下基础,我努力回溯了数学的基本概念。此文是为记录。希望能抛砖引玉,启发更多家长和老师的探索和反思。

回归初心

我是2004年才开始强迫自己抛开对数学自信不自信、适合不适合的疑虑,抛开对数学的应用价值的不确定,强迫自己用自学的方式,重新学习高中和大学数学,随后跟进最新的人工智能研究进展,总算拿到了博士学位。

这段置之死地而后生的自我超越过程里,我意识到两件事:(1)一门复杂的知识体系一定有其应用空间,否则其令人生畏的复杂性会导致其失传;(2)要体会应用空间,得先学好这门知识体系,而学习一定要从最基础的概念开始向上一层一层的构建。

但是,找到最基础的概念是一件很难的事情,需要不断回溯,不断反思。每次反思往往都会发现还能回溯到更加基础的概念。

如果回溯不到位,我们就找不到特别坚固的立足点,努力学习的过程就退化成构造一座空中楼阁。即使通过战术上的勤奋,获得了一些“知识”;但是当我们想和行家交流想炫耀一下的时候,就经常被问到语塞了。这是因为我们的知识体系漏洞百出,摇摇欲坠。

回到数学这个话题,在我从一个深度学习工程师的知识体系向小学一年的算数课题回溯的过程里,我惊讶的发现最基础的两个概念是我的小学老师们从未教过我的:

(1)数

(2)字

当我从这两个概念开始重新教女儿算数的时候,她很快就能开始总结“模式”,感受到乐趣了。

这两个概念也是我补习离散数学和数论时(大学本科和研究生数学课程中)用了最长的一段时间去领悟的两个概念。

这篇文章是写给家长和老师看的,不是给小朋友们看的。希望它激发家长和老师深刻思考我们以为很容易的儿童数学。

区分数和字

很多家长和老师在数学教育上混淆和“数”和“字”这两个概念。我们在纸上写一个类似问号的符号,再加上一条短横线,然后告诉孩子这是 2。

如果你是这样教孩子的,那她学不好数学是天经地义的。而如果她学好了,那是她天资聪慧,自己反思和回溯过这里的概念体系,修正了你脑子里的一团乱麻和对她的误导。

在孩子可以动笔画出那个附带短横线的问号之前,甚至在她能握笔之前,她就能理解“一个苹果”,知道要不要“再来一个”,知道如何回答“这两个苹果哪个更甜”—— 她心里已经有 2 这个数的概念了,只是她的小手还写不出那个用来表示 2 这个数的“字”。

数和字是两个完全不同的概念。不同的文明有不同的“字”来表示“数”。

我们交给孩子们的“2”字是古代印度人用来表示貮这个数的一个符号。古代印度人发明了用有限的十个符号来表示无穷无尽的数的表示法。这十个符号被阿拉伯商人带到欧洲后,被欧洲人称为阿拉伯数字。

古代中国人用什么符号表示 2 这个数呢?用两条线,其中一条中间断掉了。这就是《易经》中用来表示八卦的“二进制表示法”,也是今天计算机科学中用来表示数的方式。那条中间断掉的线表示数 0,对应计算机芯片中一个没有充电的电容器;而那条没有断掉的表示数 1,对应于一个充电了的电容器。

数 2 用中国人的符号表示是☵,对应二进制的 010。也可以把左边那个 0 省略掉,也就是把第一条断掉的线省略掉。这个数字在八卦里代表“水”的意思。八卦用 0 到 7 这八个数分别表示天地山川水火风雷这八个概念。

古代罗马人比较笨蛋。他们用一个拉丁语字母 i 表示数 1,用两个 ii 表示数 2。为了表示数 5,他们就得画(写)五个 i —— 太长了,他们也觉得烦,所以用一个字母 v 表示 5。那 4 这个数用什么字来表示呢?他们想了想,在 v 前面写一个 i 表示 5-1=4 吧。那么 6 呢?他们在 v 的后面写一个 i 来表示 5+1=6。类似的,他们用 x 表示 10,用 ix 表示10-1=9,用 xi 表示 10+1=11。

这套路子太复杂了;古罗马小朋友学习起来很麻烦,怪不得古罗马没有什么像样的数学和科学成就呢。不过因为后来的德意志帝国和俄罗斯帝国总是希望自认为古罗马帝国的后继,从而有继承领土的口实;加上美国的建国思想也参考了古罗马共和国的思路,所以 iPhone 10 被写成 iPhone X。

“数数”的本质

上文说了数的表示。其核心思路是——发明有限个字来表示无穷多的数。比如印度人发明了十个符号。中国人只用两个。用十个字表示各种数的方法叫做“十进制表示法”。用两个字表示各种数叫“二进制表示法”。那么这些无穷多个数是怎么来的呢?—— 是数出来的。

几乎所有的幼儿都被教背诵一串数字 —— 零、壹、貮、叄。。。说英语的小朋友背的是 zero, one, two, three … 那么为什么零后面是壹,壹后面是貮?这些数各自代表什么意思呢?

在我和女儿的沟通时,我发现数论(就是陈景润老师钻研的那个号称“数学中的皇冠”的领域)中的解释法其实也是儿童最容易接受的方法。

零表示什么也没有,比如,没有苹果。妈妈给了一个苹果,或者自己去篮子里拿到一个苹果,就说有了壹个苹果。再拿一个,就是贰。再来一个是叁。再来一个是肆。

这里“再来一个”对应的“加一”的概念。用印度人发明的被谬称为“阿拉伯数学和符号”表示就是 +1。在数论里被称为“下一个数”。

我上小学的时候老师说“从零开始的所有整数被称为自然数!”这是为什么呢?因为“下一个”或者“再来一个”是人类幼儿也可以理解的用来构造无穷尽的数的集合的方法 —— 这很自然啊。

在数论里,任何符号系统,不管是印度人的还是古代中国人的,只要有办法表示下一个,那么就是 listable 的(汉语翻译叫可列的)。

一个表示自然数的系统除了要可列,还需要可计数(countable)。这是什么意思呢?通俗的理解,可列指的是定义了上述 +1 的概念。而如果我们进一步规定

+1 之后再 +1 相当于 +2,

连续+1三次相当于+3,

。。。

不加,维持原样,记为 +0

那么,我们说这用字表示数,以及表示数的构造(累加)的过程是 countable 的。

“进位”的本质

现在我们来试试用印度人发明的阿拉伯数字表示数的过程。按照数论对数的构造方式,我们从“什么都没有”用 0 这个字表示开始。

“0+1”这个操作的结果用字(符号)1表示。请注意这里“+1”是一个操作。

“1+1”的结果用符号2表示。为此要发明符号 2。

以此类推,8+1用符号9表示。为此要发明符号 9。

那么接下来呢?印度人已经厌烦于继续发明新的字(符号)了。于是他们决定把“拾”这个数当做一包苹果,然后用 1 表示“一包”中的“一”,用0表示“一包”中的“包”,以区别于用来表示“一个苹果”中的字 1。这样,就用两个字 10 表示“拾”这个概念了。

那么,一包再加上一个,就用 11 表示。规律是一样的,第一个1表示一包(十个),第二个1表示一包之外的那一个。

继续往下,可以有两包加一个,就用21表示。九包加九个用 99 表示。

再来一个呢?用 1 表示十包,记为一个大包。用百分位上的 1 表示一个大包,就得到了 100 —— 这样三个字 100 表示“玖拾玖”的下一个数“壹佰”。

以上就是十进制的概念。每增加一个用来计数的字,就称为“进位”。

今天,印度人发明的十进制对全世界的人们都有深刻的影响 —— 不仅影响数的写法,甚至影响数的读法。我们把玖拾玖之后的那个数读作“壹佰”,其实脑海中已经把“佰”这个声音对应到连续两个 0 了,同事把“壹佰”中的“壹”的声音对应到符号 1 了。类似的,我们说“伍拾”的时候,“拾”这个音对应 0,“伍”这个音对应了 5。

这样有一个好处,数的发音和字形有对应。而说英语的小朋友就没有这么便利了。英语里对应阿拉伯数字表示法 11 的那个数叫 eleven。只从写法和读音上,完全看不出来和两个符号 1 有什么关系。这也和英语发源的不列颠岛曾经是古罗马的殖民地有关。

中国人算不算十进制的发明者呢?百度知道说算。理由是商朝的甲骨文里就有从“一”到“十”,以及“百”和“千”这些字了。后世也有“屈指可数”这个成语。不够我感觉有点牵强。古印度人用十进制的年代比我们的商朝更早。而且中国不同的地区使用的进制不同。比如秦朝开始统一重量记录法,规定十六两是一斤。这里的十六进制也是成语“半斤八两”的来历。不过不得不承认,很久远的年代开始,中国人就用十进制了。比如,算盘就是十进制的。

《周易》和计算机

用十进制为例,说明自然数构造的 listable 和 countable 的特点之后,我们再来看看二进制。这是《周易》中的计数方式。它和今天汉语中数的说法(发音)以及写法都没有直接关系了。家长和老师们检视二进制,可以帮助我们跳出潜藏在说法和写法中的规律,更彻底的重新审视数和字的本质。

仍然从用零这个数表示没有。《周易》用一条断开的线表示零,我们这里写成 –。这是《周易》中为了计数发明的第一个字(符号)。

为了表示从 — 开始“再来一个”,老祖宗(据说是伏羲)发明了第二个符号,没有断开的线,本文写成 —。

可能是伏羲太懒了,对于 — 的下一个数貮,他懒得发明新的符号了 —— 和古代印度人矜矜业业地发明了十个符号比起来,伏羲简直是。。。

他说一包两个苹果用一个 — 和一个 — 表示吧。现在的计算机科学家借用印度人的 1 表示 —,0 表示 –。所以二进制里 10 这两个符号表示貮。(十进制里用一个符号 2 表示貮。)

那么叁就是一包两个苹果再加一个,就是 11。肆就是一个大包,其中有两个小包,每个小包里有两个苹果。为了表示这“一”个大包,我们把 1 这个字放在从右往左数的第三位上,写成 100。这个从右往左数的第三位在十进制里叫“百分位”,在二进制里就应该叫“四分位”了。

十进制表示法里这个位置上的 1 表示的也是“一个大包”,只是其中有十个小包,而不是两个小包,每包里有十个苹果,而不是两个苹果。二进制里只能有“两个”完全是因为伏羲偷懒,只愿意发明两个符号用来计数啊。

其实,估计伏羲已经发现二进制表示一个很小的数就得写很多断开或者没有断开的线,挺麻烦的。所以在《周易》里,他使用的是八进制表示法。为此,他需要八个符号(字)。他很聪明的用二进制计数法来“写”这八个符号:

☷ 表示 0。仔细看,这三条断开的线其实都是二进制表示法中的0。

☳ 表示 1。其中三条线分别是 001。

☵ 表示 2。二进制的 010。

☱ 表示 3。二进制的 011。

☶ 表示 4。二进制的 100。

☲ 表示 5。二进制的 101。

☴ 表示 6。二进制的 110。

☰ 表示 7。二进制的 111。

下一个数捌怎么表示呢?当然是用“八分位”上的1(☳)表示一包八个苹果了。用两个符号写作 ☳☷,或者 10。

八八六十四怎么表示呢?当然是一个大包,其中八个小包,每个小包有八个苹果。这“一个”大包用六十四分位上的☳表示,记为☳☷☷,或者100。

二进制和八进制,甚至由此继续衍生出来的十六进制,都是计算机专业的学生们需要掌握的。原因是,计算机系统里用充电的电容器对应 — ,用没有充电的电容器对应 –。我们说“一台电脑有8GB内存”时,指的是电脑里有几个内存芯片,上面一共有 8G(大约八百万)个电容器组,每组八个电容器。这里的每一组被称为一个 byte,缩写是 B。如果让一个 byte 跳动起来,就是 ByteDance,是开发抖音的公司的名字。

如果我们想让计算机用一组电容器记录八进制数 ☳☷☷(或者100),计算机会让从右往左数的前六个电容器都放电,第七个充电,第八个也是放电状态。

这里可以看出来,如果用伏羲发明的八卦符号(而不是印度人的数字符号)来表示八进制,那么八进制数到二进制数的转换会容易很多。比如上面八进制数中三个符号一共有九条横线。根据其中横线断或者不断的样子,分别读作0或者1,则得到了二进制数 001000000。

算数的本质

前文大部分都在解释用 +1 或者“再来一个”这个神奇的操作可以构造出世间所有的自然数,以及这些自然数的写法。

实际生活中,我们要面对的不仅是 +1,而是加任意数字。前面我们提到 listable 和 countable 两个概念 —— 我们把连续五次“再来一个”写成 +5。那么 6+5 就是从数陆开始“连续五次再来一个” —— 我们可以写成 +1+1+1+1+1。不过这样写太麻烦了,于是写成 +5,因为有连续5个+1。

这样就出现了加法。

反过来,如果从6开始往前回溯5步,就发明了减法,记为6-5。

可以说,往后和往前list(列举)分别定义了加法和减法。

很多幼儿都是这样理解和计算的。如果你问一个学前儿童 4+3等于几?他会先数四根手指,然后依次增加三根。一边增加一边念念有词地说“肆、伍、陆、柒”,最后回答你答案是柒。

加法有一个交换律,说的是 A+B 等于 B+A。很多老师说这是一条“公理” —— 就是大家都认同,不许学生们怀疑的道理。其实交换律不是数论中的公理,是可以(应该)被怀疑和被验证的。基本验证的思路是:从A开始往后列B个数抵达的那个数,和从B开始往列A个数抵达的那个数,是一样的。

类似的,A+B-B=A 这条定理的验证,也可以解释为 —— 从 A 开始,往前列B个数,再往回列B个数,最后回到了出发点A。

那么乘法是怎么来的呢?连续列 A 次,每次向前列 B 步,就定义了 A x B。从 C 开始,做上述重复操作就得到了 C+AxB。

除法呢?A/B=? 问的是,如果我每次走 B 步,要走几次,才能接近一共 A 步呢?

因为 listable(可列举)性定义了算数的四个基本操作,我们用一系列的数,加上一个箭头,称之为“数轴”的图形,来图示自然数自带的可列属性。

如果我之字形地走,那么足迹覆盖的面积就是 AxB。这解释了为什么乘法用来计算面积。

因作业崩溃的家长

我女儿最近一次作业里有一题是从 iPad 屏幕上零散堆放的十个数字中挑出五对儿,每对之和都是 10。大家估计已经脑补出来了,答案是

1 + 9 = 10

2 + 8 = 10

3 + 7 = 10

。。。

但是,很多孩子们是不知道这个规律的。这时,很多辅导孩子作业的家长就着急了,大吼大叫“你怎么这么笨!这么简单的规律都不知道?”

我在各种视频网站和app里见过这样的视频。感到非常痛心。这他妈的是什么家长啊?这些家长有比我更好的方式来解释为什么有这样的规律吗?并没有!他们甚至都没有仔细想过,这些“这么简答的规律”是怎么来的!他们发飙是因为他们自己也不知道怎么回事儿,是因为他们自己愚蠢和无能。

更可恨的是,他们愚蠢和无能也就罢了,竟然吼孩子,吓得孩子们一看到算数就紧张得要哭。这样的教法,不是逼迫孩子也变得和他们一样愚蠢和无能吗?

其实这套规律并不简单!不同的明白家长有不同的解释法。有一种解释法是,我早上收集到1个苹果,下午再收集9个,这一天就有10个了。如果我早上努力一点,多收集一个,那么下午就能省点儿事儿,少收集一个。以此类推,如果我早上就把所有10个苹果都收集好,那么下午就不用收了(0个)。

最初的也是最难的

算数是数学中最基础的部分 —— 这句话的意思不是说算数是最简单的,而是说算数是孩子们能开始学习其他数学知识之前,必须掌握的。而这必须掌握的入门之道,却是所有数学知识中最难的,是被称为数学“皇冠”的数论(Number Theory)。