时间:2024-05-04
高 蕾,王志英
(国防科技大学 计算机学院,湖南 长沙 410073)
随着信息化社会逐步向智能时代推进,计算机程序设计能力不再是计算机专业学生的独门技能,已成为普适于各行业各领域人员的基本素质。随着近两年国内掀起的全民编程热潮,计算机程序设计得到了教育部门和社会民众的广泛关注,并呈现出从精英教育逐渐走向普世教育的趋势。计算机程序设计类课程作为高等学校教育中非常重要的公共基础课程,很多高校在大学一年级就已开设,为了让学生短、平、快地学习一门程序设计语言,C++、Python等学习门槛相对较低的程序语言成为最佳选择。程序设计类课程的特点是概念多、涉及面广、难度大、抽象性高,同时有很强的实践性和应用性[1]。该课程的目标是使学生掌握计算机程序设计的相关基础知识,培养学生的分析问题能力和利用计算机求解问题的能力,不断提升学生的信息处理素养,使其能跟上时代发展的步伐。
国防科技大学计算机学院开设的计算机程序设计类课程旨在培养学生的动手实践能力,在课时比例分配、作业提交与批改、考核方式等方面都有所体现。首先是实验课时的比例逐年增长,课程的课堂讲授和实验的课时比例一般不高于2:1,通过充足的实验课保障学生有足够的动手编程时间。其次,所有作业的提交和批改全部在线完成,笔者采用Trustie创新实践平台[2]作为课件等资源共享、作业发布和提交、答疑解惑、热点讨论的平台,所有作业以编程练习的形式发布给学生,学生可以直接在该平台上编程并提交,由于作业下发前已由教师事先设计好作业验收的测试案例,学生在线提交后会立刻得到程序是否正确的提示信息,进而可以依据提示信息修改、测试自己的程序,直到程序测试通过。采用这种作业在线测试提交方式,学生对于编程的体验变得更深刻,同时可以有效提高学生查纠改程序错误的能力。第三,课程考核采用上机编程考试,由计算机考试系统统一阅卷。机试考核对学生平时编程练习是一个很好的促进,能够比较真实地反映学生的实际编程水平,并有效保证考试的客观公正。
在各种改革措施的牵引下,学生动手编程的能力普遍提升,课程整体教学效果得到明显改善,但教学过程中仍暴露诸多问题,主要体现在以下几个方面。
(1)传统课堂讲授和新型教学方式在新生教学方面都存在局限性。虽然各高校的计算机程序设计课大多采用课堂教学与编程实验相结合的形式组织教学,但是课堂讲授仍作为教学中最重要的环节占据大量教学时间,不可避免地存在偏重知识灌输、学生被动听、缺乏学习兴趣、教与练脱节等一系列问题。实际上这并不是唯一的教学组织方式,MOOC、翻转课堂、微课等很多新型教学形式已经不断被引入,为计算机程序设计类课程提供了新的助力,也对学生的自主学习能力提出更高要求。而对于大学新人,中学建立的学习模式无法立即改变、对新知识新思维的接受程度差异大、自我管理能力缺乏、课下时间有限等问题表现得尤为突出,容易造成学生对知识点的理解不深入或产生偏差,知识学习变得零散化,无法系统掌握一门编程语言及编程技术,这些都使新型教学方式无法有效开展并发挥其优势。
(2)编程练习缺乏跟踪互动,实际效果比预期差。程序设计编程练习主要安排在实验课开展,课堂讲授中也会根据知识点穿插一些简单的编程练习。俗话说熟能生巧,很多教师都会用这句话激励学生多练习,提高编程水平。但实际上,每次实验的目标、任务以及涉及的编程技巧不同,虽然教师安排的练习内容很充实,但缺乏足够的反馈,学生往往因为对实验知识点不熟悉、拿到练习题无从下手、不会查纠程序错误等原因,导致实验课上编程练习的进度减慢,练习效果并不理想,无法达到教师的预期实验目标。究其根源在于教师并没有根据学生实际情况组织实验进度,学生有效的反馈与教师合理设计练习题目同样至关重要。
(3)编程实践的内容脱离学生实际。经常有学生抱怨说千辛万苦学习了一门复杂的编程语言,却只能用来解决鸡兔同笼、杨辉三角之类的“无用问题”,感觉学习很失败。导致学生产生这种想法的原因在于,教师在设计编程练习时往往只考虑到题目的编程难度、题目与知识点的结合程度等方面,而忽视了这些题目与学生的知识背景严重不符,让学生无法提起编程的兴趣。而类似二分算法、背包问题等有一定编程难度的算法类问题更受学生欢迎,让学生觉得这些题目更具有实际意义、与其他课程内容有联结,甚至产生自己可以编出程序的自信感和自我认同,容易激发学生编程的主动性和积极性。因此,课程实验内容设计应从学生已有知识背景出发,真正做到为学而教,让学生学习有的放矢。
所谓知识迁移就是一种学习对另一种学习的影响,是在一种情景中技能、知识和理解的获得或者态度形成的影响,以及利用所学的技能、知识等解决问题的过程[3]。大学新生对知识迁移并不陌生,他们以往获得的知识都是通过对已有知识的迁移整合逐步习得,也就是常说的举一反三、触类旁通,这种方式在大多情况下会对学生的学习产生正面积极的刺激效应,能够将学生快速带入新知识的学习情境[4]。针对在计算机程序设计类课程教学中发现的问题,笔者开展基于知识迁移的教学实践探索,将从下面3个方面研究如何组织课堂教学与设计编程实践内容,实现教、学、练的有机结合,进而培养学生自主学习和发现、研究问题的能力。
知识迁移注重在新旧知识之间架构桥梁,已被学生熟练掌握的中学数理学理论将成为知识迁移的首选。其优势在于学生充分熟悉,当迁移到新知识学习时难度最小且利于学生产生共鸣及自主思考,有利于开展良性的课堂互动。教学实践内容的设计可以将学生已储备的数理学领域理论知识与实例,通过知识迁移引入编程实践练习,训练学生通过编写程序完成相应计算,使学生快速掌握使用计算机进行问题求解的思想和方法,进而逐步培养学生利用计算机解决科学研究和工程实践问题的能力。经过多年的知识积累与学习历练,学生一般对数理学领域的知识构建了比较系统的知识体系,形成了一套具有自身特色的知识学习系统。当接收新领域新知识时,特别是具有严格语法规则、表达符号化且蕴含一定逻辑思维的程序语言时,学生难免产生挫败感或排斥性,延长了新知识的学习时间。但如果引入一个学生很熟悉的场景、概念、理论或应用,学习过程中产生的不适感会大大降低。例如,C++语言中二维数组的表示与应用,这一知识点在课堂讲授中比较抽象,学生并不容易理解与掌握;如果关联数学中的矩阵对照学习,并选取矩阵相关练习题目进行编程巩固,这个知识点的掌握就变得轻松多了。为此,教师可以充分考虑学生已有知识背景,选取具有实际意义的练习题目,编排有利于促进知识迁移的教学实践内容,引导学生自主学习。利用编程练习激活学生已有知识,当学生将新知识与已有知识联系起来时,学习将变得更高效,也更有利于学生自身整合新知识。
另一方面,可以利用平行课程的理论知识牵引编程实践,实现交叉学科知识间的相互促进与共赢。大多数高校在大学一年级都会开设高等数学、物理学、线性代数等公共基础课程,其特点是难度较大、学习周期长、具有较强理论与实用背景。可以选取这些平行课程中理论知识或实践应用迁移到程序设计课程的编程练习中,利用学生学习数理知识的先天优势带动程序设计学习的积极性,并借助编程解题的快捷性帮助学生巩固对数理知识的理解和运用。例如,可以利用编程实现高等数学、物理学中复杂公式的快速计算与测试。通过建立不同学科之间知识的内在联系,学习不再是抽象的行为,实现了知识的学以致用,让学生真正感受到程序语言学习的实际意义所在。但也应该注意到,学生将数理学知识与编程实践结合时会存在一个磨合和转化的过程,这时仍需要教师做适当的引导;同时,教师必须同步跟踪平行课程的授课内容与进度,并要求对迁移使用的数理学知识必须充分掌握与灵活运用。
利用思维导图梳理和细化教学内容及教学组织形式,应选择有内在联结的数理学知识构建有效的知识迁移场景。传统课堂讲授的优势在于能够引导学生注意力、捕获学生课堂反馈,但需考虑如何避免满堂灌、互动少、只学不练等问题。之所以会出现上述情况,大多是因为教师对知识点的梳理不够清晰以及对教学进度把握不准确引起的。一般来说,一堂课的时间里学生接受新知识或新技能的数量不超过3个[5],如何在有限时间内重点讲授有价值的知识点,需要教师对知识点进行反复斟酌取舍甚至提前演练,以提高课堂教学效率。课程组在开课前首先会整理归纳教学内容,将每一章的教学目标、涵盖的知识点、知识点评价方法以及可实施的课堂教学活动利用思维导图[6]表示出来,其优点是有助于呈现各模块知识点之间的隶属或关联,利于辅助教师将数理学知识迁移到适合的知识讲授和实践活动中,从而促进学生构建完整的知识体系,使课程整体脉络更清晰,课程内容更系统化[7]。图1给出一个简单思维导图示例。针对程序语言中函数定义这一知识点的讲授,使用思维导图给出了具体教学目标与课堂上可以开展的教学活动,并将学生熟悉的数学函数知识迁移引入程序函数的学习,让学生对程序函数的写法和使用有更直观的印象。在适合的知识迁移场景下,教师可以更有效地开展讲授、实验、研讨、对抗赛等形式的教学活动。
图1 函数定义思维导图示例
可以采用课堂讲授与实践练习紧耦合的教学模式提高知识迁移的教学效果。在教师构建的知识迁移场景下,学生将新旧知识建立联结关系,为了深化该联结并快速应用于新知识学习情境,需要结合编程练习来强化新知识的运用。很多教师往往将知识点讲授和编程练习这两个紧密相关的环节安排在课堂和实验课中独立开展,旧知识迁移到新环境下未及时融会贯通,同样会降低学生的实际学习效率,特别是在学生尚未具备使用计算思维分析解决问题能力的情况下,还需要教师的耐心引导。因此,笔者鼓励教师以边讲边练的形式组织教学活动,由教师引导学生编程,使学生逐步获得分析问题、用程序语言表达解题过程的思路与方法。为了提高学生编程实践的效率,笔者利用网络上公开使用的实训平台[8]辅助学生的编程练习,将知识、方法和技术融入编程实战训练。该实训平台提供了知识传授与工程实战一体化的自主学习模式,教师根据知识点与知识迁移场景设计配套练习题,以实训的形式提前部署在平台上,学生以类似游戏闯关的形式在线完成这组编程练习。题目设置上不要求学生写出完整程序,而是根据任务要求补充程序语句的形式完成闯关任务。任务说明中还会给出此练习涉及的具体知识点与解决该类问题要使用的语句及程序示例,引导学生快速进入闯关实战状态。当知识点讲授完之后,教师可以立即组织学生在实训平台上开展训练,实践和巩固知识迁移后在新环境下的运用,调动学生编程的积极性,而游戏闯关式的编程训练模式也更容易激发学生自发完成任务关、挑战更难关的学习欲望。
为了充分重视学生的主体地位,避免只重结果不重过程的被动评价模式,笔者采用过程评价和终结评价两种方式对学生在知识迁移后的学习情况做评估,实现对学生的学习动机、过程和效果三位一体的综合评价。
过程评价主要对学生日常学习过程中的表现、反映出的情感与态度等方面的发展情况作出评价[9],这是一个基于对学生学习过程的持续观察、记录、反思做出的动态评价过程。当激活的旧知识迁移应用到新知识环境下时,必须对学生的学习效果做出判断,引导学生完成知识正向迁移与运用。例如,在图1思维导图基础上,笔者增加了数学函数知识迁移到函数定义学习中时所需的过程评价标准,见图2,用以对学生在知识迁移场景下新知识的学习情况作出评价。过程评价可以通过教师课堂观察、课堂提问、比赛、游戏等实践活动的记录以及问卷调查、教辅分组辅导反馈、学生自评与互评等形式进行评价。譬如,笔者对学生采用小组集中辅导方式,为每5~8人的编程小组里安排一名教辅跟进辅导,教辅主要针对知识迁移运用中存在的疑惑进行解答、督促学生练习进度并给出学习进展评价,结果显示学生编写、调试代码能力得到迅速提升。教师通过各种过程评价获取的关键信息有助于对教学行为与学生学习行为进行分析判断,为调整教学方案与设置合理知识迁移场景提供参考和依据。终结评价包含阶段性测试与期末测试两部分,主要采用上机考试与量化分数形式进行评价。终结评价仍以知识迁移场景为主题,结合知识点混合应用来设计考试题目,主要对学生通过计算机编程分析解决复杂实际问题的能力进行考核与评价。
计算机程序设计类课程采用基于知识迁移方式开展课堂讲授与编程训练紧密结合的教学实践活动,有利于学生快速整合已有知识来构建新知识学习情境,促进学生利用计算思维分析问题与解决问题能力的培养,同时也能够激励学生主动学习、积极思考与参与教学过程,有效提高教学质量,也让学生切实感受到程序语言学习的实际意义所在,真正做到学习有的放矢。
图2 增加过程评价的函数定义思维导图
我们致力于保护作者版权,注重分享,被刊用文章因无法核实真实出处,未能及时与作者取得联系,或有版权异议的,请联系管理员,我们会立即处理! 部分文章是来自各大过期杂志,内容仅供学习参考,不准确地方联系删除处理!