依托编译原理课程教学的大学生素质培养实践
2017-09-28伍春香杜卓敏何炎祥
伍春香++杜卓敏++何炎祥
摘 要:针对目前大学毕业生难以适应毕业后进一步研修和实际工作需要的现状,分析大学阶段学生培养的实质,阐述普通课程与专业培养目标之间的关系以及普通课程在大学生素质培养中的重要性,介绍编译原理课程中大学生素质培养的教学实践。
关键词:教育的目的;大学生素质培养;专业培养目标;课程教学;编译原理教学实践
0 引 言
近期,不断有报道揭示中国留学生在海外求学过程中暴露出来的一系列问题,如考试作弊、作业抄袭、动手能力低下、公民素养缺失等。与此同时,国内高校的教师也在抱怨本科毕业设计难带,招收的硕士甚至博士素质达不到预期,难出成果。
大学生应具备哪些素质?大学教育可以培养哪些素质?普通课程的教学过程又该怎样培养学生的素质?这是每个高校教育工作者都应该认真思考的问题。
1 大学生应具备的素质及其培养
1.1 大学阶段的培养目标
广义地说,教育的目的是培养一个人应具备的在这个世界正常生存的各种能力和素质,包括工作、生活等各方面基本素质和能力的养成。
不同的教育阶段,教育的目的体现为不同阶段的培养目标。大学阶段,教育的本质是使每个学生能够成为更完善的“人”,但重点在生存能力的培养,具体为专业知识和技能的学习与锻炼,即每个专业的培养目标描述的内容。
如果用一棵树来表示“人”在各个受教育阶段习得的知识及其关系,那么,大学阶段的专业知识应该在树的主要枝干处,硕士教育和博士教育对应的素质和能力培养,则相当于小的树枝和树叶,见图1。
1.2 大学阶段的素质培养
大学阶段的培养手段,主要是课程教学,分为通识课程学习和专业课程教育。通识教育旨在培养学生的思考能力、交流思想的能力、作出恰当判断的能力和辨别价值的能力,专业教育旨在培养学生将来从事某种职业所需的能力[1]。
大学阶段专业课程的系统学习,可以使学生对整个学科有一个初步了解,建立学科的知识结构体系,并具备可用于求解相关领域问题的基本专业技能,注重职业能力的训练。这些素质将为研究生阶段的科研活动、工作阶段的技术任务奠定基础。
ACM和IEEE发布的《计算机科学课程体系规范2013》明确指出:計算机科学本科生教育应该使学生为未来的工作做好全面准备;这些素质和能力的培养,是通过大学阶段通识课程的学习经历和专业课程的教学活动综合作用达到的。这种培养,不是由某一门或某几门必修课的修习完成的,而是所有课程的教学活动长期综合作用实现的,即每门课程的教学活动在学生素质和能力的培养方面都是责任重大的,也是非常有意义的[2]。
换句话说,每门课程都可以精心设计成培养学生综合素质的“沃土”。但是,这有赖于每位教师对教育目的的正确认识,也有赖于每位教师对课程教学的责任和意义的认识以及每位教师对教学活动的设计与付出。
CS2013有这样的内容阐述:事实上,学生的软能力(soft skills,如团队合作精神、口头及书面表达沟通能力、时间管理能力、问题解决能力、灵活应变能力等)及个人素质(如对风险的承受能力、合议共治能力、忍耐力、职业道德、机会的辨识力、社会责任感、对多元化的理解等)在未来工作中将起到至关重要的作用;一部分软能力和个人素质(比如忍耐力、时间管理能力、职业道德、对多元化的理解等)将通过大学的学习生活获得,其他部分则需要通过具体的课程教学活动来培养[2]。
大学阶段培养方案的落实、对学生综合素质和能力的培养,是通过每一门课程的教学活动来实现的,这也是每位任课教师的责任和工作意义所在。
2 通过课程实践环节培养学生的综合素质
2.1 以领域问题求解引导理论与实际相结合
计算机专业的核心课程,其知识的讲授一定是围绕着专业原理的。如何让原理知识深刻影响学生问题求解的思维,并被学生实质性地掌握,一直是笔者思考的问题。
英国著名教育学家、数学家、哲学家怀特海在《教育的目的》[3]中提出:“在大学教育中,综合运用精神应占主导地位。”他认为:“在中学里,学生通过艰苦的努力,从特殊具体的事实到初步了解一般的概念;而在大学,他们应该从一般概念开始,进而研究如何将这些概念应用于具体的场合。一种设计得很好的大学课程是对普遍规律进行的广泛研究。我的意思是,应该对具体的事实进行研究,让它们说明一般的概念。”他还认为:“必须不断发现方法的通用性,并将这种通用性与某一特定应用的特殊性进行对照。”
在这样的理念指导下,笔者重新设计了编译原理课程的教学,将理论课堂的程序设计语言编译原理知识应用到课程实践中的领域问题求解。
理论课堂教学仍然围绕着编译程序的理论依据、程序实现原理、具体实现算法的分析与讨论,注重以动画形式和生活实例来减轻抽象内容带来的陌生感。
在课程实践部分,除了编译技术的实现,还启发学生探索编译理论、方法和技术在各种应用领域问题求解中的实际应用。比如,课程介绍的程序设计语言的翻译原理、技术和方法,完全可以用于实现试卷分解及题库的生成,此时,待分析的不是程序,而是一份满足要求的试卷,待生成的不是程序对应的目标代码,而是容纳各种试题及其答案的试题库。依随课堂教学内容的进度,可以对应地引导学生思考领域问题求解的步骤,然后落实到具体应用问题求解过程。表1为把编译方法应用到实现题库生成系统的学习过程。
在这一思路的引导下,学生寻找各种领域问题作为课程实践求解的对象,例如,网络传输协议解析、简言作诗机、文档编辑器、测试自动化、文档排版、作业自动批改评分、汉语自然语言处理、恶意脚本查杀、音乐简谱处理、逻辑门电路绘制、汉语英语翻译、自动阅卷系统、XML文档解析、中文识别、邮件地址识别、模式识别、游戏脚本处理、MIPS指令解析、JSON解析、身份证号码的识别与利用等。endprint
整个实践过程中,学生自主选题,教师引导学生分析、寻找这些“领域问题求解”与“程序设计语言编译”的共性,指导学生用文法表示领域问题对象的特点,再选用编译技术实现该问题的求解,并将这个过程撰写成研究性课程论文。通过课程实践,学生完整地做出了一个“应用领域问题编译器”,学会了将具体问题抽象成具有共性的“类问题”,实践了编译技术的实现,达到了将理论知识学习与领域问题求解相结合的目的。
课程实践中,教师给定实践要求,比如要做哪些任务、要达到什么标准、如何验收、成绩如何评定等,具体解决的应用领域问题,由学生自己确定。当学生考虑什么样的问题可以用哪一种编译方法予以解决时,就不得不思考、分析、比较和选择,虽然该过程中会和教师交流想法,但主要部分还是自己完成。对于习惯于由教师安排一切的学生来说,这无疑是一个锻炼主动探究精神的好机会。
课程引导学生将理论知识应用到不同应用领域的问题求解,让学生看到实际问题如何抽象成“类问题”,如何用课程讲授的“类问题求解方法”解决应用领域的“类问题”,不仅帮助学生认识到形式文法和语言只是具体问题的抽象反映,有助于其深入理解计算机学科问题求解的抽象描述、处理的实质和理解“类”计算;而且,分析、设计领域对象文法,选择编译方法予以实现的过程,还让学生学会了如何分析具体问题,如何确定问题的求解步骤,如何选择已学知识应用于求解具体问题,这些实践内容充分锻炼了学生分析问题、求解问题的能力。
2.2 以研究性论文培养基本学术素养
在引导学生将课程知识用于求解应用领域实际问题时,还要求学生将问题求解的实践过程写成研究性论文。为培养学生的基本学术规范意识,课程发布了研究性论文模版,其中完全按学术论文的要求设定各个部分,同时将《武汉大学本科生毕业论文(设计)书写印制规范》作为文字格式、图表、参考文献引用与标注等方面的评分依据。
撰写论文过程中,学生需要查找与阅读文献,学习和参照科技论文规范,还必须根据成绩评定标准遵守基本学术规范,比如引用他人成果必须标注参考文献等。这个过程,让学生建立了基本学术规范意识,为后续毕业设计的论文撰写以及研究生阶段的学习奠定了论文写作基础。
3 以“探究式”课堂教学培养学生主动思考的习惯
美国著名哲学家、教育家约翰·杜威认为,知识的获取不是个体旁观的过程,而是“探究”的过程,知识是个体主动探究的结果。现实中人们的经验也印证了这一观点,但许多高考体制训练出来的学生已逐渐失去主动思考的意识,习惯于一切听教师的讲解和安排。
只有具有主动思考习惯的人,才能主动、积极地参与学习、工作和社会生活,才有创新的可能。为培养学生主动思考的习惯,编译原理课程采取了“探究式”的教学模式,期冀在培养学生主动思考问题上做一些努力。为此,教学思路应从如何把知识点讲解得生动、易理解,转变为如何在教学过程中培养学生的主动思考习惯和解决问题的能力。
基于这一思路,每个主要知识点的教学模式为:讲授知识点前,教师先提出若干问题,由学生思考、讨论,提出解决方案;然后,师生讨论学生提出方案的优缺点;最后,教师分析教材上的方法。例如,在讲授“推导”概念时,先引导学生思考,讨论用什么样的数据结构表示符号串;当学生提出不同的数据结构方案后,再引导学生思考“推导”过程中符号串变化的特点,由此分析不同数据结构表示符号串的优缺点;经过这一过程,学生自然得到最合适的数据结构应该是“栈”,而且看到了数据结构课程所学知识如何应用于解决实际问题。这样的学习过程,学生通过自己的思考、分析、比较得到了最后的结论,和教师直接告诉学生采用“栈”来实现“推导”相比,虽然最终都得到同样的结论,但这个思维过程是宝贵的,学生通过分析性的思考得出结论,既感受到了自己得出结论的成就感,也培养了思考能力。
虽然在课程教学最开始的两、三周,很多学生不适应这样的思考方式,但随着时间的推移,大多数学生逐渐习惯了自主“探究式”的教学模式,养成了学习中先自己主动思考的习惯,在分析过程中,也学会了如何评价、比较不同的方案,有助于批判思维的形成。
4 通过自主学习培养学生的学术素养
为落实能力培养,课程安排了少部分内容作为自主学习内容,由学生自己学、自己讲。
程序设计语言中有一类是“嵌套结构语言”,由于“嵌套”特性的存在,使编译程序的实现方法有所不同。但是,在培养方案中,学生学的是C语言,而C语言没有嵌套结构,不了解“嵌套结构语言”的特点,不利于相应编译技术的教学,但学生自学这部分内容并无难度。课程将“嵌套结构语言的特点”安排成自主学习,重点是和编译技术相关的“子程序调用规则”“名字的作用域”等内容。要求学生学习之后,寫成小论文,并制作PPT,从中选择优秀者在课堂上向同学们讲解这些内容。
虽然只有个别学生最后作报告,但是每位学生都参与了这个环节的所有准备工作,锻炼了文献查找与阅读能力、PPT制作能力、报告准备能力,这些都是毕业设计以及后续学习必不可少的基本学术素养。
5 结 语
大学生这个年龄,虽然在很多问题上是有主见的,但确实对一些问题的认识还比较模糊,对未来适应学习、工作、社会生活需要哪些素质和能力也不一定有清晰的认识。这就需要家庭、教师、社会在其成长过程中予以适当的引导,这也是为什么学习是需要采取一定“强制”措施的原因。
爱因斯坦说,教育就是一个人把在学校所学忘光以后剩下的东西。对学生来说,接受教育,不仅仅是学习知识,更重要的是锻炼能力和培养素质。大学阶段每一门课程的教学,就是学生素质和能力培养的直接承担者。
围绕着培养学生素质和能力的主题,编译原理课程采取了一系列的教学探索。通过引导学生将课程知识应用于领域问题求解以及课程的“探究式”教学,培养了学生的主动探究精神、分析问题的能力、实际问题的求解能力、评价不同方案的能力;通过研究性小论文的撰写,培养了学生文献查找与阅读能力,帮助学生了解基本学术规范以及科技论文撰写方法;而自主学习过程,对学生文献查找与阅读、PPT制作、口头表达、报告准备方法等都有一定的锻炼和提高。
最近一轮课程教学结束后的不记名调查问卷显示:在“课程学习的收获”这个问题上, 95.45%的学生觉得课程收获比较大;在“哪些环节让自己收获很大”这个问题上,65.91%的学生认为课程实践环节收获很大,45.45%的学生认为自主学习环节收获很大,56.82%的学生认为课堂授课的收获很大。统计数据能说明一些问题,但是不能反映全部内容,毕竟学生没有足够的经验和经历去判断目前课程学习中的收获与自己未来的关系。百年树人,一些教学措施对人的影响还需要长期的实践来验证。
现代科学研究以及工程实践中的很多问题,并非单个个体在短时间内能够完成,需要团队分工协作。下一步,课程教学方法改革的方向是课程实践的分层次和团队化:将课程实践项目按难度分成不同的层次,鼓励学有余力的学生选择高难度题目;尝试加大课程实践项目的工作量,要求以团队方式完成课程实践,包括小组选题可行性分析、方法讨论与选择、最终编码实现等环节,以培养学生的团队合作精神和协作能力。
参考文献:
[1] 哈佛委员会. 哈佛通识教育红皮书[M]. 李曼丽, 译. 北京: 北京大学出版社, 2010.
[2] Computer Science Curricula. The joint task force on computing curricula Association for computing machinery (ACM) and IEEE computer society[EB/OL]. (2013-12-20)[2017-06-20]. http://www.acm.org/education/CS2013-final-report.pdf.
[3] 怀特海. 教育的目的[M]. 徐汝舟, 译. 北京: 生活·读书·新知三联书店, 2002.
(编辑: 孙怡铭 )endprint