杨柳 魏秀杰 肖楠
摘要:针对编译原理课程在计算机本科教学中难讲、难学的特点,从理论教学、教学方法、实践能力培养等方面进行了探索,提出了相应的解决方法。
关键词:编译原理;教学方法;实践能力
编译原理课程是计算机科学与技术学科下各专业的核心专业课程,其教学目标是通过教学实践训练学生的抽象思维能力和动手能力,旨在使学生掌握程序设计语言的形式化描述和编译的基本理论、原理和技术,并对编译程序有较为具体的认识。使学生能运用所学过的基本知识、着手开发系统程序,为今后的工作(理论研究和技术开发)打下基础。但由于其内容具有较强的理论性和实践性,学生在学习过程中感到内容抽象、算法复杂、难于理解,因此“编译原理”被普遍看作是计算机本科教学中最难讲解、最难学习的课程。针对这种情况,如何提高这门课程的教学效果,是一个值得探讨的问题。笔者近年来一直从事“编译原理”课程的教学,对如何改进教学方法和提高教学效果做了一些研究和探索。
1 明确教学目标,增强学习兴趣
对于编译原理这门课程,普通高校本科的教学目标是:通过编程语言实现技术的学习,提高学习编程语言及在程序开发中应用编程语言的能力,具体解释如下:提高学习、理解和使用编程语言的能力;提高程序排错的能力,即快速理解、定位和解决在程序开发与程序运行中遇到的问题的能力;提高编写高质量代码的能力。
另外,由于编译程序,由于编译程序作为系统软件在性能上具有严格的要求,这使得它所使用的算法经典、高效,而这些算法、思想和实现技术也可广泛地应用于一般软件的设计实现。如正规式和有穷自动机在文本编辑器中的广泛应用,有穷自动机在字符串查找中的运用,必经节点算法在网络中的运用,由文法来定义网络协议等。在教学中,可以鼓励学生尝试将编译程序中的各种算法和技术应用到各个应用领域,从而激发学生的创造性思维,培养学生的创新能力,为今后的学习打下坚实的基础。
2 运用多种教学方法,提高教学效果
“编译原理”课程具有很多概念和定理,再加上大量复杂的算法,抽象程度很高,因此要想获得良好的教学效果,必须借助形象化教学手段,使抽象的理论具体化。
2.1 抽象内容形象化
编译程序的主要功能是把用各种语言编写的源程序翻译为等价的目标程序。既然编译过程是一种语言的翻译过程,因此我们就可将编译程序的工作过程与通常外语资料的翻译过程进行类比,这对于学生更直观地了解一个编译程序一般应由哪些部分组成,以及各个组成部分应如何进行工作等是有助益的。如何进行翻译。概括地讲无非是做两方面的工作;一是进行分析,二是进行综合。所谓分析,就是从第一行的第一个字母开始.依次阅读原文中的各个符号,逐个识别出原文中的各个单词,然后根据语法规则进行语法分析,即分析原文中如何由单词组 成短语和句子,以及句子的种类特点等。此外,在识别单词和进行语法分析的过程中,还要不时地查阅字典,做语法正确性的检查,进行相应的语义分析,并做一些必要的信息加工作等等。所谓综合,就是根据上述分析所得到的信息,拟定译稿,进行修辞加工,最后写出译文。
类似地,编译程序在其工作过程中,也需做两方面的工作,即先分析源程序,然后再综合为目标程序。为了便于学生理解编译程序在此两方面应包括的工作环节,将源程序的编译和外文资料的翻译两过程的主要工作列表对比:
通过将自然语言的翻译过程与编译程序的工作过程进行对比,加深了学生的印象,又有助于理解为什么将编译过程划分成这几个阶段。
2.2 注重教学方法的灵活运用
在师生互动中完成教学过程 充分发挥学生的学习主动性,注重启发式教学,注重提高学生的素质、培养学生的创新能力。为及时了解教学效果和教学过程中存在的问题,我们在课堂上、课后答疑过程中收集学生对教学的反馈意见,并有针对性地予以改进,使教学质量在师生互动中逐步得到提高。
2.3 实施多媒体辅助教学形式
“编译原理”是一门理论性强的课程,为了使抽象问题形象化,便于学生对知识点的理解和运用,利用多媒体手段,把原理性的重点知识以动画、图形形式呈现给学生,把知识讲解化静为动,培养和激发学生的学习兴趣。在教学中,对于一些不容易理解的内容,可以通过一个动态的模拟方式来进行讲解。既可在课堂上演示,也可在课后由学生自己观摩,有助于加深学生对所学知识的理解。 同时向学生推荐网上优秀的编译原理课程教学网站、电子书、算法等资源,拓宽学生视野。
2.4 探索网络教学方法,提高教学水平
根据“编译原理”课程的特点,进行网络教学资源平台的建设,为学生的学习提供丰富的参考资料和教学指导。通过网络教学平台综合学生问题,在归纳分析的基础上,不断改进教学。
3 注重实践能力的培养
教学中,理论与实践是相辅相成,互为促进的,因此编译实验内容的合理设置对搞好整个编译教学起着至关重要的作用。通过实验,学生能够更好地理解课程中的基本概念和原理,通过自己动手提高实践能力。由于编译过程每个阶段都有特定的方法和技术,故可以针对各个阶段设计不同的实验,通常这一类的实验多为验证性的,规模相对较小,主要是对一、二个知识点和算法的实践训练,可以根据理论教学的情况灵活安排,这部分实验内容,以验证知识、帮助理解基本知识和实验基本技能为主。二是设计型实验,这类试验可以针对某一语言设计和实现一个相对完整、独立的编译器,或者研习现有的编译程序,对其进行扩充。这种方式的难度根据语言规模的不同以及学生扩充程度的不同而有差别,弹性较大,有利于加强学生对编译程序的整体认识,且能充分锻炼学生的编程能力。
4 结束语
作为ACM 规定的计算机科学主干课程之一,编译原理在计算机学科的教学体系中占有重要地位。作为专业课教师必须不断更新理论教学和实验教学的方法,激发学生的学习兴趣和和积极性,努力提高教学质量和教研水平。
参考文献
[1]窦亮杨,宗源,王婷婷.编译实验课程的教学研究与实践[J].计算机教育.2009(24) : 8-11.
[2]林奕,康慕宁.软件教育新形势下的编译原理课程体系改革[J].计算机教育,2011(11):28-32.
[3]贺汛,吴春寒. 编译原理教学中创造性思维能力的培养[J].计算机时代,2010(4):54-58.
[4]沈来信,韩静,杨帆.编译原理课程的教学实践[J].黄山学院学报,2010(5):133-134.
作者简介:杨柳,女,副教授,主要研究方向:网络信息处理,智能规划。