指向计算思维培养的“程序设计”教学
2022-05-30谈海亚
谈海亚
摘要:计算思维是迎接与适应信息化社会发展的一项重要技能,是信息科技课程要培养的核心素养之一。在初中学段,“程序设计”教学是计算思维培养的重要途径。从计算思维的“抽象”和“自动化”内涵视角,架构(微)项目设计、问题分解、抽象建模、設计算法及评估编程等环节的“程序设计”教学框架,并以《设计垃圾分类模拟小游戏》一课为例具体说明。
关键词:计算思维;程序设计;初中信息技术;《设计垃圾分类模拟小游戏》
一、指向计算思维培养的“程序设计”教学架构
计算思维,指个体运用计算机科学领域的思想方法,在问题解决过程中涉及的抽象、分解、建模、算法设计等思维活动。在日新月异的信息化社会,计算思维是迎接与适应社会发展的一项重要技能,与“读、写、算”能力同等重要。为此,新课程背景下,如何发展学生的计算思维,成为信息技术学科教学的新诉求。
纵观信息技术课程,程序设计是学科的核心内容,也是最接近计算机工作原理的内容。同时,其中的算法与编程等内容的学习关联学生抽象逻辑思维、创造思维的培养,是计算思维培养的重要途径。但是,传统的程序设计教学常囿于语法知识及内容单一的枯燥训练中,无法企及学生计算思维的培养。
有学者将计算思维的本质特征描述为抽象(Abstraction) 与自动化(Automation)。具体而言,抽象是以抽象思维的方式,将现实生活中的问题转换为计算机可以识别的模型化问题。自动化是计算机根据预设的算法、程序自动执行任务,是计算机工作原理的重要属性。显然,抽象是方法,包含了问题分解、抽象建模及算法思想等思维活动;自动化则是结果,包含了编程、调试、评估等思维活动。
由此,运用《义务教育信息科技课程标准(2022年版)》提倡的项目学习方式,架构“程序设计”的教学思路为(微)项目设计、问题分解、抽象建模、设计算法及评估编程等五个环节(如图1)。实际教学时,每一环节虽有先后次序,但环节之间又需要不断地交叉和融合、关联和渗透。
二、指向计算思维培养的“程序设计”教学实践
下面,以《设计垃圾分类模拟小游戏》一课为例,具体说明指向计算思维培养的“程序设计”教学。
(一)(微)项目设计
(微)项目设计即确定项目主题,关键是创设贴近学生生活实际的任务情境。(微)项目设计创设的任务情境,区别于小学阶段以课时内容为指向的驱动任务,更具综合性、实践性、趣味性和创新性。
《设计垃圾分类模拟小游戏》一课的项目主题为“垃圾分类”,教师创设了如下任务情境:
为打造美丽校园,学校准备启动“垃圾分类,保护环境”主题活动。为了让更多的同学熟悉垃圾分类并准确进行垃圾投放,现需要开发设计一款简单明了的垃圾分类模拟小游戏,提供的部分素材见图2。
(二)问题分解
问题分解就是把一个复杂的实际问题分解成若干可行性更强的小问题,通过聚焦小问题、解决小问题,实现整体问题的解决。这既是自上而下的设计方法,也是化繁为简的思维抽象和创作过程。
教学中,略显粗放的项目任务“设计垃圾分类模拟小游戏”往往让学生一头雾水、无所适从。为此,师生需要共同提炼出项目的总问题,如:围绕“垃圾分类”主题,如何完成一个模拟游戏的设计?随后,师生进一步把总问题分解为若干个小问题,如:垃圾分类模拟游戏的场景是什么?游戏中出现几个角色?游戏的规则是什么?每个角色负责完成哪些功能?如何结束游戏?
经上述小问题的分解和梳理,“设计垃圾分类模拟小游戏”的项目任务就分解为:香蕉皮、旧电池、旧书籍等垃圾随机出现、落下;垃圾箱在上下左右移动中要变换不同的造型来准确收集垃圾;等等。
(三)抽象建模
本环节需要通过抽取类似(抽象)的这一方法,剖析问题本质,消除自然语言中的二义性,形成可计算的数字代码并建立模型。其中,抽象作为科学研究的重要方法,也是计算思维的本质。学生虽经历过数学学习中的抽象,但面向计算机科学的抽象仍然是一个学习难点,尤其是面向对象的程序设计。
例如,“设计垃圾分类模拟小游戏”项目中,“垃圾箱”角色要上下左右移动。以“垃圾箱”向右移动为例。学生眼里看到的是“垃圾箱”正向地往右走,就像生活中人物往前走一样。此时的抽象,就是要把生活中“向前走”的认知经验转化为移动时的“方向”和“步数”两方面的问题。而关于方向的抽象也是学生学习的难点。为此,借助数学中的角和角度来表示、说明。在消除了自然语言中关于“向前走”的二义性后,“垃圾箱”向右移动的问题就迎刃而解,形成了可计算的数字代码——面向90度,将x坐标增加10。
学生经历上述行走问题的抽象和实践体验后,类似的问题都可迎刃而解,适用于任何角色,而无关角色的名称、大小、外形等。
建模是对事物或过程进行抽象后的形式化的表现,也就是构造抽象的模型(模型有很多种表现手法,如图形、代码、表格等)。建模就是让学生经历分析问题、解决问题的过程,也是为后续设计算法做铺垫。
例如,“设计垃圾分类模拟小游戏”项目要实现对旧电池垃圾的分类并积分。经抽象后,发现既可以是“旧电池”碰到“有害垃圾箱”触发“隐藏”命令并积分;也可以是“旧电池”被“有害垃圾箱”碰到触发“隐藏”命令并积分。即有些动作行为既可以让角色1(旧电池)去完成,也可以让角色2(有害垃圾箱)去完成。以前者为例,借助程序设计的选择结构,通过关系符号(>、<、=、≥、≤、≠)建立相应的关系表达式,并设置变量,从而形成具体的积木代码模型(如图3)。
学生实践后发现,游戏如果要进一步迭代升级,当出现更多不同种类的垃圾(果皮、剩菜……)时,只需要复制“旧电池” 角色的脚本代码,稍作修改,就能重复使用。
(四)设计算法
算法是解决问题的方法和步骤,更是编程的灵魂。设计算法,即对要解决的问题进行分析,拟订出一套解决的方法与步骤。于学生而言,对抽象的算法概念及同一问题可以有不同的算法,不同的算法在解决具体问题时又常有优劣之分等,这倒不是很难理解,但要依据实际问题设计算法,常常需要经历并准确调用程序设计的三种逻辑结构:顺序结构、分支结构和循环结构。
例如,“设计垃圾分类模拟小游戏”项目中,判断游戏是否继续、垃圾(旧电池等)是否碰到地平线、垃圾是否碰到垃圾箱要用到分支结构,垃圾下落、垃圾隐藏、积分增加是顺序结构,垃圾重复下落是循环结构。由此,学生得到图4所示的程序设计流程图。
(五)评估编程
评估编程是编程的最后一个环节,主要是对算法作出评估并编写、调试程序代码实现自动化。此时,学生思维由先前的抽象转化为操作数字代码,并体验计算机的自动化执行,感受编程的神奇魅力。实际教学中,选择门槛低的积木式编程语言,便于学生完整经历垃圾分类模拟小游戏的具体编写、调试和评估。
编写、调试程序时,学生难免会遇到各种问题。比如,游戏每一次重启后,各角色需回到初始状态,学生最初并没有角色“初始化”的概念,而经历调试后发现角色都“跑偏”甚至找不到了,这才建立起角色“初始化”的概念以及掌握如何进行代码设置。又如,对旧电池的分类,有学生反映明明写了正确的判断(分支)语句,却调试失败,究其原因是缺少循环语句下的多次判断。由此,编写、调试成为一个实践求证的学习过程,学生常常需要在试错、迂回中作出修改,继而生长思维。
而评估过程,又往往会发现项目的迭代升级空间,进而创造出新的项目。比如,有学生提出,为了增加游戏的紧张感,可以设置倒计时;垃圾分类可以设置不同的游戏场景、角色、玩法(积分型、迷宫型)等。
在日新月异的信息化社会,发展学生的计算思维,让他们能够“像计算机专家一样”思考信息化问题,是新课程背景下信息技术教学的价值担当。“程序设计”教学是计算思维培养的重要途径,应努力让学生在真实的情境中学会用计算机处理问题的方式分析问题、解决问题,进而掌握编程思想,发展计算思维。