新文科背景下文科院校的C语言教学改革研究
2022-05-30邓瑞刘蓓古丽茹·吐尔逊
邓瑞 刘 蓓 古丽茹·吐尔逊
[摘 要]新文科建设是未来教育发展的强大引擎,是实现“十四五”规划及二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.应用:结合实践增加价值认同
对于自己认同的学科,学生会怀有极大的学习热情,在学习过程中表现出较高的创造力,从而对学习效果产生积极影响,这样的认同很大程度上来源于学生对学科应用价值的认识。然而调查表明,相当一部分文科生认为编程不仅在日常生活中没有用处,对未来就业和考研也没有帮助。事实上,学习资源和实践机会无处不在,我们应启发学生通过搜索文献、查找书籍、实地探访、深入访谈等形式有意识地寻找和生活紧密联系的C语言应用,并制作“编程赋能智慧生活”思维导图,以培养并提升其编程应用意识。
(二) 启发式递进教学,提升计算思维能力
计算思维是运用计算机科学的基础概念去求解问题、设计系统和理解人类的行为。它包括涵盖计算机科学之广度的一系列思维活动[18],是多种思维的组合,对人的整体发展和终身发展具有重要意义。2010年,北京大学、清华大学等多所中国首批“985工程”建设高校发布的联合声明强调, 要把培养学生计算思维能力作为计算机基础教学的一项重要的、长期的和复杂的核心任务。2013年,教育部发表的《计算思维教学改革宣言》指出,以培养计算思维为切入点的大学计算机课程改革将是大学计算机课程的第三次重大改革。下面,我们将从计算思维的要素出发,从操作层面对C语言程序设计课程提出教学改革建议,以有效提升文科生计算思维能力,继而化解其在算法理解、程序设计、运行调试等方面存在的学习阻力。
1.分解与抽象:启发式教学,塑造学生“自顶而下”的思考模式
在中国,“启发”一词源于古代教育家孔丘的“不愤不启,不悱不发”。所谓启发式教学,主要是以问题为中心,创设情境,并通过提示、刺激、引导等手段鼓励学生主动思考、主动探索,培养和提高学生逻辑思维能力的一种教学方法。启发式问题本身的质量是影响启发式教学效果的重要因素。一个好的问题应该是可以帮助学生真正学习到有价值的知识,并让学生在已经掌握的知识基础上,通过分析、思考、讨论来解决对拓展学习内容、优化知识结构有益的问题。与此同时,研究表明,与生活贴近的教学情境,不仅能够帮助学生在轻松愉快的氛围中学习,而且有助于提升其思维的活跃度。因此,首先,我们应为学生创设一种与实际生活相关的教学情境,其次,提出一些科学而有层次的问题来启发学生的思维,引导学生将原本复杂的具体问题进行抽象与分解,最终获取解决方案。在问题抽象与分解过程中,教师需要引导学生准确把握问题的实质,从表面现象把握核心问题、解决需求,关注关键信息,忽略一些不必要的细节,并启发学生采用“自上而下”的方法,逐步将一个大问题拆解成许多容易理解与方便解决的子问题。对于每个子问题的求解,教师则应积极培养学生的模式识别策略意识,鼓励其将该问题与以往解决的问题进行对比,并将有用的解决经验引入当前问题的解决方案设计中,达到事半功倍的效果。
2.算法与编程:重点培养计算思维,淡化语言细节讲解
C语言程序设计是结构化程序设计。所谓结构化程序设计就是使用三种基本控制结构构造程序,使任何程序都可由顺序、选择、循环三种基本控制结构构造,以保证程序层次清晰,便于使用、维护以及调试。自然语言通俗易懂,不需要专门的训练,较为灵活,更为符合文科生的表达习惯。因此,在算法设计过程中,允许学生先利用自然语言去描述问题解决方案,即用日常生活中使用的语言来陈述问题解决的具体方法步骤,然后再利用算法流程图或伪代码将其转化为符合编程思维且逻辑严密的计算机语言。这不仅有助于提高学生学习的积极性、主动性和创造性,而且可以帮助学生跨越自然语言与计算机语言的鸿沟,完成自身的思维训练,从而最终实现培养学生的逻辑思维和计算思维能力的教学目标。与此同时,在已知算法流程图的基础上,完成编写代码也不再困难,而成了水到渠成的事情。因此,在教学中教师还应淡化对C语言中具体语法知识的讲解,而应重点介绍设计原则、逻辑推理、设计技巧、表示方法等,将大量精力投入到对算法的设计和表达上,培养学生的数据抽象能力、算法设计能力以及构造算法思维方法的能力。
3.迭代与泛化:持续优化逐步求精,培养学生的迁移能力
在一个问题解决后,教师应对学生开展迭代思维训练,实现对算法的持续优化。迭代思维是从数学引入计算机科学并得到发展的一种程序设计思维,其核心是持续优化,强调不试图一次性成功达成完美结果,而是在实现若干小周期循环改进的基础上实现大周期的循环改进[19]。在算法迭代优化过程中,教师可引领学生更深入地体会C语言的灵活高效、功能丰富和表达力强的特点,培养学生的迭代创新思维。同时,基于文科生较理科生发散思维更强的优势,教师还应启发学生进行联想,思考同类模型及其变形对不同问题的适用性,培养学生归纳问题、把问题一般化的能力,提升学生用已有技能处理类似情境下新任务的近迁移能力。此外,教师还可以根据学生的接受程度,结合学生的能力水平,引入多线程设计的思想,在拓宽学生知识和技能面的基础上,引领其对模型做更高层次的抽象,扩展其创造可行的新奇模式和组合的范围,培养学生在多种情境下创造性地解决问题的远迁移能力。
(三) 综合实践设计,优化学习模式
良好的学习模式意味着在有限时间内能够高效完成知识的吸收理解和运用,形成良好的学习模式对学生的学习效果有着积极影响。针对本次调查中发现的学生课后练习时间不足、实践中屡屡受挫、缺乏应用意识且能力不足等问题,我们从以下几个方面提出教学改革建议,以优化学生的学习模式。
1.因时制宜,规范引导:碎片化学习知识,结构化整合内容
调查发现,只有9.7%的学生能保证每天学习30分钟以上,大部分学生用于练习的时间非常少。互联网时代生活节奏日益加快,学生的时间被切割为碎片,但他们缺乏有效利用这些时间的意识及能力,这导致他们整块时间不够用,零碎时间利用不起来,没有充足的时间进行编程实践。因此,采取措施重塑他们的学习模式尤为重要。“碎片化学习”是能够达到时间与空间平衡的一种新型学习模式。为构建这一模式,我們可以将教材的知识点按专题进行切分,以微课、视频、闯关游戏等形式上传重点知识,设置定期打卡任务,使学生能够利用碎片时间夯实基础知识。尽管碎片化学习能够提高时间利用率,但也会导致学习内容的碎片化,降低学习成效。因此,在打卡任务的安排中要对知识点进行总结,引导学生有意识地对“碎片化”的学习内容加以整合,使其利用碎片化时间摄取的内容在头脑中完成结构化组织,既突出学习重点,又做到系统全面,实现时间与内容的和谐统一。
2.巩固基础,强化交流:统筹学习资源库,搭建智能化多维交流平台
聚合共享学习资源,形成内容丰富、形式多元的学习资源库,有助于学生增进对知识及案例的理解。学习资源库内容可以按照资源难度分为基础编程能力训练与实践应用拓展两类,基础编程能力训练用于学生基础知识的练习,实践应用拓展则侧重将实际问题抽象化并设计程序解决案例。资源形式有慕课视频、经验帖、Flash动画、多媒体课件等。学习资源库要保持定期更新,实时推送,使学生能不断获取新知识。同时,为了快速高效地解决学生在编程过程中遇到的困難,我们可以建立智能化多维交流平台。一方面,平台能够智能识别学生的问题,并为其推送资源库中匹配的相关专题。另一方面,开设讨论板块,实行积分奖励制,并将积分以权值的形式引入平时成绩的计算中,从而鼓励学生深入讨论问题,互相答疑解惑。此外,教师应该关注、监测交流平台的讨论,及时对学生存在的疑难问题进行解答。
3.以赛促学,激发创新:举办模拟竞赛,培养实践创新精神
为了让学生充分感受到代码的魅力,验证其软件设计和编程解决问题的能力,在讲授完C语言的课程内容后,教师可以组织学生在班内组建团队,举办“编程点亮生活,创新成就未来”的C语言程序设计模拟竞赛,通过比赛增强学生的沟通、协作及创新能力等。赛前,教师要注意对学生选题进行评估,结合学生能力共同探讨实施可行性。教师在肯定项目意义价值的同时,也要考虑项目的难度。过于简单的项目可能无法激发学生的学习动力,而过难的项目则会挫伤其积极性。在比赛中,教师应鼓励小组成员通力合作,以查阅文献的方法寻求学习资源,相互讨论,自主完成逻辑推理、算法设计、编译、调试并生成可执行程序的整个过程。最后,教师组织各个小组进行展示与评比,表现优异的小组不仅可以获得期末免试资格,还可以去参与“太极杯”软件编程大赛、中国大学生程序设计竞赛、ACM国际大学生编程竞赛等比赛。
三、结语
本文以新文科建设为依托,对开设C语言课程的文学类专业本科生进行问卷调查,并通过对调查结果进行分析,对C语言教学改革提出了三点建议,具体包括:多措并举,激发学生学习兴趣,助其冲破心理障碍;启发式递进教学,塑造 “自上而下”思考模式,提升学生计算思维能力;综合实践设计,优化学生学习模式,培养实践创新精神。
由于目前国内外关于计算思维的研究均处于起步阶段,并不成熟,本文所提出的涉及计算思维培养的教学改革策略仍存在一些有待完善的地方。而计算思维在文科生学习C语言的过程中起着举足轻重的作用,对文学类专业本科生计算思维的培养将是新文科背景下跨学科建设中的题眼。因此,未来我们将密切关注计算思维的最新研究成果,继续深入探究更为完善、高效的计算思维提升策略。
[ 参 考 文 献 ]
[1] 樊丽明,杨灿明,马骁,等.新文科建设的内涵与发展路径(笔谈)[J].中国高教研究,2019(10):10-13.
[2] 央视网.教育部启动“六卓越一拔尖”计划2.0[EB/OL].(2019-04-30)[2021-03-21].http://www.moe.gov.cn/jyb_xwfb/xw_zt/moe_357/jyzt_2019n/2019_zt4/tjx/mtjj/201906/t20190619_386519.html.
[3] 张珏,刘美玲,李波.非计算机专业C语言程序设计课程教学的改革研究[J].电脑知识与技术,2019(22):173-174.
[4] 蔡蓓蓓,陈峰,苏红卫.《C语言程序设计》课程问卷调查分析及改进措施[J].大众标准化,2020(17):82-83.
[5] 张晓兰,陈奋.基于微信小程序的“C语言”移动学习平台设计与实现[J].通化师范学院学报,2020(10):57-60.
[6] 李霞.基于专业应用的C语言程序设计课程教学研究[J].计算机时代,2019(2):95-97.
[7] 吕勇,王诗颂.以案例为导向的C语言程序设计教学探讨[J].电子世界,2020(23):35-36.
[8] 巨同升. C语言教学中的“逐步迭代”项目式案例设计[J]. 计算机产品与流通, 2020(11):229-230.
[9] 江国粹.高职文科生C语言教学研究[J].宿州教育学院学报,2011(2):136-139.
[10] 汤希玮,胡秋玲.文科生计算机程序语言教学研究[J].湖南第一师范学院学报,2012(3):78-80.
[11] 李激,宗恒.政法院校面向侦查学专业的C语言教学调查分析[J].电脑知识与技术,2015(19):97-99.
[12] 李小平,郭江澜.学习态度与学习行为的相关性研究[J].心理与行为研究,2005(4):265-267.
[13] 陶德清.学习态度的理论与研究[M].广州:广东人民出版社,2001.
[14] 丁发红.任务驱动法在“C语言程序设计”课程教学中的应用研究[J].科技视界,2020(25):104-105.
[15] 胡象岭.物理学习兴趣量表的设计与试测[J].课程·教材·教法,1996(2):30-32,13.
[16] J.Zaller.The Nature and Origins Of Mass Opinion[M].Cambridge University Press,1992.
[17] 林培锦.勒温场理论下当代大学生学习兴趣的培养探究[J].中国大学教学,2015(6):67-71.
[18] J.Wing. Computational thinking [J]. Communications of the ACM, 2006(3):49.
[19] 钟柏昌,李艺.计算思维的科学含义与社会价值解析[J].江汉学术,2016(2):88-97.
[责任编辑:陈 明]