孙秀芝 浙江省杭州市笕桥小学
计算思维是信息科技课程要培养的核心素养之一,基于图形化编程软件的程序设计教学是发展计算思维的重要途径。但程序设计教学中存在着一些较为抽象的概念,给处在形象思维向抽象思维发展阶段的学生带来认知上的困难,也给教师开展这些抽象概念的教学带来了挑战。笔者在参与区域相关课例观察、研讨的过程中发现,部分教师在课堂上难以讲清程序设计中的抽象概念,主要表现有“重程序实现,轻抽象过程”“重任务梯度,轻概念应用”“重指令新授,轻知识梳理”。针对这些问题,笔者提出“三重关联”策略,即“关联操作体验”“关联多样运用”“关联前后知识”,采用合适的教学策略改进当前的程序设计教学,以期让抽象概念的教学不再困难,让程序设计课更符合学生的认知规律。
忽视学生知识发现的过程,没有为学生理解抽象概念提供足够丰富的表象,是造成教学过程中“轻抽象过程”的原因。虽然部分教师在教学“变量”这一抽象概念时,列举了生活中“抽屉”“盒子”等实例,但是生活经验和程序设计经验之间依然存在断层,在遇到新的问题时,学生依然无法确定应该设置哪一个量为变量,以及如何使用变量。
对于程序设计的初学者来说,在设计解决问题的算法中使用“变量”是有一定难度的。例如,在设计一个能实现随机出题的问答程序中,学生对该问题中涉及哪些具体量,以及哪一个具体量可以设置为“变量”,缺乏清晰的思路,也缺少解决的策略。教师可引导学生从具体的实例出发,建立表象,在实践操作的基础上再进行抽象,化解难点。
教学案例:《列表存储》一课的“变量”提取过程。
教师提供随机出题的问答程序,请学生初步体验程序是如何运作的,在明确步骤后,请学生多次运行封装好的程序,结合学习单(如下页表1)说说自己的发现。
表1 随机出题问答程序中的变量
通过操作体验,学生发现程序每次所出的“题号”是随机变化的,并且“题号”就是问题列表的编号,也是答案列表的编号,因此可以设置一个变量i,用来表示列表的编号。另外,变量i由于是个随机变化的量,因此可以根据题目的数量确定最大值、最小值。
通过这样形象直观的实践体验,学生经历了发现变量、提取变量的过程,真正地体会到了变量在其中的作用。经过这样的问题分析过程,学生的学习策略也得以提升,在后面提取变量的过程中也能运用列表的方式进行问题的分析。
课堂中,基于一个完善的程序作品开展教学,往往会涉及多个抽象概念。例如,在前面所提到的随机出题问答程序中,既有列表、变量,又有随机数。在将这些概念运用到算法设计中时,学生会无从下手,也给教师教学带来困难。此时,教师可以采用分布引导的策略,将多个抽象概念分散到每一步的教学任务中,引导学生逐个突破难点。
教学案例:《列表存储》《遍历列表》教学内容重组。
将教材第10课《遍历列表》中以文本导入方式添加列表数据这一内容前置,与第9课《列表存储》进行整合,将随机出题的问答程序设计成一个两步走的学习任务(如表2)。
表2 随机出题问答程序“两步走”教学策略
这样的分步处理,更符合学生的认知规律,学生在一步步的实践中感受到程序作品从封闭走向开放,通用性逐渐变大。分布引导的方法可以有效地分散难点,让问题的解决策略从具体走向一般。
在概念教学的巩固阶段,聚焦在单一维度上的教学拓展,没有将概念还原运用到生活场景中去,是造成教学“重建构,轻应用”的原因。如果学生没有将概念应用到新的问题解决中,或没有感受到新的概念在解决旧问题上的优势,或没有体验到概念的不同用法,那么新的概念将难以被牢固地纳入到原有的知识结构中。
迁移是指人们在一种情境下所获得的知识或技能,可以影响到随后学习的另一种知识或技能。根据学习的情境,又可以分为近迁移和远迁移。近迁移强调具体的概念、技能、事实、程序,远迁移则更强调一般的、抽象的知识。教师可以设计一些表面特征、结构特征都发生改变的新情境,让学生的远迁移能力得以发展。
教学案例:《过程调用》一课远迁移情境设计。
在《过程调用》一课中,教材从正方形旋转产生的“花团”图案引入,介绍“过程”的概念,课后练习也是编写一个绘制正五边形旋转产生的“花团”图案。两个任务情境表面上看虽有不同,实则结构相似。不少教师在课堂中局限于此,没有创设更多样化的情境,不利于学生进行远迁移。此时可以作进一步拓展,跳出几何图形,将教学情境与生活中不同场景进行关联,如音乐程序作品等,让学生思考此种情景下如何运用“过程”去解决。
此外,生活中一些运用到模块化思想的案例,也是“过程”概念的延伸。例如,中央空调的控制面板,一个按钮就可以调用一个过程;模块化房子Coodo,每一套都可以独立存在,如果嫌空间小还可以通过简单的连接,将多个组合在一起。教师列举此类案例,可以促进学生将所学的“过程”概念运用到不同生活场景。
关联各种情境,目的是让学生不仅产生巩固概念的近迁移,更能还原概念到不同的生活场景中,实现概念学习的远迁移,进一步丰富对学科思想的认识,从而提升学生的学科核心素养。
程序设计中解决问题的方法有多种,学习完新概念,并用以解决旧的问题,一方面在不同场景下进行了运用,另一方面可以让学生感受到新概念解决问题的优势。
教学案例:《打靶游戏》的新旧解法。
游戏中,靶子在垂直方向上来回不停地移动,在没有学习“变量”概念之前,学生会使用“移动<10>步”“将y坐标增加<10>”等指令表示角色的位置变化。学了“变量”后,教师引导学生设置了方向变量,用0、1两种数值表示两种不同的状态,乘以180倍就可以得到0(向上)、180(向下)两个不同的方向(如图1)。以往,学生接触到的变量,通常表示分数、个数等数量,而本例中的变量表示的是一种非此即彼的状态,即逻辑判断,这是“变量”这一概念在用法上的创新。
图1 打靶任务的两种解法
在程序的调试过程中,学生会进一步体会到使用“变量”解决方向变换问题的优越性。在旧解法中,学生需要不断地手动调试重复执行的次数或坐标值的增量,而设置方向这一变量,再去判断坐标值是否超过y坐标的临界值则不需要频繁调试,灵活性更强。
旧题新解,是用新学习的知识去思考和探讨以前的问题,寻求创新解决方案。而前面所述的将学过的知识在新问题中的运用,则是新题旧解。两者都是提高概念学习效率的有效方法。
忽视学生知识结构的建立,教学设计中缺少连接新旧知识的任务设计,是造成教学知识点零散化倾向的原因。在面对综合性的学习任务时,零散化的知识结构不利于学生分析问题,理解本质。因此,在看似不同的各个抽象概念之间建立联系,让学生在比较、推测、实验中梳理它们之间的区别与联系,可以帮助学生在头脑中建立概念网络,从而深化概念理解。
在编程工具中,各类指令众多,学生不可能将所有的指令都记在头脑中。教师可以设计具有一定综合性的任务,进行整合式教学,从而揭示不同指令之间的区别和联系,帮助学生举一反三。
教学案例:《迷宫游戏》中角色的移动。
在该游戏中,角色小猫、角色炸弹涉及移动(如下页图2)。
图2 角色移动的关键概念——坐标
角色小猫——动作1:键盘上的方向键可以控制小猫上下左右移动;动作2:程序开始时,小猫从起点出发;动作3:小猫如果碰到绿色边缘,则返回起点。
角色炸弹——不定时地出现在道路的某几个位置上。
学生使用了“移动<10>步”指令设计小猫的动作1,发现还需要结合“面向<90>方向”和“将旋转方式设为<左右旋转>”以达到理想效果。而在设计动作2、动作3,以及炸弹的移动时遇到了困难,因为“移动<10>步”指令无法锁定角色的准确位置。
此时,教师出示舞台的坐标系统,介绍坐标系统中X轴、Y轴的范围,以及坐标原点的位置,并拖动舞台上的角色到不同的位置,请学生观察坐标位置的变化。学生发现每一个位置都与一个坐标值对应,并且角色上移则Y坐标增加,下移则减少;角色右移则X坐标增加,左移则减少。
因此,角色小猫的上下左右运动还可以使用“将y坐标增加<10>”“将x坐标增加<10>”指令来做,返回起点可以使用“移到x:<0>y:<0>”指令;角色炸弹则需使用“移到x:<0>y:<0>”指令。
案例中,众多移动指令背后的关键概念是坐标,坐标的位置变化就是角色运动的本质。只有把握住关键的概念,将一系列相似的知识点进行比较和联系,才能解一题而通一类。与此类似,角色旋转的关键概念是旋转的方向、角度和中心点,也可以参考这一策略开展教学。
在程序设计教学中,“变量”“列表”“过程”“带参过程”等多个概念之间有着本质的联系,教师可由旧知入新知,引导学生在原有知识结构上经历新知识的发现过程,揭示前后所学概念之间的本质联系,从而促进学生学科知识体系的构建。
教学案例:《带参过程》一课中“变量”与“过程”的联系(如图3)。
图3 从“过程”到“带参过程”的演变
第一组图形,是边长逐渐变长的3个正方形,教师带领学生回顾上一节课学过的“过程”,可以定义正方形1、正方形2、正方形3。那么“带参过程”如何理解呢?此时教师请学生观察三组脚本的变化,学生会发现移动步数(即边长)是在发生变化的,因此边长就是一个变量。教师根据这一发现介绍“带参过程”中的参数,实质上就是一个可以由用户输入自定义数值的变量。
通过这样的观察、体验活动,学生将“变量”这一概念与“带参过程”前后联系起来,知识结构性得以增强。
类似地,第二组图形也是先抓住变化的量,确定重复执行的次数(即边数)是一个新增的变量,因此需增加一个参数“边数”。
经历这样的知识发现过程,学生对概念的理解进一步深化,更容易形成结构化的知识体系。