编译原理课程网络社区建设的实践

时间:2022-09-01 12:34:35

编译原理课程网络社区建设的实践

摘要:根据编译原理教学中学生反馈的主要问题,由当前的教学现状分析问题产生的主要原因,给出建议和措施,旨在指导和帮助学生如何查找资料,通过实践练习透彻理解课程中的知识,并提出结合当前实际应用的实验方案以配合教学。

关键词:编译原理;教学反馈;课程结构;实践方案;网络社区;课程设计

0.引言

编译原理是计算机科学与技术专业的重要专业课,通过对本课程的学习使学生更深入地了解计算机以及计算机程序的本质,提高学生综合分析问题和求解问题的能力。学习编译原理需要的背景知识很多,可以说这门课是对学生前阶段计算机知识的一次大检阅。无论从课程的理论性还是实践性来看,要求都是非常高的。对于这样一门难度极高的课程,需要教师和学生经常互动交流,及时了解学生在学习中遇到的难点并给予解答。

那么,如何保证教学质量?一方面,教师需要花费更多的心思去琢磨教材,思考采取何种形式的教学方式使学生更容易理解;另一方面,需要采取合适的方式,尽可能地了解学生的学习情况,及时对他们课后的学习进行引导。事实证明,在很多情况下后者相对于前者更显重要。随着Internet的发展,网络社区和社交平台的使用在学生中非常普遍。如果为学生在课后提供一个学习材料和信息非常丰富的网络社区,让大家在这个平台上积极讨论,能有益于解决学习中普遍存在的难点问题。笔者与同事结合多年的教学经验,在本文中对此做了一些总结。

1.“项目开发式”授课

传统的教学体系中,无论采用“龙书”“虎书”“鲸书”“陈火旺”版,或是其他版本的教材,编译原理课程的教学主干基本是相同的,比如词法分析、语法分析、语义分析和中间代码的产生、属性文法与语法制导翻译、运行时存储空间的组织和管理、代码生成、代码优化等。编译原理是一门综合性和实战性非常强的课程,如果教师仅仅是把所有的主干内容在课堂上讲完,通常来说效果不会太好。学习编译原理的学生在之前的学习中已经练了很长时间的基本功,如果到了这门课程我们还是强调基本功练习,就失去了这门综合课程的意义。根据课后调查,很多学生根本不知道编译原理的知识除了做高级语言到低级语言的翻译器以外还能干什么。由于今后从事与编译器相关工作的人数毕竟不会很多,很多学生因此认为本课程没什么大不了。如果让学生能够在本门课中得到专业能力的综合提高,效果就大不一样了。

1.1“软件工程”框架

笔者认为,教学内容的选取应强调对编译原理和技术的宏观把握以及触类旁通的综合运用,教学中突出主要框架,避免把学生的注意力分散到一些细节的算法和过程上。整个教学过程的主要部分可以按照软件工程中的步骤对各个部分逐步求精,让Top Down的思想在教学过程中起到把握全局的作用。具体说来,可以按照软件工程里需求、设计、编码、测试等几个主要步骤来组织教学内容。

(1)需求分析阶段:教师帮助学生分析将要处理的任务,然后对任务进行详讲,制定出完成任务的方法和步骤。

(2)任务的设计阶段:教师需要对教材进行深入的分析,对每一章节的知识点有明确的把握,根据教学目标、教学重难点和学生的实际学习情况来设计任务。在这个环节中,教师对学生进行分组,分配每个小组具体的任务并挑选出专人负责,小组工作将严格按照设计的任务和进度来进行。学生对给定的任务需要详细分析出具体知识点,对于没有学过的知识点可以通过教材预习一课堂听讲一课后讨论等方式掌握,最终带着任务在工程中加以应用。

(3)编程实现阶段:这个环节直接关系到最终的教学效果。在任务实施之前,教师要对每组制定的计划进行检查,及时纠正计划中的错误或漏洞,尽可能避免在任务实施过程中出现错误。教学中,对于学生遇到的问题和困难,教师不要急于告诉学生该如何做,而是通过适当地引导和指点,鼓励学生通过自己的努力找到解决问题的方法。如果是普遍存在的共性问题,教师则需要在全班统一指导和讲解,从而确保任务的正常进行。

(4)任务评价阶段:学习过程是以任务为核心的,当所布置的任务完成后,学生要学会如何及时评价自己的任务完成情况。自评、、组内互评以及教师的综合点评可以有机结合。通过评价训练,可以更深层次地加深对知识的把握。

1.2引用多领域实例

编译课程的目的在于让学生系统地了解编译程序设计的基本理论、编译系统的结构及编译程序各部分的设计原理和实现技术。理想的结果是学生既能掌握编译理论和编译方法等方面的基本知识,又具有设计、分析、实现和维护编译程序等各方面的综合能力。编译原理理论知识包括形式语言、有穷自动机理论等抽象内容及大量的算法,较难理解和掌握。因此,深化学生对所学理论知识的理解,提高学生理论联系实践的能力和编程水平更显重要。

