刘付燕 江苏省南京市秦淮中学
2020年9月,基于新教材的信息技术课程教学全面实施,程序设计在新课程中的占比增加,其在提升学生计算思维水平方面具有独特的优势。因此,笔者根据所在学校实际情况,探索以“Python游戏化学习项目”为载体培养计算思维的策略,并通过两轮的教学实践与改进,积累了一定的实践经验。
在设计学习项目之前,笔者对学生的程序设计学习基础进行了调查,调查表明:大部分学生缺少程序设计的学习经验,学习基础比较薄弱,但喜欢玩人机小游戏,并具有开发人机小游戏的愿望和动机。基于学情,笔者设计了“石头、剪刀、布”游戏的探究项目,在第一轮的项目设计中,以程序设计的三种结构为项目设计的知识与技能主线,采用程序半成品填空的形式来开展学习,在一定程度上激发了学生的探究兴趣,有效地帮助学生掌握了Python程序设计的基础知识,但是学生问题提出、学习迁移、融会贯通、学以致用的能力稍显不足。为了解决这个问题,在第二轮的教学实践中,采用“大单元”逆向设计法,将计算机解决问题的过程、三种程序控制结构、模块化程序设计、计算与问题解决等有机融合,通过数字化游戏中的角色设定、游戏规则设计、游戏交互与挑战、游戏场景等来对标计算机解决问题过程与计算思维的要素:分析和界定问题(形式化)/分解——设计算法(模型化)/抽象建模、算法实现和问题解决(自动化和系统化)/算法实现及其优化。具体地说,就是以兴趣激发为出发点,以计算思维培养为落脚点,遵循“游戏体验——需求分析、明确问题——分析问题、设计算法——编写程序、算法实现——运行程序、优化算法”的思路,将程序设计的基础知识、算法的思想以及编程的技能融入到问题解决的过程中,注重引导学生进行问题分析、利用计算机程序解决问题,在做中学,在用中学。
为了有效提升学生的计算思维水平,提高学生的迁移能力,笔者采用“明确预期学习结果——设计证明学生达到预期学习结果的评价指标——设计相关学习活动”的逆向设计法对项目进行设计,通过逆向设计提高了学习活动的针对性和课堂教学的指向性,在预期的学习结果阶段明确了学生应该掌握哪些知识与技能、进行怎样的意义建构、形成怎样的学习迁移,让“掌握、理解、迁移”形成学习结果的良性循环。
在项目学习中,首先要引导学生对整个项目进行分析,明确项目需求,对项目目标有清晰的认知,在整体分析和明确目标的基础上,对整个项目进行分块设计,逐步细化,分模块实现。这个过程体现了“自上而下、从整体到局部、逐步求精”的问题解决思路。问题分析是问题解决的第一步,也是计算思维中问题分解的重要一步,因此,在教学中教师可以通过问题驱动的形式让学生主动进行问题分析、分解和抽象建模,进而提升学生的计算思维。
例如,在“‘石头、剪刀、布’游戏的设计与制作”项目的“单局游戏”设计中,教师首先通过“角色扮演”和“游戏实战”的直观体验让学生分析游戏过程,明确游戏角色、游戏规则和实现该游戏需要解决的问题,进而引导学生思考设计一个“人机互动”游戏需要解决哪些问题。通过经验迁移让学生将游戏角色、角色功能、游戏过程逐一分解,思考算法设计。在“多局游戏”设计中,同样让学生通过“角色扮演”和“游戏实战”分析游戏过程,并将真实游戏中的记分员记分过程类比到程序设计中的“变量”,帮助学生理解变量的概念及其应用。在此过程中,教师提供了表格式的学习支架供学生进行游戏过程的分析,以实现游戏过程的抽象建模。
分析、综合、比较、分类、抽象、概括、系统化、具体化等构成了思维的过程,而分析与综合是思维的基本过程。教学预设在于把握教学方向,合理利用生成性资源培养学生的计算思维。要让学生经历思维过程,就要为学生的自主、合作、探究学习提供支持,教师不仅要为学生创设项目学习的情境,以激发学生探究的兴趣,还要为学生搭建必要的脚手架,以支撑学生的探究学习顺利开展,探索项目学习中的“收”与“放”策略。
例如,在本项目中,教师通过“游戏实战”引导学生设定游戏规则、游戏角色、项目目标、项目分解、项目评价等,从整体到部分对项目进行拆解。学生用流程图绘制游戏算法并尝试实现,在游戏的1.0版本(单局游戏)中,依据游戏的实现过程,将问题的解决分为三步:第一步是实现对“出拳”的编号和导入随机数函数;第二步是输入拳号和计算机产生随机数并输出人和计算机的出拳方式;第三步是比较人和计算机的出拳方式,并输出比赛结果。为了帮助学生进行探究性学习,教师提供了游戏半成品程序、学案、Python基本语法帮助文件等学习支架。在完成1.0版本的过程中,学生掌握了计算机解决问题的一般过程,了解了分情况讨论的分支思想,从基本输入输出到分支程序,从单分支到多分支,习得了程序设计的基础知识和分支程序控制结构。
在完成了1.0版本后,让学生通过“玩游戏”发现程序的可改进之处,学生会提出如程序运行一次只能玩一局、不想一局定胜负、平局不算数等问题,然后教师可以引导学生分析问题,并思考如何优化改进程序,进而引入循环的思想,并完成程序2.0版本。在程序展示分享阶段,某学生在输入拳号时频频不按常规出牌(不按照约定拳号输入),导致程序运行结果出错。缺少容错机制的程序容易导致意外的程序运行结果,教师及时将课堂生成转化为算法设计中的健壮性问题,即为了避免“误输入”,需要在程序中增加容错纠错机制。有的学生想到再增加一个分支,那分支条件是什么?如果连续多次输入错误怎么办?这就用到了循环,用前面学习的for计数循环很显然不能解决问题,因为学生输入错误的次数是不可预测的,这样自然而然就引入了while条件循环,即通过while循环来检查输入的内容。通过这样的思维过程,学生不仅意识到算法强壮性的重要性,而且充分理解了for循环与while循环的区别与联系及其应用情境。
为了充分发挥学生的创新意识,教师还为学有余力的学生设计了“我的游戏,我做主”的个性化游戏设计环节,为学生综合利用所学知识设定自己的游戏规则、完成个性化的游戏设计提供平台。
算法即解决问题的方法和步骤,同一个问题有不同的解决方法,在教学中要鼓励学生多想、多交流、多进行思维的碰撞,不断优化问题解决的方法。本项目1.0版本的程序是大多数学生能够想到的,但是有些比较精巧的解决方法则需要教师的点拨。在程序3.0版本中引入列表的学习与使用,在程序4.0版本中引入字典的应用,从用分支结构到巧妙运用列表再到综合应用列表和字典来解决问题,这些都充分体现了问题解决算法的多样性,通过建模过程的优化,激发了学生的学习兴趣。
依托程序设计培养学生计算思维的关键是尊重个性,关注探究过程,提供学习结果的展示交流平台。依托信息技术搭建程序设计学习平台,不仅为学生个性化、分层次的探究提供了保障,而且也更好地呈现与保留了学生的学习成果,有助于增强学生学习自信心和成就感,并为学生的相互交流分享搭建平台。因此,在第二轮的教学实践中笔者借助在线教学平台进行项目探究活动,基础薄弱的学生可以在程序半成品的完善中解决问题,中等水平的学生可以在已有基础上优化程序设计,学有余力的学生可以尝试个性化游戏的设计与实现。
在项目学习中,鼓励学生多进行交流讨论,学生交流展示的过程就是陈述算法的过程,展示程序的过程就是学生将算法付诸实践并解决问题的过程。学生之间的交流可以相互启发,是一种思想的交换。教师在进行教学设计时也要多借鉴一些优秀的案例来拓展程序设计的算法。
在面向计算思维培养的Python程序设计项目学习中,教师从计算思维的视角设计项目,项目实施遵照“整体分析、分步实现、优化提升”的设计思路,遵循分析问题、设计算法、程序编写与调试优化这一计算机程序解决问题的一般过程。程序设计从简入难、从粗到精,无不体现了计算思维方法的使用和计算思维的提升。