论文部分内容阅读
摘 要:计算思维是信息技术学科核心素养的根基,是信息社会数字公民的基本素养。编程教学是计算思维培养的主要途径,被广泛引入到中小学信息技术课程中。但目前中学阶段的编程教学普遍存在重编程语言学习、轻思维训练的问题。本文从计算思维概念与当前中学编程教学现状入手,提出实践中应注意的评价计算思维能力的四个维度,进而提出中学生计算思维培养的教学策略,可以为中学信息技术的编程教学提供借鉴。
关键词:编程教学;计算思维;教学策略
一、计算思维概念界定
卡内基·梅隆大学的周以真教授于2006年提出“计算思维”的概念:“是个体运用计算机科学的基础概念来完成问题求解、系统设计以及人类行为理解等涵盖计算机科学之广度的一系列思维活动”[1]。教育部2017版新课标中提出的计算思维的概念是:“指个体运用计算机科学领域的思想方法,在形成问题解决方案的过程中产生的一系列思维活动”。
这些思维活动都强调分析问题、解决问题过程中的思维活动:抽象与建模,即形式化、模型化的思维活动;其次,这些思维活动通常要运用计算机科学领域的思想方法:例如数据结构化、递归、迭代、效率分析等等,所产生的解决方案可以用计算机代理执行。因此,计算思维实际上结合了数学、工程学、计算机科学的思维方法,是学科核心素养的核心及关键要素,是一种从计算机角度出发看待问题、解决问题的思维,显著影响着信息意识、数字化学习与创新以及信息社会责任这三个要素发展的质与量,决定了学生学科核心素养的发展水平[2]。
二、中学编程教学现状
目前我国中学信息技术学科教学存在重视知识与技能的学习,忽视知识技能的内在逻辑之间的联系的现象,课堂教学常常授鱼而不授渔。常运用创设情境、任务驱动、项目式学习等教学策略,但着力点往往放在学生掌握技能完成任务,却忽视了知识技能的内在联系,使学生无法深入了解问题的本质。
从2003版课标的教学实践来看,中学信息技术的教学内容偏向于应用软件的使用,广大中学信息技术教师困于固化的思维,面对新课标,对教学内容变化的存在一个逐步适应的过程。一方面,基于旧教学思维习惯,面对编程教学这一新教学内容,教学重点往往落在概念讲解和编程语言的学习方面,教学内容多围绕表达式和程序语言的三大结构,最多涉及函数模块的定义来展开。对计算机运行原理、常用算法思想、“分析问题-建立模型-解决问题-评估回顾”这一思维过程没有得到体现。造成的结果就是学生学习效果浮于表面,较难发展出解决问题的能力,面对新问题无从下手。另一方面,适合中学生编程学习的教材也良莠不齐,信息技术教材不是国家统编教材,编程解决问题又是新教材扩展最多的教学内容,各地教材五花八门,广大教师面对这一变化,缺乏有效经验应对。
三、中学生编程学习中的计算思维能力的评价维度
计算思维本质上是人们理解自然系統与社会系统的思维方法和思维活动,是使用科学工具进行抽象模拟以寻求问题解决最优化方案的系统过程,从计算思维实践上来看,其包括组织、分析、简化、抽象、建模、递归、回溯等基本过程[3]。
基于对计算思维概念的界定和对计算思维本质的认识,现阶段中学编程教学中,评估学生计算思维能力的标准应重点关注以下四个维度:
(一)变量界定能力
计算机能够快速、自动化地解决问题,依靠的是冯诺依曼体系:二进制存储程序与数据,控制器与运算器程控处理与计算,数据流程遵循“输入—计算处理—输出”的过程。这就要求学生能够确定问题中的实体、属性及其联系,用合理的数据结构存储,用合理的标识符号表示。明确问题的已知量和未知量与基于这些变量的数据结构所能够施加的数据操作。明确哪些数据需要外部输入,组织问题的分解并输出。变量界定的过程是一个对现实世界数据特征的分析抽象的过程,是问题分解与归纳的前提。
(二)问题的分解与归纳能力
能够直接解决的问题都不是问题,复杂的模糊的问题可以根据需要分解成简单问题解决,或者归纳问题的本质,然后套用合适、准确的模型来解决。对问题分解的方法要会具体问题具体分析。对于不同功能模块,能明确功能模块的规模,接口参数。对于求解步骤存在先后依赖关系的问题分解,要能够用流程图、甘特图等工具描述子问题解决的先后次序与流程跳转逻辑关系,更高的要求是能根据不同阶段状态变化归纳出状态转移方程。对于具有最优子结构的问题,按问题规模大小分解,采用递归或递推的方式求解,能够明确问题的边界。对问题的分解,做到子问题相互独立,完全穷尽。对同类问题,能够归纳汇总,举一反三,建立问题求解模型,提出一般化的解决方法。
(三)算法评估能力
有评估算法的可读性、正确性、健壮性等是否满足解决问题需求的意识。同一问题的解法可能多种多样,要会评估问题的数据规模,根据数据规模选择相应的算法,如当问题规模较小时,选择暴力枚举代码实现更简单,但问题规模太大时,必须选择二分、三分等分治算法才能有效降低时间复杂度。当采用递归方法求解时,会评估递归次数与堆栈溢出的关系。会分别从时间复杂度、空间复杂度和代码复杂度等不同角度评估算法是否最佳选择。算法的评估能力需要学生有较好的数学基础。
(四)代码编写能力
既然是编程解决问题,必然要求学生有良好的代码编写能力。要求学生能够将不同工具描述的算法及时高效地转换成具体编程语言写的代码,代码是否能够根据模块功能划分或问题求解需要做到模块化。代码的可读性如何,是否有必要的注释或说明文档。代码编写能力考验学生编程语言语法规则的理解和熟练程度,考验常用算法的熟练运用能力,也反映学生的逻辑思维能力。
四、编程教学中的计算思维培养策略
目前中学生的编程教学,在初中阶段的教学工具,代码编程与积木拖拽式的编程工具都有老师在应用和研究,且有研究认为积木式编程对计算思维的培养提升效果更明显[4],但图形工具本身也有局限性,影响学生的代码能力训练,学生进入高中都要回归到代码编程。因此我的课题组研究确定在小学阶段采用积木拖拽式编程教学,初中阶段就开始代码编程教学。针对中学生编程学习中的计算思维能力评价的重点维度,提出以下方面的教学策略。 (一)教学中重视学生对计算机运行原理等编程学习前置知识的理解
在编程教学的前期,重点完成前置知识(包括各类型特别是数值型数据编码方法与二进制,冯诺依曼体系结构等知识)的学习。这类基础知识理论性较强不好理解,以往教学中大多数老师仅是简单这时学生对计算机运行原理有了感性的认识,能够理解到所有能够借助计算机解决的问题,都要把相关的数据存储在计算机内存中,通过控制器与运算器在程序的控制逻辑下逐条运行,在二进制的形式下模拟现实世界的问题解决过程。学生有了数据存储的意识,了解数据在内存中的存储形式,才会在界定各类变量的时候,采用合理的数据类型和数据结构保存数据,才能够做到对变量与数据结构的知其然又知其所以然。
(二)注重思维活动可视化的训练
计算思维活动是高阶的思维活动过程,从计算思维在编程教学活动中的应用状况来看,“抽象”“分解”“建模”“归纳”等思维活动都可以用可视化的方法呈现。例如“实体-联系图”可用于描述问题中实体之间的联系结构,“算法流程图”常用于模块化分解问题解决过程中的流程控制,“拓扑结构图”用于描述对象间的继承、迭代关系,这类图示工具以可视化的形式呈现思维过程,有利于学生方便地进行知识网络的建构,积累解决问题的经验,也有利于教师了解学生的思维品质发展过程。可视化技术对计算思维培养方式基本遵循了“隐性思维显性化—显性思维工具化—高效思维自动化”的规律[5]。因此在编程教学中不能忽视以可视化的方式对“抽象”“分解”“建模”“归纳”等方法的训练。
(三)注重一题多解对评估算法的优劣能力的影响
对同一道题,可以暴力枚举,可以搜索回溯,可以递推递归,不同方法有不同的时空效率。当前中学生普遍一周一节课的信息技术课程,实际只能开展普及性的编程教学,有限的课时条件下让学生整体理解各种算法拥有实现一题多解的能力是不现实的。但教师可以自己一题多解,并且让学生比较不同解法的特点,特别注重对比时间与空间复杂度,让学生掌握基本的评价标准与评价方法。一题多解可以让学生从不同角度看待问题,构建知识网络体系,可以让学生意识到计算机运行速度再快也是有限的,并把这种意识渗透到自己编写的代码中去。例如在解“猜数字”的游戏中,让学生比较在数据规模对比悬殊的条件下,枚举法与二分法在猜测次数上面的几个数量级的区别,并与计算机的计算次数比较,体会算法对解决问题的重要性。
(四)加强代码能力训练
代码能力是用编程语言编写出程序解决具体问题的能力,是建立在熟练掌握编程语言的基础上的。计算思维的培养不能脱离基本的代码能力训练,成为空中楼阁。在编程语言的初学阶段,一定程度的模仿样例程序是必不可少的且高效的。然后是解同类的题型,有助于形成知识迁移,积累解同类问题的经验,同时也提高代码编写的熟练度。利用在线判题平台OJ组织学生形成在OJ上提交代码的习惯,能够提高学生自学的效率。代码能力不是老师长时间讲出来的,而是学生在解决具体问题的过程中,在不断地积累写代码的经验中,形成的。只有足够量的代码编写积累才能切实提高代码能力。
(五)调动学习主动性
代码编程有一定的难度,容易产生畏难情绪,教学中可以做到几点:1.创設趣味情境,吸引学生学习兴趣。2.适当拔高学习目标,学生解决问题后给予适当的激励,激发学生自豪感和学习动力。3.注重团队氛围建设,在学习小组或学习团队中建立竞争意识。4.参加信息学奥赛等各类竞赛。5.充分利用课后时间。6.适当补充数学知识。只有克服畏难情绪主动学习,才能提高学习效率,更好地提高思维的品质。
结束语
基于对计算思维内涵的界定,以及对中学编程教学现状的分析,我们提出了在中学生编程教学中评价计算思维品质的四个维度,并提出围绕这四个维度开展编程教学的五个教学策略。通过对这些教学策略在具体课堂教学过程中的不断实施和验证,可以进一步探索总结适合中学生计算思维培养的教学模式,为中学生计算思维品质的培养提出了实践的方案。
参考文献
[1]周以真.计算思维[A].中国科学技术协会学会学术部.新观点新学说学术沙龙文集7:教育创新与创新人才培养[C].中国科学技术协会学会学术部:中国科学技术协会学会学术部,2007:6.
[2]解月光、杨鑫、付海东.高中学生信息技术学科核心素养的描述与分级[J].中国电化教育,2017(05):8-14
[3]张立国、王国华.计算思维:信息技术学科核心素养培养的核心议题[J].电化教育研究,2018,39(05):115-121.
[4]傅骞、解博超、郑娅峰.基于图形化工具的编程教学促进初中生计算思维发展的实证研究[J].电化教育研究,2019,40(04):122-128.
[5]赵国庆.概念图、思维导图教学应用若干重要问题的探讨[J].电化教育研究,2012,33(5):78-84.
本文系福州市教育信息技术研究课题《编程教学中培养学生计算思维的实践研究》(课题编号FZDJ2019B20)主要研究成果之一。
关键词:编程教学;计算思维;教学策略
一、计算思维概念界定
卡内基·梅隆大学的周以真教授于2006年提出“计算思维”的概念:“是个体运用计算机科学的基础概念来完成问题求解、系统设计以及人类行为理解等涵盖计算机科学之广度的一系列思维活动”[1]。教育部2017版新课标中提出的计算思维的概念是:“指个体运用计算机科学领域的思想方法,在形成问题解决方案的过程中产生的一系列思维活动”。
这些思维活动都强调分析问题、解决问题过程中的思维活动:抽象与建模,即形式化、模型化的思维活动;其次,这些思维活动通常要运用计算机科学领域的思想方法:例如数据结构化、递归、迭代、效率分析等等,所产生的解决方案可以用计算机代理执行。因此,计算思维实际上结合了数学、工程学、计算机科学的思维方法,是学科核心素养的核心及关键要素,是一种从计算机角度出发看待问题、解决问题的思维,显著影响着信息意识、数字化学习与创新以及信息社会责任这三个要素发展的质与量,决定了学生学科核心素养的发展水平[2]。
二、中学编程教学现状
目前我国中学信息技术学科教学存在重视知识与技能的学习,忽视知识技能的内在逻辑之间的联系的现象,课堂教学常常授鱼而不授渔。常运用创设情境、任务驱动、项目式学习等教学策略,但着力点往往放在学生掌握技能完成任务,却忽视了知识技能的内在联系,使学生无法深入了解问题的本质。
从2003版课标的教学实践来看,中学信息技术的教学内容偏向于应用软件的使用,广大中学信息技术教师困于固化的思维,面对新课标,对教学内容变化的存在一个逐步适应的过程。一方面,基于旧教学思维习惯,面对编程教学这一新教学内容,教学重点往往落在概念讲解和编程语言的学习方面,教学内容多围绕表达式和程序语言的三大结构,最多涉及函数模块的定义来展开。对计算机运行原理、常用算法思想、“分析问题-建立模型-解决问题-评估回顾”这一思维过程没有得到体现。造成的结果就是学生学习效果浮于表面,较难发展出解决问题的能力,面对新问题无从下手。另一方面,适合中学生编程学习的教材也良莠不齐,信息技术教材不是国家统编教材,编程解决问题又是新教材扩展最多的教学内容,各地教材五花八门,广大教师面对这一变化,缺乏有效经验应对。
三、中学生编程学习中的计算思维能力的评价维度
计算思维本质上是人们理解自然系統与社会系统的思维方法和思维活动,是使用科学工具进行抽象模拟以寻求问题解决最优化方案的系统过程,从计算思维实践上来看,其包括组织、分析、简化、抽象、建模、递归、回溯等基本过程[3]。
基于对计算思维概念的界定和对计算思维本质的认识,现阶段中学编程教学中,评估学生计算思维能力的标准应重点关注以下四个维度:
(一)变量界定能力
计算机能够快速、自动化地解决问题,依靠的是冯诺依曼体系:二进制存储程序与数据,控制器与运算器程控处理与计算,数据流程遵循“输入—计算处理—输出”的过程。这就要求学生能够确定问题中的实体、属性及其联系,用合理的数据结构存储,用合理的标识符号表示。明确问题的已知量和未知量与基于这些变量的数据结构所能够施加的数据操作。明确哪些数据需要外部输入,组织问题的分解并输出。变量界定的过程是一个对现实世界数据特征的分析抽象的过程,是问题分解与归纳的前提。
(二)问题的分解与归纳能力
能够直接解决的问题都不是问题,复杂的模糊的问题可以根据需要分解成简单问题解决,或者归纳问题的本质,然后套用合适、准确的模型来解决。对问题分解的方法要会具体问题具体分析。对于不同功能模块,能明确功能模块的规模,接口参数。对于求解步骤存在先后依赖关系的问题分解,要能够用流程图、甘特图等工具描述子问题解决的先后次序与流程跳转逻辑关系,更高的要求是能根据不同阶段状态变化归纳出状态转移方程。对于具有最优子结构的问题,按问题规模大小分解,采用递归或递推的方式求解,能够明确问题的边界。对问题的分解,做到子问题相互独立,完全穷尽。对同类问题,能够归纳汇总,举一反三,建立问题求解模型,提出一般化的解决方法。
(三)算法评估能力
有评估算法的可读性、正确性、健壮性等是否满足解决问题需求的意识。同一问题的解法可能多种多样,要会评估问题的数据规模,根据数据规模选择相应的算法,如当问题规模较小时,选择暴力枚举代码实现更简单,但问题规模太大时,必须选择二分、三分等分治算法才能有效降低时间复杂度。当采用递归方法求解时,会评估递归次数与堆栈溢出的关系。会分别从时间复杂度、空间复杂度和代码复杂度等不同角度评估算法是否最佳选择。算法的评估能力需要学生有较好的数学基础。
(四)代码编写能力
既然是编程解决问题,必然要求学生有良好的代码编写能力。要求学生能够将不同工具描述的算法及时高效地转换成具体编程语言写的代码,代码是否能够根据模块功能划分或问题求解需要做到模块化。代码的可读性如何,是否有必要的注释或说明文档。代码编写能力考验学生编程语言语法规则的理解和熟练程度,考验常用算法的熟练运用能力,也反映学生的逻辑思维能力。
四、编程教学中的计算思维培养策略
目前中学生的编程教学,在初中阶段的教学工具,代码编程与积木拖拽式的编程工具都有老师在应用和研究,且有研究认为积木式编程对计算思维的培养提升效果更明显[4],但图形工具本身也有局限性,影响学生的代码能力训练,学生进入高中都要回归到代码编程。因此我的课题组研究确定在小学阶段采用积木拖拽式编程教学,初中阶段就开始代码编程教学。针对中学生编程学习中的计算思维能力评价的重点维度,提出以下方面的教学策略。 (一)教学中重视学生对计算机运行原理等编程学习前置知识的理解
在编程教学的前期,重点完成前置知识(包括各类型特别是数值型数据编码方法与二进制,冯诺依曼体系结构等知识)的学习。这类基础知识理论性较强不好理解,以往教学中大多数老师仅是简单这时学生对计算机运行原理有了感性的认识,能够理解到所有能够借助计算机解决的问题,都要把相关的数据存储在计算机内存中,通过控制器与运算器在程序的控制逻辑下逐条运行,在二进制的形式下模拟现实世界的问题解决过程。学生有了数据存储的意识,了解数据在内存中的存储形式,才会在界定各类变量的时候,采用合理的数据类型和数据结构保存数据,才能够做到对变量与数据结构的知其然又知其所以然。
(二)注重思维活动可视化的训练
计算思维活动是高阶的思维活动过程,从计算思维在编程教学活动中的应用状况来看,“抽象”“分解”“建模”“归纳”等思维活动都可以用可视化的方法呈现。例如“实体-联系图”可用于描述问题中实体之间的联系结构,“算法流程图”常用于模块化分解问题解决过程中的流程控制,“拓扑结构图”用于描述对象间的继承、迭代关系,这类图示工具以可视化的形式呈现思维过程,有利于学生方便地进行知识网络的建构,积累解决问题的经验,也有利于教师了解学生的思维品质发展过程。可视化技术对计算思维培养方式基本遵循了“隐性思维显性化—显性思维工具化—高效思维自动化”的规律[5]。因此在编程教学中不能忽视以可视化的方式对“抽象”“分解”“建模”“归纳”等方法的训练。
(三)注重一题多解对评估算法的优劣能力的影响
对同一道题,可以暴力枚举,可以搜索回溯,可以递推递归,不同方法有不同的时空效率。当前中学生普遍一周一节课的信息技术课程,实际只能开展普及性的编程教学,有限的课时条件下让学生整体理解各种算法拥有实现一题多解的能力是不现实的。但教师可以自己一题多解,并且让学生比较不同解法的特点,特别注重对比时间与空间复杂度,让学生掌握基本的评价标准与评价方法。一题多解可以让学生从不同角度看待问题,构建知识网络体系,可以让学生意识到计算机运行速度再快也是有限的,并把这种意识渗透到自己编写的代码中去。例如在解“猜数字”的游戏中,让学生比较在数据规模对比悬殊的条件下,枚举法与二分法在猜测次数上面的几个数量级的区别,并与计算机的计算次数比较,体会算法对解决问题的重要性。
(四)加强代码能力训练
代码能力是用编程语言编写出程序解决具体问题的能力,是建立在熟练掌握编程语言的基础上的。计算思维的培养不能脱离基本的代码能力训练,成为空中楼阁。在编程语言的初学阶段,一定程度的模仿样例程序是必不可少的且高效的。然后是解同类的题型,有助于形成知识迁移,积累解同类问题的经验,同时也提高代码编写的熟练度。利用在线判题平台OJ组织学生形成在OJ上提交代码的习惯,能够提高学生自学的效率。代码能力不是老师长时间讲出来的,而是学生在解决具体问题的过程中,在不断地积累写代码的经验中,形成的。只有足够量的代码编写积累才能切实提高代码能力。
(五)调动学习主动性
代码编程有一定的难度,容易产生畏难情绪,教学中可以做到几点:1.创設趣味情境,吸引学生学习兴趣。2.适当拔高学习目标,学生解决问题后给予适当的激励,激发学生自豪感和学习动力。3.注重团队氛围建设,在学习小组或学习团队中建立竞争意识。4.参加信息学奥赛等各类竞赛。5.充分利用课后时间。6.适当补充数学知识。只有克服畏难情绪主动学习,才能提高学习效率,更好地提高思维的品质。
结束语
基于对计算思维内涵的界定,以及对中学编程教学现状的分析,我们提出了在中学生编程教学中评价计算思维品质的四个维度,并提出围绕这四个维度开展编程教学的五个教学策略。通过对这些教学策略在具体课堂教学过程中的不断实施和验证,可以进一步探索总结适合中学生计算思维培养的教学模式,为中学生计算思维品质的培养提出了实践的方案。
参考文献
[1]周以真.计算思维[A].中国科学技术协会学会学术部.新观点新学说学术沙龙文集7:教育创新与创新人才培养[C].中国科学技术协会学会学术部:中国科学技术协会学会学术部,2007:6.
[2]解月光、杨鑫、付海东.高中学生信息技术学科核心素养的描述与分级[J].中国电化教育,2017(05):8-14
[3]张立国、王国华.计算思维:信息技术学科核心素养培养的核心议题[J].电化教育研究,2018,39(05):115-121.
[4]傅骞、解博超、郑娅峰.基于图形化工具的编程教学促进初中生计算思维发展的实证研究[J].电化教育研究,2019,40(04):122-128.
[5]赵国庆.概念图、思维导图教学应用若干重要问题的探讨[J].电化教育研究,2012,33(5):78-84.
本文系福州市教育信息技术研究课题《编程教学中培养学生计算思维的实践研究》(课题编号FZDJ2019B20)主要研究成果之一。