教学中我们发现,仅仅将书上的实例讲给学生听,学生并不好掌握,能运用这些理论解决问题的就更少了。如果在讲完理论之后适当引进一些实例,例如:将状态转换图在硬件设计中的应用——设计状态机模型介绍给学生,并给出相关学习资料和网站介绍,如此下来,通过对状态转换图的实例运用,使得原来非常抽象的正则表达式概念学起来就具体多了。另外,由于Windows的普及以及微软提供的强大技术支持,人们使用电脑非常方便了,但也使很多人误认为学计算机就是学Windows;甚至许多计算机专业的教学也都被局限在了Windows平台,一些教师也不愿意花过多的精力在其他的操作系统。坦白地说,Windows平台虽然方便好用,但同时也阻止了初学者进一步接触操作系统的内核,所以教学中不妨结合操作系统的内容,引进Linux的概念。学生在接触了Linux操作系统之后,会发现Linux上的很多操作或表述都要用到正则表达式等相关知识。总之,学习编译原理不仅仅在于让学生掌握其本身的理论体系,更重要的是让他们学会这些思维方式和方法去解决问题,以及知道应用前景。

2.编译原理网络社区的建设

上面说的道理可能很多同行都已经想到了,如何做到呢?尤其是教百人以上的合班课,建立专门的网络社区对学生的理解程度进行实时跟进是个很好的选择。此外,教学中我们还会收到这样的反馈:很多学生听老师讲课似乎很明白,但自己转述起来就很难。诚然,在学生的理解过程中,会出现很多似懂非懂的问题,讨论是一个帮助达到透彻理解非常有效的方法。然而在课堂上甚至在课后教师也难以找出适合而充足的时间来组织这样的讨论。网络社区可以有效地克服地域和时间上的困难,让大家方便地交流意见和看法,教师也能及时发现问题加以指导。

2.1分专题组成“聊天室”

不同的学生感觉到的学习困难不一样。教师可以按不同的专题设立讨论社区,同时附上相关的课外材料、实验计划和步骤,以及供参考的实验例程源代码。好学的学生一般希望有机会表达自己的观点,教师可以引导他们发表自己的见解,激发其他同学的学习兴趣。教师也要及时地对学生的留言进行评议,进行肯定和纠错,使他们在激励中主动去思考,使学生由被动学习变为主动学习。针对典型问题,教师可以挑选出众的学生到课堂上作简单的讲解,让他们自己制作PPT,锻炼他们的语言组织和表达能力。学生阐述问题的方式和语言虽然没有教师那么精炼准确,但往往能让他们的同龄人更容易接受;另一方面,这种形式可以使学生明白网络社区是和课堂紧密相连的,是课堂的延续。网络社区的积极活动很容易被量化,成为重要考评成分。

2.2课前问题的提出和课后讨论

这里分为课前和课后两方面:教师在课前提出问题,让学生提前预习教材。编译原理课程很多内容乍一看会让人一头雾水,学生带着问题上课,效果要比教师直接灌输好得多,这样做既锻炼了学生自学的能力,也提高了课堂效率。

课后讨论可以集思广益,面对同一个问题,不同的学生有不同的解答方法,这样不仅让学生能从不同的角度去审视问题,而且教师也可以在学生回答时发现不足,及时纠正错误,同时也能让教师打开思路给出一些更接近于学生的解释和实例。如果单个学生对于问题的深入有困难,可以以小组为单位进行合作,这种合作学习的目的在于通过团队合作解决问题,在此过程中培养学生创新精神,以及协同解决问题的能力。

3.结语

编译原理课程理论性较强、知识结构复杂,学生普遍感到学起来困难。在多个班级同时授课时,我们采用了以上的教学模式和技术措施,对2009级和2010级学生进行了教学实验。不仅学生到课率较前几届明显增加,而且在课程教学进度刚刚过半时,就有许多学生自己运用C、C++或者Java实现简单的编译器编写。学生在整个课程的学习过程中,讨论积极,互相讲解,小组之间甚至自发出现了竞争的好现象。总的说来,运用新的教学方法在网络社区的基础上让学生进行课前课后的讨论,改变了以往主要靠灌输的教学模式,使多数学生参与到课堂教学中,从而让整个学习过程变得主动起来,很大程度上激励了学生的学习兴趣,也使学生对知识的掌握更加清晰,逃课的学生明显减少。从考试结果来看,不仅及格率明显提高,高分人数也显著增加,达到了编译原理课程的教学目标。

上一篇:“伸展树—一种高效的索引树”教学设计 下一篇:编译原理课程教学中的词法分析及其应用