“自主体验、自主探究、自我规划” 三段式探究学习模式 在中学编程教育中的实践与探索
2020-03-26荆晓虹
荆晓虹
近年来兴起的编程教育课程丰富,学习资源充足,教学效果却良莠不齐。例如,网络开放资源支持下的学生探究学习因缺乏科学的引导而成为“放羊式”学习;自学视频辅助下的自主学习由于有些教学资源使用不当而演变为“模仿式”学习等。随着科学技术的迅猛发展,“互联网+”环境下优化了学习条件,探究学习已经成为现代社会人类常用的学习方式。专家学者们已经对探究学习模式应用于不同的学科进行了研究,尝试了不同的教学策略。
笔者长期从事中小学编程教育,从遵循人的发展规律培养人才的角度出发,在通过大量的教学实践之后,纵向探索了探究学习模式在培养信息学人才不同阶段的应用并进行了创新,总结出“自主体验、自主探究、自我规划”三段式探究学习模式并应用在实际教学中,取得了一定的效果。
● 发现问题
笔者在早期从事编程教育时发现,学生在学习编程的过程中会产生两种不同的学习状态:一部分学生在学习基础知识时非常认真,编写代码也很规范,但随着待解决的新问题出现,他们不敢轻易行动,有了想法也不积极实践,往往需要通过一些途径比如上网搜索其他人的题解或代码,待验证了自己的思路之后才开始模仿“标程”去解决问题;而另一部分学生则敢于独立思考和大胆实践自己的算法,并能主动和同伴交流自己的想法,这部分学生在后期深入学习的过程中表现得更积极主动,比如在对新知识的渴求和探究方面,他们能更及时利用身边的资源着手研究,学习能力更强,更具创造力。
如何让在编程方面真正有兴趣并有潜力的学生能够在中学阶段得到最大程度的培养,一直是笔者思考的问题。随着互联网+新技术的发展以及探究学习模式在中学教学中的深入应用,笔者便开始了相关探索与实践,期望能帮助学生确立真正的编程兴趣,激发其学习主动性,挖掘其学习潜力,缓解其学习基础学科与培养兴趣特长之间的矛盾,为中学信息学拔尖创新人才的培养提供合适的土壤。
● 三段式探究学习模式探索与实践
1.自主体验,夯实基础
皮亚杰的认知发展理论指出,儿童是主动的学习者。在编程学习的初期,教师要充分利用学生的好奇心和求知欲,让学生尝试自主体验式探究学习。笔者研究的自主体验式学习,主要是指充分利用学生的前概念和既有经验,让学生自主经历直接感知、操作实践和亲身体验等过程,主动建构新的知识和经验,自主体验式探索学习模式如上页图1所示。具体策略包括观看体验他人解决问题的案例、思考体验新问题的解决方案、实践体验尝试解决问题、与同伴分享交流体验学习过程中获得的技巧和遇到的困难等。教师通过巧妙设计,让学生在自主體验的过程中自然进入新问题情境中,促使其独立思考、自主实践,再通过师生、生生的交流、讨论和分享,充分调动学生的学习主动性,激发学生的参与性,促使学生建构新知、坚定学习信念,以平和自然的态度接纳困难并努力尝试解决,引领初学的学生以正确的姿态进入编程学习的大门。
教学案例一:编写第一个C++程序
设计思路:本课教学的认知目标是让学生掌握编写程序解决问题的一般步骤,了解C++语言编写程序的基本方法,尝试在C++环境中动手编写、调试和运行第一个程序;能力目标是初步培养用编程方法解决问题的思维,培养学生的动手实践能力;素养目标是破除编程的神秘感,初步树立学好编程的信心。传统的教学方法是讲授法和演示法,教师通过讲解知识和操作演示带领学生跟着一起做,学生在模仿中掌握知识。在这种思路下,学生对本课知识的掌握能够基本达成,但在以后的学习中,他们独自编写代码和调试程序会出现困难,尤其害怕调试错误程序。在本课中,教师将通过案例视频引导学生自主体验学习,视频中的主角是虚构的一个与学生相仿的小明同学,他从一个生活中的具体问题出发,思考并搜集自己已有的相关知识,构造一个可行方案,然后将方案尝试步骤化,再将步骤用代码描述,最终用计算机实践并验证。在此过程中,教师将以往学生容易出错的环节均恰到好处地设置其中,如将程序代码里的符号故意打错等。小明的探究经历牵引着学生的学习经历,小明的认真思考影响着学生的思维习惯,小明的积极尝试激发了学生的探究热情,小明对待代码出错的态度引导学生形成正确的代码观,最终帮助学生达成学习目标。
教学过程:
(1)自主体验学习准备阶段。
学前待思考的问题:解决问题一般有哪几个步骤?如何进入C++编程环境,编写好一个完整程序?如何调试程序?
一段问题解决完整过程的案例视频:制作一个小明同学尝试编写第一个程序的过程视频,按照教师的教学经验,小明必须能够代表绝大多数即将体验此过程的学生,这样才能让学生更自然地进行自主体验。
一份涉及新知识的学习材料:对本课的相关知识点的详细介绍,如C++基本语法、C++环境使用指南等,作为备用资源供学生需要时查阅。
一份学习完成后的评价反馈问卷:设计问卷主要是收集学生的学习反馈信息,如“你看完视频后有哪些疑问?”“是否在学习材料里找到解答?”“你对本课问题还有其他解决方案吗?”“你认为思考算法和动手实践哪个更困难?”等。
(2)学习过程。
学生首先了解学前问题,也就是了解本课的主要知识技能目标;在教师的引导下学生将前概念和既有经验进行迁移,进入自主体验学习,主要是独自观看视频并尝试跟随小明一起思考、动手实践,教师视学情鼓励学生大胆实践验证自己的想法;自主体验学习完成后,教师组织学生进行交流分享,促使学生互相学习;最后填写学后反馈问卷,评价学习效果。
(3)本课结束后,学生填写学习记录,回顾学习过程,记录得失,学着了解自己。
实施效果:在学习过程中,学生根据自身需求展开自主体验学习。有些学生在代码环节反复观看视频,花了比较多的时间,最终实践了小明的程序;有些学生对小明解决问题的方法进行了深入思考,并提出了改进方案;还有少数学生修改了小明的代码进行尝试……从学生的学习记录可以了解到,所有学生都进行了自主体验学习,绝大部分学生达成了学习目标,个别学生由于操作能力薄弱未能完成,有待以后进一步加强。
利用学前问题帮助学生回顾和搜索相关前概念和既有经验,引导学生运用迁移能力为新问题的解决和新知识的建构做准备。教师要为学生准备充足的辅助学习资源,提供给需要帮助的学生。学习资源是多样化的,根据学习内容和学情需要,可以是一段问题解决过程的案例分析、一个待解决的实际问题、一个不完整的项目研究案例、一段待推敲的程序、一款精心设计的教学游戏、一份详尽的使用说明等。在交流和评价环节,教师既要引导学生向他人学习,也要引导学生关注学习过程中的自我表现,尝试了解自己,为下一次更好地自主体验学习做出调整,使学习形成良性的循环。
编程是一门实践性非常强的学科,这一特性非常适合学生进行自主体验式学习。在教师的合理引导下,学生通过自主体验积极地将前概念和既有经验进行迁移,自主地建构新知识,形成本学科的思维方法,提升运用知识解决问题的能力。在本阶段的自主体验学习过程中,特别需要注意的是,教师除了让学生通过体验建构知识,还要注意培养学生自主探究的意识,为下一步的探究学习奠定基础。例如,在上述案例中,辅助学习资源“C++环境使用指南”可以让需要的学生方便地进行自主查阅,且相关学习过程也应在评价中有所体现。
2.自主探究,锻炼能力
当学生学习了编程语言、基本数据结构和基础算法之后,将要学习更深入的知识,解决更复杂的问题。在第一阶段的自主体验中,学生已经初步养成独立思考、主动寻找和使用辅助学习资源、自主实践等能力,在本阶段中,教师便可大胆开展探究式教学。本阶段有三个重要的问题亟待解决:探究的主题如何设定?探究的时间如何规定?学习的效果如何评价?在实践中,笔者对探究主题的设定主要从两方面考虑,一是以内容为主线的专题探究,二是以问题引领的求解探究。在本阶段初,可以先尝试专题探究,当学生已经初步掌握探究的方法,并且对自己探究的过程熟悉之后,再尝试求解探究,如图2所示。下面,笔者以求解探究为例,阐述本阶段的自主探究模式。
教学案例二:导弹拦截问题探究
问题描述:某国为了防御敌国的导弹袭击,研发出一种导弹拦截系统,但是这种导弹拦截系统有一个缺陷——虽然它的第一发炮弹能够到達任意的高度,但是以后每一发炮弹都不能高于前一发的高度。某天,雷达捕捉到敌国的导弹来袭。由于该系统还在试用阶段,所以只有一套系统,因此有可能不能拦截所有的导弹。输入导弹依次飞来的高度(雷达给出的高度数据是不大于30000的正整数),计算这套系统最多能拦截多少导弹。
输入格式:一行,为导弹依次飞来的高度。
输出格式:一行,为最多能拦截的导弹数。
样例输入:389 207 155 300 299 170 158 65
样例输出:6
样例数据解释:最多能拦截6枚导弹,拦截高度依次是:389、300、299、170、158、65。
设计思路:学生已经初步学习了穷举、搜索、动态规划、贪心等算法,对每种算法的思想和实现方式都已基本掌握,但对算法的原理、算法的适用性、算法间的联系等从知识点到知识面的建构过渡还不自然,采用求解探究模式能引导学生厘清它们之间的关系,提升算法综合应用的能力。
自主探究准备:学生自由选择学伴形成探究小组(建议人数不超过3人),准备学前待思考的问题,提供辅助学习资源(主要是网络资源),设计学习完成后的评价反馈。
学前思考问题:①你学习过哪些算法?②你比较擅长使用哪种算法?③对于你不擅长的算法主要困难是什么?(原理不清/代码编写困难/不会应用)④对于本课问题,列出你所有可行的方案。⑤自己选择部分环节预估学习时间,学习之后记录实际学习时间,尝试评估自己的学习效率。
评价反馈:各小组制作一份研究报告,回顾研究过程,汇报研究成果,提出研究中的困难;组织所有成员进行交流,交流之后填写学习记录,反思研究过程中自己的收获和不足。
实施效果:在教学实践中,有些学生只是用搜索和动态规划两种算法分别解决了问题,并未做深入思考便结束了探究。另外一些学生则精益求精,更具钻研能力,不仅用搜索、动态规划和贪心三种算法分别解决了问题,而且对三种算法的时空复杂进行了对比研究,厘清了三种算法间的联系,获得了非常好的学习效果。在本阶段的探究学习中,学生学习能力的差异逐渐显现出来,探究学习用时和学习效果都相差较大。
与自主体验阶段相比,教师布置的探究任务不再具体细致,往往是给出一个待解问题或一个专题知识名称,学生需要深入思考并理解探究任务,才能确定自主探究的目标。需要学生迁移的前概念和既有经验较为隐蔽和宽泛,教师提供的平台和学习资源也更为开放,学生需要鉴别、判断并选择合适的学习资源进行学习。本阶段的实践验证、交流汇报环节非常关键,学生自主探究的效果在此环节得到自评和他评,为学生进行自我调整提供可靠依据,教师在整个探究过程中要关心和引导各个探究小组,确保探究方向及学习的有效性。本阶段自主探究学习的目标并不仅仅定位为掌握学科知识,更重要的是引导学生去关注自主探究的过程,如是否学会发现问题、是否清楚自己在学习中的长项和短处、是否了解自己在自主探究过程中的困难、是否了解自主探究用时的情况等,让学生逐渐学会给自己定位,如明白在探究学习过程中应该做什么、如何有效率地学习、怎样不断调整自己以达到更好的效果等,提升探究学习能力,为初步形成规划意识做准备。
3.自我规划,提升素养
2016年9月,《中国学生发展核心素养》总体框架正式发布,它把“自主发展”作为“全面发展的人”的一个重要方面。通过前面阶段的探究学习,学生已养成及时总结反思和填写学习记录表的习惯,促使他们了解自己并给自己比较准确地定位。进入本阶段学习的学生已经具备了扎实的双基基础和较强的自主学习能力,开始尝试制订个人学习计划并在自我规划下一步步提升自己的实力,慢慢成长为自主发展的成熟个体,自我规划式探究学习模式如下页图3所示。
刚刚进入本阶段学习的学生还不很明确下一步探究的方向,教师可以根据学生学习情况提供探究方向让他们参考,从选择探究方向、确定目标、制订计划、实施学习过程到总结评价,学生全面进入自我规划下的探究学习。教师一般在学生有需要时才进行互动和必要的干预,否则全部由学生自主完成。教师在本阶段要及时补充学生需要的学习资源,提供合适的平台和条件,鼓励学生和实力相当的高手同台竞技,与高水平学生进行交流互动。在2019年的GES大会上,北京师范大学副校长陈丽教授认为,互联网+教育环境下,构建开放互动的信息网络,是这个时代教育的本质,联通成为了教育的新的本质。本阶段教师特别要努力构建开放互动的学习网络平台,全面打造教师-教师、教师-学生、学生-学生、人-资源互相联通的学习环境,协助学生更准确地定位,科学地评价自己,并不断调整学习过程,提升自我规划的能力。
● 总结
近几年,笔者进行了三段式探究学习模式的探索与实践,有了一些收获和体会。相比于以前的传统教法,学生在自主体验学习阶段,可以更容易被教师关注到,教师能更精准地了解学生的学习情况和学习进展,便于及时发现编程兴趣不浓的学生,通过有效沟通让他们及时选择其他发展方向。那些已经进入自主探究阶段的学生,他们会主动安排课余时间积极投入学习,其间有部分学生由于学习进展缓慢和时间冲突等问题主动选择了暂时中断编程学习,他们随后在文化课学习方面也表现出目标明确且善于学习。最终能够进行自主规划学习的学生,不仅在信息学专业特长方面有优异的表现,而且在其他学习领域也表现出很强的学习能力和规划能力。
图4将探究学习三阶段与学生成长过程、学生培养目标用三个维度图示了三者的关系,形成闭环的部分产生循环,实现螺旋式提升。在实际教学中,教师应该因材施教,而不是呆板地按照三个阶段顺次进行,每个阶段进展的用时也要因人而异,有时,三种教学模式可根据需要融合使用。教师在教学过程中要按照学生发展的自然规律,充分利用学生已有知识和能力,分阶段创新教学模式,优化教学资源,丰富教学平台,并进行动态科学评价,更精准地引导学生成长,使学生认识与众不同的自我,拥有个性化的学习历程,形成个性化学习规划,并对未来的学习和生活产生更长远的有益影响,这是一条值得探索的新思路。