王苏明 钟柏昌 李艺
近年来,Scratch积木式编程工具在国内中小学信息技术教育领域蓬勃发展,越来越多的地区和教师个人都加入到Scratch的教学与研究中来。Scratch之所以从起步的星星之火发展至如今的燎原之势,与其本身的特点密不可分,国内外研究者也从不同层面给予了解读。首先,从一门编程语言的基本生存条件来看,它完全满足低门槛、高上限、宽壁垒 [1]这三个要求。其次,从一门编程语言自身发展来看,在其历代版本更新与优化中,它始终坚持了三条核心原则:程序更易修改、项目更有意义、社交氛围更浓厚。[2]最后,从一门编程语言给使用者带来的用户体验来看,它操作简单、指令积木化,“放弃”语法、接口标准化,所见即所得、程序可视化等。这些优点反映在学生学习Scratch程序的过程中,他们最直观的感受就是“直观化编写流程”与“直观化调试过程”。本文尝试就这两个特点进行详细解析,并结合案例阐述其在教学中的应用。
概念解析
1.直观化编写流程
直观化编写流程是Scratch区别于其他代码式编程语言的一个重要方面,具体体现在多个方面。
一是指令积木化,不需要记忆抽象的程序语句。在Scratch中,指令集、数据与运算符及程序结构均以积木式呈现,免去了枯燥的语句记忆,无疑为使用者减轻了负担。
二是语法直观化,不需要记忆抽象的语法规则。Scratch的程序元素被具化成形状各异的积木,这些积木不仅直观易懂,而且将语法规则固化在积木的形状之中,只有接口“相洽”的积木才能被连接。这样别具匠心的设计,消弭了因各种语法规则而形成的隐形壁垒,学生几乎是在忘却语法规则存在的状态下,自然习得规范编程的方法。
三是程序流程化,不需要理解抽象的程序逻辑。脚本的搭建与执行均符合自顶向下的顺序,符合日常的做事经验,程序意图和功能不仅方便实现,而且易于理解。
这些特点带来的好处也是显而易见的:其一,学生的创作想法,通过自然语言表达可以较为容易地转化成Scratch编程语言,完成脚本搭建实现其创意;其二,为学生运用指令集按照一定的“程序”去解决问题提供了便利;其三,这种逻辑清晰的表达在一定程度上已经替代了流程图的功能,即便是小学生在阅读他人的脚本时也能较好地理解;此外,直观化编写流程的特点,对于学生体验抽象与建模的过程,促进抽象思维与可视化思维的发展都提供了极大的帮助。
2.直观化调试过程
Scratch直观化特点还表现在直观化的调试过程,其特点体现在:一是具有按“块”执行的功能,Scratch的每一个积木块都可以单击运行,直观地看到代码段的运行结果;二是具有分“段”调试的功能,在Scratch中,一个脚本可以完成多个功能,我们可以将积木块按功能分段,分段排查。
这种直观化调试体验不仅便于初学者快速接受和熟悉一门新的编程语言,对于熟练者也可以轻松自由地调试复杂程序实现各种创意,而直观的分块分段调试过程也有助于学生模块化思维的培养。
应用举例
本文以Scratch程序设计的部分课例教学为例,试说明上述特点在实际教学中是如何应用的。
1.利用“任务—指令—序化”程序设计思想理解直观化编写流程的本质
尽管Scratch具有直观化的编写流程,但对于新手而言,依然需要在教学中进行适当的引导,以理解这种直观化的脚本编写方式的实质。就基础教育阶段的程序设计教育而言,必须以儿童能够理解的方式来介绍程序设计的本质。我们认为,建立在“任务—指令—序化”概念之上的程序设计和面向对象的程序设计(对象—事件—行为)都可以称之为程序设计的“思想”。[3]实际上,Scratch直观化的编写流程充分体现了由任务到指令再到序化的脚本编写流程。
例1:《智能倒车》之方案获得
【情境描述】小汽车已成为我们生活中重要的交通工具,但倒车对于很多新手司机来说不是件容易的事,在给定车位和倒车引导线的情况下,你能设计出智能倒车系统吗?今天我们尝试利用Scratch来模拟实现这一任务。程序界面如图1所示。
图1 智能倒车
【案例解析】问题情境中有确定的条件即固定车位和倒车引导线,解决方案可尝试由学生讨论获得。学生讨论的结果大致可归纳如下:智能倒车系统要能使小汽车在倒车过程中自动调整方向,到达车位后可自动停止。这需要Scratch可以做出以下判断:小汽车左后侧碰到黄色线可左转;右后侧碰到黄色线可右转;后部碰到蓝线时停车;转换成Scratch语言就是“如果侦测到……就……”“接收到……广播……”按照这样的“程序”去解决问题,可能需要用到的积木块有:重复、条件、侦测、广播、旋转、停止等。由此可见,Scratch的直观化编写流程特点对于“任务—指令—序化”这一程序设计思想的实践也是很好的支持。
2.利用学习支架支持直观化编写流程的实现
学生不仅要理解直观化编写流程的实质,而且要真正熟练做到利用直观化流程编写脚本。这就需要教师采用某种方式来帮助学生梳理“任务—指令—序化”的内容,即帮助学生梳理问题解决的过程,并从自然语言的描述转化为Scratch的脚本编写流程。在这里,学习支架的使用就显得极为必要。从使用目的来看,学习支架可以分为接收支架、转换支架和输出支架。其中,转换支架用来帮助学生转换所获得的信息,使所学的知识更为清晰、易于理解,或使劣构的信息结构化,尤其适用于支持原理性和方法性内容的学习,如算法与程序设计类知识的学习。[4]我们利用任务分析表作为转换支架,帮助学生梳理任务元素和解决过程,使之与Scratch的直观化编写流程产生关联。
例2:《狐假虎威》之任务分析表
【情境描述】
任务分析表1
主题 老虎跟随狐狸出场
背景 森林
角色 老虎、狐狸、小猴、鸭子、小狗
角色行为 狐狸:从左边进入屏幕,停在合适位置。
老虎:在狐狸之后,从左边进入屏幕,停在合适位置。
操作步骤 1.打开“狐假虎威半成品”文件
2.为狐狸和老虎设置初始状态
3.实现狐狸从左边进入屏幕的效果
4.实现老虎从左边进入屏幕的效果
5.调整两者进入屏幕的时间差,实现“老虎跟随狐狸出场”的效果
6.测试与保存
任务分析表2
主题 小动物们逃走
背景 森林
角色 老虎、狐狸、小猴、鸭子、小狗
角色
行为 小猴:在距离老虎200单位时,发现老虎,发出信号并向右移出屏幕逃走。
鸭子:在收到小猴的信号后,向右移出屏幕逃走。
小狗:在收到小猴的信号后,向右移出屏幕逃走。
操作
步骤 1.为小猴添加脚本,实现上述角色行为
2.为鸭子添加脚本,实现上述角色行为
3.为小狗添加脚本,实现上述角色行为
4.测试与保存
【案例解析】狐假虎威是学生都很熟悉的寓言故事,学生用自然语言描述该故事完全没有问题,任务分析表通过对角色行为的分析与操作步骤的罗列,完成了自然语言与Scratch编程脚本之间的转换。在学生每次动手制作之前进行这种转换训练,很好地锻炼了学生的逻辑分析能力。事实上,这种自然语言转换为编程语言的过程,也是抽象与建模的过程,Scratch特有的直观化编写流程特点对于学生抽象与建模能力的培养大有裨益。
3.利用“分块”调试程序
例3:颜色侦测
【情境描述】通过颜色侦测,判断大嘴巴是否与豆子相遇。如相遇,广播被抓获,并计1分。有A生求助,其程序与小组内B生的完全一样,B生程序运行正常,他却没有成功。我检查了他的脚本(如图2),确实无误。问他:“分‘块’检查了吗?”他答:“能查的都查了。”再问:“侦测也查过了?”他茫然:“这怎么查?”问组内其他学生,均告不知。我示意全班一起看这个问题。“怎样单独调试某一侦测控件?”C生举手说:“我知道!”于是向全班转播A生屏幕,C生操作:将A生程序中的颜色侦测控件从条件中拉出,单击,控件右上方出现提示框“false”。我问学生是何故,再问:“如何验证A生的侦测是否正确?”他又将大嘴巴和豆子拖曳至一起,再次单击颜色侦测控件,仍然提示“false”。C生:“这就是大嘴巴不吃豆子的原因,这个侦测并不能起到判断相遇的作用,应该是颜色选取有问题。”他重新提取大嘴巴和豆子的颜色,再次单击颜色侦测,出现提示“true”,说:“应该没问题了。”测试程序,成功执行。至此,问题解决。
图2 A生的豆子脚本
【案例解析】因为色差较小的缘故,学生肉眼观察确实不易发现颜色不对。正是Scratch的“分块”调试特点,帮助我们“明察秋毫”,将这些原本很难发现的错误直观地展示出来。在平常的学习中,学生可能较多关注动作、外观等模块控件的“分块”调试,忽略了侦测等其他模块的应用。教师在教学中应多加提示,充分运用Scratch的直观调试功能,对我们调试程序很有帮助。
4.利用“分段”调试程序
例4:侦测之变量困惑
【情境描述】要求为飞行器添加脚本,使之可以在有限空间躲避若干无序飞行的障碍物,若飞行器被击中4次,游戏结束。在搭建飞行器的过程中,有不少学生都出现了共性问题:被1个障碍物击中后,游戏立即结束。其脚本如图3所示。
【案例解析】我先请学生将这段程序按功能分成3段:跟随鼠标移动,碰到障碍物侦测,游戏结束侦测。随后进行分段测试,飞行器能够执行跟随鼠标移动,操控程序没有问题。当健康度为0时,游戏可以正常停止,结束侦测也没有问题。显而易见的是,碰到障碍物侦测出了问题。为便于调试,我们将结束侦测模块断开,再次将飞行器移过障碍物,发现在此过程中,健康度一直在减少。问题找到了:从碰到障碍物到离开障碍物的这一瞬间,循环体内的控件会不停地执行。有了明确的问题,就可以想办法解决了:添加控件。直观的分段调试过程使得“自下而上的修补”这一看似随意的探索实验式学习方式,在带给学生舒适学习体验的同时,也获得了解决问题的方法。正如美国MIT终身幼儿园研究小组主任雷斯尼克教授在2012年TED主题演讲《让我们教孩子学编程吧》中指出,学习编程的意义在于“学习编程,并在编程中学习(Learning to code,coding to learn)”。
Scratch软件作为一款优秀的儿童编程工具,进入中小学信息技术课堂的时间并不算长,其教材教法仍有很多值得我们探寻之处。本文仅从Scratch程序之直观化编写流程与直观化调试过程的特点出发,试举例说明其在实际教学中的应用方法,以期抛砖引玉,共同提高。
参考文献
Resnick,M.,Maloney,J.etc.Scratch:Programming for All[DB/OL].http://cacm.acm.org/magazines/2009/11/48421-scratch-programming-for-all/fulltext,2015-10-01.
李艺,钟柏昌.重构信息技术课程——从经验选择走向思想投射[J].电化教育研究,2015(10).
钟柏昌.论支架理论视野下的局部探究教学模式[J].中国电化教育,2011(1).
(作者单位:江苏南京市天妃宫小学 南京师范大学教育科学学院 南京师范大学教育科学学院)