以“自主编程”促自主发展

2021-07-01 00:42荆晓虹
关键词:自主发展自主探究

摘要:在编程教学中,教师应充分利用信息技术和编程课程优势,更多地关注每个学生不同时期的特质,分阶段循序渐进地让学生“自主编程”。通过自主体验、自主探究、自我规划三段式“自主编程”,助力学生形成自主优化意识,掌握自我提升的方法,提升自我规划能力,以促进学生的自主发展。

关键词:编程教学;自主发展;自主体验;自主探究;自我规划

一、什么是“自主编程”

自主是指“自己不受他人支配,是行为的主宰者”,是个体内部力量的“自我管理”“自我调节”“自我支配”。著名学者庞维国先生认为,学生自我意识发展上的“能学”、内在学习动机上的“想学”、掌握学习方法策略上的“会学”、激发意志不断努力上的“坚持学”构成了当前的自主学习。自主能力并不是先天遗传的,而是后天获得的、趋于稳定的目标驱动。它不需要别人的监控,在任何环境下都能够将目标与自身协调配合,从而达到主动判断、主动选择、主动承担。它是对自我的高度掌控,对自身的高效运用。

《中国学生发展核心素养》提出,“自主发展”是“全面发展的人”这一核心的三个方面之一。黄建煌指出,自主发展指学生在逐步学会自我教育的基础上的主动发展,即学生的独立性、主动性和创造性得到充分发挥,产生自觉接受教育的内在动机,发掘自身潜力,明确学习的方向,确定人生的目标,实现主动、和谐、全面的发展。

笔者在多年的编程教学中不断探索,从遵循人的发展规律培养人才的角度出發,引导学生通过自主体验编程的过程,自主探究算法优化的原理,自主实践验证算法和自主优化算法及程序等环节,经历“自主编程”的学习过程。“自主编程”,一方面可以充分激发学生学习的主动性,培养其自主学习的能力,达成自主学习目标;另一方面可以促使学生迁移运用,掌握自我提升的方法,培养自我规划的能力,将编程过程中对程序本身的不断优化体会,转变成成长过程中对自身认识和能力的持续“优化”,形成自主发展的意识和方法。通过“自主编程”,学生可以逐步实现自觉以自身条件和需求为基础,结合学习内容自主制订学习目标和选择适当学习方法,会进行自我评价和自我调控,从而实现编程知识的螺旋式提升和自身的自主发展。

二、“自主编程”的教学探索

笔者纵向研究了探究学习模式在编程教学不同阶段的应用并进行了优化,总结出了自主体验、自主探究、自我规划三段式“自主编程”探究学习进阶路径。

(一)“自主体验式编程”,引导学生形成自主优化意识

编程是将现实世界和虚拟世界联系起来的纽带之一,现实生活中的大多数问题,都可以重新阐述为一个可以通过计算机程序解决的问题。

教师可以引导刚进入编程学习的学生,将身边有趣的、具有挑战性的问题加以抽象,开展“自主体验式编程”(流程图如图1)。要充分实现教育目标和要求,必须通过内因产生作用,激发受教育者内在的积极性、主动性与自觉性。正如积极心理学所强调的,通过关注与激发个体优秀品质与潜能,来促进其自我完善、修复与发展,应对外部环境变化。学生在开展“自主体验式编程”中,亲身体验和经历解决问题的过程,主动学习新知识,探究算法形成和优化的原理,进而形成自主优化意识。这是引导学生开展探究学习的初始阶段。教师可以采用项目、任务、活动和实验等多种教学策略和方法,设计典型教学案例,重点让学生通过看、听、说、做、思等途径初步了解探究学习的基本方法,规范探究学习的操作过程,尝试认识自我,学会比较和评价,明晰成长的方向。

例如,教学“二分查找算法”时,教师通过“猜价格”游戏,引导学生开展“自主体验式编程”。教学过程如下:

1.试玩“猜价格”游戏。教师告诉学生钢笔的价格是不超过20元的整数,让他们猜钢笔的真实价格。如果学生没有猜对,教师提示他猜的价格是高了,还是低了,然后学生根据提示再继续猜,直到猜中价格。

2.师生互换角色,学生设定价格,教师(或其他同学)来猜,在游戏中深度思考。

3.学生发现教师(同学)猜得快的秘密,梳理他们猜价格的过程,并描述其步骤。第一次总是猜10,如果提示低了,就再猜15,如果提示高了,就再猜5,即每次猜的数都是某个范围内的中间数。用这样的方法,最多四次就可以猜对价格。

4.比较两种查找算法,并尝试设计程序完成小项目“猜价格游戏”。

在设计项目程序时,由于能力差异,有的学生能迅速理清思路,编写出正确程序,有些学生编写的程序可能会出现问题,需要反复调试。由于学生实践的都是自己设计的代码,所以他们不会轻易放弃,会在老师和同学的帮助下,不断纠错,最终体验到完成任务的成就感。这样,学生会觉得学习是轻松有趣的,会更有信心去解决问题,会更勇敢地表达自己的想法,并且勇于实践自己设计的算法。学生运用已有知识和经验进行迁移,在自主体验中尝试解决问题,在深入思考后构建新知识,在不同算法的比较中理解优化的含义,初步形成自主优化意识。

