基于问题分解与抽象的高中生计算思维培养实践
李伟
通过高中信息技术学科的教学,让学生通过启发式推理关注分解任务,同时仿真解决抽象问题,进行形式化表达,构建模型,以程序设计教学为切入点剖析计算思维各个层次的思维深度,探索深度思维架构的过程,能够培养学生运用计算思维方法灵活而又主动地发现问题、分析问题、解决问题、总结归纳问题的能力。通过基于问题分解与抽象的教学实践,能够帮助教师更新教学理念,提升专业素养,同时提升学生的计算思维能力。
● 计算思维教学实施中的困难分析
通过对上海市青浦区96位信息技术教师问卷调查,我们发现目前学科教师对计算思维的认识不足,主要表现在对什么是计算思维缺乏基本了解,对计算思维抽象和自动化的本质缺乏清晰的认识。通过对部分教师的进一步访谈,我们还发现有些学科教师把计算思维的定义当作知识来学习。还有不少教师将计算思维培养简单地理解成计算机原理的教学,将计算思维教育误解为对计算机原理性知识的讲解。另外,我们发现很多教师虽然对计算思维有所了解,但对于用怎样的教学方法培养学生的计算思维存在疑惑。许多一线信息科技学科教师的教学模式变化跟不上时代节奏,更有甚者还有不少教师在用陈旧的教学方式来给生在信息技术社会的“原住民”授课,课堂上基本表现为直接教会学生使用某个软件或工具,方法上也是以讲授法为主。即使在算法模块中,也是简单地把编程教学理解为计算思维教学。教师习惯于完成知识与技能目标的教学,对于思维教育,苦于没有合适的方法。
因此,教师要改变现有的认识,关键是要从根本上改变传统的讲授式教学模式,课前精心设计,把知识目标分解成若干个问题进行呈现。课堂上清晰地表达出任务,引导学生通过启发式推理关注分解任务,同时能够抽象问题,进行形式化表达,进一步構建出解决问题的模型。通过这样的教与学改变,学生基于任务不断重复上述过程,教师也能在这样的教学实践中逐步深入理解计算思维教育的本质,加深对计算思维的认识。
● 任务驱动教学模式的设计
计算思维的重要特征之一是问题分解,在教学上的体现是教师能够运用恰当的教学方法和思维技巧引导学生分解复杂问题,形成若干方便理解和解决的子问题或系统设计时所需要的模块化设计思想。因此,采用如下页图所示的基于任务驱动的教学方式,关注问题的分析、分解直至问题解决,有利于达成这样的教学目标。
课堂上将任务以问题的形式呈现,引导学生不断分解问题,抽象特征,最终找到解决问题的方法。问题的提出其实就是给学生呈现教学任务,因此任务的设计也就成为课堂教学的关键。任务设计的好坏关系到基于任务驱动的计算思维教学的实施效果。这些任务的设计由教师在课前完成,即把整堂课的核心任务按照课堂导入、实施的环节分解成几个相互关联、层层递进的子任务。每一个子任务都可以解决一个子问题,也是为后续解决问题做铺垫。
学生在课前做好进入思维教育的学习状态的准备,这样有利于教师在课堂上更好地开展计算思维教学,所采用的方法可以是课前让学生对这节课的内容有初步的了解。课堂上学生在明确任务后,在教师的引导下用计算思维方法分解任务,最终完成任务。为了明确整个教学过程是否达到教学设计的效果,教师在课堂上要不断运用计算思维方法进行监控,出现问题及时做出调整,以确保所有预设的教学任务顺利完成。
1.课前准备
教师在课前进行详细的教学设计,对教学目标进行分析,根据教学内容分解教学任务,同时明确每个任务呈现的形式以及任务之间的联系、任务具体实施方式等,还应思考怎样运用计算思维方法引导学生进行抽象和建模。同时,教师应为学生课前的学习任务做准备,例如,准备一些新课知识点相关阅读材料或者习题,让学生在新课前预习使用。
学生课前初步了解新课相关内容,通过习题等方式检测相关内容已有的基础,这样学生能快速进入思维教育的学习状态,为后续学习做准备。这里的准备除了包括知识方面的储备,更重要的是为课堂上用计算思维方法分析分解任务打下基础。
2.课堂实施
课堂实施时,教师在课堂上要清晰地呈现任务。通常通过真实情境创设,引入本课主题,情境的选择要与上课内容相关,可以是网络搜索的一些视频,也可以是师生自己拍摄的与教学内容相关的小场景。在实施任务环节,教师通过启发式推理,对问题进行转化,通常是化繁为简,最后清晰地进行形式化表达,如数学表达式形式,从而建构出解决任务的模型,通过组织学生进行这样的分析共同确定问题的解决方案。这部分内容是计算思维能力培养的关键,抽象特征时教师要根据课堂上的情况启发式引导,把大的任务简化,也就是一个化繁为简的过程。教师在课堂上对整个教学过程进行监控,适时对学生的学习过程和结果进行评价,评价的内容主要是学生作品的展示、交流共享自己的学习心得。在任务都完成后,教师对知识点进行总结性概括,并引导学生拓展迁移所学知识,内化新知。
学生在课堂上首先是明确教师提出的任务,然后在教师的引导下用计算思维方法合理进行问题分解,有效抽象出问题特征,进行形式化表达,建立解决问题的模型。这里的关键是学生在明确学习目标和任务要求之后,可以以小组为单位进行分析讨论,根据任务的功能描述,采用计算思维方法中的分析、比较、约简、抽象、概括和分解等方法对问题模型进行建模,然后再在编程环境中自动化运行,检验方案的正确性。相对于传统的仅仅以完成任务为目标的编程学习,学生经历了“抽象—形式化表达—构造—自动化”这一完整的过程,所获得的不只是学会写代码,更多的是学会用计算思维方式分析分解问题。这些学习过程的实践和结果都是课堂上分享交流的好素材。
● 任务驱动教学模式的教学实践
“对分查找”是高中算法部分的学习内容,该内容的学习目标是理解对分查找算法的原理,掌握对分查找算法的基本结构,通过分析对比顺序查找和对分查找的过程,能很好地感受对分查找在查找效率方面的优势。对分查找的中点确定也是学生从抽象到形式化表达的难点所在。基于任务驱动的课堂教学模式,师生共同分析分解任务,抽象问题,通过一个个环环相扣的子任务完成形式化表达。
1.课前准备
教师在课前明确教学目标:①知道什么是对分查找,确定中点位置,并用表达式表述出来。②能用自然语言描述对分查找的过程。教师根据教学目标把教学任务分解成四个教学环节。为了使学生在课前对新课内容有所了解,知道对分查找的基本内容,教师准备了导学单。导学单上“课前预习”部分给出了查找的定义,要求学生阅读教材上关于对分查找的概念内容,并设计了两个顺序查找和对分查找的不同应用实例,目的是通过导学单“课前预习”的学习让学生知道什么是对分查找,初步了解对分查找算法的原理。另外,教师在导学单上还设置了“课中解惑”和“课后巩固”部分的具体内容。这些内容的设置都是基于教师明确了教学目标后,对新课的知识点进行了梳理,设计出了每个教学环节的具体任务,同时针对教学环节中的重难点,在导学单上设计了学生课上思考、练习的内容,并设置了6道选择题用于课堂最后环节的检测巩固。
学生在课前通过思考完成导学单上“课前预习”部分的习题,初步认识对分查找算法的基本思想,为新课学习中用自然语言描述对分查找的模型打下基础,并在头脑中建立确定中点值的概念,这样有利于后面讨论得出中点值的表达式。
通过这些课前准备,教师对新课中对分查找的中点值和每次查找的范围这些难点有了系统的设计,学生通过课前预习的环节初步了解了对分查找的思想,为后面课堂上运用计算思维进行学习打下基础。
2.课堂实施
教师在课堂上一开始就创设问题情境,呈现学习任务。提出问题:有一集成电路上有100个电阻,已知某一电阻出现故障导致整个电路不通,请提供排查故障点的思路。这个问题来源于生活,让学生体验小工程师的角色,激发兴趣,从而寻求问题解决方案。由于经过了课前准备,所以学生能快速联想到从中间位置测量判断故障点位置。接着,教师开始实施课前设计好的任务,明确问题,讨论出解决方案。教師通过提问引导学生一起总结出对分查找的基本思想。在此基础上,通过在规模为16的数组中查找数值为52的数组元素实例,启发学生理解如何确定中点位置,并进行数据比较逐步缩小查找范围。然后,引导学生讨论得出中点位置的形式化表达公式,完成对分查找的问题。小结环节通过问卷星设置几道习题,当场呈现学生做的结果,教师对学生的学习过程和结果进行评价,总结这节课学习的内容。这样,在呈现任务后通过师生共同讨论确定问题解决方案,在编程环境中进行验证。这种教学模式完全基于任务驱动,把几个教学任务相互关联,任务间层层递进,学生课堂上都处于不断探索思考、寻求问题解决方案的状态中。整个过程包含情境的设计、问题序列设计、评价的设计,这些设计贯穿整个课堂。
对分查找这节课的重点在于中间值的表达,这也是新课的核心问题。教师引导学生分解任务,提问前面场景中第一次检查50号电阻,50是怎样来的。学生的回答是首项加末项除以2,实际上这个思维过程就是抽象出问题的特征,并把问题的解决方案进行了形式化的表达。分析过程中引导学生设置首项和末项的变量为i和j,中点用m表示,学生在经历抽象特征后,对中点位置变量m进行形式化表达,具体为如下数学表达式:m=int((i+j)/2)。形式化表达的目的是编写出能够完成对分查找的程序。接着,教师引导学生思考对分查找就是一个重复查找中间值的过程,这个讨论的目的是引导学生建立循环的模型结构。课堂上的任务三是让学生判断什么时候不能继续对分查找。教师还是以问题的形式提出任务,学生在明确任务后,在教师的组织下展开讨论,分析出找到所需要的值就退出查找过程,另外一种情况是查找的范围缩小到1还没有找到也结束查找。这样的讨论就抽象出了问题特征,当只有一个元素或者没有元素的时候就不能继续对分查找,随后进行形式化表达,即i<=j时结束查找。经过课堂上三个任务的活动,教师引导学生得出对分查找关键流程。
至此,学生已经完成抽象问题,写出相应表达式的任务,整个对分查找的结构模型也建立好了,最后在编程环境中进行验证与调试,通过程序的运行体会计算思维中自动化的特征。完成好的同学跟其他同学分享编程的结果以及整个过程中的收获,教师再对学生的学习过程和结果进行简单评价,并总结概括课堂上所学的知识。
● 效果与反思
类似于“对分查找”这样的课例,以任务为主线,教师引导学生应用计算思维系列方法,在分析问题、寻求更好的解决问题方案的过程中发展高层次思维能力。布置任务时引入真实情境,有利于学生快速进入状态。在接下来的课堂中,教学任务紧紧围绕抽象特征和形式化表达展开,把一个大的问题进行分解,对分查找的核心是查找中间值,经过这个任务,学生完成后再分析出对分查找其实就是一个不断重复查找中间值的过程。这样就构建出整个程序的基本结构模型,接下来分析出什么时候查找结束,用变量表达式的形式给出条件,把整个流程图完整呈现,在编程环境中进行验证。
以构建任务模型的教学实践能够培养高中学生应用计算思维方法进行学习,把整节课要解决的问题分解成若干个小任务。教师应用此类教学方法的关键是如何设计以任务为驱动,运用计算思维方法全程监控,逐步求精的过程。同时,在课堂上引导学生运用计算思维的方法分解任务,抽象特征,进行形式化表达,从而构建出解决问题的模型,在编程环境中进行验证,体验自动化呈现结果。
经过一系列的基于任务驱动的高中生计算思维培养的教学实践,首先,学科教师对学科核心素养中的计算思维内容加深了理解,教师专业素养得到发展。学科教师以任务驱动的形式进行教学实践,在算法模块中实践培养提升学生计算思维能力的方法。在此过程中,学科教师通过教学研讨课,及时梳理经验,总结出一套切实可行的教学模式,并在教学实践中不断验证、修正,使之更适合提升学生的计算思维能力。其次,在算法模块学习中,学生会经历问题式的教学模式,通过一个个任务以问题的形式提出,在学习算法的过程中学会抽象特征,进行形式化表达,建立模型,编程自动化实现,这样的经历能够大幅提升学生的计算思维能力,并且还能把计算思维的思维方式运用到其他相关学科中去。
在研究的同时,我们也在不断反思。既然计算思维是信息技术学科核心素养的重要内容,那么除了程序设计模块的教学内容,在其他知识模块中怎样培养学生的计算思维能力?信息技术学科中所有的学习内容是否都是可计算的?除了高中阶段的学科教学,初中、小学阶段培养学生计算思维的教学应该怎样进行?同时,在研究过程中,教师团队也产生了很多新的疑惑,例如,计算思维和算法思维的联系与区别是什么?计算思维怎样迁移到编程模块教学以及其他学科学习中去?这些都需要我们接下来进一步研究与实践。