本书第一版写于 1970 年左右,让我们随着作者的文笔,一同进入那个时代。

现在学校里教学数学和物理的方式,所用的教学素材都还是古老的纸和笔的形式(也即粉笔和黑板)。这些教学素材往往拥有巨大的局限,而这一系列局限造成了目前教育体系下孩子们对“数学”和“物理”的恐惧症,具体来说:作者通过对自身行为的观察,发现了一个有趣的“齿轮现象”。作者生活的环境中出现了“齿轮”,大人们也经常与“齿轮”打交道,作者使用身体来思考“齿轮”的内在原理结构,最终“齿轮”变成了作者思考任何形式系统的一种思考工具。总结性地说,“齿轮”变成了一个带有情感的、链接具象世界与抽象世界的媒介——孩子可以和“齿轮”发生共鸣,“齿轮”又和重要的智识结构发生共鸣。“齿轮”是作者所处文化环境所提供的思考模型和譬喻,是孩子成长过程中,自发性培养学习方式的一种原材料。我们所处的社会没有提供这样的材料,学校里也没有,以数学为例,最终导致只有少数孩子喜欢数学、学好数学、知道为什么要学数学。

计算机的出现,与此同时伴随着集成电路的成本呈指数型下降,作者提出了一种新的教育方式,即使用计算机来辅助教学,但这与传统的“让孩子学习编程”有着天壤之别。在作者提出的构思和方法论中,生活中随处可见的“计算机”,代替了上述中出现的“齿轮”,成为了孩子成长环境中的一种原材料。而计算机灵活的多态性,可以成为任何一个孩子的“齿轮”,最终帮助他们建立具象世界和形式世界之间沟通的桥梁。

计算机不仅帮助了孩子学习具体的知识,还帮助了孩子学习怎样学习。通过对编写程序的人深入的观察,可以将计算机科学领域中几个具有代表性的思考方式,引入到对孩子的教育领域中,例如:描述性的思维过程、模块化编程、没有对错只有“除虫”的价值判断……通过设计一种新型的编程语言——“LOGO”、以及建立在其上的“小龟几何”和“牛顿小龟”,作者实践并证明了上面提出的这种观点的有效性:让孩子爱上数学和物理并非难事,我们现行的教育方法需要变革。通过对“抛杂耍”过程的描述性定义,外加一点点的训练,任何一个人都可以迅速掌握原来认为不易掌握的“抛杂耍”,从而支撑“计算机思维方法帮助我们学习怎么样学习”的论点。

人,就像迷宫里的老鼠,可以用试错法走出一条路。但这种方法很原始、很慢。我们可以学得更快、更多,只要能有意识地掌握学习的过程,学会分析和表达我们的行为。

首先,把新的、要学的和已经知道的知识联系起来;其次,把新的拿过来变成自己的:试试看,能不能用它造出一个什么东西来。

与此同时,计算机还可以作为一个孵化器,让孩子跳过那些枯燥的“预备”课程,直接动手实践。在实践中发现规律,就像这些数学家、物理学家当时发现相应的理论一样,形成假设并能够验证这些假设。直觉性思维也是解决问题的一个好方法。以亚里士多德和伽利略关于“重物坠落所需的时间”的辩论为例,重要的思想往往不以在课堂中刻意学习的方式获得,而是一种直觉性思维。通过对计算机的使用,孩子可以习得“对直觉性思维进行除虫”的思维方法。

作者大胆预言,新的学习方式的出现必将对教育的形式产生翻天覆地的变化。教师的责任不再是权威式的传授知识,而是与孩子一同探索,在这个过程中为孩子指引方向并答疑解惑。学校这个固定的场所也可能不复存在,而是类似于巴西的“桑巴学校”那样松散的组织,以目标和结果为导向。固定式的课程表将不复出现。以上这些并非由官僚机构策划的,而是由民众自发产生的社会形势。强有力的社会形式必须植根于文化,因此,整体的社会文化也应与之相匹配。

以上的理论实践起来并非易事。作者提到,对计算机教育怀疑还是批评的声音不绝于耳,而且现实中新的技术手段往往被用来强化原有的认知。如果教育想要创新,则必须进行一场思维革命。“像计算机一样思考”并非让孩子完全替换为这样的思考方式,而是增加了一种思考方法,增加了一种处理问题的工具。我们不需要舍弃其他的东西。


以上是严肃的读书笔记时间。

秉持着“买书如山倒,读书如抽丝”的优秀传统,我最近买了这本书。看书的副标题《因计算机而强大》,还以为是一本讲述计算机科学的严肃书籍。因为这本书我看到我的一位老师推荐过,所以当王老师找我拼单的时候,我就不假思索地下单购买了。刚读了几页,这才发现“受骗上当”。这根本不是一本讲计算机科学的书籍,而是一本讲教育和思维方法的书籍。读完之后,回头再看本书的结构。里面不仅有作者提出的理论,还有实践的结果,脑哥最头疼的“形而上学”也占了不小的篇幅。

