计算思维教学在小学信息技术课程中的探索与实践
万诗强
关键词:计算思维;信息技术教学;流程图;需求分析
中图分类号:G433 ? ? ? ?文献标志码:B ? ? ? ? ?文章编号:1673-8454(2019)18-0047-04
本文主要探究的问题是在小学阶段如何高效地培养学生的计算思维。笔者先从计算思维的定义、特点及其重要性出发,进而论述“需求分析引导+流程图梳理”教学法的作用,最后结合苏教版小学五年级信息技术Scratch课程教学课例,提出在运用“需求分析引导+流程图梳理”培养学生计算思维过程中的一些建议。
一、计算思维及其重要性
计算思维是指运用计算机科学的基础概念进行问题求解、系统设计以及人类行为理解等涵蓋计算机科学之广度的一系列思维活动。[1]
教育部印发的《普通高中信息技术课程标准(2017年版)》指出,计算思维是指个体运用计算机科学领域的思想方法,在形成问题解决方案的过程中产生的一系列思维活动。计算思维是信息技术学科素养之一,是信息技术学科特有的本质属性,也是现阶段提出的中小学核心素养在信息技术学科具体的学科表达。
计算思维本质上是人们理解自然系统与社会系统的思维方法和思维活动,是使用科学工具进行抽象模拟以寻求问题解决最优化方案的系统过程。从计算思维实践上来看,其包括组织、分析、简化、抽象、建模、递归、回溯等基本过程。[2]通俗来讲,就是将生活中的问题分解、抽象成计算机处理的问题的一种思维方式,其有抽象、自动化等特点。
如何培养小学生的计算思维呢?经过实践,笔者认为在课堂上可以通过“需求分析引导”的方法培养学生组织、分析、简化的能力,通过“流程图梳理”的方式培养学生抽象、建模、递归、回溯的能力。下面笔者将具体论述“需求分析引导+流程图梳理”教学法及其教学建议。
二、“需求分析引导+流程图梳理”的教学有助于培养小学生的计算思维
计算思维的最佳培养途径就是程序设计(编程)[3]。如何在小学阶段培养学生的计算思维呢?笔者建议使用“需求分析引导+流程图梳理”的教学方法,即教师通过自然语言引导学生将具体问题的需求分解成计算机可处理的子需求,对于复杂的算法逻辑运用流程图来形象化梳理的教学方法。
1.“需求分析引导”有助于培养学生抽象思维,更好地明确编程要实现的目标
具体来讲,需求分析引导实际上是教师根据本节课作品功能,引导学生进行需求分析的过程,这是一个比较抽象的过程。小学生五、六年级是抽象思维不断发展的关键期,需要多锻炼学生的抽象思维[4]。在实际的整班教学中,总有部分学生抽象思维较弱。让学生进行功能的需求分析,其实也是让学生对本节课需要实现的目标进行思考,有助于锻炼抽象思维。
2.“需求分析引导”有助于学生理解计算机科学领域的思想方法,为算法设计做铺垫
我们最终希望学生逐渐会以迭代、条件判断、递归等思维去分析问题进而解决问题。但这并不是一蹴而就的,学生不可能天生就有这种思维,需要教师基于学生现有知识去引导,教师引导学生进行抽象的需求分析的同时,也是在与学生以计算机算法思维探讨解决这一需求的方案,这一过程对学生后期设计算法很有帮助。
3.流程图是设计算法的好工具,能让学生的思路更清晰
流程图是需求分析所表述功能的进一步提炼和简化。教师借助流程图引导学生设计算法,让学生明白设计的算法需要考虑和注意的要点,如程序执行的顺序、变量何时赋值、变量何时读取等,这些要点都可以在教师和学生一起进行流程图梳理的时候探讨。流程图也是程序逻辑跳转的可视化表达,它是帮助学生理解程序执行顺序的重要工具,有利于学生掌握编程的重点,对于条件分支、循环逻辑、递归等难点突破也是十分有效的。[5]
4.流程图是自主编程的有利参考,也是小组合作的算法交流工具
学生是教学的主体,课堂上教师在帮助学生分析问题后,应该先让学生自主去尝试编程,可以给学生提供多种学习路径,如学案引领、小组合作、微课支撑等方式,在编程教学中无论是哪种自主探究方式,流程图都扮演着重要的角色。学案自主探究时,流程图能够帮助学生将编程指令(代码或控件)与流程图结构建立关联;编写复杂逻辑的代码时,学生思路有时候会混乱,这时流程图的箭头指向可以为学生指明方向;小组合作时,学生基于流程图的交流能够让小组成员统一编程思路,让课堂协作更加高效。
5.流程图是需求分析转为编程语言的过渡,有助于不同编程语言的迁移学习
如果把程序设计比作是武功的话,编程语言只是招式,而基于算法的计算思维才是内功心法。现阶段,小学主要是使用Scratch等图形化编程语言进行教学,而初中之后学生会逐步学习代码型的编程语言,如Python、VB、C++等,武功的招式变了,但不变的是内功心法。流程图就是基于算法的计算思维的形象描述,流程图的使用有助于学生今后学习新的编程语言。
三、实施“需求分析引导+流程图梳理”教学的建议
1.“需求分析引导”要基于学生现有的编程基础,围绕计算思维引导
需求分析引导学生分析问题的时候,要基于学生现有的编程基础提问,注重学生对程序功能的分析、表达的引导,可以让学生用特定的句式进行功能描述,尽可能简化语言的描述。
如2018苏教版小学五年级信息技术第2课《绘制角色》中,为了引导学生表达出需要实现的功能:“角色(蝴蝶)不停地在舞台上移动(飞)”,笔者是用“什么角色在干什么”这样的句式来引导学生分析的,学生往往回答“蝴蝶在飞”,本节课学生还没有学习过重复语句,这样回答是可以理解的。为了突出重点“重复执行”,笔者再次引导学生:“飞”其实就是用“移动步数”来实现的,那么“飞”一下可以吗,要“飞”几次呢?这个时候可以让学生自主探究,笔者之后小结“重复执行”的原理。
单纯给“移动步数”加上“重复执行”脚本看似简单,但要让学生真正理解重复执行的执行原理和优势并不容易,而这恰恰是培养学生计算思维的关键。所以笔者在一开始引导学生分析功能的时候就结合学生现有的能力,让学生先尝试实现点击绿旗依次动1次、2次、4次……提示可以复制。如图1是笔者引导学生理解重复执行的脚本演变。
这样学生很容易理解有限重复执行和永久重复执行。笔者这样设计引导问题,就是为了让学生理解重复执行的执行原理和优势,培养学生的计算思维。
2.“需求分析引导”的提问要有启发性,要由浅入深地诱导
教师提问引导学生分析需求时,如何提问很关键。教师的引导问题要将总需求分解为子需求,可以由浅入深地引导学生从编程的角度来看如何实现子需求,即将关键功能需求的描述字词与编程指令建立关联,如Scratch中“让角色消失”的需求就是“隐藏”控件实现的,“让两个角色协同完成某个功能”的需求可以用“广播”控件来实现。让学生明白如何以计算机执行的角度将一个大的需求问题分解。这样学生在以后遇到类似问题的时候也能以自上而下、分而治之的算法思維分析需求、解决问题。
如在《赛车游戏》一课中,笔者在引导学生观察案例后,引导学生分析出主需求——“让赛车(角色)自动地在赛道上行驶”。如何把这个需求分解呢?笔者先从简单的问题开始,提问学生“如何让赛车不停地行驶?”针对这个子需求,让学生谈谈用哪些指令可以实现这个“不停地行驶”功能需求,大部分学生能够想到“移动+重复执行”即可。学生尝试后会发现:此时的赛车不会自动转弯。这个时候就很自然地引出“自动行驶的关键是让赛车能够根据弯道(左/右)相应地(左/右)转弯。”然后进一步引导学生如何实现这个子需求。图2是笔者引导学生时的思维导图。
3.“需求分析引导”要重视学生解决方案的多样性,注重多种算法的比较
笔者在需求分析引导的过程中,往往让学生初步思考针对某个功能需求如何去实现。这个过程中,学生往往根据已学知识想出不同的解决编码实现方案,不同的解决方案在不同的需求下有不同的优缺点,这时候教师可以尊重学生的想法,给予学生一定的时间去实现。然后引出本节课的编程知识点,引导学生对比这两种方案的优缺点。这样学生反而能够更加深刻地理解本节课的重点。
如《动物表演》一课中,重点是让学生使用“广播和接收广播消息”来控制不同动物按照一定顺序表演节目。笔者在引导学生分析功能需求的时候,发现学生往往会想到用“等待时间”控件来控制角色的出场,笔者给学生2分钟用“等待时间”控件来尝试,笔者在表扬学生解决问题后,提问学生“老师现在是导演,我觉得第一位小猫的表演时间太短了,我要让它多表演5秒钟,可以吗?想想你们的程序是否会有问题?”很多学生很快就反应过来,后面每一个角色的每一个“等待时间”都要加5秒。笔者进而引出本节课的重点“广播和接收消息”能更好地实现角色按顺序演出的问题。
4.绘制流程图,注重程序执行跳转顺序的梳理
画流程图的目的是为了帮助学生理解程序,更好地梳理编程思路,课堂时间宝贵,不能为了画流程图而画流程图,那么如何让流程图不流于形式呢?教师应该帮助学生去理解流程图,尤其是要帮助学生梳理程序执行的跳转顺序。对于小学生而言,当程序出现多次重复迭代、多次条件判断等语句时,大部分学生的编程思路会有所混乱,对此笔者主要有两点建议。
(1)注重流程图绘制的规范化
在流程图中,箭头表示执行的顺序和方向,菱形表示条件判断,矩形表示要执行的指令,圆角矩形表示开始或结束。规范的流程图表示对于学生以后阅读流程图十分重要。
(2)将流程图中的跳转逻辑表示方法与编程指令建立关联
在Scratch中,“如果……那么……”在流程图中的表示为菱形框;“重复执行”语句的流程图语句一般会根据某个条件判断,有一个箭头回指等。这样在平时规范地渗透给学生后,学生就可以将流程图的判断逻辑、重复逻辑映射到对应的编码实现。有利于学生以清晰的思路完成程序的编写,也有利于学生今后学习新的编程语言。
如在《穿越迷宫》一课中,有多个子需求:“如果小猫碰到鼠标就跟随鼠标移动”“如果小猫碰到黑线就返回起点”“如果小猫碰到终点角色就获胜”。笔者在教学中发现大部分学生能够用Scratch顺利搭建出条件判断语句,但学生往往将如果语句直接拼接在绿旗启动的下面,此时的程序功能就无法如学生预期的那样执行了。出现这样的问题很正常,是因为学生对于程序执行的顺序理解不够深入,此时利用流程图帮助学生理解程序执行的顺序是否有效。在流程图中“重复执行”的回指箭头可以帮助学生理解游戏中的这些条件判断需要不断地进行,所以在编写的脚本中,如果语句需要放在一个重复执行里面。流程图在这里起到“一图胜千言”的效果。
5.“需求分析引导”和“流程图梳理”引导要结合使用,灵活变通
“需求分析引导”和“流程图梳理”并不是泾渭分明的两个环节,而是可以随时融合在一起的。流程图的使用要根据实际情况而定:①学生还不太熟练或者编程的算法比较复杂时,教师可以引导得多一些。②学生对于编程已经达到一定的熟练度,教师可以放手让学生自主描述、绘制流程图,最后再编写代码。这在练习课时比较常用。
如《赛车游戏》一课中,引导学生分析出“自动行驶的关键是让赛车能够根据弯道(左/右)相应地(左/右)转弯”这个子需求后,由于涉及“重复执行和判断语句”等复杂的逻辑,教师可以和学生在板书中一起逐步绘制流程图。
6.编程教学更要注重过程性评价,鼓励编程过程中养成调试程序的习惯
计算机程序的运行是一个逻辑极其严格的自动化过程。这就导致程序中如果有一个小小的逻辑错误,往往就会导致程序的结果与预期效果相差很远,可谓“失之毫厘,谬以千里”,所以编程需要反复调试。但课堂上学生在编程时,往往因为时间有限来不及仔细调试,这就要求教师在对学生作品评价时更要使用过程性评价。 除了对学生程序功能是否完成做评价之外,教师更要注重对学生在需求分析中的表述、绘制的流程图、学生编写的脚本等多个方面进行评价,以鼓励性的评价为主。此外,对于常见的编程失误,如初始化考虑不周、逻辑判断写错等问题,教师要细心指导,鼓励学生在编程的过程反复运行调试程序,观察学生的编程习惯,对于有自主调试程序习惯的学生要多表扬。
四、结束语
计算思维是一种抽象的思维,它的特点是抽象、自动化。如何在小学阶段培养学生的这种思维呢?笔者根据教学经验,提出的“需求分析引导+流程图梳理”的编程教学方法,可以将这种抽象层面思想进行形象化的表达。这对于小学阶段的编程教育是十分有效的,此外这种方式可以延伸到更高一级的编程教学中,为学生今后的编程学习做好准备。
参考文献:
[1]Wing J M. Computational thinking[J].Communications of the ACM,2006,49(3):33-35.
[2]张立国,王国华.计算思维:信息技术学科核心素养培养的核心议题[J].电化教育研究,2018,39(5):115-121.
[3]车敏,安利,张红梅.计算思维能力培养在程序设计课程中的落地实施[J].计算机教育,2017(4):9-11.
[4]陈彦垒.小学儿童学习与发展的心理分析——基于儿童学习动力不足问题的思索[J].教育导刊,2013(7):57-60.
[5]胡文科.学习流程图,发展高阶思维——例谈流程图在小学高段信息技术学习中的使用[J].中国信息技术教育,2016(7):37-39.
(编辑:李晓萍)