郝扬
桂林信息科技学院 原桂林电子科技大学信息科技学院
摘要:“编译原理”是计算机及其相关专业的一门专业核心课程,由于课程本身的知识体系过于抽象和应用型本科学生自身的特点,使得“编译原理”的教学效果不够理想。为了使学生掌握编译的基本过程、基本原理、设计方法和实现技术,为今后其他的课程的学习夯实基础,本文从应用型本科的教学特点出发,依据课程自身的特点,结合多年的教学实践经验,从教学理念、教学模式、教学实践环节和教学手段等方面对“编译原理”课程的教学改革做了一些初探和尝试,提出了“编译原理”课程教学的一些意见和建议,以期对该门课程的教学发展提供一定的参考。
关键词:编译原理;教学改革;应用型本科
一、引言
“编译原理”是计算机专业设置的一门重要的专业课程,是计算机相关专业学生的必修课程和高等学校培养计算机专业人才的基础及核心课程之一,同时也是计算机专业课程中最难及最挑战学习能力的课程之一。“编译原理”课程内容主要是原理性质,包括语言和文法、词法分析、语法分析、语法制导翻译、中间代码生成、代码优化和目标代码生成等,这其中包括大量抽象且逻辑复杂的理论知识点, 如形式语言理论、正规式、有限自动机、上下文无关文法、属性文法和语法制导翻译等,高度抽象。课程本身所具有的特性使得学生在学习过程中产生了厌学、畏学现象,特别是应用型本科的学生,他们的基础本来就不够扎实,自学能力不强,缺乏主动学习的习惯,所以就出现了学生学习积极性不高,对学习不感兴趣等现象,甚至有的学生抛出了学习“编译原理”无用论的观点。所有这些情况都使得“编译原理”的授课变得十分困难,课程教学效果不理想,课程教学质量无法得到保障。但是这又是每个讲授“编译原理”课程的老师必须面对和解决的问题。“编译原理”课程本身的重要性和课程教学效果的反差,促使我们对课程教学进行不断地反思和探究,作者结合多年的教学实践,对该门课程的教学定位、教学手段、教学内容,教学模式等方面做了一些有益的尝试和改革,并通过实际的教学实践,验证了其有效性。
二、“编译原理”课程教学的现状及存在的问题
1、教学内容过于复杂化和老套,学生学习难度大兴趣不高。从表面上看,编译程序是将高级语言源程序翻译成低级语言程序,但编译程序构造的基本原理和技术也广泛应用于一般软件的设计和实现,其中的设计思想、算法、思维方式和技术都可能会对学生今后的职业发展产生较大的影响。 当今,程序设计已经基本上从传统的过程式转向对象式、组件型。程序设计的一些后继课程,如数据结构等都进行了同步跟进,出现了诸如用C++或JAVA描述的数据结构教材。但“编译原理”课程却没有及时跟进,教学内容仍然是基于过程式语言展开的,编译算法和模型描述是用pascal语言或c语言。虽然个别教材加入了少量关于对象式语言编译技术的内容,那也是稍加点缀而已,作用不大。这就造成了一种奇怪的现象,“编译原理”教学仍然沿袭旧的一套。这种状态严重地脱离了计算机技术的发展和社会的实际需求,因而需要“转型”,即将本课程的讨论对象从过程式语言转到对象式语言。否则,更会让学生有“距离感”和“年代感”,觉得学习这门课程没有实际意义且太难了,要学的东西太多了,这就会浇灭大部分学生的兴趣,打击他们的信心,使得他们对这门课程不是愿学而是厌学。并且这些内容都是其他课本中涉及不到的,又没有实际的东西能够直观地展现给学生,学生即使听懂了也不会觉得有什么成就感。所以这种纯理论的东西直接灌输给学生,授课过程就会变得更加枯燥无味,学生的学习兴趣不高,没有积极性,老师也会觉得学生不愿学或者学不好学不会,从而失去授课的激情,最终的授课效果可想而知。
2、忽略了教学对象的差异性,教学内容针对性不强。“编译原理”课程本身的特点确定其内容的复杂性、理论性和抽象性,毋容置疑,学生学习这门课程是有一定难度的,特别是对于应用型本科的学生更是如此。应用型本科的学生相比于重点院校的学生有其自身的特点,他们的基础差、底子薄,抽象思维能力不强,自制力差,学习的积极性和主动性不强。同样是一门课,上课对象不同,课程的教学目标定位、教学内容和教学模式就要有所改变。但目前“编译原理”的授课现状是,很多教师直接拿某些重点高校的课程教学目标来要求应用型本科的学生,教学内容不做任何的调整和更改,为了在规定的时间内完成教学大纲的内容,往往进行填鸭式的教学,也不关心学生是否能够接受,最后的结果就是教学质量大幅度下滑。学生为了应付最终的考试,对课程内容也就是浅尝辄止的记忆,没有形成对知识较深入的理解,更谈不上计算机专业能力的提升。常常听到老师抱怨说,现在的学生是一代不如一代,以前的学生教一遍就会了,现在的学生教两三遍还不会。其问题的关键就是教学目标定位不合理,教学内容针对性不强。的确,随着我国高校的逐年扩招, 精英教育已经转化为大众教育,大学所招生学生的学习能力是有所下降的,特别是应用型本科的学生,如果照搬老套的教学目标和教学内容,最终的教学效果必然是不尽如人意。
3、重视理论教学,忽略实践教学的重要性。“编译原理”的理论知识抽象难懂,“编译原理”实验教学正好可弥补理论讲授方面的缺陷,是学生通过实验实践来加深对理论知识理解的最好途径。而目前的现状却是大部分高校只重视“编译原理”的理论教学而忽视了实践教学,甚至有些高校根本就没有开设相关的实验实践教学。当然这其中的原因是多方面的,一种观点认为“编译原理”教学内容多,在规定的时间内容能够讲授完理论知识都很紧张,更不用说实践教学;也有部分教师认为,实验教学学生的成绩评定困难,很难真正考查出学生的学习能力;还有这样的观点,实践教学对理论教学的支撑作用不明显,无助于学生对理论知识的进一步理解。凡此种种,都说明了“编译原理”实践教学在课程讲授过程中的现状。
4、教学观念落后,教学方法单一。由于“编译原理”课程本身的特点,直接沿用传统的教学观念已经不适应教学改革发展的观念,传统的教学模式也已不能适应“编译原理”的教学要求。老师在讲台上不停地解释概念,讲解原理,学生在下面端坐在课堂上循规蹈矩地听讲,没有顾忌学生的听课感受,没有与学生的互动和学生的积极参与,这样的课堂氛围,再加上抽象枯燥的理论内容,必然不会引起学生的兴趣、激发学生学习的活力。通常,老师上课的课件是今年用完明年再用,多少年来都没有改动过,对固有的教学模式因循守旧,没有因为专业知识的发展趋势和授课对象的不同有所改观,这种一成不变的教学方法和教学观念越来越难以适应当今的大学生学习诉求,特别是基础知识有所欠缺的应用型本科的学生,更是如此。“编译原理”教学内容的抽象枯燥固然是其本身的特性,但教育观念的落后和教学方法的陈旧更是教学效果不佳的直接原因。
教学手段单一化,教学方法简单化,上课时教师只是用黑板板书,即使是使用PPT课件讲授,PPT课件上堆砌的也全是文字,没有其他辅助的教学设施,没有其他教学素材支撑,课程的授课效果自然不好。
三、“编译原理”教学改革策略
1、转变教学理念,优化课程内容使其更具有针对性。“编译原理”课程的内容多而杂、过于抽象又难以理解,面对的授课对象又是应用型本科的学生,他们的基础差、底子薄,学习的积极性与主动性不高,授课的教师不能把自己所了解的知识不加选择地全部传授给学生,这样即使传授给学生,学生也不能够深入理解。衡量一个教师教学水平的高低不是看他在有限的时间内讲授了多少知识,而是看在有限的时间内能让学生掌握了多少知识。针对“编译原理”这门课程更是如此,如果不针对我们应用型本科院校学生的特点,有侧重性的讲授内容,教育的最终目的就难以达到。所以我们在讲授“编译原理”这门课时,坚持做到 “少而精,切忌泛而广”教学理念,只重点讲授课程的最重要最基本的原理和概念,花费较多的课时在重要知识点上深入讲解,引导学生深入思考和钻研,而其他内容可一笔带过。“编译原理”知识内容纷繁复杂, 需要老师摒弃细枝末节的东西从中抽取剥离出最重要的知识点,如词法分析、语法分析、语义分析等,这些内容详尽阐述,而其他内容不作过多要求,甚至有些内容可以略讲甚至不讲(学生课下自学)。这样才能在某个点上讲得深讲得透彻,学生才能掌握得更牢固、理解得更透彻。
2、创新教学模式,激发学生的学习兴趣。“编译原理”课程有其自身的特点,应用型本科的学生也有其自身的特点,要综合考虑这两者的实际情况并结合实际的教学实践活动,探索出一套适合他们的、高效的、能切合专业人才培养目标的教学模式。“编译原理”内容抽象、理论性强、不宜理解和吸收,但编译过程本身却是任何高级语言源程序被计算机执行的必经之路,它所解决的问题都具有很强的实用性,它的很多经典的算法解决了现实生活中的很多问题。讲解“编译原理”知识的过程中,如果多与我们身边生活实例相结合,就会发现“编译 原理” 原理性的东西离我们并不那么遥远,学生理解起来也没有想象中的那么困难。应用型本科的学生基础差底子薄、缺乏学习的主动性是事实,但他们的情商高,善于和老师交流,敢大胆提出自己的意见,参与意识强, 也渴望得到肯定和表扬。所有这些都是我们可以进一步进行挖掘和利用的。以激发学习兴趣为出发点,专业能力培养为目标,知识传授为载体,全面参与型,任务驱动型和问题引导型的教学模式是行之有效的。兴趣是最好的老师,特别是对于基础较为薄弱的同学,不能唤起他们学习的兴趣,激发学习的激情就没有达到教育的目的。激发他们学习兴趣的途径就是让学生全面参与到教学活动中,用实际的任务驱动他们,用抛出的现实生活中他们关心的问题引导他们去思考,肯定他们思考的结果,表扬他们的进步,增强他们的信心。而实现这一目标的关键之处,是教师从之前的“站到讲台前”变到现在的“坐在学生中”。这一变化绝不仅仅是简单地将所有问题留给学生, 从“讲授”变成“答疑”, 而是从问题设计、思考启迪、讨论引导到过程管理等各方面都对教师提高了要求。特别是现代高级语言发展日新月异, 各种新问题层出不穷, 如何在面对开放性的未知问题时, 从系统和整体的角度给出学生解决问题的方式方法, 而不是给出具体每个问题的回答, 这是对教师能力的一种新考验。
3、注重课程实践教学,培养学生实践动手能力。理论知识的来源一般都有其确定的问题背景。脱离实际问题来进行理论教学, 对学生实际能力的提升没有益处。“编译原理”课程中的大量理论知识,存在一种衔接递进的关系,每个知识点的引入和拓展,都是对于现实遇到问题的解决路径再现。因此, 整个授课过程就在重现这种解决方案演变的变化历程。“编译原理”课程教学理想情况,学生应该能够独立自主完成小型编译系统的构造。实际教学中, 学生只需吃透关键的几条原理知识, 如NFA的确定化、 LL(1)文法中FIRST和FOLLOW集合的构造、LR 文法中识别活前缀DFA构造等,基本上已经满足了课程考试要求。然而, 仅靠理论学习对实现一个基础编译器来说是远远不足的。相比较于学生对理论知识的接受程度, 学生自主动手完成编译系统的能力缺乏就更为明显。如何面对全体学生,制定出一套适用的实践方案,是课程实际效用的关键。我们设计的“编译原理”实验内容既有用高级程序手工编写的设计性实验,也有使用自动生成工具的验证性实验,在做实验的过程中有一个循序渐进的过程,实验内容的难度也由易到难、由浅入深逐渐展开。教师实验教学中的作用同样重要,学生在做实验过程中会遇到各种各样的问题,教师要不同的情况加以协助和指导,这样他们的动手能力既得到了锻炼,理论知识的理解也得到了加强。
4、运用多种教学手段,创建多位一体的学习环境。随着社会的进步和教育理念的提升,新的教育教学设施和教学手段不断涌现。用便捷的教学设施、多样化的教学手段和灵活的教学方法更加直观、通俗、形象地表达抽象、深奥、不宜理解的知识内容是学生的迫切要求,也是授课教师的责任和使命。除了使用传统的黑板和PPT授课,新的教学手段和教学方法更能激发学生的学习兴趣和求知欲。比如PPT的制作加入更多的图像图形元素,加入互动性的内容,提升教学效果。利用日益发展起来的网络学习“编译原理”知识,如果某个知识点理解不透彻, 鼓励学生通过网络上的课件、视频来加深对知识的掌握和理解。特别是现在越来越流行的MOOC,鼓励学生通过它来进行课程的提前学习,然后再在课堂上和老师进行交流和讨论。越来越多的教学设施是我们教师用来提升教学效果和教学质量的有力工具,它们的灵活应用是培养学生专业知识能力、提升创新思维能力一种新的途径。另外,我们还建立了课上课下、网上课堂和教室课堂多位一体的学习环境,学生可以通过多种方式和手段进行学习。比如,我们把课程的课件,案例素材都放到网上,学生可以通过网络进行讨论,教师可以在网上答疑辅导。 在雨课堂中,加入了大量的课堂练习、课堂作业和讨论的内容,将大的知识点分散成小知识点,给学生循序渐进掌握的过程,也可达到量化平时成绩的效果,督促学生重视每一堂课。
四、结束语
“编译原理”是计算专业的核心课程,在计算机及其相关专业的教学体系中起着举足轻重的作用,对培养学生的综合素质有重要意义。本文针对应用型本科学生的特点,结合多年的教学实践活动,从教学理念、教学模式、教学实践环节和教学手段等方面对“编译原理”课程的教学改革做了一些探索和尝试,也取得了一些明显的效果。但课程教学改革是一个不断完善的过程,其涉及的内容也是多方面的,只有不断跟踪学科发展、完善和充实教学内容、改变教学观念、改进教育教学方法、注重培养学生实践动手能力,才能使教学质量逐步提高,培养出适应社会发展需要的专业技术人才。
参考文献:
[1] 陈火旺等. 程序设计语言编译原理(第3版).国防工业出版社,2017.
[2] 张亚娟,冯灵霞. 案例驱动法在编译原理课程教学中的应用[J]. 电脑知识与技术:学术交流,2012.
[3] 翟海霞,赵珊. 编译原理课程的"因点施教"课堂教学方法[J]. 教育现代化, 2019.