李天宇 孙慧颖
2017版课标颁布后,计算思维成为公民必备的核心素养,编程作为其主要培养载体引起广泛关注。可很多学校在开展编程教学时存在重技巧、轻思维的问题,针对这种情况,笔者根据高阶思维形成规律,深入剖析计算思维特点,依照从计算概念、计算实践到计算观念的认知路径,构建了一种面向计算思维的编程教学模型,希望能为教师提供思维培养的实践路径。
● 中小学编程课程与计算思维
当前,中小学教材中引入了 Python等编程语言作为培养学生计算思维的教学载体,也有越来越多的学校将游戏化、项目式、创客式的开源硬件或APP开发等内容融入校本课程。编程课程适应时代所需,但深受传统教学方法影响,容易出现“旧瓶装新酒”的现象。教师授课大多数以知识讲练为主,学生模仿完成作品,而当程序报错时或学生独立解决问题时,就会暴露出学生没有建构计算思维的生长点,反映出编程教学与育人目标尚存在距离,因此如何提高编程课程教学的有效性成为教师必须深思熟虑的问题。
● 面向计算思维的编程课程教学策略
激发学生计算思维是教师设计编程课程时重点关注的问题。笔者基于英国南安普敦大学的CynthiaSelby博士和John Woollard博士2013年提出计算思维的五个元素,即算法思维、评估、分解、抽象和概括,结合王伟等人提出的高阶思维教学设计,依照从计算概念、计算实践到计算观念的认知逻辑,构建了一种面向计算思维的教学模型,如下圖所示。
教师在设计学习目标时,以培养算法思维为根本,可针对特定的算法,整合编程知识与技能,学生从中学会解决问题的方法。从学习目标着眼,教师可以从知识的实用角度出发设计目标任务,在真实问题的共鸣中激发学生学习兴趣,引发学生学习动机。至于学生如何完成目标任务,则要围绕学生认知基础设计抛锚式的学习活动,首先引导学生抽象问题,将问题细化,抽丝剥茧,提取问题的核心部分,使其更容易类比。其次是分解问题,根据问题的整体,将问题分化成多个相对独立的模块,或以功能划分,或以知识难易划分,待学生逐块解决。运用基于已知问题的解决方法解决新问题的方式,叫概括,在已有知识的基础上,对已知方法进行改造,使其能迁移解决一系列相似问题。例如,在模拟银行定期存款、到期取款的过程,和乘坐公交车上下车的过程大同小异,只需思考其中一个问题的解决方案,另一个问题稍加修改,便迎刃而解。将分解后的问题进行概括,学生如果能够形成完整的解决思路,则对该解决问题方法进行评估;若不能解决目标任务,需要再次对问题分解,直至学生抽象的分块能够通过已有的认知完成。最后是评估,评估是活动设计中的重要环节,是学生对知识掌握情况的自我验证,通过复用学习成果,再体验、再应用、再延伸,从而生成思维和积累经验,最终评估方案的健壮性,如问题结果是否达标?占用多少空间资源?完成计算所用的时间是多少?当前解决步骤能够形成具有迁移价值的算法?综合考虑这些问题,对方案进行综合性评估,如果方案不是最佳,可继续优化算法,由学生独立进行二次分析,教师也可稍加干预,再次检验学生是否形成算法思维。
● 指向计算思维的编程课例设计
编程课程不局限于VB、C等传统程序设计语言,还包含Python等积木式编程、Arduino等开源硬件、App Inventor应用设计等,不同编程环境与教学载体的基础算法思维是一致的,教师可依据学生学情选择不同的编程环境组织教学环节,从而帮助学生内构计算思维。基于计算思维教学模型,笔者以初中阶段图形化编程《随机分组》为例,展开教学设计,以列表使用作为基础算法,分为学习概念活动和算法复用实践,学生通过制作“随机分组”程序综合程序结构、聚焦列表原理,习得基础知识后通过广播、算术运算、询问等优化程序,实现算法复用,从而生成计算观念,具体内容如下页表所示。
在《随机分组》课例中,教师围绕使用列表数据结构知识,关注在现实生活中基于列表的问题解决,从而设计“随机分组”实践任务。本课的教学重点是学生掌握索引取列表元素的计算思维,学生认知基础需要从生成随机数过渡到形成随机分组,学习任务从列表的基础计算概念入手,设计了理解列表的储存方式、索引方法和避免重复的认知环节。学生复用概念时,通过体验程序、发现问题、分析问题逐步解决“取余给列表增加空值破解了小组不等分问题”“增加等待时长同步网络数据更新”“广播积木触发功能增加了程序的移植性”等问题,程序优化过程是学生充分掌握列表使用方法的计算实践,学生从中自然发现算法思维,并形成具有总结价值的计算观念。
● 结束语
面向计算思维的编程教学模型能帮助教师从关注知识转移到关注思维,但学生形成计算思维等高阶思维还需要不断打磨教学设计,凝练核心思维,逐步以项目式学习的方式设计大单元,还原知识本身的生活逻辑。