(二)“自主探究式编程”,促使学生掌握自我提升的方法

自我提升也被称为自我增强、自我提高,是心理学研究者公认的自我评价中普遍存在的一种倾向。泰勒等在“肯定错觉”(positive illusion)理论中提出,自我提升是指个体用有利于对自身作出正面评价的方式,收集和解释有关自我的信息。它其实是个体对自身相关信息进行认知评定时出现的一种积极偏向,是人们实现和维持良好自我感觉的一种方式。编程学习通常贯穿着一个接一个问题的解决,解决方案的优劣可以通过程序运行的结果来检测。测试数据的通过率,程序运行速度,以及程序所占用的内存资源,是评价程序优劣的主要标准。这些评价过程的可视化程度非常高,强烈刺激学生将优化算法的努力过程与所获成效建立紧密联系;推动他们收集相关信息,对自身的行为和方法作出正面评价;促使他们将优化算法的思路方法迁移至日常学习和生活中,逐步掌握科学规划时间、合理组织和利用空间、提高做事效率等自我提升的方法。

学生通过一段时间“自主体验式编程”的学习,会具备一定的编程基础知识和一定的自主学习的方法,即可进入“自主探究式编程”(流程图如图2)阶段。本阶段主要是教师安排具体的项目和主题来组织学生开展探究。教师要注意提供给学生独立思考、主动探究和合作学习的机会,让他们使用更开放的学习资源,大胆假设、谨慎验证、加强合作,在不断试错、纠错、自我认可和取长补短中学会定位自身。同时,教师需把握住教育契机,引导学生通过优化程序的过程,努力改善自己的思维缺陷和学习习惯,使算法优化与自我提升相得益彰。在不断优化算法的过程中,学生更深入地理解“以时间换空间” “挖掘数据的性质建立关联”等计算思维。这将潜移默化地影响学生的成长,让他们的思维更灵活,思路更开阔,更具创新能力。经历不断优化算法的学习过程,能够促进学生树立“其他事情也可以越做越好”“每个人都可以不断进步”的信念。

例如,教师引导学生开展“自主体验式编程”《解决“八皇后”问题的算法》的过程如下:

1.教师首先布置探究主题“解决‘八皇后问题的算法”:将n个皇后放置在n行n列的棋盘上,并且使皇后彼此之间不能相互攻击,即任意两个皇后不能在同一行、同一列和同一对角线上,计算不同的摆放方案数。接着,引导学生明确探究的思路,即从小规模的问题开始,由易及难,循序渐进,逐步扩大规模。教师可以将探究的主题划分为若干层次的子任务加以呈现,并提供给学生学习资源,指导学生从网络上获取更多有效学习资源的方法。

2.在任务记录表的指引下,学生组成小组展开合作探究学习。任务记录表包括数据规模、主要算法、时间复杂度分析、算法来源、探究学习时间、疑难问题、收获感悟和主要负责人等内容,确保学生沿着正确的方向开展探究,保障探究学习的效率。教师适时查看学生的任务记录表,了解学生学习的进度以及存在的困难,并提供必要的帮助。

3.探究学习交流汇报。教师组织或者直接由学生主持汇报会,各小组介绍探究学习成果,回忆并分享印象最深刻的学习过程、收获和存在的困难,其他小组适时地评价和补充。教师根据汇报的内容进行点评,也可引导学生发现新的问题,启发优化算法的思路。通过仔细分析数据和充分利用关联,帮助学生找到算法优化的切入口,并引导他们联系现实生活,将数据聚集、存放迁移至生活中物品的分类管理,将自动化求解思维迁移至问题解决过程的有序化,将加强数据间的联系迁移至构建学科知识网络,促使学生逐步形成可理解、可操作的自我提升思路。

在探究学习的过程中,不同的学生表现出明显的差异性。比如,所有小组都成功地通过想象模拟出了4个棋子的摆放,并用穷举算法解决了问题。有一半的小组能探究到第二个层次,用搜索算法解决8个棋子的问题。有学生在搜索资源的过程中了解到更多信息,如数学家高斯当时在计算“八皇后”问题时多算了两种情况。还有的学生发现了多种不同的程序代码。学生通过程序与他人进行跨越时空的交流,这种独特的交流方式让他们进一步了解到自己在编程学习中的优势和劣势,帮助他们学会自我评价和定位。少部分小组在教师的引导下,更是积极地尝试探究位运算优化算法以解决更大规模的棋盘问题。在交流汇报中,其他小组成员被这种算法的高效所震惊,并有所触动。最终,教师演示“舞蹈链(Dancing Links)算法”。

