Papert在《因计算机而强大》这本书中数次谈到关于“调试与试错”的内容,那么,如何在一堂课中,去实践这个教育理念呢?
我们不妨先看看现有的编程语言的教材是如何处理的,例如,下面这个在Python中绘制彩色螺旋线的课例。
在传统编程课堂中,这部分的内容主要是为了学习语言本身的知识而设置的,比如turtle库函数的使用、列表与颜色、循环等。学习者通过编写并调试程序的方式进行学习,以成功绘制出彩色螺旋线作为结束。这里面调试更多的是语法和拼写的内容。
接下来,我们将重构这节课程的内容。
第一部分:绘制多边形
首先,在图形化编程平台中,如何绘制一条直线呢?
这是比较容易理解的,我们将从这三块积木出发,从绘制一条直线出发,建构整个课程。
如何展示直线绘制的过程呢?
思路:只需要把“移动200步”这个过程细化即可;
程序:
这里为了更好地显示效果,调整了画笔的粗细
那么,如何绘制一个正方形呢?
思路:可以通过身体在地面上走出一个正方形的方式来探究绘制过程,发现需要利用“旋转xx度”这个积木;
程序:
能否简化上述程序?
思路:利用重复执行;
程序:
程序中的参数分别表示的含义是什么?
“5”表示画笔的粗细程度,数字越大,画笔越粗;
重复执行中的次数“4”,表示的是边的数目;
移动步数中的“200”,表示的边长,控制的是图形的大小;
旋转度数中的“90”,表示旋转的度数,控制的是图形的样子;
那么,如何绘制一个正三角形呢?
思路:首先因为三角形有三条边,因此需要将重复执行的次数改为“3”次;其次,因为正三角形的内角均为60°,因此需要将旋转的度数改为“60”;
程序:
发现问题,为什么不是正三角形呢?如何修正?
思路:再一次通过身体走出一个正三角形的方式来探究,发现旋转60°是不够的,旋转的角度实际上是图形的外角,回忆内角和外角的互补关系;
修正:将旋转度数更换为120,尝试;
程序:
成功!
那么,如何绘制一个正六边形呢?
思路:先计算正六边形的内角,再通过内角和外角的关系得出外角的度数;或者,回忆刚才绘制三角形失败的例子,当时的图形隐约是正六边形的一半,当时的旋转度数为60°;因此,将重复执行的次数改为“6”次,将旋转的度数改为“60”;
程序:
那么,如何绘制一个正五边形呢?
思路:仍然是通过计算的方式进行,这是可行的。可是,如果学生并不会计算,怎么办?
思路:别忘记,我们仍然有通过身体走出一个正五边形的探究方式,只不过这次需要提示学生,当他回到起点的时候,一共转了多少度?
学生可能会说转了一圈。此时接着问学生,那么让身体分别走出一个正三边形、正四边形、正六边形时,当回到起点时,一共转了多少度?学生将会发现,虽然图形不同,但是都转了一整圈(不论学生是否学过正多边形的外角和始终是360°,都不影响后面的进程安排),先来验证一下。
上述三种情况,重复执行的次数与旋转度数的乘积,的确都是360°,这是一个关系。
重新描述关系:正n边形有n个内角和n个外角,n个外角均是相等的,外角的度数*n=360;
因此,程序可以调整为:
方框里面的数字需要保持一致,因此每次绘制正n边形的时候,只需要换一下这个数字就可以;
验证:重新验证n=3、n=4,n=6的情形,是否能得到之前的图形!
验证过程略。
猜想:将n=5代入这个模型中,就能得到正五边形。
程序:
成功!
那么,如何绘制正七边形、正八边形,正十边形呢?以及正二十边形、正三十边形呢?
思路:只需要将相应的数字更换为7、8、10、20、30即可。
程序:
奇怪,为什么看不到正二十边形呢?
思路:在上图中,只能看到二十条边中的四条,可能是太大了。再次回忆三个参数所表示的含义。
猜测:也许是因为“移动200步”中的200太大了,因为它控制图形的大小,把它改小一些试试,分别试试150、100、50;
程序:
成功!
学生发现,这很像是一个圆。
那么,是不是边数越大,就越像一个圆呢?
尝试:正三十边形,正四十边形,正一百边形……
成功!
小结:已有一些教学设计完成上述的教学过程,继而引出通过正多边形来近似圆的方法,也就是割圆术。
我们不妨重新梳理一下,学生在上述过程中可能获得的:
1、通过身体画图的方法;
2、展现绘制直线的过程;
3、明确基本模型的三个参数的意义;
4、在多边形的绘制中,旋转的其实是外角的度数;
5、内角与外角的互补关系;
6、“归纳——猜测——验证——修正——验证”的基本方法论;
7、任意正多边形的外角和等于360°;
8、可以通过正多边形来近似圆;
9、如果图形太大了,就需要将边长调小一些,调整的方式是不断尝试;
第二部分:绘制五角星
那么,如何绘制一个正五角星呢?
思路:不难发现,无法沿用之前绘制正多边形的模型了,需要调整。似乎无头绪,别急,我们需要“不厌其烦”地再次回忆模型三个参数的意义。
重复执行中的次数,表示图形的边数;
移动的步数,表示边长,控制图形的大小;
旋转的度数,其实控制的是图形的样子;
思路:五角星一共有5条边,因此重复执行的次数是5次,移动步数并不影响图形本身,可以暂时不用调整,那么问题的核心就在于五角星旋转的度数是多少?
明确:需要知晓五角星的外角度数。
怎么办?尤其是学生还没有学习过平行、内错角等概念的时候。
帮助学生回忆,之前在图形过大无法看清全貌时,调整边长的过程。其实并不是一次就能调整合适的,是经过不断的尝试,且每次尝试的数字都在上一次尝试的结果之上进行修正的。
那么,能否借鉴这个方法找到五角星的外角度数呢?
方法:试错法
先试试130
观察:似乎有一点五角星的样子,但是有两条线并没有“合”在一起,再试试150。
观察:似乎刚才的那两条直线又“过”了一点,也许我应该尝试130到150之间的数字,试试140。
观察:140的时候要比130好一些,那么应该尝试140到150之间的数字……
不断重复这个过程,缩小可能范围,直到找到144。
(如果有学生观察到,这其实是一个倒过来的五角星,并且表示想绘制头朝上五角星,怎么办?如何引导学生?)
小结:对于无法通过计算的方式求出旋转度数的学生而言,怎么办?这里,我们引导学生使用了一种非常基本但强有力的方法——试错法,通过不断的尝试,找到最终的答案。
这其实是在鼓励学生“犯错”……当然,我们在这里需要明确的一点是,鼓励学生通过“试错”方式进行学习的同时,还需要强调要学会“犯"那些有价值的错误——即,尽可能减少尝试的次数。
第三部分:向错误学习
有一位同学举手,“我觉得应该是145”。这是怎么回事?我们先来看看他的程序。
程序:
学生表示,老师,虽然我的五角星小,但是也是对的啊(这个过程绝对是设计不来的)。
到底是144还是145呢?如何验证?
分析:首先应该明确,最终答案肯定不会是两个,只能有一个——也可以通过把正三边形中的120°改为119°或者121°试试,让学生们有一个直观感受,在旋转度数多一度或者少一度的情况下,图形不是没有闭合就是过了一点。那么如何检查上图的闭合情况呢?
这个图形有点小,看不清楚。那么,太小了看不清楚,怎么办?还记得之前太大了看不到全部图形的时候,我们是怎么处理的吗?
回忆:太大了看不到,于是缩小点;现在太小了看不清楚,应该放大点。
调整后的程序:
放大后,我们就能清晰的看到,确实是有点过了。因此,答案应该是144。
也许在正常的教学过程中,把145改为144后这部分就结束了,而145也会被贴上错误答案的标签。而我们并不会止步于此,我们将由此开启向错误学习之路。
回忆:我们前面在画图的时候,都是先给出图形,然后让学生们绘制。因为图形是确定的,因此边数也是确定的,故而只需要计算或者找出旋转的角度即可完成图形的绘制过程。特别地,对于正多边形而言,我们还发现了(或使用了)“正多边形外角和等于360°”这个数学结论。这也就是说,任意给一个图形,就同时对应一个边数和外角度数。
那么,145°既然不是五角星的外角,那它是哪一个图形的外角呢?
思路:不知道,怎么办?用试错法啊!这一次该试哪个值了?没错,需要调整的是边数,也就是重复执行的次数。
6条边时
10条边时
50条边时
依然不是,还得继续试。
等等,先别着急往后面试了。这个图形还挺好看的,我们欣赏一会!这是一个意外的收获!
如何绘制这个图形呢?如果从正向分析,还真的无从下手。我们不妨来分析一下,这个图形是怎么得到的?如果把145改回144,虽然也重复执行了150次,可是结果依然只有一个五角星,为什么1°的误差会对结果造成这么大的差异呢?
每次误差1°,随着重复执行的次数越多,这个误差也就被累积的越多。然而,没有想到是,这些误差居然这样美丽!
那么,如果边长存在一个“人为”误差,并且经过放大后,会发生什么呢?
分析:边长只会决定图形的大小,但是形状本身是没有影响的,因此任何一个数字都无法称其为“误差”。想要累加误差,还得另想办法。之前旋转的角度是每次多旋转1°,那么现在能不能每条边的长度都多一点呢?这个可以通过变量来实现。
程序:
这里强调一下,在每一次编完程序之后,先不要着急点击开始,先让学生们猜测会有什么样的结果,然后再点击开始进行验证。然后,不断重复这个过程,这个过程非常必要!
之前的图形,是因为“小误差”被积累了很多。因此,需要更多的积累。
和你点击开始之前的猜测一致吗?
再来看看当原始图形为六边形的时候,每次一点误差,会被积累成什么样子?
还挺像迷宫的。
那么,如果同时累积边长的误差和旋转的误差,会如何呢?
这又是一个意外的收获!美丽的图形!
在这个框架下,调整其他的参数试试看,是否还会得到意外的收获吗?
以及
以及
你还能画出更多美丽的意料之外的图形吗?
小结:上述过程完全是通过一个细小的错误出发,通过好奇心引发的探究活动。如果说前半段内容的核心是试错法的使用的话,那么后半段的内容完全可以归结为“向错误学习”!
我们不妨重新梳理一下,学生在上述过程中可能获得的:
1、重新回到基本模型的三个参数的意义;
2、通过试错法找到五角星的外角度数;
3、学会“犯”有价值的错误;
4、如果图形太小了,就需要将边长放大一些;
5、建立图形边数与外角之间的关系,通过外角反向寻找边数;
6、分析出美丽的意外图形是因为误差的不断积累导致的;
7、人为引发误差,并将误差放大;
8、同种将边长的误差与外角的误差组合起来,进行放大;
9、通过试不同的参数,得到更多美丽的图形;
10、任何程序,都先猜测,再去验证;
第四部分:能力迁移
上述内容已经构成一个完整的课例,综合考虑篇幅等各种因素,我们将在下一篇,结合Papert的教育理念,专门针对这个课例进行理论分析与教学设计的分析。
顺便说一句,别忘了,145°所对应的图形我们还没有找到呢!下一篇课例分享,我们继续探究。
,