看完本书,我的感触没有预期那么大。或多或少作者的某些想法,在这个时代已经得到了实现。但这本书让我开始思考一个问题:有没有影响过我思考方式的计算机科学元素?

我想,是有的。我能不假思索地举出两个例子。

第一个,是我高中时候学数学的例子。

高二的时候,学校给我们班换来了一位年轻的男老师。高二数学的授课内容大部分是平面几何,就是如何用函数描述圆、抛物线等等。这位老师在课上使用了一个叫“几何画板”的软件。当时学校每周一下午还开设了一节让学生自选的选修课,就像大学里的一样,美其名曰“和大学接轨”。这位老师也开设了一门教学如何使用“几何画板”的课程。年轻老师果然上课有激情,这让我产生了平面几何的兴趣,因此也选修了这个课程。

选修课很有趣,键入一个方程甚至是方程组,屏幕上就会产生相应的图形。方程组的求解,即找这两个图形之间的交点。函数的几何含义于是在我脑海中扎根,挥之不去。慢慢的,解题的时候都会寻求绘图软件的帮助,把函数绘制一下方便理解。再到后来,大学里学习微积分的时候,对一个函数求导和对一个函数积分,这在几何上的含义更是不言而喻了。可以说,借助计算机,纯函数的抽象问题得以转化为平面、立体几何的具象问题来进行求解。有点本书说的内味儿了。

第二个,是在大学里学习编程时吸纳的一个思维方法——“不要跨层级思考”。

人类的大脑往往不适合处理过于复杂的信息和流程,特别是当这些信息处于不同的结构之中的时候。如果这个解释过于抽象的话,那我就用一个例子来说明。世界上有一个经典的“把大象放进冰箱需要做几步”这个问题,也算是一个计算机科学中的梗。有哪几步呢?一、打开冰箱;二、把大象放进去;三、关闭冰箱。但这个过程中,倘若真正实现起来,我们会涉及很多的细节,比如如何打开冰箱、如何关闭冰箱、冰箱太小怎么把大象放进去……如果一开始就要思考这些细节时,那让我们列出一个完整的步骤清单简直难如登天。就算是开始动手写了,我们的心智却还在担心是不是有什么遗漏。这足以证明,我们的思维不善于这样的思考。那我们换一种方式如何?

以伪代码为例,我们用代码来描述整个思考过程。首先,我们知道,“把大象放进冰箱”问题由三部分组成:

openRefrigerator()
putElephantIn()
closeRefrigerator()

然后,针对其中的每一步(每一个函数),我们去细化——我们先来细化如何打开冰箱的详细步骤吧:

openRefrigerator() {
  findHandler()
  getHandler()
  pullWithStrength()
}

然后是“把大象放进冰箱”环节:

putElephantIn() {
  findAvailableSpace()
  grabElephant()
  putElephantInSpace(available)
}

最后是关闭冰箱的环节:

openRefrigerator() {
  findHandler()
  getHandler()
  pushWithStrength()
}

看到了吗?每一步,我们都只需要思考同一层级的过程,无需关心更多的细节,这也减轻了我们的心智负担。

有人提议,这样的实现还不够!寻找冰箱把手的过程太不明了了!那我们可以再深入思考:

findHandler() {
  checkFront()
  checkSide()
  checkBack()
}

依此类推,直到我们的“程序”细化到一种被称为原子的操作过程,即无法再细化的程度上。我们把以上的整个过程,按照书中提到的“直线型思维”进行排列,那么应该编写为:

checkFront()
checkSide()
checkBack()
getHandler()
pullWithStrength()
findAvailableSpace()
grabElephant()
putElephantInSpace()
checkFront()
checkSide()
checkBack()
getHandler()
pushWithStrength()

到底哪种思维方式清晰明了?大家显然心里有数。软件的实现之中,也大量存在这样的思考过程。我们先编写一份完全不可运行的伪代码,凸显解决问题的大结构,然后通过一次次充实其中的实现细节,最终完成一个可运行的程序。


抛开作者理想化的论调,我们要肯定的是,作者在 70 年代能够提出这样的理论,并加以实践,放在当时的环境之下是革命性的、极具创新价值的。70 年代早期,作为个人计算机划时代产物的 Apple I 还没有被发明出来,能够畅想一个未来人人拥有计算机的时代,本身就是一件需要极大勇气和魄力的事情。而书后面“形而上学”的部分,例如对孩童思考方式的程序化模拟,以期望实现人工智能,也能现代的算法实现中找到影子。

书是好书,有空可以读读。