新文科背景下文科院校的C语言教学改革研究
作者: 邓瑞 刘 蓓 古丽茹·吐尔逊
[摘 要]新文科建设是未来教育发展的强大引擎,是实现“十四五”规划及二0三五年远景目标的必经之路。与传统文科建设不同,新文科建设强调学科之间的融合、交叉和创新,鼓励培养学生的跨学科思维以及解决复杂问题的能力。为了推动新文科建设,全国各大文科院校近年来纷纷开展教学改革,并逐步将计算机编程教育融入文科专业的教学体系中。但目前以C语言程序设计为代表的编程课程在文科院校并未取得理想的教学效果。文章首先以问卷的形式对文科生C语言的学习现状及困境进行了调查,然后在此基础上从激发学习兴趣、培养计算思维、优化学习模式等方面入手,对文科院校的C语言教学提出了一系列的改革策略,并就本课题的研究方向进行了展望。
[关键词]新文科;C语言;教学改革;学习兴趣;计算思维;学习模式
[中图分类号] G642.0 [文献标识码] A [文章编号] 2095-3437(2022)11-0006-05
引言
随着新科技革命的到来,人工智能、大数据、云计算、区块链等新技术大量涌现,这些技术不仅对人类生产和生活方式产生了影响,而且推动了产业革命,改变了社会对人才的需求[1]。培养知识更复合、学科更融合、实践能力更强的新型人才,逐渐成为我国社会发展的迫切需要和必然选择。为了适应时代发展,教育部于2019年4月启动了“六卓越一拔尖”计划2.0,提出全面推进新文科建设,开展跨学科研究,培养“文理兼通”的新文科人才[2]。全国各高校在教育部的指导下不断优化课程设置体系,将智能技术、计算机应用计算、大数据等融入新文科教育中,培养学生的跨学科思维和解决综合复杂问题的能力。
近年来,作为互联网、人工智能等高新技术的基础和核心,以C语言程序设计课程为主的计算机编程教育在文科院校及文科专业相继开展,并逐渐受到重视。但在实践中,教学效果并不理想。因此,学者从不同的切入点研究了C语言程序设计教学改革策略,包括改进传统教学方法、调整教学实践案例、改革评价方式 [3-4],设计基于微信小程序的移动学习平台[5]等。针对具体教学问题,如通用程序占比过高、案例程序之间缺乏联系等,学者提出了以教学环节专业化为目标的改革方案[6]、以实践为导向的案例教学[7]、以“逐步迭代”为核心的项目式案例[8]等。但这些策略均是基于对理工科的教学现状调研及实践总结提出的,并未考虑文科与理科在教学目标、授课群体、基本学情等方面的差异,故难以直接应用于文科教学改革中。文科生长期以来多以形象思维训练为主,这使其在编写缜密的程序过程中遇到不少困难,在学习C语言时有心理障碍。为此,江国粹[9]提出淡化语言本身语句的介绍,并在分析程序和程序设计中贯穿算法设计思想。案例式教学与阶梯教学相结合、传统教学与多媒体教学相结合的教学方式对提升教学效果有一定的帮助[10]。为了客观准确地了解学生的学习情况和需求,以更好地总结教学经验,李激、宗恒[11]面向侦查学专业学生进行问卷调查,但其调查样本中除文科生之外,还包含53.1%的理科生,且调查问卷对课时、教材等相关问题的设置占大部分,其就此提出的改进建议具有一定的应用局限性。
本文结合态度的结构理论[12],从文科生的认知、情感、学习行为出发,对课程重要性认知、学习兴趣、投入时间及学习阻力进行调查,分析文科生群体在C语言学习中存在的问题,并在此基础上有针对性地提出涉及学习兴趣激发、计算思维培养、学习模式优化的文科院校C语言教学改革策略。
一、调查问卷结果及分析
本文对开设C语言程序设计课程的文学类专业本科生进行匿名问卷调查,调查内容包含课程重要性认知、学习兴趣、学习投入时间、学习阻力5个部分。本次调查历时2个月,共回收有效问卷145份。
(一)重要性认知
学习态度中的认知成分是学习者对学习活动中特定对象的价值判断。这种价值判断决定了一个学生是否能够体会或认可学习本身的价值,即为什么要学习、学到有什么用处、是否值得努力去学习。而是否愿意接纳学习活动所具有的价值,就构成了学习态度的认知基础,并影响着学习态度。明确学习目的并确信所学知识的意义,是推动学习活动持久深入进行的最强大的力量[13]。因此,我们首先通过“你认为学习C语言的重要性如何”这一问题对学生的认知进行调查。从调查结果来看,只有4.9%的学生认为“不重要”或“非常不重要”(见图1)。接着,我们对认为学习C语言重要的学生进行追问“为什么认为学习C语言重要(多选)”, 有61.6%的学生认为学习C语言能提升就业升学方面的竞争力,60.1%的学生认为学习C语言有利于提升计算思维能力,52.2%的学生认为编程是未来的一种必备技能,有半数以上的学生认为学习C语言有助于理解计算机运行机制和原理,同时能为深入学习其他程序语言奠定基础。这说明学生可以从C语言对自身的价值、能力提升及编程在未来占据的优势地位中认识到学习C语言的重要性。
但不可忽视的是,此次调查中还有非常多的学生(占学生总数的85.5%)反映C语言的学习对解决生活中遇到的问题没有帮助,甚至还有26.8%的学生只想在这门高学分必修课获得好的成绩。这也暴露了他们被动学习的状态及自身 “学以致用”意识的薄弱。缺乏应用意识导致他们难以从分析问题和解决问题的探索过程中获取学习的满足感和成就感, 无法激发学习的兴趣和求知欲,从而形成一个感知心智活动的良性循环 [14]。
(二)学习兴趣
学生的学习兴趣表现在学习活动中心理上的爱好和追求的倾向,这是推动学习活动的内在动机,在教学中举足轻重[15]。我国古代教育家孔子曾说过:“知之者不如好知者,好知者不如乐知者。”我们对学生“是否对C语言课程感兴趣”这个问题进行提问,调查结果如图2所示。选择对C语言“感兴趣”或“非常感兴趣”的学生占42.0%,选择“不感兴趣”或“非常不感兴趣”的学生占13.1%,选择“一般”的学生占比为44.8%。约翰·扎勒的RAS理论模型认为,社会调查中的回答是个人关于某个议题的观点或倾向中随机抽取的一个样本[16],即这种项目无应答情况表明,他们可能某些时候对课程感兴趣,某一些时候则不感兴趣。为深入探究,我们设置了一道追问题,询问选择“一般”“不感兴趣”“非常不感兴趣”的学生不感兴趣的原因。
结果显示,缺少编程基础、上手难度较大是学生对课程不感兴趣的主要原因。调查显示,有86.2%的学生表示在学习C语言课程前并无编程学习经历,这使学生心理上对学习编程存在畏难或抵触情绪[10]。此外,与文科较为生动有趣的形象思维训练不同,编程抽象、枯燥,对逻辑思维的要求很高,这使部分学生在学习过程中很难体验到学习的快乐[9],再加上其无法意识到作为工具的程序能够助力学习、生活,他们对学习C语言程序设计的兴趣因此受到影响。
(三)学习投入时间
在学习投入时间方面,除了课堂时间,77.9%的学生每周学习C语言的时间不足2小时,平均每天不足半小时(以每周5天计算),甚至有11.0%的学生不学习,只有9.7%的学生能保证每天学习30分钟以上。
显而易见,能够保证投入充足时间学习的学生非常少。客观而言,学生的学业压力重,课程和作业多,导致分配给C语言课程的精力和时间十分有限。主观而言,在时间管理方面,学生缺乏有效利用碎片时间的意识,不够自律,因此,练习时间被压缩。
(四)学习阻力
对于学生在学习C语言过程中遇到的学习阻力,我们以多选的形式进行了调查,结果如图3所示。经过统计分析可知,无法理解算法逻辑、无法独立编程是学生最突出的两大阻力。算法是解题方案准确而完整的描述,算法逻辑是算法的核心。理解算法逻辑主要涉及以观察、整理为特性的实证思维和以推演为特性的逻辑思维。相较于对算法逻辑的理解,独立编程则需要运用简化、转换、递归、抽象、分解、建模等多种方法完成从实际需求到程序语言的整个过程,是创造力、数学思维,算法思维、批判性思维、问题解决、合作思维和沟通技能的共同体现。但是部分文科生由于实证意识欠缺、数学基础薄弱、思维训练不够,在理解算法逻辑和独立编程中不可避免地会存在大量问题,直接影响其学习的效果。
编制的程序在投入实际运行前,需要用编译程序等方法进行测试,修正语法错误,并对结果进行合理性分析,如果包含逻辑、语法错误,则要找出原因和具体的位置进行调试,排除程序中的故障。然而,由于上机课时有限、课后练习不足、缺乏实战经验,文科生对引发程序报错的原因不了解,且不知道可以通过什么方式解决或向什么人求助。因此,上机时出现错误不会调试也是不少学生遇到的一大阻力。
二、改革措施
(一) 多措并举,激发学习兴趣
学习兴趣的激发是学生学习的前提。拥有浓厚的学习兴趣是学习前进和发展的重要内在保障机制[17]。部分学生在C语言教学中存在学习兴趣不高的问题,通过调查分析得知,认知重要性与学习兴趣有很大的关系。在认为C语言课程“非常不重要”和“不重要”的学生中,没有人对该课程感兴趣,而在认为C语言课程“重要”的学生中只有10.77%的学生对该课程不感兴趣,认为该课程“非常重要”的学生中,仅6.06%的学生对该课程不感兴趣。认为课程重要的学生趋向于对课程感兴趣。这是由于在实际学习活动中,基于对课程的积极认知,学生从学习内容中获得新认知,从而产生对学习的内部心理需求,各种促使学习态度形成的信息,便顺利输入到个体的情绪情感体系中[13]。对于认为该课程“不重要”、对课程“不感兴趣”的学生,我们需要注意在教学各阶段通过启发式教学使其认识到课程的重要性。例如使用案例式教学法时可以结合专业特点,遵循实用性、适用性原则[3],使其认识到编程能够助力学习与工作,以增强其学科认同感。而对于已认识到课程重要性的学生,则可以针对其不感兴趣的原因多措并举,激发他们的学习兴趣。
1.祛魅:现身说法冲破心理障碍
入门阶段,由于信息来源有限,课程难度大、学不会的观念先入为主,开课前部分文科生普遍自我效能感较低,对自身能力存在错误认知。除此之外,他们对身份归属也存在错误认知。他们会认为自己应学习和其他文科生类似的课程,而不应该学习编程类的典型理工科课程。这样的认知错误导致了文科生对C语言课程的错误态度[13]。认识与理解是态度的基本要素。对他们的错误态度,我们需要提供更可靠、更有接近性的信息来源,以此来帮助其形成对课程的全面客观的认识和理解。具体来说,可以邀请本专业高年级学生以小型沙龙、座谈会的形式分享他们学习C语言的心得体会,使文科生在开课前形成积极接纳的态度,内容包括但不限于:入门阶段对课程的认识和担忧,学习过程中遇到的阻力和采取的对策,以及通过学习获得的成功体验(如运行成功的感受、编程应用到学习工作中的优势),甚至对自己未来规划的影响等。此外,开学“第一堂课”是学生和C语言的第一次近距离接触,这不仅会影响学生对课程的总体印象,还会影响学生未来的学习效果。因此,我们有必要在“第一堂课”就告知学生学习过程中可能出现的困难并给出相应的解决方案,以消除其面对突发问题时无从应对的恐惧,提升他们在未来学习中的自信心。
2.奠基:先导模块降低上手难度
调查显示,相当一部分学生表示编程上手难度大且枯燥抽象。这启发我们,教学内容需在对文科生信息素养和思维能力进行调研的基础上,从其原有的知识结构出发,进行难度适中的教学设计优化,以避免学生因上手难度大而丧失学习兴趣。对于涉及学生知识结构之外的内容,教师还需利用先导模块予以铺垫,以辅助学生完成对后续教学内容的理解与掌握,具体采用的方法可根据铺垫内容的难度来选择。若内容难度不大,可借助慕课平台、云班课平台或社交软件上传相关微课视频、Flash动画、多媒体课件等学习资料以供学生在课前自学;若内容难度较大,则可在课上开设短时的 “专题知识小讲堂”,以完善他们的知识结构体系。与此同时,先导模块还可以设置互动游戏作为引入,例如,在讲函数的递归关系前,可组织学生参与汉诺塔游戏,在探究游戏策略过程中使其了解递归思想。这不仅有利于激发学生对本堂课的好奇心与求知欲,还可改变学生对编程枯燥、抽象的刻板印象。
3.应用:结合实践增加价值认同