通過这样的过程,学生体会到学习的永无止境和精益求精的科学精神,从而在生活和其他学习领域中也不断探寻优化空间,不断追求卓越。小组合作探究的学习模式促进了学生之间的交往,使学生在交流与合作中学会发现自我、评价自我、调控自我、完善自我,实现自我提升。

教师在教学过程中如果轻易将他人的算法和程序“灌输”给学生,表面上看,学生解决问题的速度加快了;实际上,这将导致学生对问题的本质分析不透彻,对所用算法的理解不深入。久而久之,学生会对算法设计和程序编写产生畏难情绪,严重影响他们的编程学习兴趣和进展。编程教学环境的开放,为学生的自主探究提供了有利条件。一方面,现代计算机和网络技术的发展,有利于学生获取大量开放的学习资源,有助于学生开展“自主探究式编程”;另一方面,在编程过程中,学生可以大胆将自己的想法在计算机上进行验证,学习理论与实践验证同步发展,快速便捷地进行优劣对比和自我评价。

通过这样的自主探究学习过程,充分调动学生思考和实践的积极性,促进学生的思维向深度发展。学生的计算思维和解决问题的能力在不断地自我评价、自我纠错、相互比较和自我定位过程中得以提升,从而为他们的自主发展打下坚实的基础。

(三)“自我规划式编程”,提升学生的自主规划能力

在学生具备较高水准自主学习能力的前提下,教师可引领他们开展第三阶段“自我规划式编程”(流程图如图3)学习,允许他们自行选择合适的学习内容、制订学习计划、展开探究学习。教师要注意引导学生记录学习过程,定期梳理和归纳,并积极反思学习中存在的问题,开展自我评价和调整,使学习的规划越来越完善,提升自主规划能力。

本阶段,教师引导学生探究的问题往往不是某一个具体的题目,而是给出一个探究方向或专题,探究某一类问题的解决方案,如图的最短路问题、树的直径问题等。此类问题本身具有较强的延展性,并且可以采用多种方法建模和实现,利于学生用更广阔的视角规划、对比、反思和归纳,提升综合运用知识解决问题的能力。教师也可以让学生针对某个专题知识进行复习和总结,如动态规划算法的优化方法、分块思想的应用等,引导学生自主构建更全面的知识网络。

例如,当学生学习了线段树、ST表、分块等数据结构后,教师可以给出RMQ问题,让学生探究其解决方法。RMQ (Range Minimum/Maximum Query)问题是指,对于长度为n的数列A,回答若干询问RMQ(A,i,j)(i,j<=n),返回数列A中下标在i,j里的最小(大)值,即求区间最值问题。学生在教师的引导和学习资源的支撑下,从朴素的搜索算法到基于动态规划算法的ST表,再到基于分治算法的线段树和树状数组,既对各种算法进行了横向联系和比较,又对数据结构的重要性有了更深入的理解。

“学后总结评价”是本阶段的重要环节,教师可以让学生围绕探究的问题制作PPT汇报学习过程和收获,或者指导学生撰写某一专题的小论文。整个学习过程由学生自主规划和实施,教师只在学生求助时才提供必要的帮助。学生在自主完成前一个学习任务之后,自行发现新问题或在教师引导下将问题升级,生成一个待解决的新问题。如此循环迭代,促进自身优化旧知识和构建新知识,形成螺旋式提升。学生在“自我规划式编程”学习过程中,更清晰地知道自己的优势和短板,也更能把控自己的学习过程,逐渐确立探究方向,逐步走向自主发展。

在编程教学中,教师应充分利用信息技术和编程课程优势,更多地关注每个学生不同时期的特质,分阶段循序渐进地实施“自主编程”,帮助学生形成自主优化意识,生成自我提升的方法,提升自我规划能力,促进自主发展。

参考文献:

[1] 庞维国.自主学习:学与教的原理和策略[M].上海:华东师范大学出版社,2003.

[2] 刘家春.高中数学自主学习的探究[D].武汉:华中师范大学,2012.

[3] 黄建煌.基于核心素养的学生自主发展能力培养探赜[J].成才之路,2020(17).

[4] 连惠芗.积极心理学视域下自我教育优化的心理机制[J].中学政治教学参考,2018(18).

[5] 荆晓虹.“自主体验、自主探究、自我规划”三段式探究学习模式在中学编程教育中的实践与探索[J]. 中国信息技术教育,2020(5/6).

[6] 董玉琦,等.学习技术研究导论[M].北京:教育科学出版社,2020.

[7] 张进辅.现代青年心理学[M].重庆:重庆出版社,2002.

猜你喜欢
自主发展自主探究
创设教学空间对小学美术课堂教学的作用
借助自主探究式学习,提高课堂教学的有效性
试析地方中学英语教师的自主发展策略
构建优质高中数学课堂,实现活力教学
培养学生自主探究能力的策略研究
信息技术教学中学生自主探究能力的培养探析
自主探究 张扬个性
信息时代下职校专业教师自主发展探微
基于儿童本位的学习方式新探