本学期小孩开始正式学习代数,我主要让她在AoPS上网课。我在观察她学习的同时,也经常旁边帮忙,还常常和AI讨论。这段时间的最大收获是我以前不自觉的很多学习方式,因为教小孩的缘故,被外化显现出来学习。本文是其中一个收获。
学习的最基本步骤当然是不断增加知识点。这是一个加法过程。代数、几何、数论、组合,一个领域一个领域地学;代数里面又从方程、不等式、函数逐渐往前走。这种正规课程的结构是不可替代的。知识本来就存在依赖关系,很多后面的东西必须建立在前面的基础上。我一直不太赞成为了竞赛,很早就把数学拆成大量题型来学。最初还是应该沿着数学本身的结构,把基本概念、方法和运算真正弄清楚。可以把这个过程理解为建立知识的第一个维度。
学到一定程度以后,只做简单加法就不够了,或者说,只沿这个方向继续增加知识就不够了。这时候应该把已经学过的东西旋转九十度,再从另一个方向看一遍。比如,原来我们问的是这个东西属于代数还是几何,是数论还是组合;现在要问的是,遇到一个不知道怎么做的问题,我可以从哪些方向去研究。比如寻找不变量,利用对称,从结果逆推,研究极端情况,把一个复杂状态进一步细分,先研究小例子,改变问题的表示方式,把几何问题代数化,或者反过来把代数关系画出来。这些东西并不属于某一个章节,而是可以横穿很多不同领域。这可以看作是第二个维度。这两个维度方向是不一样的。代数、几何、数论这些分类主要回答“研究的是什么”,不变量、对称、逆推、改变表示这些方法则主要回答“面对一个不知道怎么办的问题,可以怎样去研究”。一个是按照数学对象组织知识,一个是按照解决问题的方法重新组织知识。前面的正规课程把知识装进不同的抽屉,后面的学习则是在所有抽屉上重新建立一套横向索引。到了这一步,学过的知识才开始真正形成网络,而不只是教材目录。
比如有一本单墫写的书《算两次》,就是一个非常典型的第二维度的方法。该书讲了如何用算两次的方法解决各类问题,包括代数几何组合等。比如最简单的例子,三角形的面积可以用不同的底和高算两次,结果应该相同,可以列出等式解题。这本书里面有非常丰富的例题,读这类书不应该去特意记住具体的题目,而应该重点研究怎么算两次,找到什么东西,它是客观存在的,是可以算两次的,算两次能得到什么等式。
对数学的不同领域,代数几何数论等,用“算两次”等不同的方法去横向梳理重组织,不断加深对数学的理解,是数学进步的快速通道。这种重新组织的价值很大,因为两个相对独立的方向可以互相交叉。学会一种方法以后,它并不只属于最初学会它的那一道题。比如在一道计数题里,直接数很困难,于是把原来的一个状态进一步分成几个状态,再分别研究它们之间怎样转移。真正值得留下来的不是这道题最后的答案,也不是给它起一个什么题型名称,而是“原来的状态太粗时,可以把状态细化”这个思想。以后做概率、递推、算法,甚至研究某些物理系统时,都可能再次遇到同样的思想。这样一道题带来的东西就不再局限于一道题。
这两个基本维度,大体上可以视作垂直或正交,因此可以进行比加法更快的“乘法”。比如有二十个知识点,有大约十种不同方法,那大约就有两百中组合。当然这是个示例,具体多少不一定是两百,但这种乘法可以让你更加快速积累数学能力,是毫无疑问的。这两百种组合,你并不需要平时就全部遍历练习一遍,等需要时可以临时组合出来。这就像是你掌握了列竖式乘法,就不需要背两位数三位数的乘法表了。
相比较而言,按题型”刷题“,大量题型训练,就明显存在缺陷。题型分类当然不是坏事,分类本身甚至非常重要。问题在于有些分类只是把原来的一棵树继续往下分,计数下面分成硬币问题、骰子问题、染色问题、排队问题,再给每一类总结几个模型;类似的,几何也可以不断分成各种固定图形和固定构造。这样做在知识范围比较小时很有效,因为常见情况数量有限,完全可以把它们大量枚举出来。小学竞赛尤其容易这样做,短期成绩也往往提高很快。但这样做仍然只是在做加法,这样的学习方式,每种题型必须遍历练习一遍,类似背诵两位数三位数的乘法表,即便有收获,效率也是远远比不上乘法的。随着数学学习不断深入,知识点数量增加的同时,可能的组合越来越多。同一个组合问题,可以先细化状态,再找到递推,然后转成代数;一个几何问题,可以先看到对称,再建立坐标,最后变成一个代数问题。如果每一种组合都提前定义成一种题型,需要覆盖的东西会迅速膨胀,而且永远覆盖不完。真正高效的办法不是不断增加格子,而是增加坐标轴。坐标轴建立好了,过去没有见过的格子也有可能自己找到。
简言之,学习中增加的维度,是一种组合效应。如果学了很多数学内容,又学会了一批可以跨领域使用的方法,那么后者会不断和前者重新组合。学习量只是增加了一些,但是可以尝试的方向增加得更多。相反,如果所有学习都沿着原来的方向不断细分,那么为了获得类似的覆盖,就需要记住越来越多具体组合。
其实不光数学,别的学科里这种增加维度的思想,也普遍存在。比如以前看某人讲应对历史高考题,我发现大部分高考题并不是直接问某件事情哪年发生的之类的基本事实,而是横向提问。比如教材按顺序顺序讲了各个朝代的事情,题目就问哪些朝代推行过改土归流的政策。很显然,出题人为了丰富题目来源,也无形中把增加维度作为了一个基本手段。从这个意义上讲,横向整理知识,也就是这里说的增加维度,并非是数学中独有,而是学习中的普遍规律。
沿着这个思路再往前走,到了更高阶段,还可以继续增加新的维度。除了按照数学内容和通用方法组织,还可以按照表示方式来看。同一个对象能不能用图形、方程、表格、递推、坐标或者概率语言表示?也可以按照结构来看,有没有局部和整体的关系,有没有守恒,有没有单调性,有没有某种极端状态。一个人的数学逐渐成熟以后,脑子里的东西就不再像一本书的目录,而更像一个多维网络。面对一个陌生问题,可以沿不同方向来回移动,而不是先努力回忆“这到底是哪一种题”。这种现象也不限于数学。物理最开始当然要学力学、电磁学、热学、光学,这是第一遍正规的组织。但以后“守恒”“对称”“尺度”“近似”“极限情况”这些东西会横穿不同领域。看到一个新系统,不一定先问这是哪一章,而会先想有什么量守恒,哪些因素可以忽略,极端情况下应该是什么样。计算机也是一样,最初学习算法、数据库、操作系统、网络,后来却会发现状态、并发、缓存、一致性、抽象层次这些思想不断在完全不同的系统中重新出现。知识越多,这种横向组织反而越重要。甚至可以大胆的说,维度越高,视野越高,菲尔兹奖和诺贝尔奖得主常常是作出跨领域的贡献,很大程度也是因为他们站在了更高的维度上。
当然,学习通用方法本身也可能走歪。如果把“不变量”“逆推”“状态细化”重新编成二十种题型,然后告诉学生这一章所有题都要用不变量,那么不过是把原来的题型训练换了名字。真正的方法学习不是看到题目以后马上知道该套什么,而是在不知道怎么办的时候,多几个可以探索的方向。寻找不变量并没有告诉你什么量是不变的,改变表示也没有告诉你应该怎样改变,研究小例子更不会直接给出答案。它们只是让原来完全没有方向的搜索变得稍微有结构一些。
所以实践中,我更喜欢让这些方法从具体问题里自然长出来。先让小孩遇到困难,自己想,必要时一起研究,最后再回头看:刚才为什么能够突破?原来这里把状态细分了,那里利用了对称,另一个地方其实是换了一种表示。过一段时间,在完全不同的问题里又遇到类似的困难,再把这个方法调出来。这样重复几次以后,它才真正从某一道题里脱离出来,成为可以横跨很多领域的工具。先告诉孩子“今天我们学习状态细化法”,然后连续做十道已经标明要细化状态的题,表面是在学习通用方法,实际上很容易又退回到套路训练。
从这个角度看,一道好题的价值也不完全取决于它有多难,更不取决于以后会不会再次遇到同样的题。更值得问的是,做完以后有没有留下一个以后还能调用的东西。有些题做完只是多见过一种情况;有些题却会改变以后观察问题的方式。后者数量不需要很多,但是值得反复想透。以前我自己学组合计数时也是这样,真正形成能力的并不是刷了多少题,而是少数经典问题彻底弄清楚以后,慢慢形成了一些可以迁移的思考方式。学习到最后,真正产生复利的可能也不是单纯知道了多少东西,而是已有的东西之间能够发生多少关系。同样一百个知识点,如果彼此孤立,增加的主要就是一百个知识点;如果这些知识又被几套不同的索引反复组织,一个知识可以从几个方向被找到,也可以和许多别的知识组合起来,那么能够处理的问题会多得多。高水平的人未必是见过题最多的人,而往往是面对没见过的问题时,仍然能够换几个角度表示它,调用不同领域的知识,再选择合适的方法继续搜索。
按照这样的方式组织学习和思考,最后形成的就不应该是一张越来越长的题型清单,而是一套越来越密的多维知识网络。一句话,增加维度最大的意义在于:它不是帮助我们记住更多答案,而是让已经拥有的知识彼此发生更多关系。
归巢鸟文

