刘锋
《普通高中信息技术课程标准(2017年版)》(以下简称《标准》)将计算思维作为信息技术学科的四大核心素养之一,这是本轮信息技术学科课程改革的最大亮点。编程教学作为信息技术教学的一部分,是实施编程教育的重要载体,它贯穿全学段,承担着落实四大学科核心素养的重要任务。不少专家给出了对“计算思维”的认识和解读,却鲜有培养学生计算思维的方法和具体的教学范例供一线教师参考。同时,笔者通过听课、座谈、研讨发现,一些教师对计算思维如何在编程教学中落地存在着困惑。究其原因,主要表現在对计算思维的理解有误区、对计算思维的落地不得法等方面。
● 厘清《标准》中计算思维的内涵
计算思维在编程教学中有效落地的前提是要厘清计算思维的含义,而对计算思维概念的理解在学术界一直存在着不同观点。《标准》指出:“计算思维是指个体运用计算机科学领域的思想方法,在形成问题解决方案的过程中产生的一系列思维活动。具备计算思维的学生,在信息活动中能够采用计算机可以处理的方式界定问题、抽象特征、建立结构模型、合理组织数据;通过判断、分析与综合各种信息资源,运用合理的算法形成解决问题的方案;总结利用计算机解决问题的过程与方法,并迁移到与之相关的其他问题解决中。”对《标准》中所描述的计算思维,在理解时可能出现的一些误区,现梳理阐述如下。
①“计算机科学领域”是定语,是说个体要“运用计算机领域解决问题的思想方法”,不是说“运用于计算机科学领域”,也不是说运用计算机科学领域的“知识”。计算机科学领域的思想方法有很多,如抽象、建模、流程、验证、迭代、递归、回溯、穷举、搜索、贪心、分治、优化、自动化、形式化、系统化、动态规划等。例如,去火车站寻求最优路径应用到了贪心算法的思想;分类管理照片,能较快查找所需照片,体现了“树”结构的思想;忘记密码中某一位数字,逐一试用所有组合的过程应用了穷举思想;等等。在这些活动中均体现了人的计算思维能力。
②“能够采用计算机可以处理的方式……”,没有说一定要用计算机处理。计算机处理问题的方式有对问题进行抽象、分解、建模以及形成解决方案等。例如,生活中两个多位数相乘,用到了“九九乘法口诀表”,其中的每一个口诀就是一个模块,体现了任务分解、模块化的思想;又如,在比较不同地块面积的大小时,先去测量、计算每个地块的大小,经历抽象、分解、建模,最后通过笔算也能解决问题。
③在“总结利用计算机解决问题的过程与方法”中,“计算机解决问题”是定语,总结利用的是计算机解决问题的过程与方法,并不是说一定是利用计算机解决问题才体现计算思维。例如,利用计算机解决问题的过程与方法有模拟、仿真、验证和优化等,总结这些过程与方法,应用于其他问题的解决,如应用二分法,模拟猜价格游戏、查字典等;又如,编写程序绘制函数曲线,模拟、验证函数图像等。
因此,计算思维是人的思维,是人用“计算机科学领域的思想方法”处理问题时的一种思维,但体现和提升人的计算思维也不一定要用计算机。换句话说,编程是培养计算思维的一种有效途径,但不是唯一途径;计算思维是人们解决实际问题的能力,但不仅仅指编程能力。
● 计算思维落地存在的问题与表现
1.简单问题复杂化
教学中忽视中小学生的认知水平和知识深度,存在简单地将部分大学知识内容下放、项目设置成人化、用晦涩难懂的术语解释复杂问题、用复杂信息量的例子讲知识等现象。例如,按照定义讲解数据的结构、变量的概念、递归算法,用时间复杂度、空间复杂度阐述算法的优化等。
2.重编码轻思想化
算法和程序如同硬币的两面,程序是算法的载体,编程用来验证算法。编程教学与算法思维的关系,就是把计算思维理解为处理问题时的一种思维方式,把编程语言理解为处理问题过程的形式语言,而编程则是推理活动(计算也是一种推理)。信息技术教学“回归编程”反映和强调的是一种应用计算思维求解问题的全局思想,不能简单地理解为“回归教编程”。然而,教学中存在强调程序的编写、忽视探究算法思想和应用的现象。例如,在学习用穷举法解决问题时,不探究其背后的思想;程序编写完成后,不启发学生优化进一步算法,不引导学生探究相关的密码安全问题等。
3.教学过程呆板化
教学方法传统、教学流程固化、先学后用等是编程教学中存在的突出问题。例如,在低年级学生用图形化编程学习时,仍用流程图描述算法,而不强调解决问题过程的全局观、设计观、步骤观和价值观等;在高年级学生用Python语言编程时,按照编程解决问题的一般过程开展教学,而不启发学生思考、探究和优化等。又如,在学习While语句应用时,先学语法知识,再让学生用知识解决问题。
4.拓展迁移弱浅化
在新知讲授完后,在举一反三环节,案例缺乏适度的拓展空间和梯度,简单的重复案例不利于计算思维能力的提升。例如,在学习用for循环编程计算“1+2+……+100”后,让学生练习计算“1+2+……+200”的值,而不去与高斯算法比效率,探究背后只是计算机运算速度快的原因等。又如,分治就是把大的问题分解成小问题,将复杂的问题简单化,在学习完分治的策略后,不去探究它可以应用的场景,以及应用该思想产生的价值等。
● 计算思维有效落地的对策与方法
1.创设条件激发学生兴趣,营造计算思维发展的环境
依据最近发展区理论,调动学生的积极性,发挥其潜能,通过创设情境和提示新旧知识之间联系的线索,可以帮助学生建构知识,从而轻松超越其最近发展区而达到下一阶段的水平。因此,教师在呈现教学内容时应创设故事情境,让学生在编程学习的过程中体会到乐趣、成就感,激发学习编程的兴趣,从而形成学习动机,突破重难点。例如,可以用与教学主题相关的经典趣味数学问题、游戏,或学生熟悉的应用情境,如在讲解穷举法时可选用韩信点兵、百钱买百鸡、水仙花数、推理判断谁说谎等。
2.借用简单问题说明抽象道理,激活学生的计算思维
建构主义理论认为,教师应把学生原有的知识经验作为新知识的生长点,引导学生从原有的知识经验中将已有的知识进行处理和转换,从而生长新的知识经验。因此,可以类比学生熟知的知识、经验,借助生活中的算法學习新知。例如,在学习选择结构时,类比“红灯停、绿灯行”等;在学习while循环时,让学生体会“吸一口气重复说同一句绕口令,直到腹腔中的气息用尽为止”。
建构主义理论认为,图式是人类认识事物的基础,图式的形成和变化是认知发展的实质。例如,通过地图比较,寻找A地到B地的最短路径,利用灯泡的亮、灭,绘出不同的物理电路图,掌握“与、或、非”等。
3.通过设计问题串、任务链等,训练学生的计算思维
采用启发式教学,朝着最终问题解决的方向,从学生易于理解的角度提出一连串问题,环环相扣推进教学。问题串的作用还包括:提出问题,发挥学生的主体地位,引导他们积极思考,做好问题的界定、抽象和建模;在讨论中把问题一步步引向深入,寻求合理的算法解决问题,并加深学生对内容的理解;启发学生发现规律、纠正和补充自己的认知等,促进学生自主构建知识,发展计算思维。
例如,设置以下问题展开学习,当所有问题解决时,排序就水到渠成了:①如何判断两个数的大小?②如何选出三个数中最大数?③如何选出n个数中最大的数?④如何找出余下n-1个数中最大的数?⑤如何把余下n-2个数按从大到小逐个输出来?⑥探究阶段,还可以结合程序引导学生思考,每个内循环都要比较n-1次吗?
建构主义理论的核心是以学生为中心,强调学生对知识的主动探索、主动发现和对所学知识意义的主动建构。因此,可以设置任务链,布置有一定梯度的任务,并通过微课、学案等给予学生必要的技术支撑,引领学生自主构建知识。例如,在学习绘制复杂图形时,设置如下任务:①绘制一条线段;②让小海龟转一定角度,再绘制一条线段;③让小海龟重复执行前两步一定的次数。
4.经历优化、拓展应用等探究活动,进一步提升学生的计算思维
通过举一反三、拓展应用,做好同类问题的解决,可以充分发挥计算思维的育人价值。因此,教师要善于启发学生的“疑”与“思”,通过进一步优化程序,培养学生的探究能力,提升其计算思维水平。例如,在应用穷举法解决百钱买百鸡时,各穷举对象的穷举范围为什么不用0~100?穷举对象用公鸡和小鸡,或者母鸡和小鸡组合,好不好?从而让学生理解,优化程序是为了减少循环的次数,提高程序的计算效率。又如,在学习迭代法、递归法解决斐波那契数列问题后,启发学生思考、质疑其算法优劣,通过实验、推理验证其想法。
● 结语
编程教学不只是教编程,更重要的是培养学生应用计算思维解决问题的思想,指导学生在解决实际问题中运用,在跨学科创新中迁移计算思维,体现计算思维的育人价值。在教学过程中,教师应根据需要设计出美妙的情境场、问题串、任务链、情感线……选择基于问题、基于项目、基于支架等的不同的教学模式,利用生活中的经验讲算法,用算法讲程序,引导学生自主构建知识,促进其思维的发展,从而让计算思维在编程教学中落地、生根、发芽。
本文系安徽省教育信息技术“十三五”规划2019年度课题“中学生计算思维培养与编程教学实践研究”(课题编号:AH2019211)的研究成果。