《因计算机而强大》第3章 小龟几何: 为学习而生的数学 完整版
第3章 小龟几何: 为学习而生的数学
Chapter 3 Turtle Geometry: A Mathematics Made for Learning
小龟几何和欧几里得几何以及笛卡尔几何都有所不同:欧几里得几何充满了公理和定理,它富含逻辑思想;笛卡尔几何是解析几何的基础,它以代数为依托;而小龟几何的特色在于它是计算性的。
欧几里得几何建构在一系列的基本概念上。比方说点的概念。点是只有空间位置但没有任何其他属性的事物,没有色彩、没有大小、没有形状等等。未曾正规学习数学的人,或者说还没有被“数学化”的头脑往往会觉得这很难以理解,甚至感到奇怪。因为这很难和他们所知道的任何东西联系起来。
小龟几何呢,也像欧式几何那样有一些最基本的概念。但这些概念,比方说“小龟”,很容易理解,因为它并不像欧式几何里的点那样被剥夺了几乎所有属性。而且它不是一个固定的事物,而有动态的变化。除了位置以外,小龟还有一个重要的属性,那就是“朝向”。一个欧式几何点在空中占据某个位置,这是我们能够描述的全部。一个小龟在少间中也占据一个位置,但它还有朝问,也就是说它面对某小方向。这么一来,小龟就像一个人,一个动物,或是一种我在这儿,我朝向北面。正是从这些相似性中,小鱼船一得到某种特殊的亲和力,得以成为一个小孩子也可以理解的形式数学。孩子可以代入小龟,因此把他们对自己身体和怎样运动的知识运用到形式几何的学习中去。
要知道这一切是怎么发生的,让我们来了解关于小龟的更多特色:它能够接受命令;这个命令语言就是所谓的“龟语”。比方说“forward”这个命令让小龟向前(取决于朝向)沿直线移动(下页)。forward
这个命令必须跟着一个数,用来指示向前移动的距离:forward 1
只移动一点点,而forward 100
则移动很远。在LOGO环境中,很多孩子一开始接触小龟几何是通过机器人小龟,只要用键盘输入命令就能够让它动起来,我们称之为“地龟”。它有轮子,有像乌龟壳一样的穹顶以及可以在纸上画线的笔。但它的基本属性:位置、朝向,以及能够服从龟语命令是小龟几何的关键。孩子们以后可能会接触到另一种小龟:那就是计算机屏幕上的一个三角形,我们称之为“光龟”。它同样也有一个位置和朝向,也能随着我们的命令移动。这两种小龟各有所长:地龟也可以被当成推土机来用,也可以在地板上画画;而光龟能在屏幕上以让人眼花缭乱的速度绘制各种形状。谈不上哪一个更好,但是之所以有两种小龟,是为了展示一个重要的概念:物理上不同的事物可以在数学上相同(这被称为同构)1。
如下是一个孩子尝试画正方形的实践经过。
forward 100
right 90
forward 100
right 90
forward 100
right 90
forward 100
right 90
fd 100 ; 缩写, 减少键盘输入时间
rt 100
fd 100
erase 1 ; 这条命令消除上一条命令的效果
rt 10 ; 尝试着找出正确的角度
lt 10
lt 10
fd 100
rt 100 ; 这一次快多了
lt 10
rt 100
lt 10
fd 100
rt 40
fd 100
rt 90
fd 100
forward和back这两个命令让小龟沿着它的朝向走直线:其位置发生变化,但朝向并未发生变化。与此相对的是两条改变朝向但不改变位置的命令:left和right这两条命令让小龟原地转方向。如同前进后退这类命令一样,转向命令也需要一个参数,来指示转向的程度。成年人很快就发现这个数就是转角的度数。但对小孩子来说,他们还需要通过探索来发现这个数意味着什么,这是一个好玩又让人兴奋的过程。
学着控制小龟就好像学说一种语言,所以它让孩子们在学会说话的同时又获得了乐趣。同时因为这是一种命令,它也让孩子们体会到指挥的快感。要让小龟画一个正方形,你自己首先要走一个正方形,然后再把你的走法用龟语描述出来。这么一来,编程也同时用到孩子们在身体动作方面的知识和快乐。它从这个完备的“身体几何”知识出发,逐步发展、扩展到形式几何的范畴。
所以说,孩子们初次体验小龟学习环境的目的不是学习正式的规则,而是让他们洞察自己的身体在空间中移动的这个过程。对这个过程我们可以用龟语来进行描述;它们由此成为小龟的“程序” “子程序”,或是我曾说的“微分方程”。让我们仔细看看,当一个孩子已经学会用小龟来画直线、正方形、三角形和长方形之后,可能会学习如何编程画一个圆。
小孩子肯定会问:我怎么让小龟来画圆?我曾看到无数的小孩提出过这样的要求,但在我们的LOGO实验室,教师并不直接回答这个问题。他们要做的是引导学生走向一个不仅能解决这个问题,并且能解决这一类问题的方法。
这个方法就是“把自己代入小龟”。我们让孩子们移动自己的身体,就好像小龟在屏幕上移动的那样,然后再看怎样来描述这种移动。对于画圆这个问题,可能我们会把它描述为,“当你绕着圈子走的时候,你是往前走一点,然后转一点,然后再走一点,再转一点。再继续这样做下去。”从这个描述出发我们可以得到以下的程序:
TO QCIRCLE repeat 90 [forward 10 right 1] END
TO CIRCLE repeat 360 [forward 10 right 1] END
有些孩子也许对简单编程经验不足,或者还没有了解到这种“把自己代入小龟”的游戏的奥妙,他们需要帮助。但这种帮助主要不是教孩子如何编程,而是教他们掌握一种方法,一种自行学习的途径。这种方法(即“把自己代入小龟”)要在个人行为和形式语言之间搭建一座桥梁。
在小龟的数学王国里,拟人的联想能让我们把知识从熟悉的场景转换到新的环境中。比方说,所谓“计算机编
程”的比喻就是教小龟一个新词。一个小孩如果要画很多的正方形,可以教小龟一个新的命令,让它用前面“一个孩子尝试画正方形的实践经过”所示的方法在七行之内画出一个正方形。这个程序可以有以下这些形式:
to SQUARE
forward 100
right 90
forward 100
right 90
forward 100
right 90
forward 100
end
(这是最简单的子程序定义形式)
to SQUARE
repeat 4
forward 100
right 90
end
(同样的子程序用循环的形式来定义)
to SQUARE :size
repeat 4
forward :size
right 90
end
(带循环和参数的子程序定义形式)
图2:一个孩子在画正方形上的早期尝试的实际代码与草稿
同样的,我们可以用下面的方法画等边三角形:
to TRIANGLE
forward 100
right 120
forward 100
right 120
forward 100
end
(在最简单的子程序定义中,三角形的边长是固定的)
to TRIANGLE :side
repeat 3
forward :side
right 120
end
(在带循环和参数的子程序定义形式中,边长可以代入)
这些不同的形式达到的效果几乎完全一样,但如果你仔细去看,会注意到一些差异。最明显的就是有些方法能够画出大小不同的形状这种情况下调用子程序需要加上参数:SQUARE 50
或是SQUARE 100
,而不仅仅是SQUARE
。还有一个细微差别是某些子程序运行之后小龟还是回到原来的状态。这种不留遗患的风格不仅让这个程序变得易懂,更使得它在不同的场合下都能使用。注意到这种差异能让孩子学到两种不同的东西:首先他们学到一个一般性的“助学原则”,即模块化编程的思路;其次,他们了解到一个非常有力的概念,那就是“状态”。
这个从熟悉到陌生的策略还让学生接触到另外一些强有力的概念:比方说,层次结构的概念(不管是组织机构,还是知识,还是有机体,都有这个特性),为项目制定计划的概念,以及调试捉虫的概念。
我们不需要计算机来画正方形或是三角形 -- 笔和纸就足够了,但这些程序可以让孩子组建新的知识结构。在这个过程中,他们可以训练出强有力的思维技能。我们可以从孩子们的实践中看到这个过程:在几次练手之后,他们纷纷开始为自己设定目标。帕梅拉是这里面一个典型的例子,许多孩子自发性地模仿她。
一开始,她也是让计算机画正方形和三角形,如同前面所叙述的那样。很快她就想到用这两个形状来画房子:
只需要把三角形放在正方形上面就行了。下面是她尝试的过程:
TO HOUSE
SQUARE
TRIANGLE
END
但是,当她输入HOUSE的命令的时候,小龟画出了下面的图样(图3):
图3
三角形没有放在正方形的上面,而是在正方形的里面!
一般情况下,在数学课里面,孩子们对错误答案的反应是尽快忘掉这件事。但在LOGO环境中,做错了不会受到任何责罚,捉虫这个过程再正常不过了。鼓励程序员研究错误,而不是忘掉自己犯的错误在小龟这个环境中, 研究自己的错误是一件非常值得去做的事情。
有很多种方法可以来修复这个错误。帕梅拉找到的方法是自己来代入小龟,顺着小龟的足迹前进让她注意到,之所以三角形出现在正方形的里面,是因为画三角形的时候第一次转向是右转。所以一个简单的解决办法是另外编制一个向左转的三角形程序。另外一个常见的解决办法是在SQAURE和TRIANGLE这两者之间加入一个right(右转)30。不管使用哪种方法,最后得到的结果是如下的图形(图4):
因计算机而强大 图4
学生看到了进展,他们同时也认识到,事情并不总是全对或者全错,而是有些地方对,有些地方错。这个房子比刚才要好,但还是有个问题。继续调试的结果就是找到这最后一个虫(bug):应该在程序的最开始加上一次right (右转) 90。
有些孩子倾向于绘制房子这样具体的事物,另一些孩子则倾向于绘制抽象的图案。比方说,如果你先画一个正方形,然后右转120°,再画一个正方形,再右转120°,再画正方形,不断重复就可以得到如图5a的结果,如果转的角度小一点就可以得到如图5b的结果。
因计算机而强大 图 5a 图 5b
这些例子说明了连续性原则和力量的原则是如何让小龟几何变得易于学习的。但我们同时也希望它做更多的事情,打开知识的大门,成为一系列重要的、强大思想的载体。即便是绘制这些简单的正方形或是星星,小龟也承载着重要的概念:角度、有计划的重复行为、状态变化操作等等。
如果要更系统地回顾孩子们究竟从小龟那里学到了什么,我们首先有必要把两种不同的知识区分开来。一种是数学知识:小龟是一门宏大的数学科目的一个角落;小龟几何是一种易于学习的几何;它有效承载了很多普遍性的数学概念。还有一种知识是有关学习本身的:学生学到的是怎样去学习。下面我们先来看看小龟体验中这方面的内容,然后再回到更技术、更数学的那一面。当然,这两者是有重叠的。
我们是用一个基本的助学原则来引入小龟几何的,那就是:要学一样东西,首先要理解它。回到珍妮的例子,她在头脑中已经具备了理解名词和动词这些概念的前提,但她之所以对语法敬而远之,是因为不知道它对自己有什么用。用那种最基础的学习方式,她无法理解语法。小龟几何的设计上特别强调这一点,那就是首先要让孩子们明白它能干什么,而且能够和他们对重要事物的理解产生共鸣。我们的设计原则就是帮助儿童发展助学的策略:想学一样东西,首先要明白为什么。
用小龟来画圆这个例子说明了一个共鸣学习(syntonic learning) ² 的原则。这个词来自临床心理学,它是我们之前谈到的无关联学习的反面。这个词的前面有时候会加上一个限定词,用来指某种特定的共鸣性。比方说,小龟画圆这个问题就是身体的共鸣,因为这个画出来的圆根植于孩子对自己身体的认识和感知。它也可以是自我的共鸣,因为它符合孩子对自身作为一个具有意愿、目标、需求、喜好的个体的认识。孩子之所以借助小龟来画圆,首先是因为他们自己就想画这个圆,这项活动会让他们兴奋,给他们带来成就感。
小龟几何之所以是可以学习的,正因为它的共鸣性。
它同时也对其他事物的学习有帮助,因为它鼓励有意识地使用解题策略和助学原则。数学家乔治·波利亚(George Polya)³认为,我们要教,就要教一般的解题方略。小龟几何中的某些策略就是波利亚解题思维的特例。比如,波利亚 建议每次我们面临一个问题的时候,首先要在头脑里面通过问题列表的形式来理清解题思路:能否把这个问题分解为更简单的子问题?能否找到它和已知问题的相似性?
这个思路和小龟几何相得益彰。要让小龟画圆,这个问题和一个已知问题是有关联的小龟几何也提供了分而治之的绝佳机会 -- 那就是,怎么绕着圈子走。
比如房子由正方形和三角形组成。总而言之,小龟几何与波利亚的原则契合度是如此之高,以至于想知道波利亚原则是什么,只要学习小龟几何就行了。小龟几何现身说法,让我们清楚地看到什么是探索式的学习。
因为波利亚的影响,经常有人建议,数学老师要对启发式教学以及对解题过程有足够的重视。这个想法很好,但在现行的教育体系里却未能生根发芽,其原因部分在于我们没有足够的场景来让孩子们接触到简单而强有力的探索式知识并将其消化吸收。小龟几何不仅达到了这个目的,它还在波利亚的建议之外提供一个额外的好处:要想解决一个问题,首先看看有没有跟这相似的问题是我们已经理解的。这个说法很抽象,但小龟几何的实践让它成为一个实实在在的分步解决原则:把自己代入小龟。这么一来,只要我们愿意从自己的身体、从自身的行为出发,“相似的情况”几乎是无穷无尽的。遇到问题,代入小龟 - 这个说法把波利亚的建议落到实处;小龟几何变成了通往波利亚原则的桥梁。长时间练习小龟几何的孩子深刻理解了这个“寻找相似”原则的价值,因为它常常能发挥巨大的作用。正是从这些成功之中我们才能树立信心,并强化这些技能,以便把这些原则运用到具体情况中去。学校数学里面所遇到的东西,尽管从算术的角度看只是入门的内容,但体现了更为复杂的波利亚原则。小龟几何的实践为学习这些高级原则打下了基础。
从启发式思维的角度来看,算术实在不是一个很好的选择。相比之下,小龟几何之所以出色,是因为它实现了身体和自我的共鸣。它所提供的学习模式和学校里推崇的无关联学习模式大有不同。比方说,有一个五年级孩子比尔是这么来学乘法口诀表的:“要学这东西脑子里得是一片空白,再一遍遍重复,最后就学会了。” 比尔没少花时间学这个口诀表,但结果还是差强人意,这说明他的方法有很大的问题。他的学习之所以不成功,是因为他在自己和学习材料之间刻意建立了一种最糟糕的关系,那就是完全没有关系。他的老师呢,认为他的记性差,甚至怀疑他的脑子是不是有问题。但比尔脑子里装着大量的通俗歌曲和民谣,这些东西他是怎么记住的呢?难道就是通过让自己的大脑一片空白记住的?
现在有些理论认为大脑的不同区域负责不同的功能,这么一来比尔的问题似乎就是他大脑里负责“数”的那部分不好使。但为什么这孩子又可以记住成千张唱片的编号、价格和发行日期呢?“能”与“不能”记住什么,不是取决于这个知识本身的内容,而是他和这个知识之间的关系。小龟几何和韵律、动作以及日常生活中用到的导航技巧紧密相联,这让比尔能够理解它的含义,就像歌曲那样,而不是九九乘法表这种抽象的东西。他在小龟几何方面进展惊人,以前自己不敢奢望的数学知识纷纷成为他精神世界的一部分。
现在我们从助学原则方面转移到数学方面。小龟几何里面传授的是怎样的数学知识?为了便于谈论这个问题,我们首先要区分三种不同类别的数学知识,这些都能从小龟中受益。一类是学校版数学的知识体系,它被明确选定为每个公民都应该掌握的核心数学知识(在我看来多半出于历史原因)。其次,还有我称作“前数学”的,尽管在传统科目表中没有提到,但却是在学校数学之前必须要掌握的内容。这部分知识有些是很“社会”的:比方说,为什么我们要学数学;数学对我们有什么用等等。另一些是属于某种认识论上的基础结构,这些结构已经引起了教育者的关注,如传递性、守恒性、分类的内在逻辑性等等。最后还有第三种知识,这就是学校数学既不包含也没有要求具备的,但却是一名未来的受过教育的公民应该具备的数学知识。
这第三类数学知识是什么呢?我认为,是理解欧几里得几何、笛卡尔几何和其他微分几何系统之间的差异。对一个学生来说,用小龟画圆,这不仅是一个普普通通画圆的问题,而是在让孩子接触一系列微积分的核心概念。可能很多读者没明白这个道理,因为对他们来说,微积分是一门高中或者大学里才会学到的课程,涉及对符号的某种形式操作,又怎么会在小孩子的数学课里出现呢?
但小孩子用小龟画圆的时候学到的不是微积分的形式主义,比方说对xn求导得到nxn-1,而是其用法和意义。事实上,小龟画圆的程序指向我们一般称之为微分方程的东西,只不过是形式不同而已。它有力地揭示了微分背后的理念。这就是为什么小龟能够让我们接触到这么多不同的课题:小龟程度是微分方程的一个直观模型;而微分方程这个概念是传统应用数学里几乎处处都要用到的。
微分学的力量在于通过描述点的变化来描述曲线的变化。这就是为什么它是牛顿描述行星运动轨迹的好工具。
① 所谓传递性,就景如果 A 和 B,B和C 都有一种关系,那么这种关系也一定存在于A和C 之间。比方说,1小于2,2小于3,所以1小于3。
在轨道上的每个点,行星下一步要去什么地方,完全是由它当前所在的位置、由那里的情况决定的。我们对小龟的指令也是这样,前进一步,右转一度,这就是小龟目前所在位置和它即将停留的位置之间的差异。这就是微分的指令。这和轨迹之外的遥远空间没有任何关系。小龟从内部看到这个圆逐渐形成;除了这个圆,它对任何远的东西视而不见。这个性质是如此重要,以至于数学家对此有一个专门名词:“内蕴”。小龟几何是内蕴的。内蕴微分几何和其他几何的区别就在于它对曲线,比如,对圆的认识不同:欧几里得几何对圆的定义就是从一个中心,也就是圆心,到圆周上各个点的距离完全相等。然而圆心本身却不是圆的一部分。同样,在笛卡尔几何中,圆的定义更接近欧氏几何,而不是小龟几何,圆上的每一个点仍然是和圆之外的东西,也就是垂直的坐标系建立关系,所以说一个圆可以用下列方程表达:
(x-a)²+(y-b)²=R²
在小龟几何中,圆是由小龟不断重复“向前一点,转一点”的动作来定义的。这意味着它画出来的曲线有一个恒定的曲率,这里的曲率就是给定的前进方向上的旋转角度”。
小龟几何拥有的某些特性是欧几里得几何或笛卡尔几何所不具备的,这就是自牛顿以来发展的微分几何,正是这种微分几何让现代物理学成为可能。我们已经提到物理学用微分方程这种形式来描述小到粒子、大到行星的运动, 在第五章中,我们还要进一步谈到这个问题。我们也会看到,这同样是用来描述动物运动,或是经济演化的有力工具。我们将会更清楚地明白,小龟几何之所以能把儿童的经历和物理学最耀眼的成就联系在一起,绝不是一个偶然。一个孩子的运动规律形式上没有那么精确,但它和行星绕着太阳运动或是飞蛾绕着火焰盘旋的运动规律一样,都有微分方程的数学结构。这个数学结构的核心,如果用一种简单明了的计算形式来表达,其实就是小龟。我们在第五章中要谈到的,就是小龟几何是如何打开了一扇大门,让孩子对生物科学和社会科学里面用到的微积分、物理学和数学模型有一个本能的把握。
用小龟几何学习学校里的数学科目,主要是为了达到激励或情感联系的效果:很多孩子来到LOGO实验室的时候很不喜欢数学,对它们很陌生;等他们离开实验室的时候,这种情绪已经变成喜欢。某些情况下,小龟几何为大多数孩子都难以接受的复杂数学概念提供了具体的、易于理解的思考模型。用数来表达角度就是其中一个例子。在和小龟玩耍的过程中,孩子们不知不觉地具备了这种能力。
每个人,包括我们看到的几个一年级的和很多三年级的学生,从这个经历中得到一个明确的概念:什么是45°、10°或者是360°。他们对这个概念理解的深度是很多高中学生都无法比拟的。这么一来,他们就为诸如几何、三角学、机械制图这类正式的课题做好了准备。在这些课题里,角度的概念都是至为关键的。同样,他们也为另一种角度的应用打好了基础,而学校数学对我们社会中使用角度测量的这种应用是闭口不谈的。
在当代美国人的生活中,对角度这个概念最广泛的应用就是导航。成千上万的人要为飞机或船只导航,或需要读地图。对大多人来说,这些活动和僵硬的学校数学是完全脱节的。我们强调小龟是一个譬喻,通过它,我们在身体几何和角度这个概念之间建立起牢固的联系。我们把这个称为身体共鸣性。这里我们看到的是文化共鸣性:导航对很多孩子而言是一个值得从事的课外活动;小龟把角度的概念和这种活动紧紧连在一起。随着计算机的不断普及,小龟几何的文化共鸣性会变得越来越强大。
小龟几何有助于理解的另一个重要数学概念是变量:用一个符号来表征未知事物的概念。要理解小龟几何如何演示这个概念,让我们把画圆的程序稍做修改,变成一个画螺旋的程序,如图6.
因计算机而强大 图6a 图6b
就拿这个螺旋线(图6a)来说吧。它的形成也要用到和画圆相似的指示:前进一点点、旋转一点点。但这两者之间的区别就在于:圆的旋转量是始终如一的,它的曲率恒定;而螺旋则是越来越平,由内向外曲率越来越小。所以说要走出一个螺旋形,我们要么每次少转一点点,要么每次往前多走一点点。怎样把这个概念转换成小龟的语言呢?我们需要某种东西来表达变化的数量。一个比较笨的办法就是把每一步需要转的角度都精确地给出来 (见下页代码),这样一来程序变得很长,这个工作变得很无聊。
更好的办法是运用符号表示事物,这是数学发明中最有力的概念之一。
TO SPI | TO COIL |
---|---|
forward 10 | forward 5 |
right90 | right 5 |
forward 15 | forward 5 |
right 90 | right 5*.95 |
forward 20 | forward 5 |
right 90 | right 5*.95*.95 |
forward 25 | forward 5 |
right 90 | right 5*.95*.95*.95 |
forward 30 | forward 5 |
right 90 | right 5*.95*.95*.95 |
forward 3s | forward 5 |
right 90 | right 5*.95*.95.95 .95 |
forward 40 | forward 5 |
right 90 | right 5*.95 *.95 * .95* .95*.95 |
forward 45 | forward 5 |
right 90 | right 5* .95 *.95 * .95 * .95 * .95 *.95 |
forward 50 | forwards |
right 90 | right 5*.95*.95*.95*.95*.95* .95*.95 |
forward 55 | forward 5 |
right 90 | right 5* .95* .95*.95*.95*.95*.95*.95*.95 |
forward 60 | forward 5 |
right 90 | |
forward 65 | etc. |
right 90 | |
etc. |
在小龟的语言中,变量是作为一种沟通手段出现的。
我们想告诉小龟的是,“前进一点点,然后转一点点,但是我没办法告诉你具体转多少,因为每次都不一样”。
要画出一个旋转的正方形(图6b), 我们要说的是, 而向“向前走一个特定的距离,这个距离每次都不一样,然后转90°”。在数学中要想表达这个“我没办法告诉你”的概念,我们需要引入一个符号。这个符号可以是一个字母,比如x,或是一个单词,比如说角度ANGLE,或是距离DISTANCE。计算机文化对数学的一个小贡献就是用单词而不是字母来表达变量 -- 这么一来变量变得易于记忆了。在小龟的语言中,“创建一个有输入参数的子程序”,用以下语句可以实现:
TO STEP :distance
forward :distance
right 90
END
这样的话,调用STEP 100能让小龟前进100步,然后右转90°。同样,STEP 110则让小龟前进110步,然后右转90°。在LOGO环境里我们鼓励孩子用一个拟人的手法来思考这个问题:STEP这个命令要唤醒一个代理 (可以起名叫“STEP man”),他的任务就是对小龟发出前进或转向的命令。但是这个“STEP man"自己不知道要前进多少;我们必须告诉这个代理一个数,然后他再把这个数转告小龟。
这个STEP子程序并没有太大的意思,稍做一点改动就能得到和原程序几乎一样的SPI程序,新程序只多了一行。
TO SPI :distance
forward :distance
right 90
SPI :distance + 5
END
调用SPI 100会调出我们的SPI助理,并给他输入100这个数。SPI助理会发布三条命令:第一条和STEP助理的一样,让小龟前进100步。第二条命令让小龟右转,这也没什么不同。但是第三条命令很不寻常。这条命令就是SPI 105。这是什么意思呢?它让小龟前进105步,右转90°, 然后执行SPI 110。这个过程是没有穷尽的,我们把它称为“递归”,这个过程的开始阶段如图7a、图7b所示。
因计算机而强大 图7a 图7b
在我给孩子们介绍的所有想法中,递归这个概念是最令人兴奋的。我认为部分原因在于孩子们对没完没了这种事总是格外热衷,同时也因为递归这个概念植根于流行文化。举个例子,有一个谜语说,如果你有两个愿望,那么第二个愿望是什么?(再给我两个愿望!) 视觉上我们可以想象一幅图片其标签里面又有一副缩微的图片,等等。
能够接触到无穷这种概念,SPI程序让孩子们体会到只有数学家才能体会到的种种感受。而图7b则说明了这种数学家体验的另一个侧面:只要稍稍修改SPI程序的角度,我们就可以得到一种有趣的数学现象。像星系轴一样旋转的正方形并不是我们刻意编程达到的结果。它们令人震惊,不断激发人们进行长期的探索,在这些探索中,数、几何思维与美学交织在一起。
在LOGO环境中,新的想法常常是从满足个人需要而来,是要做一件以前做不到的事情。在传统的学校环境中,学生是怎么接触到变量概念的呢?是通过下面这样的小问题:
5 + x=8, 那么x是多少?
很少有儿童认为这是一个与个人相关的问题,更少儿童会觉得解决了这个问题能给他们带来力量。这些学生想的没错。在他们的生活中,变量这个概念没有太大的用处。在LOGO环境中,学生和变量的第一次亲密接触是不一样的。学生有一个个人需求要满足:比方说画一个螺旋。在这个环境里,变量这个概念变成了一种力量的源泉,像魔术一样,能够让你做出一些想做但没有这个概念就很难做到的事情。当然,用传统方法学到变量的学生中,也不乏能够有效地使用它的人。区别在于,即便是对数学成绩最优异、最聪明的那些孩子,它也未必能带来
一种对“数学力量”的感受。这就是在传统背景下接触变量的概念和在LOGO环境中探索这个概念的根本区别。在LOGO环境中,这不是一个空洞的概念,而能够让孩子感受一种数学家的力量,感受到数学可以拔高文化的整体境界的那种力量。
如果说,用变量来制造螺旋只是个别的例子,用来“图解”并说明“数学力量”的概念,恐怕就不会有太多的孩子能够领略其中的妙处了(像我和齿轮的关系)。但在小龟几何中,这并不是孤立的,恰恰相反,它是一个典型的例子。小龟几何中的数学知识都是以这种形式传达的。你甚至可以说,对数学力量的感受成为了生活的一部分。这种力量感不仅仅是跟一些可以马上能派上用场的角度测量方法有关,还涉及定理、证明、启发式学习、解题法等等概念。使用这些概念让孩子发展出一套对数学的表达能力。我们下面就要说到这种数学上的表达能力。
有这样一个孩子,他已经用小龟画出正方形和圆形,现在想要画一个等边三角形,每边长为100。这个程序可以是这样子:
TO TRIANGLE
repeat 3
forward 100
right ??
END
但是要让小龟画出这个形状,孩子必须知道更多东西,这就是 “ ?? ” 的具体数值。对于正方形来说,这个值是90,所以正方形的程序是这样:
TO SQUARE
repeat 4
forward 100
right 90
END
现在我们看到的是波利亚相似原则和小龟的逐步推进式代入思考的一个综合例子。正方形和三角形有什么相似之处呢?如果把自己代入小龟,那么可以看到,我们想要小龟走出的路线开始和结束于同一点,朝向同一个方向。这就是说,我们开始和结束于同一个状态。在这当中我们转了整整一圈,唯一的区别是这一圈是通过三次转完,还是四次转完。这里面的数学概念虽然简单,但是无比强大。
重要的是整体性:一共转了多少度?
不可思议的事是,不管你怎么转,一圈必然是360°。
正方形的四个90°加在一起是360°,那么三角形的三次转弯必然是每次360° 除以3。所以这个之前我们不知道的角度是120°。下列是我们由此得到的“小龟整体旋转定理”:
如果小龟沿着一个区域的边界走,最后回到一开始的地方,那么这期间所旋转的所有角度加在一起必然是360°。”
要理解这个定理,一个重要组成部分是用它来解决一些特定的问题。这个定理和欧几里得的“三角形的内角总和等于180°”有相似之处,但学生接触到这个定理的方法却颇为不同。
首先,至少是在LOGO计算机的环境下,“小龟整体旋转定理”更有力:孩子能够把这个定理派上用场。
其次,这个定理的表述更为普遍,它可以适用于三角形,也可以用于正方形和其他曲线。
第三,它的可读性更好,也就是说,它的证明更容易理解。最后,它更个人化:你可以代入这个过程;这个过程应该成为一个习惯,让他们把数学和个人知识联系在一起。
我们看到孩子们用这个定理来画出等边三角形。但更让人欢欣鼓舞的,是看到他们是怎么用这个定理来解决从简单到复杂的一系列问题。
接下来几页的花样图形就是这条道路上的一个小小尝试。重要的是,我们给孩子一个定理,是要去用,而不是死记硬背而已。
随着孩子的成长,他们会逐渐体会到一个重要的道理,那就是,某些理念,比如这些定理,可以作为工具来思考其他问题,这个想法会伴随他们的一生。他们学到的,是享受这些理念,是尊重它们所表现出来的力量。他们明白了最有力的理念恰恰就是明了理念的力量。
下面是两个孩子在计算机前面的一个虚构对话。这样的对话每天都可能发生,并且确实在发生。
计划
-- 我们让计算机画一朵这样的花吧。
因计算机而强大 图8
资源获取
你有什么程序是可以用的吗?
-- 有啊,上个礼拜我做了一个四分之一圆的程序。
-- 嗯,给我看看。
QCIRCLE 25
QCIRCLE 50
QCIRCLE 100
-- 这个程序让小龟从现在的地方开始画一个四分之一圆。
-- 它需要你告诉它要画多大的圆。
初试身手
-- 我们先试试把两个 QCIRCLE(四分之一圆)合在一起, 做成一个花瓣。
-- 好! 多大?
-- 50 吧。
QCIRCLE 50
QCIRCLE 50
发现第一个Bug
-- 这不对!
-- 是啊! 两个 QCIRCLE,那不就是一个半圆么!
修正BUG
两个 QCIRCLE 之间小龟要转一下。
-- 试试看120°怎么样?
-- 嗯,画三角形就是这个角度。
-- 对,再用 HIDETURTLE 命令把小龟隐藏起来。
QCIRCLE 50
left 120
QCIRCLE 50
是只鸟!
-- 怎么这样?
-- 试试右转
-- 为什么我们不画只鸟看看?我们可以画一群鸟(flock)。
-- 你去做那个吧,我还是要画花。
-- 我们可以先画花,再画鸟群。
QCIRCLE 50
right 120
QCIRCLE 50
这是鱼!
-- 右转看起来是好些。
-- 就是不知道转多少度。
-- 可以再试试其他的角度。
-- 或者试试数学。
数学来帮忙
-- 你知道“小龟整体旋转定理”吗?一片花瓣也是这样,走一圈应该是360°。
-- 一整圈是 360°。
-- 每个 QCIRCLE 转 90°,两个 QCIRCLE 就是180°。
-- 一共是 360°,两个四分之一圆用掉了180°,那还剩下180°,每次转 90°。
-- 对,那我们每次右转90°看看。
试试吧。
出师成功(A WORKING PROCEDURE)
TO PETRL
QCIRCLE 50
right 90
QCIRCLE 50
right 90
END
-- 我们要四片花瓣。
TO FLOWER
PETRL
right 90
PETRL
right 90
PETRL
right 90
PETRL
right 90
END
-- 嘿,那看起来更像是螺旋桨。
- 那就 10片吧。
封装重用(A BUILDING BLOCK)
-- 十次!我的手都要敲疼了。
-- 那就用 repeat 命令吧
TO NEWFLOWER
repeat 10
PETAL
right 360/10
END
-- 好了!
-- 这花太大了!
-- 这个简单,我们只需要在 PETAL(花瓣) 里面把 50 改成 25 就行了。
-- 如果我们让 PETAL 也有一个参数,那就可以大花小花都能画了。
-- 简单,只需要写 TO PETAL :SIZE QCIRCLE :SIZE END
什么的就行了。
-- 但这会不会出bug?我们不如先试试 25。
-- 那我们可以做一个更大的程序(super-procedure),把整个植物都画出来。
步步前进(BUILDING UP)
TO PLANT
NEWFLOWER
back 50
PETAL
back 50
END
目的和手段(ENDS BECOME MEANS)
-- 我有一个程序(great procedure)能让我们把好几个这样的植物摆在一起,叫 SLIDE (滑动),我们可以用 PLANT SLIDE PLANT
SLIDE PLANT SLIDE
TO SLIDE :distance
penup
right 90
forward :distance
left 90
pendown
END
新工具登场
-- 要是有大有小就更好了
-- 所以说还是加个参数吧
-- 如果我们用 RANDOM (随机),那就可以造一座花园了。
-- 我下一个计划要画一群鸟。
-- 也许可以把鸟和花放在一起。
-- 是啊,或许可以。
意外发现(SERENDIPITY)
-- 一群鸟是 BIRD SLIDE BIRD SLIDE
-- 我要六只鸟,我要用 repeat。
TO FLOCK
repeat 6 BIRD
SLIDE 20
END
-- 这看起来好怪。我要六只鸟都朝上。
-- 但这看起来挺酷的,如果你要改的话,先留一份拷贝吧。
BIRD
SLIDE
BIRD
-- 像小龟一样走进去试试。
-- 嗯,一开始朝北边······ 画一只鸟······ 现在朝东边 ······ 嗯,问题就在这儿。
-- 第五只跑到第一只头顶上去了。
调试(DEBUGGING)
-- 这个可以这么改,画完鸟之后,让小龟面向北方。
-- 再把它们改小一点。
TO FLOCK
right 20
repert 6
BIRD
left 90
SLIDE 20
END
-- 鸟群画好了。
是结束,也是…(THE END)
-- 还没弄好呢,我们可以给鸟群加个参数,多画几群。
-- 怎么让它们飞起来?
-- 我知道有个程序很好用,在BIRD 里面,不用右转,而用 SPIN(旋转)。程序还有点问题,但是很好看。
. . . 新的开始(A BEGINNING)
下一步的计划是让鸟都飞起来,但是印刷的书页没有办法重现这个效果,它也没有办法完全记录这中间的意外发现、遇到的种种困难以及数学知识 ······ 这些都需要动画才能再现。
正是这些读者所不能看到的部分,让我想到计算机给孩子带来了怎样的新玩具:在纸上乱涂乱画只能得到静止的线条,而现在他们学到的是绘制动画,也许这么做能够让他们学会让自己的思维也最大限度地动起来。
版权声明
- 本文作者:极客中心
- 本文地址:https://www.geekzl.com/mindstorms-chapter-3-turtle-geometry-a-mathematics-made-for-learning.html
- 郑重声明:本文为原创或经授权转载的文章,欢迎转载,但转载时必须在文章页面明显位置注明出处: www.geekzl.com