1. 引言
《高级语言程序设计(C语言)》是计算机科学与技术、电子信息工程、自动化、通信工程等相关工科专业的核心专业基础课,知识具有逻辑性与实际性并存的特点:既涉及数据类型、循环、指针操作等知识点,又是学生构建编程思维的入门课和后续课程,如《数据结构与算法》《操作系统》《嵌入式开发》等的基础,广泛应用于系统软件开发和应用软件开发,同时在其中也蕴含了丰富的思政资源[1] [2]。然而针对C语言教学,目前多采用“老师大段讲解课本中的例题内容”的授课模式,缺乏师生交流环节,难以提高学生的理解和记忆效果,且不同学生的理解能力有较大差异,其内容以C语言语法的知识点为主线,侧重于对知识点的孤立训练和反复练习,如“指针”、“循环”,而忽略了嵌入式编程、工业现场控制等实例程序的理解,仅仅依赖超星学习通、雨课堂开展混合式互动教学,没有完全改变学生存在的“被动学习,不动手写”问题[3] [4],也没有培养学生解决实际复杂问题的应用能力。思政建设中元素的挖掘是“散点式的”,只零星地联系到“程序规范与严谨态度”,不有机地联系“具体实例”——比如,C语言的设计者丹尼斯·里奇、我国鸿蒙系统的自主研发精神等故事来渗透其背后更高的、更深层次和价值导向的思政教育理念培养,重在“教学方法”的传授,“重技能轻价值”。这也是当下新工科中,人才培养上有所偏失[5] [6]的重要原因之一。对C语言如何指导教学实践的思考也有多项:改革C语言混合式教学模式、依靠“竞教结合”优化实验教学模式、利用完善考核来评价学生实践能力等各项探索与尝试,但都局限于“课程教学”,缺乏对“思政元素与专业知识有机耦合”的考虑、“‘语法–思维–价值’三维一体的整体课程建设框架”的宏观构思,还未有清晰、简洁、过程性引导的教学方式探索,以及让学生全程参与实践培养的过程的明确思路[7]-[9]。基于以上现状,本文结合多工科专业课程C语言教学的实际情况,针对在课程思政教学过程中存在的“元素挖掘碎片化”、“内容融入生硬”、“评价体系片面”等痛点问题,在课程思政融合建设过程中,从重构思政资源库、构建思政融合模型、改进考核评价体系3个方面对课程的思政教学开展有效的探索与建设,实现从“植入”到“融入”的蜕变,进而打造C语言思政样板具有示范性、参考性的宝贵资料,助力培养编程精良、家国情怀的高素质新工科人才。
2. 现状分析
中共中央明确课程思政的理念、要求与目标以来,各高校围绕程序语言C课程的思政建设展开了程度不一的探索,虽取得一定成效,却在实践推进中不可避免地面临诸多共性问题。结合我院在《高级语言程序设计(C语言)》课程教学中的实际经验,现将教学中遇到的这些问题总结如下:
2.1. 思政建设:元素碎片化与价值引领断层
当前课程思政建设存在“浅层化、零散化”的问题,未能实现与专业知识的有机融合:一是思政元素挖掘存在局限,仅将“编程规范”浅层关联“严谨态度”,没有系统整合深层思政资源——既缺乏对C语言创始人丹尼斯·里奇极简创新精神、姚期智院士算法深耕历程等科学家精神的挖掘,也没有结合我国鸿蒙操作系统、工业软件CAE等自主技术突破的案例,难以通过“卡脖子”技术困境与科技突破的对比,真正的激发出学生的科技自立意识;二是价值导向存在缺位,工程伦理教育较为薄弱,没有依托航天软件代码容错要求、工业控制程序稳定性需求等典型场景,建立起“技术严谨性–职业伦理–社会责任感”的关联逻辑;三是思政元素的融入方式较为生硬,很多时候是将思政元素“被动植入”,没有结合课程本身的特质——如“函数封装”对应“分工协作”、“模块化编程”契合“系统思维”——去设计自然的融入路径,最终导致“知识传授”与“价值塑造”相互脱节,不符合新工科“技术素养与家国情怀并重”的培养目标。
2.2. 教学内容:语法导向突出与实践场景脱节
内容形式“不贴切”、“不合理”。如不关注“理论–实践–价值”的培养逻辑,过分看重“如何操作”,侧重指针、循环等语法点,单独地反复训练这些知识点。如多次验证变量赋值语句的正确性,多次判断循环是否条件满足,如何用运算符组合成各种表达式;而不是强调程序设计能力,将它们放置在嵌入式、工业数据库管理等真实场景中。导致学生会解考试题,但不会解决工程问题。无法帮助学生建立编程的系统思维,即计算思维:“运用计算技术来发现规律、提出新思路、解决问题。抽象、分解复杂系统,简单模型化”。其未融入知识点的设计、组织和衔接之中。例如讲授数据类型时,学生知道不同类型变量所能保存的数据内容不同(整数比实数精确),但却不了解它是如何将现实世界的信息进行建模成机器可识别的数据存储并执行。致使的知识学习碎片化,无完整的计算思维过程。数字资源建设尚不能满足当前形势下思政教育融入教学的要求。一些团队已开始通过使用超星、雨课堂平台开展混合式教学改革,但尚未融通的“纸质教材 + 数字资源”。视频,仅讲解授课的知识内容,没有结合案例、特别是思政案例。在线实训只能复述课堂上知识学习部分,而并未融入真实的工程开发部分内容。“边学知识、边练技能、边悟价值”的思政教育目标无法实现。
2.3. 教学实施:教学方法较为单一及教学过程中学生主体性缺失
当前教学实施模式难以突破“学生被动接受知识”困境,这也影响了思政教育和专业教学的协同育人效果,具体问题有三方面:一是教学方法固化,课堂上大多还是以“教师主讲 + 课本例题演示”为主,而像探究式、项目式这类能更好的调动学生主动性的教学方式,在实际教学中占比相对较低,也没有形成“任务驱动”的方式设计“总任务–子任务”的体系。比如没能围绕“学生信息管理系统”这种实际项目设为总任务,只是将零散的知识点简单串联,让学生难以获得主动思考与协作探究的机会;二是分层教学设计不到位,未针对学生的基础差异(有无编程基础)制定差异化任务要求,导致基础薄弱学生因为任务过难而产生畏难情绪,而学有余力学生又觉得任务简单乏味,没法通过阶梯式的任务把“专注攻坚”、“精益求精”这些思政内涵渗透进去;三是实践协同较为薄弱,校企合作实践基地大多流于形式,学生能参与到嵌入式开发、工业控制程序优化这类真实项目的机会很少,无法在实践中感知“技术服务社会”的价值,削弱了思政教育的实践说服力。
2.4. 评价体系:维度单一与思政考核缺位
考核与评价没能对应和导向其“语法规则–程序思维–人文精神”的培养要求,还存在着“重结果轻过程,重技能轻素质”三种主要问题:一是单一维度、重笔试。单纯利用笔试或计算机等级考试等重要评判方法和手段,并且平时课程或课堂表现、小组合作等过程考核在总体分值所占比例甚微;更未将代码美观性(反应出对严谨程度的理解),尤其在课程设计中的贡献度以及是否具有独特的创造性思维(与创新能力关系密切),有目的性和科学性地引入日常考核过程中等等。二是关注语法及编程习题内容,忽视逻辑、伦理(安全性、合理使用数据信息)、意识(爱国心报国心、自我奋斗等),欠缺与新工科建设下各专业和学科跨界融合所需的教育、考核以及教学组织的科学有效的育人方法(并未评估学生创新意识思维)。三是标准各异,未建立完善的在评价方面对于课程思政的育人方面的一套较为合理的课程体系。例如,在教学目标设置的课程考核中“自立自强自足意识”的考核、“是否认识、尊重和维护工程伦理”等方面,量化与质化的工具仍未被重视并被加以开发出来,以求保证有效的课程思政。
3. 建设方案
3.1. 锚定“专业技能 + 价值引领”双维度课程目标
“双维度”课程目标指的是关注技术,提升学生的专业技能以及“人”的技能,尤其是提升学生价值观领航力。一方面,“语言是技术”,要教好编程课,就要注重C语言语法等专业知识。例如,涉及相关专业术语,诸如“数据类型”、“指针”、“函数”,掌握这些关键词及其内容运用。在实践的过程中培养编程的技能,熟练写出一定量的语句程序,至少能编写500行以上的有效程序,解决真真切切工业、生产等问题。诸如,学生完成如嵌入式的数据采集模块中的一部分功能。每门课程中,每一个学生所写的代码量应该达到3000行以上,并且能够单独编译或解决了现实生活中较常见的一些问题,诸如,解决一个数据处理的问题。另一方面,更要关注学生本人,善于挖掘和利用编程背后的有温度的故事。例如,里奇‘极简’创新精神和工匠意识启发我在培养学生时,不但要注重学习编程、精通计算机语言,而且还要学会把编程思想融会贯通应用到其他领域和学习中。我要让学生理解我国在鸿蒙操作系统底层软件开发取得了伟大成就,并了解参与此项事业的一些人。我用他的人生成就和故事感染学生,激发学生的正能量,培养学生做一个专注于某一领域、深入专研这个领域的专注力。
3.2. 重构“三位一体”教学资源库
针对“思政元素碎片化、资源缺失”的困境,以推进“专业 + 思政”资源建设为例:一是开展人物事迹资源建设。选取C语言和算法两方面有代表意义的人名,如发明C语言的丹尼斯·里奇(极简精神),在算法方面坚持二十余年不改志向的姚期智院士(耕耘精专),开发配套5~8分钟讲解视频或微课,融合在知识教学点的前导环节——“函数定义和调用”“指针原理与应用”中,通过人物的科研经历和专业相关背景,讲述坚持专心致研、追求极致的科学家情怀,将价值塑造前置的同时预习知识点;实施产业问题资源遴选。选取国产自主研发的代表性成果案例,如鸿蒙操作系统对底层C语言的操作,国内自主实现CAE软件的核心算法,聚焦这些代表我国核心技术研发的关键字节片断,如从鸿蒙操作系统内存管理核心代码出发支撑学生编写或修改、重构,在体验中体悟“做自己的事”的自豪感;另一方面补充与计算机程序相关的“漏洞”案件,结合现实问题分析或解决方法强化严谨态度。二是进行多维度的案例复盘。由“代码本身问题”分析到“社会影响力”:以“导致航天发射任务故障”的警戒性工程案例为例,依据《Java软件设计规范》《C语言编码规则》等审查规范标准,带领学生结合复习的代码审查知识,再次对该工程实际案例开展审视;在认识代码质量与工程风险的关系和由此产生的社会责任的基础上,加强对工程师伦理责任方面的教育引导。三是形成数字配套资源。借助超星学习通、雨课堂辅助教学并实时补充数字资源库,并尝试创建相关专业内容融合了思政元素的专业课知识点微课,比如以“函数封装与国家科技协同攻关”、“算法优化与问题约简思维”等内容为主题的小微课。还可针对教学的重点、易混淆点设计相应的习题系统,比如工业数据统计分析系统等,并为每一套练习配备详细的任务指导书。最后,要为这些具体的、带有任务场景和挑战的工程案例加入编写思政融入要点,像关于“系统稳定性设计与工业生产责任”等。实现“纸质教材 + 数字资源”的深度融合。
3.3. 创新“任务驱动式”教学方法
对于“传统的教法太枯燥、学生的学太被动”的问题,我们把总课程目标进行“总任务–子任务”的设置:从建构主义观点出发设计总的引导任务所遵循的是“任务为主线、教师为主导、学生为主体”,针对整门课程围绕1个项目——学生信息管理系统而进行,在此基础上按照知识点细分成任务如“数据抽象(结构体) + 模块化开发(功能函数) + 算法优化(尽可能高效)”等子任务,同时借助于旧知引出新的知识,让知识不孤立地存在;又同时考虑到了学生层次基础的分化,对“基础较差者”要求他们做好功能实现就可以,“那些学得较快且能更深入的学生则在上述实现功能的基础上追求代码更更加地优化或有创新能力的新功能”。此外,还有意渗透一些探研性环节:“循环结构”教学从如何来判断一个整数是素数并显示出结果进行切入,促使他们探讨不同的循环上限哪一种方式更好、效率更高、速度更快……这样做一方面让学生能更扎实、更好更深刻掌握他们所要学习的知识;同时,还能让他们体会像科学家精益求精的精神。
3.4. 完善“双导向”评价机制
改变“当前的只根据考核结果取C语的成绩,并将代码的量和正确率为本,思政缺位的现状。”重视过程能力,“我们在此基础上设计了一套新的、‘过程 + 能力’的评分系统:过程评价占70%,终结考核占30%。”“过程评价”,设置“分项项目贡献”,为大类(该大类中的4、3、3,占40%:30%:30%)。主要检查学生动手、实践的能力。要求代码质量占比70%,具体按代码质量得分标准:占比40%,该项目的功能:30%,对项目的贡献:30%来进行打分,目的在于教会学生正确的工作态度,以及科学严谨的思维,同时注意到学生间团队合作的态度与精神;而“思维创新”占了该大类项目20%的比例;“终阶评价”中则30%的比重,在检查一个学生的分析解决问题的能力,学生独立做了一个“小程序”的开发,或者能进行数据处理,具备一定的容错能力。另外,设立一个新的大类项目——“思政答辩”,主要检查学生面对科技与工程的态度。此外,统一分发《C语课程思政评价手册》,统一设定各种大类项目对应的专业工程师工科专业能力和思政评分的细则。从而改变“当前的,各专业工学由于专业教师不统一的情况带来的所谓‘教学孤岛’现实局面”。
3.5. 创设“校企联做”的机制,解决“形式上校企共建”
“校企联做”可以从以下方面入手:与当地的一家或几家从事嵌入式开发的公司合作共建实践基地,通过他们的现实业务分段实训,如完成一段对工业传感器采集数据的读取程序,并非单纯的验证性操作实验。组织一线工程师做专题报告/讲座,不限于嵌入式编程,“如何提高C语言代码的国产性”,是其中一讲,“工智能驱动的嵌入式软件编译器研究”思政课的一课。项目闭环实作,让学生在实践中将一个企业/学校项目进行实践,提交一份总结报告(实践报告 + 思辨反思),由校内教师评价技术部分的正确性、实现方法的规范性,由企业工程师评价其成果价值性。通过上述措施让“学生有感悟、触动和启发”,做到每个细节能立德树人。
4. 建设目标
4.1. 明确“育才–育人”的课程目标,进行C语言中的思政教育
挖掘出有关于C语言编程中科学家精神以及国内的科技突破事件等思政内涵,引导学生追求精于计算、精益求精的工匠精神和浓浓的爱国情怀。既要有清晰的讲述,讲解清楚、透彻掌握C语言语言体系的语法规则,将基础打牢夯实教学学生C语言技能;更应引领培养学生形成计算思维能力,培养学生在计算机上的解决复杂性问题的能力;及时引导培养学生的自立意识和技术伦理感,实现用C语言教学为载体的知识传授与价值塑造相统一的育人功能,在践行新工科中的人才培养“技能家国化”理念中实现自身的价值。
4.2. 树立“专业–思维–思政”三位一体的知识框架
结合C语言的特点,通过语法规则(例如,数据类型、指针、函数),引入计算思维(例如,问题简化;建立模型;优化迭代),注重科学研究态度的严谨认真以及注重分工协作,秉持“科学无国界,但科学家有国界”的爱国情怀等方面的元素相叠加,实现将专业知识、思维技能与课程中蕴含的价值观相融合,“构建”起三维的知识建构空间:专业–思维–思政。例如,在讲述封装函数知识点的时候,可引申到现实生活中大家一起通过分工合作的方式才能很好地完成一件事从而提升效率,体现工作的社会性,等等;在讲述代码优化知识点时可以引导学生们追求臻善完美的“工匠精神”。
4.3. 实现课程思政内涵从“元素植入”到“理念内化”的转向
把思政的“内容”升级为课程系统的理念层面,从把教学点、任务等内嵌或“内植入”转向思想内化。比如计算机编程教学中,不要仅仅引入个别案例和片段性知识(例如偶尔提及一些编程规范等),而要将这些融入上升至一个思想价值引导和提升的整体,可以通过一个全课程“总任务–子任务”的系统设置完成。“将‘科技自立意识’‘工程伦理认识’等思政元素贯穿需求分析、代码撰写、调试优化等各个‘单元任务’环节,并引导内化为学生的价值信念和行为取向。”
4.4. 规范C语言课程思政的学科边界
C语言课程思政要守边界,立足编程之学的特点,不泛化思政元素,要挖掘教学活动中与编程相契合的典型事实,把思政之魂铸牢在知识的底端,例如:针对“代码容错”的编程问题,可以思考:“为什么这些航天代码需要容错的设计”、“代码出错了能不能改”——由此引导出“编程要严谨,更是做人做事的道理”;面对“如何解决卡脖子的软件难题”这一时代课题,可以提问,“我编程的能力是否也能打破‘卡脖子’技术的魔咒?”通过这些问题情境,激发学生的家国情怀,“程序强则国强”,“编程能力是自主创新能力的表现,工程伦理则是科技的安全线”。
4.5. 达成课程思想的转变,将课程思想从“生硬的宣教”落实为“情感上的共鸣”
让思政融入到C语言教学的过程中,使思政融会贯通。具体可以通过案例式教学——比如结合基尔霍夫定律讲清代码逻辑,再用探究式教学——就像引导学生优化素数判断算法一样,让学生在做“嵌入式数据处理”、“工业程序开发”这些实际解决实际问题时,自然而然地体会到“技术要服务社会”、“创新能驱动发展”的意义,实现“专业学习–情怀培养–精神内化”的同步达成,无形中提高教学效果,从而达到“专业学习”。
5. 实施案例
5.1. 课程目标设定
设定语法、思维与价值的“三位一体”和素质(技术素养和家国情怀)并重的课程教学目标,具体说明如下。技能层次:了解函数定义与调用和参数传递方法、学会编写“函数库”,知道模块中的“解耦”与“复用”的精髓与思路,能够独立自主设计3~5个小程序模块并互相配合完成一个大程序的开发,同时建立起彼此之间接口(Function Interface)的逻辑联结,给今后进行嵌入式开发后在各个模块间的分门别类的调试奠定理论基础。思想品德方面:由编程领域的科技学家的故事和精神养成学生乐于钻研精益求精的态度和作风;由业界内的事例激发出自主自强意识与使命责任;通过编写模块互相配合的过程使学生理解人们之间多沟通有助于增产、提高社会生产力的原理与思路,加深认识其自身角色与其所在企业的生产和社会发展之间的关系,产生自觉遵守、执行约束的意识——“工程伦理”或称为“职业道德”或“职业规范”,较好地完成了将立德树人的思政育人体系与专业课程教学内容的有机结合。
5.2. 思政资源选取
思政资源的选取有3个角度:人物事例、行业事迹和规范准则的案例和警示。在人物事例方面选取C语言创始人丹尼斯·里奇在贝尔实验室创造C语言的故事。从讲述“用函数封装”方式拆分问题,简单化繁杂开发UNIX系统的入手点。介绍一些学生会经常用的C语言标准库(stdio.h,“standard input/output头文件”;stdlib.h,“standard library头文件”),然后分析这些库是通过什么样的设计方法才做到简洁、易操作、易于整合。从而向学生引导一个精神层面的点“专注创新”的科学家精神。在行业事迹方面选取的是鸿蒙系统底层中使用的全部用C语言编写的系统:一个是负责任务调度管理“任务调度模块”;另一个是负责内存的申请“内存管理模块”。同时提供这些模块代码的部分段落源码,标明源代码中的主要思路及与其它很多领域没有形成成熟体系也因缺少有效的模块化设计而导致后期无法维护的工业软件对比实例让学生意识到,模块化的思维对于未来我国能否发展出核心技术至关重要。在这方面思政案例需要结合技术去谈。在行业规范准则或者案例与警示资源中选取了已知公开报道的技术事故,但深入挖掘出原因,并列举故障发生后对相关流程的影响,让学生深刻认识到技术细节的重要性。借此,向学生导向社会责任感这个话题,让他们可以真正具体从细节的角度出发形成思政完整的意识,而不像只是知识体外的碎片化思政教育意识。
5.3. 教学模式与实施
落地“任务驱动式教学”的教学要求,就要结合“探究式 + 实践式”教学思路,可以设计成三步实施流程:第一步,以“学生信息管理系统–成绩处理子模块”为核心任务,按“总任务–子任务”拆解模式把总任务拆成一个个子任务,然后将班级成员分组,各组内成员再细分负责“成绩输入函数(含数据合法性校验)”“计算函数(平均分与等级一一对应)”“输出函数(规范化打印)”“接口测试函数(验证程序兼容性)”等不同部分的成员,每组还要编写好函数接口文档,以此来解决目前教学方法过于单一的问题;接着第二步,开展探究式对比,引导学生先编写“非模块化版”程序——所有功能集成于main函数中,再把之前组内成员写的模块组装起来,做成“模块化版本”。通过对比这两个版本的修改成本、调试效率,让学生直观感受模块化在工程上的价值,同时组织大家讨论“鸿蒙内核模块化与工业软件‘卡脖子’问题的关系”,实现思政教育的自然融入;最后第三步,设置“代码优化”实践——提供接口设计不规范、没有做参数校验的代码,让学生优化并标注修改点,结合再结合行业内相关案例强调参数校验的重要性,让学生在调试中感知工程伦理,从根本上解决“重语法轻价值”的问题。
5.4. 教学成效评价
考核评价环节,即“过程性 + 能力导向”的教学效果和学生自学兴趣调查。对代码的规范程度和代码注释、模块接口注释(20%),项目贡献度和小组互评成绩(加权30%),思维创新度(是否用到函数重载、静态封装等模块编写技术以提高代码效率及重用率)(20%),以及最终的编程小程序项目成果与小模块知识融入的课后短评任务的结果(加权30%)。对学生编程成果考核注重其是否“可运行”与“有创意”,甚至可以将这个小程序发布上线供他人共享的实用性(也可作为课程期末考核的小作品)和在后续编程中可以直接引用或做少量改动即能再利用的可重用性,将学生的科学精神作为思政元素,通过一个融会短评促使学生思考。例如:如何把这学期学的模块化方法从科研攻关上的模块视角与中国当前国家层面的协同攻关联系起来,在自己的研究领域做出一份科技自立自强的创新计划与实际行动。
6. 结语
本文紧扣《高级语言程序设计(C语言)》作为工科专业的核心基础课,直面该课程所存在的痛点“思政元素碎片化、教学内容脱离工程实际和人才培养需求、教学方式单一化和考核评价片面化”的现状,从逻辑框架建设要点入手:锚定“双维度”的课程目标、重构“专业 + 思政”的资源库;革新了任务驱动型的教学方法;创造了过程评价 + 素养能力的考核办法;创建校企协同实践等五个方面,构建了面向专业核心基础课的课程思政教育途径。运用“函数、模块”章节实例说明通过将思政要素从“被动式加入”转变到“自然式融合”的途径达成课程中“知识传授–能力提高–价值养成”三位一体的效果。C语言课程思政的探索获得三大成果:一是形成“育才–育人”合辙的C语言课程建设定位,既让学生掌握了可从事嵌入式产品开发和工业数据处理应用的专业技能并为其后续单片机等课程奠定基础,又使学生立志于科技报国;二是形成了可迁移的工科基础课思政范式,包括了资源建设的思想、任务设计的法门、评价标准的原则,可运用于其他编程课程(如Python、Java);三是厘清了C语言课程思政的学科边界,不能把相关思政内容泛化到计算机相关理论课程,从而确保C语言课程的思政教育自然有效,而不是刻意割裂。本文的尝试能为新工科背景下工科基础课程的思政改革实践者提供一个可实施的方法样本。在未来,还要拓展与业界大厂校企结合的项目内涵,改进提升思政效果测量量表,不断增强学生思政教育的效果,培养学生更加坚实的工程技能和技术自信以及强烈的家国情怀。
基金项目
1. 2022年度怀化学院教改项目“《高级语言程序设计》教学改革研究”(2022066)。
2. 本文系湖南省教育厅重点教改项目“‘双一流’背景下应用型高校电子信息类专业群建设研究与实践”(项目编号:HNJG-2022-0276),怀化学院–国家级一流专业建设点“通信工程”专业建设阶段性成果。
NOTES
*通讯作者。