秦琦
信息技术学科核心素养包含了信息意识、计算思维、数字化学习与创新和信息社会责任四个方面的内容。其中,计算思维是指计算机科学领域内关于形式化问题解决的一种思想方法,包含了问题界定、抽象特征、建立模型和设计算法等方面的内容,它是信息技术学科核心素养的重要内涵之一,是信息技术学科思维的精髓所在,是信息技术学科能力的主要体现。而程序设计课程是培养学生“怎么像计算机科学家们一样去思维”的课程,《设计无人驾驶小车》是程序设计课程中的重要一课,其教学目标、教学指向均体现了计算思维的重要性。下面,笔者以此课为例展示计算思维在可视化程序设计教学过程中的应用思路和过程。
● 提出大任务,分解任务
课堂大任务:在可视化程序中实现无人驾驶小车功能。
教师设置生活问题情境,提出探究性问题“你想设计无人驾驶小车哪些功能”,以此调动学生的学习积极性,激发其学习动机。面对这样的任务,学生可能从操控性、安全性、智能化等方面进行发散性思考,如汽车感知到没油后会自动去寻找加油站或者汽车会自行规划路线导航……课堂在中师生共同理解和分析任务后,教师引导学生将大任务拆分出可管理、可实行的小任务。这就是计算思维中解决问题的思维,将复杂问题化繁为简,由外到内逐层分解,通过筛选、识别,进而保留可执行的小任务。最终,学生在课堂中分解出小任务:小车在马路上行驶、小车遇到行人或者其他障碍物会自动避障、小车遇到红绿灯会自主识别判断……在这一环节中学生充分体验、经历了问题的分解过程,学习目标更加明确,构建出无人驾驶小车功能的框架结构,教师可以在接下来的课堂中引导学生完成一个个小任务。
● 归纳梳理,建立模型
“感知小车在马路上行驶”是作为复习内容,再次巩固思维过程,并且挖掘深层信息,为本节课的思维展开进行铺垫。因此,如何引导学生抽象出解决问题的关键点,是课堂教学中的难点也是核心。为解决“感知小车在马路上行驶”这一任务,笔者构建了“生活语言描述—提炼关键词—转化—搭建控件”的学习流程,目的是让学生能将对现实生活场景的描述在可视化编程场景用脚本实现,初步建立抽象能力和构造能力。
学生最开始借助生活经验,用自然语言描述“小车行驶到马路边缘,会转弯”,但这样的语句计算机是不能理解、不能识别的,那怎样转化成形式化描述,让计算机识别并计算呢?笔者引导学生根据语句描述的信息来剔除不必要信息,提炼重要信息,找到了“红色‘虚拟传感器、碰到、左侧白色、右转”等关键词,但学生发现,这些关键词还是属于现实生活中的表达,仍然无法连接可视化编程场景中的控件。于是,笔者再引导学生对关键词进行归纳、分析,发现“红色‘虚拟传感器、碰到、左侧白色”这三个关键词表达了“探测、感知”的作用,而“右转”则表达了“决定、决策”的作用。
通过厘清关键词的过程,建立了有效的操作步骤:先探测再决策,也符合可视化编程场景中“先侦测再决策”的编程思想。这一过程将现实世界的问题进行抽象,成为计算机能够理解或实现的表达形式,也构造出了解决问题的框架,得到了解决问题的模型。
● 整理关键词,抽象事物关系
得到了方法模型,但表示探测作用的三个关键词“红色‘虚拟传感器、碰到、左侧白色”,还是不能直接在可视化编程场景中找到控件。计算思维中的抽象是省略不必要的细节,留下需要强调的环节的过程。所以,还需要引导学生进行“转化”,这时的关键点转为:在事物与事物的本质中找到可联系的相通点,因为事物的本质是事物本身固有的,决定事物性质、面貌和发展的根本属性。学生通过讨论,发现关键词中有“红色”“白色”这两个表现颜色的词语,挖掘到颜色这一本质属性,自然就和可视化编程中的“侦测颜色”控件联系上了。关键点解决了,再进行脚本搭建,实现自动化。
● 化归思想,寻求最优化方案
“感知行人”解决问题的方法模型是参考“感知小车在马路上”的模型:先探测后决策,用化归思想解决问题(如下页图1)。当学生掌握这一思想方法后,教师再启发学生运用所学方法自主探究解决更深层次的问题,分别用三种方法来实现无人驾驶小车感知行人后避障的功能,并比较三种方法的可行性,通过小组合作的方式运用计算思维达到知识巩固和迁移的目的。
学生在分析“感知行人”的问题时,会运用之前的模型来解决,即从“探测颜色”考虑,如小车红色传感器碰到男孩的上衣的颜色、小车的颜色碰到男孩头发的颜色、小车的颜色碰到男孩裤子的颜色、小车角色碰到男孩上衣的颜色……学生在运用“侦测颜色”控件搭建脚本进行调试的过程中,在使用“小车角色碰到男孩上衣颜色”脚本时,并不能实现无人驾驶小车感知行人后避障的功能。学生自主发现,要考慮碰到男孩多种颜色的可能性,用原有“探测颜色”思路来解决问题出现了不确定性。
接着,学生利用已有的知识和经验,提出用“碰到男孩角色”的方法来实现。在笔者的追问中学生能明确:颜色是男孩角色本身显示出来的特征属性,碰到男孩角色了,男孩显示出来的各种颜色也就考虑进去了。通过这样的分析,学生利用“侦测角色”控件,快速搭建脚本,经过调试实现了小车感知行人后避障的功能。随后,对“侦测颜色”脚本和“侦测角色”脚本进行对比,学生能说出使用“侦测角色”脚本的方案更加简洁、明了,考虑问题更加全面的优点,这体现了对学生算法思维的培养。
问题解决了,但通过观看视频,回到现实生活,学生发现,从安全性考虑,小车和男孩之间不能碰到,从而再次分析明确:小车和男孩之间要有一段距离,从两个角色的关系中又抽象出“可以探测距离”。距离是一个抽象的概念,还要进行具体化,用具体的数值来表示。课堂中,学生对距离值应该采用“大于、等于、小于”不明确,调试中出现了错误。当搭建的脚本出错时,调试中出现的问题是生成性的,调试也需要更多的思维能力,学生在这一过程中尝试诊断和修正,查找出错的缘由,设计调试脚本的“解决方案”,直到脚本能正常运行,从而理解了计算的过程,发展了计算思维。
随后,学生对“侦测角色”脚本和“侦测距离”脚本进行了对比,认为使用“侦测距离”脚本的方案更加合理。在这个过程中,学生将抽象方法搭建的脚本放到生活实际认知状态中检测是否与原来的设想一致,发现脚本匹配现实生活场景,从而得出正确的答案。
本环节,笔者通过三种实现方法,带动学生去发掘,去探索、对各种解决方案比较选优,去寻求更好的解决途径,这样不但可以提高学生分析和解决问题的能力,还可以尽可能逼近解决实际问题的模式。
● 构建知识体系,迁移应用
1.知识建构
结合本节课所学,谈谈如何将生活中的实际问题通过可视化程序设计来实现(如图2)。
笔者通过以上知识结构图的回顾,引导学生梳理本节课的主要内容,运用计算思维来解决问题,总结出解决问题的一般方法,从而建构出知识的方法模型,并引导出具体的学习方法(如图3)。通过这一流程,发现并确定了问题,分析了问题的构成要素,对问题进行了分析、分解,为问题的解决提供了相对有效的途径和方法,渗透了算法思维。
2.迁移应用
本节课构建出的知识体系和方法模型,同样适用下节课无人驾驶小车“感知红绿灯”的情境。教师可引导学生通过“先探测后决策”的模型以及“探测事物的哪个属性”来展开教学。而“探测事物的哪个属性”体现了计算思维的抽象,促使学生透过现象继续挖掘本质,抽象出事物的共同特征和属性,也就是下节课的难点和关键点,相信通过本节课的学习铺垫,下节课的解决问题会水到渠成。
总之,体现程序设计的“思想”和“方法”,实现学习程序设计的目的就是让学生学会解决问题,而计算思维提供了解决问题的思维,能拓宽学生的思路,因此在教学中有必要让计算思维成为学生应具备的基本能力。
基金项目:本文系江苏省教育科学“十三五”规划立项课题“指向计算思维的‘程序设计初步教学实践研究”(课题批准号:B-b/2020/02/159)研究成果。