前言:我们精心挑选了数篇优质编译原理论文文章,供您阅读参考。期待这些文章能为您带来启发,助您在写作的道路上更上一层楼。
CDIO工程教育模式是能力本位的培养模式,其优势在于让学生以主动、团队合作、课程与课程之间有机联系的学习方式,获取与工程实践相关的知识与能力。CDIO培养大纲将工科毕业生的能力分为工程基础知识、个人能力、团队合作能力和工程系统能力4个层面,大纲要求以综合的培养方式使学生在这4个层面达到预定目标。只有把知识、能力、社会需求融合起来,以能力为导向,以学科知识和社会需要为依托,整合课程组织结构,才能培养出符合社会经济发展要求的工程技术人才。CDIO工程教育以实际应用项目的开发过程为主线,提炼出项目开发经历的构思、设计、实施、运行4个主要环节,培养学生系统开发的能力[3-4]。实施CDIO工程教育模式,基本原则是落实“做中学”以及“基于项目的学习”,它体现了现代工程师所应具备的服务于现代工业产品从构思、设计、实现到运行的全过程所必须拥有的基本能力。
课程教学改革从以下4个方面展开。1)学生分组,导入项目。课程教学以项目导入的方式开始,首先鼓励学生搜集编译基础理论和技术在计算机应用领域的成功案例;其次引导学生搜集开源的编译工具,按照支持的源语言和语法分析方法分类。以上两项前期工作对应CDIO模式的构思部分,需明确客户的需求,考虑技术、企业战略和制度等因素,不断改进概念、技术和商业计划。项目的最终目标是用C语言编写一个PL/0语言处理系统。在教学过程中,学生分成若干个项目组,在教师的指导下编写项目计划书,划分项目的功能模块;指定各个模块的负责人,模拟实际项目开发,进行分工协作。2)案例驱动,模仿提升。CDIO工程教育模式要充分体现“做中学”,以“项目案例”为载体组织整个教学过程,以案例开发过程安排教学内容,灵活运用启发式和研究性的教学方法。课程教学要为学生构建项目开发的情景,调动学生的主动性与参与性,提高学生的实践创新能力。在编译原理课程教学过程中,我们发现有些学生学习缺乏积极性和主动性,课外缺少自主训练和探索,虽然通过了课程考核,但是实际只了解到一些基本概念和零碎的知识断点,不具备运用所学原理和技术进行编译器开发的能力。为了培养学生“构思—设计—实现—运作”编译系统的技能,我们将编译原理的学习过程分为模仿和提升两个阶段。(1)模仿阶段的主要目标是以PL/0语言处理系统为案例,引导学生学习基础知识,掌握基本算法,激发学生兴趣。项目开发分为8项子任务,这些任务可在教师的指导下完成。任务1:安装测试用C语言实现的PL/0语言处理系统;完成PL/0语言语法的EBNF描述。任务2:PL/0编译程序中词法分析程序的设计和实现。任务3:PL/0编译程序中语法分析程序的设计和实现;自顶向下递归调用子程序的方法。任务4:PL/0编译程序中语义分析和中间代码生成。任务5:PL/0编译程序中符号表的设计与实现。任务6:PL/0编译程序中运行时的存储组织。任务7:PL/0编译程序中的目标代码生成。任务8:PL/0编译程序各阶段整合运行,编写PL/0语言使用说明书。教师可展示用C语言实现的案例,要求学生模仿整个实现过程,用Java语言再次实现PL/0语言处理系统。学生则通过此案例,模拟项目开发全过程。(2)提升阶段的主要目标是让学生学习编译器开发的流程,学会运用编译技术进行项目开发。本阶段分为以下几个步骤。步骤1:编译器程序设计提高。定义一个待实现的源语言,如PL/0语言的扩充或者C语言的一个子集,要求学生用C或者Java实现编译程序。步骤2:编译技术扩展。引导学生学习面向对象语言编译技术,如收集整理开源编译器GCC的资料,描述GCC的总体结构、编译流程、代码组织。步骤3:编译器实用工具。引导学生学习嵌入式系统编译器及其工具的应用开发,包括C和Java编译器开发。步骤4:项目实训。引导学生利用编译技术进行项目开发,如设计开发C语言程序设计自动评分系统、基于语法分析技术的企业名称识别算法、基于语义分析的数据驱动型漏洞检测方法、编译原理在通信协议转换中的应用、编译原理在反病毒技术中的研究和应用等。3)开放资源,自主协作。CDIO注重自主学习能力的培养,提升学生独立解决问题的能力,同时也重视团队协作精神的培养,发挥团队的力量,协同工作完成任务。网络环境下的自主和协作学习要求教师提供充分的网络资源。在教学中,课程组搜集整理了国内外编译原理课程的教学资源,整理了各种实用编程语言及其表示规则,设计了适合学生需要的“做中学”项目和任务,并在课程的教学网络平台共享,通过开放资源和自主协作的学习,鼓励学生在课外通过网络和移动设备开展学习讨论,用课外学习弥补课程学时的不足;通过课外自学,充分发挥学生的主观能动性,锻炼学生“自主设计、自主实现、自由探索”,引导和鼓励学生积极组织并参与项目组的学习和研讨活动,让个人融入项目团队,提升整个团队的工程实践能力。4)考核评价,多点多面。CDIO注重工程实践能力的培养,工程实践能力是各种能力的综合体现,因此考核评价要兼顾这种特性。所谓多点主要是指编译原理具有纷繁复杂的知识点,因此对知识点的考核应以促进学生主动学习、研究性学习为目的,注重对学习过程的考查。教师可通过查看学习记录、平时作业和练习情况,考核学生对基本知识点的掌握情况;通过小组活动记录,查看学生在项目组讨论中的活跃度,了解学生提出问题的数量和质量以及解决问题的思路,考核学生的知识整合和应用能力。所谓多面主要是指编译原理课程在培养学生实践创新能力方面具有多面性,因此考核评价方式要有利于培养创新能力、实践技能、解决实际问题能力,从多个层面开展。教师可通过对项目构思与设计展示、子项目实施情况、项目汇报与答辩、学生的自评与互评、教师与企业工程师的评价等多种方式考核学生的专业知识、个人自身能力、团队合作能力、设计项目和开发系统能力。
3CDIO模式编译原理教学实施过程中存在的问题与对策
1)“双师型”教师队伍的建设问题目前,从事编译理论研究和技术开发的教师不多,有编译器开发经验的教师比较缺乏。编译原理课程“双师型”教师队伍奇缺。湖北省教育厅和湖北工程学院制定政策,资助并鼓励青年教师进入相关企业与工程师合作解决实践中的技术难题。同时,湖北工程学院每年派出专业课青年教师到武汉大学、华中科技大学等高校进修深造。通过这两个途径,学校可以解决“双师型”师资队伍建设的问题。2)学生实习实训平台的建设问题。毕业生就业难和符合市场需求的应用性人才短缺问题一直是高校、用人单位和毕业生共同的困扰。学生综合能力是就业成败的关键因素,CDIO工程教育模式强化工程应用实习实训平台的建设,希望为解决这种困扰提供帮助。湖北工程学院与中国航天三江集团公司合作共建的工程实践教育中心和湖北工程学院国家级大学生创新创业训练计划项目已获得教育部批准。在此基础上,计算机学院已经与国内10余家IT企业和科研机构合作共建实习实训基地,校企合作层面深化,操作方案细化,实现与行业需求的无缝对接。
4结语
1.1编译原理课程的特点及学习编译原理的目的
编译原理课程逻辑性强,理论性强,内容抽象,课时少,学生学习编译原理容易造成知识之间断裂,很难做到融会贯通。学生普遍存在畏难情绪,教学效果不理想。一般应用型本科学习编译原理目的是:掌握编译理论和基本技术,同时具有设计、实现、分析和移植编译程序等方面的初步能力,为从事计算机软件开发工作及理论研究打下坚实基础。
1.2教学中存在的问题
一般应用型本科院校学生的兴趣是应用计算机去处理现实问题而不是理论知识的获取,但是传统的编译原理教学内容理论性强,并且学生认为学习编译理论即是要构造编译器,所以学生的学习兴趣不浓。同时,学习编译原理要涉及到离散数学、组成原理、操作系统和数据结构等多方面的知识,所以学生接受吸收编译原理的理论知识和技术比较难。
1.3实践环节薄弱
编译程序是大型复杂的软件系统,在教学中一般把编译原理逻辑划分成五个阶段进行讲授,如:词法分析、语法分析、语义分析与中间代码生成、中间代码优化和目标代码生成。但是这样做易导致学生不清楚编译各个部分是如何协调工作的,尤其对于语法制导翻译技术和语义规则,学生理解起来异常困难,把复杂的编译理论和技术通过编程实现,大部分学生上机时无从下手,没有思路。
2软件工程化的编译原理教学改革
把软件工程化的思想引入到编译理论教学中,将软件工程的知识由浅入深、阶梯状、循序渐进地贯穿在编译原理实践各个阶段项目的开发中。
2.1依据应用型本科的特点进行教材建设
近几年来,经过教学团队继续不懈的努力,《编译方法及应用》教材在充分吸收国内外最新计算机教学理念和教育体系的同时,面向一般工程类院校本科教学,在基础理论之上,更加注重编译原理应用性、基本知识和基本技能的培养,集思想性、科学性、启发性、先进性和适应性于一身。自编《编译原理实验指导书》规范学生实验报告的格式,对实践涉及到的关键算法和数据存储结构给予说明,从软件工程的角度,从实验的需求、可行性报告等方面,要求学生完善文档体系,引导帮助学生完成编译原理实验。自编《编译原理习题与解析》,对知识点、重点、难点和典型算法进行深度总结,选择或设计富有启发性的例题,并对这些例题给出透彻的分析与解答,使学生掌握问题的解决方法和思路,收到了举一反三的效果,学生编译原理期末考试成绩明显高于往年。
2.2优化编译方法课程体系和教学内容
编译原理的整个知识体系是数十年来无数学术精英在形式语义学、计算数学、计算机科学等相关领域不懈探索、积累的结果。整个编译程序是一个完整的系统算法,理论性强而抽象。鉴于此,面向软件工程化改造编译理论,阶梯状迭代工程实践项目,将现代应用软件工程模型特点与编译技术紧密结合,引导学生利用大型软件的分析设计方法及手段,不断充实编译方法课程的内容,从而使得本课程的教学内容不仅具有先进性,还具有实用性。通过对知识点的概要总结、实验指导、课堂锻炼、经典习题解答、课后研讨等方式,加强学生对编译抽象理论的理解,把软件工程化思想引入到编译方法教学实践中,加强学生对编译理论与实践的相互深化与促进。
2.3基于软件工程化的教学实践
以创新性和实践性为目标,开设综合性设计性必做实验项目,引导学生利用大型软件的分析设计方法及手段进行编译原理实践,构造一个完整的编译器。按照编译程序的逻辑功能结构,将一个完整的编译实践划分为:词法分析、语法语义分析、中间代码生成、代码优化和目标代码生成。将软件工程的知识由浅入深、阶梯状、循序渐进地贯穿在编译原理实践各个阶段项目开发中。把编译理论知识内容巧妙地隐含在每个任务之中,学生以任务驱动、成立开发项目小组的形式协作完成任务。编译实践每个阶段的需求是前一个阶段的拓展,因此每一个阶段的软件开发可以看成前一阶段开发的迭代,从而锻炼学生解决大型软件开发项目中用户需求不断变更的疑难问题的能力,以及最大程度地使用重用技术的能力。教师组织开发团队进行汇报,小组内部之间经常交流情况和信息,以减少误解,删除软件中的个人特征,提高软件的质量,从而提高学生项目规划、队伍组织、工作分配、成员交流和演讲汇报等多方面的能力,培养学生的团体合作精神、团队合作进行项目研发的能力,以及采用软件工程化方法开发大型软件的能力,为研究和学习软件生产线新技术奠定基础。以创新性和实践性为目标,开设选作实践项目,如:算符优先文法的FIRSTVT、LASTVT集合的求法,算符优先文法的判断;FIRST、FOLLOW集合的求法,LL(1)文法的判断;LR(0)文法的判断,SLR(1)文法的判断。通过开设选作实践项目,拓展学生的思维,更进一步提高了学生把基础理论、基本技术、基本方法转化为解决实际问题的能力,以及理论与实践相结合的能力。
2.4编译原理技术的工程应用
形式化方法是编译理论最重要的方法,由于形式化方法是建立在严格的语法和语义规则基础上的,因此注重向学生介绍编译原理技术的工程应用,如:形式化方法在TEX科技排版系统和方正排版系统上的应用,形式化方法在数字电路设计和验证、通信电路设计和验证、需求分析描述、系统正确性验证等方面应用,取得了显著的成绩。
2.5培养编译方法教学团队
有计划、有目的地培养中青年教师。助教在完成编译原理课程的辅导、作业批改、实验辅导、软件综合课程设计的安排和实施等的基础上,参与编译原理课程、离散数学、汇编语言程序设计课程的建设,并参与课程大纲的讨论及教学计划的制订,获得了多项教改成果。课程团队还鼓励青年教师把先进的科研方向带进本科生课堂,实现科研与教学的有机结合,不仅有利于提高授课内容的先进性,也有利于锻炼年青教师的创造性和责任感。通过教学实践、实验教学的训练以及定期组织教学研究讨论,青年教师的教学态度得到进一步端正、教学方法得到进一步丰富,教学水平也有了很大的提高。课程团队还让青年教师通过科研的实际锻炼提高自己的研究能力,扩展知识面。课程团队目前已建立起一支强有力的教学梯队,形成了以高素质教师为骨干力量的教师队伍。
3结语
【摘要】本文根据编译原理课程的特点,结合自己的教学经验,探讨了普通本科院校编译原理的实践教学内容的设置,对普通高校更深入的教学改革和创新人才的培养具有一定的意义。
【关键词】编译原理教学内容课程实验
1引言
编译原理课程是计算机科学与技术专业的重要专业课,它不仅能帮助学生更深入地了解计算机以及计算机程序的本质,还能提高学生进行问题求解的能力。本课程的理论性和实践性都很强。国外和国内分别从二十世纪六十和八十年代开始设置“编译原理”课程,从文献[1,2]两本专著的内容可以看出,几十年来,“编译原理”课程可以讲授的内容越来越多。设置该课程的目的在于系统地向学生讲叙编译程序设计的基本理论、编译系统的结构及编译程序各部分的设计原理和实现技术。通过对这些知识的学习,使学生既能掌握编译理论和编译方法等方面的基本知识,又具有设计、分析、实现和维护编译程序等各方面的综合能力。该课程一般包括理论教学和实验教学两部分。编译原理理论知识包括形式语言、有穷自动机等抽象内容及大量的算法,较难理解和掌握,因此“编译原理”的实验教学对于深化学生对所学理论知识的理解,提高学生的理论联系实践的能力和编程水平具有重要的作用。
本文根据编译原理课程的特点,结合自己的教学经验与我院的实际情况,探讨了普通本科院校编译原理的实践教学内容的设置。
2课程实验的重要性
编译原理是集理论与实践于一体的一门课程,在理论课中所介绍的基本概念、原理、方法和算法,一定要通过实验加以理解和吸收,才能能够达到真正的理解、吸收和掌握。编译原理课程实验的内容主要放在对词法分析、语法分析和语义分析、中间代码生成、中间代码优化和目标代码生成的方法上。由于编译原理课程有很强的理论性与实践性,在学习时普遍感到内容抽象,不易理解,掌握起来难度很大。因此通过教学实践和对学生所做的调查表明,设计一组与理论内容相配套的实验是十分必要的。
3课程实验的设计
针对编译原理课程的特点及要求,共设置了五个实验项目。这组实验既和理论课内容相辅相承,同时相互之间又互相关联,构成了一个实验整体。
实验一
题目:消去C、C++程序中的注释(2学时,必做)
实验目的:掌握C语言文件的基本操作,消除源C语言程序中的注释,为以后的编译提供方便。
实验要求:对给定的带注释的C语言源程序,利用该程序去掉注释,输出去除注释的源程序。
实验二
题目:词法分析(必做,4学时)
目的:通过设计编制调试一个具体的词法分析程序,加深对词法分析原理的理解。并掌握在对程序设计语言源程序进行扫描过程中将其分解为各类单词的词法分析方法。
要求:编写程序对输入的源程序字符串进行词法分析,对符合下述文法描述的字符串,建立单词符号表,不符合的字符串给出错误信息。
内容:用扩充的BNF表示如下:
<标识符><字母>{<字母><数字>}
<整型常数><数字>{<数字>}
<算符>+-*/()=
<字母>abc…yABC…Y
<数字>1234567890
实验三
题目:递归下降分析法(4学时,选做)
目的:根据给定的文法编制调试递归下降分析程序,以便对任意输入的符号串进行分析。本次实验的目的主要是加深对递归下降分析法的理解。
要求:对给定的文法,利用递归下降分析法对任意输入的符号串进行分析语法分析,对符合下述文法描述的字符串(表达式或赋值语句),给出中间代码,不符合的字符串给出错误信息。转中国-内容:用扩充的BNF表示如下:
<赋值语句><标识符>=<表达式>
<表达式><表达式>{+<项>-<项>}<项>
<项><项>{*<因子>/<因子>}<因子>
<因子><标识符>(<表达式>)
即:Si=E
EE+TE-TT
TT*FT/FF
Fi(E)
实验四
题目:语法分析程序LL(1)(4学时,必做)
目的:通过该实验使学生掌握描述语法规则的文法,以及加深对语法分析中自顶向下分析法中的预测分析法的理解。
要求:对给定的文法建立预测分析表,利用预分析法对实验一中词法分析产生的符号进行语法分析,对符合下述文法描述的字符串(表达式或赋值语句),给出中间代码,不符合的字符串给出错误信息。
内容:用扩充的BNF表示(同实验三)。
实验五
题目:语法分析程序LR(1)(4学时,必做)
目的:通过该实验使学生加深对语法分析中自下而上分析法中的LR分析法的理解。
要求:对给定的文法手工建立LR(1)分析表;利用LR分析法对实验二中词法分析产生的符号进行语法分析,对符合实验中文法描述的字符串(表达式或赋值语句)给出中间代码;不符合的字符串给出错误信息。
内容:用扩充的BNF表示(同实验三)
近期,不断有报道揭示中国留学生在海外求学过程中暴露出来的一系列问题,如考试作弊、作业抄袭、动手能力低下、公民素养缺失等。与此同时,国内高校的教师也在抱怨本科毕业设计难带,招收的硕士甚至博士素质达不到预期,难出成果。
大学生应具备哪些素质?大学教育可以培养哪些素质?普通课程的教学过程又该怎样培养学生的素质?这是每个高校教育工作者都应该认真思考的问题。
1 大学生应具备的素质及其培养
1.1 大学阶段的培养目标
广义地说,教育的目的是培养一个人应具备的在这个世界正常生存的各种能力和素质,包括工作、生活等各方面基本素质和能力的养成。
不同的教育阶段,教育的目的体现为不同阶段的培养目标。大学阶段,教育的本质是使每个学生能够成为更完善的“人”,但重点在生存能力的培养,具体为专业知识和技能的学习与锻炼,即每个专业的培养目标描述的内容。
如果用一棵树来表示“人”在各个受教育阶段习得的知识及其关系,那么,大学阶段的专业知识应该在树的主要枝干处,硕士教育和博士教育对应的素质和能力培养,则相当于小的树枝和树叶,见图1。
1.2 大学阶段的素质培养
大学阶段的培养手段,主要是课程教学,分为通识课程学习和专业课程教育。通识教育旨在培养学生的思考能力、交流思想的能力、作出恰当判断的能力和辨别价值的能力,专业教育旨在培养学生将来从事某种职业所需的能力[1]。
大学阶段专业课程的系统学习,可以使学生对整个学科有一个初步了解,建立学科的知识结构体系,并具备可用于求解相关领域问题的基本专业技能,注重职业能力的训练。这些素质将为研究生阶段的科研活动、工作阶段的技术任务奠定基础。
ACM和IEEE的《计算机科学课程体系规范2013》明确指出:?算机科学本科生教育应该使学生为未来的工作做好全面准备;这些素质和能力的培养,是通过大学阶段通识课程的学习经历和专业课程的教学活动综合作用达到的。这种培养,不是由某一门或某几门必修课的修习完成的,而是所有课程的教学活动长期综合作用实现的,即每门课程的教学活动在学生素质和能力的培养方面都是责任重大的,也是非常有意义的[2]。
换句话说,每门课程都可以精心设计成培养学生综合素质的“沃土”。但是,这有赖于每位教师对教育目的的正确认识,也有赖于每位教师对课程教学的责任和意义的认识以及每位教师对教学活动的设计与付出。
CS2013有这样的内容阐述:事实上,学生的软能力(soft skills,如团队合作精神、口头及书面表达沟通能力、时间管理能力、问题解决能力、灵活应变能力等)及个人素质(如对风险的承受能力、合议共治能力、忍耐力、职业道德、机会的辨识力、社会责任感、对多元化的理解等)在未来工作中将起到至关重要的作用;一部分软能力和个人素质(比如忍耐力、时间管理能力、职业道德、对多元化的理解等)将通过大学的学习生活获得,其他部分则需要通过具体的课程教学活动来培养[2]。
大学阶段培养方案的落实、对学生综合素质和能力的培养,是通过每一门课程的教学活动来实现的,这也是每位任课教师的责任和工作意义所在。
2 通过课程实践环节培养学生的综合素质
2.1 以领域问题求解引导理论与实际相结合
计算机专业的核心课程,其知识的讲授一定是围绕着专业原理的。如何让原理知识深刻影响学生问题求解的思维,并被学生实质性地掌握,一直是笔者思考的问题。
英国著名教育学家、数学家、哲学家怀特海在《教育的目的》[3]中提出:“在大学教育中,综合运用精神应占主导地位。”他认为:“在中学里,学生通过艰苦的努力,从特殊具体的事实到初步了解一般的概念;而在大学,他们应该从一般概念开始,进而研究如何将这些概念应用于具体的场合。一种设计得很好的大学课程是对普遍规律进行的广泛研究。我的意思是,应该对具体的事实进行研究,让它们说明一般的概念。”他还认为:“必须不断发现方法的通用性,并将这种通用性与某一特定应用的特殊性进行对照。”
在这样的理念指导下,笔者重新设计了编译原理课程的教学,将理论课堂的程序设计语言编译原理知识应用到课程实践中的领域问题求解。
理论课堂教学仍然围绕着编译程序的理论依据、程序实现原理、具体实现算法的分析与讨论,注重以动画形式和生活实例来减轻抽象内容带来的陌生感。
在课程实践部分,除了编译技术的实现,还启发学生探索编译理论、方法和技术在各种应用领域问题求解中的实际应用。比如,课程介绍的程序设计语言的翻译原理、技术和方法,完全可以用于实现试卷分解及题库的生成,此时,待分析的不是程序,而是一份满足要求的试卷,待生成的不是程序对应的目标代码,而是容纳各种试题及其答案的试题库。依随课堂教学内容的进度,可以对应地引导学生思考领域问题求解的步骤,然后落实到具体应用问题求解过程。表1为把编译方法应用到实现题库生成系统的学习过程。
在这一思路的引导下,学生寻找各种领域问题作为课程实践求解的对象,例如,网络传输协议解析、简言作诗机、文档编辑器、测试自动化、文档排版、作业自动批改评分、汉语自然语言处理、恶意脚本查杀、音乐简谱处理、逻辑门电路绘制、汉语英语翻译、自动阅卷系统、XML文档解析、中文识别、邮件地址识别、模式识别、游戏脚本处理、MIPS指令解析、JSON解析、身份证号码的识别与利用等。
整个实践过程中,学生自主选题,教师引导学生分析、寻找这些“领域问题求解”与“程序设计语言编译”的共性,指导学生用文法表示领域问题对象的特点,再选用编译技术实现该问题的求解,并将这个过程撰写成研究性课程论文。通过课程实践,学生完整地做出了一个“应用领域问题编译器”,学会了将具体问题抽象成具有共性的“类问题”,实践了编译技术的实现,达到了将理论知识学习与领域问题求解相结合的目的。
课程实践中,教师给定实践要求,比如要做哪些任务、要达到什么标准、如何验收、成绩如何评定等,具体解决的应用领域问题,由学生自己确定。当学生考虑什么样的问题可以用哪一种编译方法予以解决时,就不得不思考、分析、比较和选择,虽然该过程中会和教师交流想法,但主要部分还是自己完成。对于习惯于由教师安排一切的学生来说,这无疑是一个锻炼主动探究精神的好机会。
课程引导学生将理论知识应用到不同应用领域的问题求解,让学生看到实际问题如何抽象成“类问题”,如何用课程讲授的“类问题求解方法”解决应用领域的“类问题”,不仅帮助学生认识到形式文法和语言只是具体问题的抽象反映,有助于其深入理解计算机学科问题求解的抽象描述、处理的实质和理解“类”计算;而且,分析、设计领域对象文法,选择编译方法予以实现的过程,还让学生学会了如何分析具体问题,如何确定问题的求解步骤,如何选择已学知识应用于求解具体问题,这些实践内容充分锻炼了学生分析问题、求解问题的能力。
2.2 以研究性论文培养基本学术素养
在引导学生将课程知识用于求解应用领域实际问题时,还要求学生将问题求解的实践过程写成研究性论文。为培养学生的基本学术规范意识,课程了研究性论文模版,其中完全按学术论文的要求设定各个部分,同时将《武汉大学本科生毕业论文(设计)书写印制规范》作为文字格式、图表、参考文献引用与标注等方面的评分依据。
撰写论文过程中,学生需要查找与阅读文献,学习和参照科技论文规范,还必须根据成绩评定标准遵守基本学术规范,比如引用他人成果必须标注参考文献等。这个过程,让学生建立了基本学术规范意识,为后续毕业设计的论文撰写以及研究生阶段的学习奠定了论文写作基础。
3 以“探究式”课堂教学培养学生主动思考的习惯
美国著名哲学家、教育家约翰?杜威认为,知识的获取不是个体旁观的过程,而是“探究”的过程,知识是个体主动探究的结果。现实中人们的经验也印证了这一观点,但许多高考体制训练出来的学生已逐渐失去主动思考的意识,习惯于一切听教师的讲解和安排。
只有具有主动思考习惯的人,才能主动、积极地参与学习、工作和社会生活,才有创新的可能。为培养学生主动思考的习惯,编译原理课程采取了“探究式”的教学模式,期冀在培养学生主动思考问题上做一些努力。为此,教学思路应从如何把知识点讲解得生动、易理解,转变为如何在教学过程中培养学生的主动思考习惯和解决问题的能力。
基于这一思路,每个主要知识点的教学模式为:讲授知识点前,教师先提出若干问题,由学生思考、讨论,提出解决方案;然后,师生讨论学生提出方案的优缺点;最后,教师分析教材上的方法。例如,在讲授“推导”概念时,先引导学生思考,讨论用什么样的数据结构表示符号串;当学生提出不同的数据结构方案后,再引导学生思考“推导”过程中符号串变化的特点,由此分析不同数据结构表示符号串的优缺点;经过这一过程,学生自然得到最合适的数据结构应该是“栈”,而且看到了数据结构课程所学知识如何应用于解决实际问题。这样的学习过程,学生通过自己的思考、分析、比较得到了最后的结论,和教师直接告诉学生采用“栈”来实现“推导”相比,虽然最终都得到同样的结论,但这个思维过程是宝贵的,学生通过分析性的思考得出结论,既感受到了自己得出结论的成就感,也培养了思考能力。
虽然在课程教学最开始的两、三周,很多学生不适应这样的思考方式,但随着时间的推移,大多数学生逐渐习惯了自主“探究式”的教学模式,养成了学习中先自己主动思考的习惯,在分析过程中,也学会了如何评价、比较不同的方案,有助于批判思维的形成。
4 通过自主学习培养学生的学术素养
为落实能力培养,课程安排了少部分内容作为自主学习内容,由学生自己学、自己讲。
程序设计语言中有一类是“嵌套结构语言”,由于“嵌套”特性的存在,使编译程序的实现方法有所不同。但是,在培养方案中,学生学的是C语言,而C语言没有嵌套结构,不了解“嵌套结构语言”的特点,不利于相应编译技术的教学,但学生自学这部分内容并无难度。课程将“嵌套结构语言的特点”安排成自主学习,重点是和编译技术相关的“子程序调用规则”“名字的作用域”等内容。要求学生学习之后,??成小论文,并制作PPT,从中选择优秀者在课堂上向同学们讲解这些内容。
虽然只有个别学生最后作报告,但是每位学生都参与了这个环节的所有准备工作,锻炼了文献查找与阅读能力、PPT制作能力、报告准备能力,这些都是毕业设计以及后续学习必不可少的基本学术素养。
5 结 语
大学生这个年龄,虽然在很多问题上是有主见的,但确实对一些问题的认识还比较模糊,对未来适应学习、工作、社会生活需要哪些素质和能力也不一定有清晰的认识。这就需要家庭、教师、社会在其成长过程中予以适当的引导,这也是为什么学习是需要采取一定“强制”措施的原因。
爱因斯坦说,教育就是一个人把在学校所学忘光以后剩下的东西。对学生来说,接受教育,不仅仅是学习知识,更重要的是锻炼能力和培养素质。大学阶段每一门课程的教学,就是学生素质和能力培养的直接承担者。
围绕着培养学生素质和能力的主题,编译原理课程采取了一系列的教学探索。通过引导学生将课程知识应用于领域问题求解以及课程的“探究式”教学,培养了学生的主动探究精神、分析问题的能力、实际问题的求解能力、评价不同方案的能力;通过研究性小论文的撰写,培养了学生文献查找与阅读能力,帮助学生了解基本学术规范以及科技论文撰写方法;而自主学习过程,对学生文献查找与阅读、PPT制作、口头表达、报告准备方法等都有一定的锻炼和提高。
学之魅:术业专攻 诲人不倦
何炎祥认为,作为综合性大学的教师,真正能吸引学生的、使学生终身受益的,应当是其文化底蕴和学识魅力。文化底蕴蕴涵于他对计算机教育规律的理解和把握,学识魅力源自于他对教学工作的激情和高水平的课堂驾驭能力。
正如何老师所言,一流的大学必须要有一流的本科教育。他30年如一日,如一块磁石一般牢牢地把学生吸引在自己的身边。为了让学生从入校开始就能树立正确的专业思想,他亲自为本科生主讲“计算机导论”,并使这门基础课程成为最受学生欢迎的课程之一;他重视专业基础教学,主讲的“C语言程序设计”案例丰富,突出实用,为学生学习高级语言程序设计打下了坚实的基础;他推动教学改革,致力攻坚克难,把被学生视作“天书”的“编译原理”课程打造成了国家精品课程,在培养学生创新实践能力方面取得了很好的效果,他被学生亲切地称为“何编译”。“编译原理”课程网站也以其内容全、编排精、互动实的特点吸引了校内外众多师生访问。正如学校教学督导组一位专家评价的那样,“何炎祥老师主讲的‘编译原理’,重点突出,深入浅出,将该课程的基本知识和基本原理与相关的研究领域有机结合,再辅以漂亮的板书、生动活泼的讲解和恰到好处的肢体语言,调动了同学们的学习积极性,提高了学习效果,获得学生的一致好评。”难怪学生不无感慨地说,“只要看看上课时教室里的人数就知道课堂效果了。”
他的付出收获了累累硕果。他面向全校学生的“创新学习与IT发展”素质教育讲座场场爆满;他指导的两名本科生于2007年获得湖北省优秀学士学位论文一等奖;他先后指导博士后7名,已指导毕业的博士生23名,硕士生68名,许多学生毕业后成为单位的教学科研骨干;2005年11月,由他指导的研究生作品“移动终端上的GPS系统(Mobile GPS)”获全国第九届大学生课外学术科技作品竞赛二等奖;他指导的熊乃学博士学位论文于2008年获湖北省优秀博士学位论文,并被学校推荐参加国家百篇优秀博士学位论文评审。尤其值得一提的是,他在繁忙的工作中,长期主持博士生讨论班,每周一次的讨论班甚至吸引了一些慕名的本科生。“虽然有些听不懂,但是能够感受这种学习氛围,也不枉此行。”一位高年级本科生如是说。
思之魅:崇尚学术追求卓越
何炎祥常说,要做个有思想的人。思想的魅力体现在他的教育管理理念和学院文化之中,体现在他对学科建设、人才培养、科学研究以及社会服务的倾心奉献之中。
作为武汉大学计算机学院院长,他对学科发展见解不凡,对学院发展充满信心。在人才培养上,他提倡“以人为本,崇尚学术,激励创新,追求卓越”的创新人才培养理念,既强调厚基础、宽口径,又要求强素质、专技能,实现计算机人才素质结构由T型向∏型的转变。在学院发展战略上,他主张构筑大学科、搭建大平台、提升教学科研质量,增强学科综合实力。在人才队伍建设上,他强调教师教学科研并重,人才引进与培养并举,特别是做好领军人才和大师引进工作,抓好创新团队和学科梯队建设。在体制机制建设上,他主导实施了学院、研究所、课群组的矩阵式管理模式,使得学院面貌焕然一新。在实际工作中,他团结带领党政领导班子推动学院学科建设、人才培养、科学研究和社会服务各项工作的开展,为学院发展尽心尽力,成绩斐然。
多年来,他以身作则,刻苦钻研、严谨笃学,勇于创新,在科研与学术交流中起到了表率作用。他曾主持和主要承担包括863高技术计划项目、国家自然科学基金重大研究计划项目在内的科研项目40余项,200多篇,其中,近1/3论文被SCI/EI/ISTP/英国科技文摘/俄罗斯科技情报文摘等索引和摘录。出版著作和教材15本,其中《分布式操作系统》、《编译原理》和《编译原理及其习题解答》等多本教材成了畅销的学习指导用书。他先后多次到美国、法国、日本、加拿大、澳大利亚访学、参会和合作研究。
人之魅:表里如一甘为人梯
熟悉何炎祥的人,都说他胸襟宽广、精力充沛。的确,他在计算机学院的“掌门人”、计算机软件与理论的学科带头人、“编译原理”教学团队的负责人、学术领域的大忙人角色之间自由切换,游刃有余。谈及“秘诀”,他说了八个字:“常修吾身、常思进取”。
一直以来,他都坚持着早起晨跑的习惯,刮风下雨,数九寒冬,从不间断,这也保证了他有充足的精力从事繁忙的工作。他善于统筹安排,调控时间,出差一般安排在周末,尽量不影响日常工作;2008年,在全年工作几近收尾之际,他才抽出宝贵的20天时间,到美国UCI大学计算机系从事合作研究,借以充电。他对同行邀约总是尽心尽力,毫不敷衍,用他的至真至诚在校内外营造了良好的学院发展氛围,个人也赢得了普遍赞誉。2008年11月,哈尔滨工程大学软件学院成立之际,何炎祥专呈亲笔贺电一封,该院领导回电,“无不惊叹于何院长玉笔亲书洒脱手迹,它将载入哈工程大软件学院发展的史册。”敬佩之情溢于言表。
他深知,教育不仅要有文化品位、智慧高度,还要兼具人格深度,要为师生员工树立爱校爱教的典范,处处彰显教师的人格魅力。在武汉大学庆祝建校115周年暨纪念西迁乐山70周年大会上的发言中,他慷慨激昂,豪情万丈地说道,“西迁乐山的峥嵘岁月,锻造了武大人追求卓越、和而不同的坚强意志,无论遇到怎样的艰难险阻,武大人建设国内外知名高水平大学的梦想始终不渝。”深入学习实践科学发展观活动期间,他积极为学校建言献策,其建议成为学校实践载体的重要内容。
他注重团队建设和青年教师培养,并一再强调,“要给年轻人创造机会,充分发挥年轻人的特长和优势,让他们在教学科研的过程中不断锻造自己。”在他的影响和带动下,教学团队形成了你追我赶、齐头并进的良好风尚,核心成员伍春香副教授被评为“武汉大学师德标兵”,他指导的博士后吴黎兵获得湖北省首届青年教师教学竞赛(高校组)理科组一等奖,被省总工会授予“湖北五一劳动奖章”。
千秋业,看三尺讲台,诗意阑珊;立杏坛,毕一生心血,青胜于蓝。春风细雨,披星荷锄;术专业精,培桃育李。
这,就是何炎祥教授的风范。
关于课程教学的评价
1.同行专家的评价
(1) 校内专家的评价
何炎祥老师主讲的“编译原理”,重点突出、深入浅出,将该课程的基本知识和基本原理与相关的研究领域有机结合,再辅以漂亮的板书,生动活泼的讲解和恰到好处的肢体语言,抓住了同学们的注意力,调动了同学们的学习积极性,提高了学习效果,获得学生们的一致好评,是计算机学院最受欢迎的课程之一,被学生们称之为“何编译”。
武汉大学计算机学院教授,博士生导师 曹加恒
(2) 校外专家的评价
编译程序(Compiler)是计算机系统中的重要系统软件,是计算机高级程序设计语言的支撑基础。何炎祥老师主编的《编译原理》教材,系统地介绍了设计和构造编译程序的基本原理、基本方法和典型实现技术,内容包括适合高级程序设计语言翻译的形式语言理论和自动机理论,常用的词法分析方法,各种经典的语法分析技术,中间代码生成及语法制导翻译方法,存储器的组织和管理方法,代码优化和代码生成方法,词法分析器生成工具LEX和语法分析器生成工具YACC,以及并行编译程序和编译自动化等。该教材特别注重理论与实践的沟通,典型方法与新技术的融合。而且概念清晰,重点明确、文笔流畅、深入浅出,系统性强,是国内同类教材中很有特色的一本教科书。
华中科技大学计算机学院院长、
博士生导师
卢正鼎
2.学生的评价
韦福如(200031500228):何老师备课认真负责,对教学兢兢业业;板书清晰、工整、流畅;授课富有激情,能调动同学们的最大热情,使其学到尽可能多的知识。他在课堂授课的同时,也和同学们讨论本学科的前沿知识及相关计算机科学的研究热点,抛砖引玉,从而达到教学相长的效果。
谢国庆(200031500028):何老师上课投入,讲授清晰透彻,把“编译原理”这门枯燥难懂的课程讲得深入浅出,他经常在课堂上和同学一起讨论,充分调动学生学习积极性。
王晓宇(200031500203):我个人认为何老师的课有两个特点:一是重点突出,讲解分析直入要点,其他非重点的知识一语带过;二是他上课很有激情,常常运用生动活泼的语言讲解枯燥无味的知识,或是搞活课堂气氛,使我们能够对上课保持着较高的热情。何老师的这两个特点,使得我们的上课学习效率很高。
吉林大学计算机科学与技术学院软件教研室多年来一直从事计算机本科生“编译原理”课程的教学与科研工作,积累了丰富的教学、科研经验,并取得了多项与编译课程相关的教学、科研成果,“编译原理”课程先后被评为吉林大学精品课程、吉林省精品课程和“教育部-微软精品课程”。
一、注重理论教学
编译程序不同于一般的应用程序,是一个十分庞大和复杂的系统软件,它所包含的算法和思想比较特殊,理论性较强,抽象度也较高。学习编译程序的构造原理和实现技术,不仅可以掌握编译程序本身的实现技术,同时也能够提高对程序设计语言的理解,提高语言的设计能力,提高元级程序的设计能力,提高开发大型软件的能力,能够培养学生的抽象思维能力和形式化描述能力。吉林大学计算机学院软件教研室在“编译原理”课程的教学过程中,注重学生对原理的理解,使学生不仅要做到知其然,更要做到知其所以然。
(1)科学引导,启发学生积极思维
从知识体系的内部结构入手,抓住编译过程各个功能阶段的内在联系和规律,通过有目的地设计问题,有意义地提出问题,引导学生的积极思维。把编译原理中的理论难点、抽象概念通过问题引导呈现出来,学生通过回答问题,从不同的角度寻求解决问题的原则、途径和方法,从而引导学生独立分析问题和解决问题,加深对编译理论和技术的理解。
(2)从知识体系的内部结构入手,培养学生的自学能力
教师通过精心备课,掌握知识的内在联系,对编译过程的各个功能阶段进行归纳总结。讲授时,让学生掌握编译原理各个阶段的基本概念,基本法则以及它们之间的内在联系和规律,抓住知识体系的主线,掌握规律性的知识,授之以法,培养学生的自学能力。
(3)实施多媒体辅助教学形式
“编译原理”是一门理论性强的课程,为了使抽象问题形象化,便于学生对知识点的理解和运用,利用多媒体手段,把原理性的重点知识以动画、图形形式呈现给学生,把知识讲解化静为动,寓教于乐,培养和激发学生的学习兴趣。
(4)设计课程辅助教学软件
教研室设计和开发了编译原理CAI课件-PCMCAI、SNL编译实例等编译原理教学辅助软件,教师在上课时使用这些课件来演示部分关键算法和难点,提高了教学效果,学生在课下利用这些课件自动生成各个分析程序,进一步理解基本原理和实现算法。
二、开拓教学内容、扩展学生视野
在“编译原理”课程的讲授过程中,教学队伍一直坚持教学和科研相结合、理论和实践相结合、课内和课外相结合,融知识传授、能力培养、素质教育于一体,将最新教改和科研成果引入教学。
教研室先后承担了Algol60编译器、Fortran编译器、Algol60到Fortran的转换器等与编译原理相关的科研项目,目前教研室正在进行ATLAS编译器项目的设计与开发工作。在教学过程中将这些科研项目中的新思想、新方法、新技术融入到课堂讲授当中,不仅加深了学生对编译基本原理的掌握,而且促进了学生对传统内容与最新技术成果的理解。例如,在讲授语法分析时,传统的Early算法受当时硬件条件限制,它仅仅是一个理论上的语法分析方法;随着技术进步,结合ATLAS编译器项目的设计与实现,Early语法分析方法便成为一个实用、有效的语法分析方法。通过这些内容的讲述,将经典编译理论与现代编译技术有机地结合起来,激发了学生对编译新技术的学习兴趣。
三、重视实践能力培养
编译程序以程序作为操作对象,是一个元级处理程序,它所包含的算法和思想理论性较强,抽象度也较高,并且一个编译器是由多个完成不同功能、执行在不同阶段的子程序组成的,各个阶段具有不同的特点,采用比较经典的方法来完成各自不同的功能,即使学生理解了不同阶段的各个子程序的功能和特定方法,但如何衔接各个子程序,如何组成一个完整的编译器,对学生来讲,仍可能是一件比较困难的事情。基于此,我们开设了编译原理实践课程,培养学生的实践能力。
实践性教学的设计思想是使学生透彻地理解编译程序的原理和思想,系统全面地掌握编译技术,使学生通过课堂学习,理解编译原理的同时,注重学生实践能力的培养,进一步巩固对知识的理解,通过实际的锻炼,掌握编译技术,进而能够独立地进行编译器的设计。
通过多年来的教学实践以及近五年来关于编译原理实践课程的建设,我们取得了一些成效。开设的编译原理实践课程,以实际上机实习为主,教师指导为辅,学生在实践课程中,通过实际动手,把原理性的抽象理论知识具体化和形象化,消化了课堂上、书本中难于理解的概念和方法,全面系统地掌握了编译器的构造过程。同时,也激发了学生的学习兴趣,提高了学生进行更深入学习的主动性。通过一个学期的实习,大部分学生对编译器的整个过程有了较清晰的理解,灵活地掌握了编译程序的构造方法和技术,部分学生可以独立地设计和实现自定义的模型语言,达到了预计的效果。
四、精品课网站建设
针对目前学生人数增多,教学资源不足,学生质量参差不齐,教学质量和效率得不到保证的情况,我们充分利用Internet网络,建立和实施了网络课程体系,利用Internet网在信息制造、贮存和递送方面的优势,克服了资源不足的缺点,同时也为学生提供了完全个性化的学习环境,发挥网络教学优势。具体网址为。
目前已经完成了编译网络课程体系的基本功能模块,构造和实现了一个网络课程资源系统,具体包括:
(1)“编译原理”网络课程内容教学体系
将“编译原理”的课程概况、课程内容、习题解答、教学录像、参考资料、实践课题、编译实例库以及CAI课件等内容上网,为校内外学生学习和实践编译原理与技术提供理论知识和范例。
(2)完成学生练习系统的构造
通过电子黑板,BBS为学生提供开放的学习时间和空间,促进教师与学生,学生与学生间的相互交流,激发学生学习的主动性,提高学生的实践能力,更深入地理解和掌握课程内容。
(3)设计实现辅助工具系统
提供电子笔记本,对学生学习情况进行记录,教师通过对记录的分析,反馈和改进课程网络系统,有利于今后的维护工作。
(4)构造网络管理系统
通过网络登陆验证,维护网络安全,以保证网络课程体系运行良好。
五、教师队伍建设
长期以来,教研室一直注重把精品课程建设与高水平教师队伍建设相结合。“编译原理”课程已形成一支教师职称结构、年龄结构、学历结构、学位结构合理,人员稳定,教学水平高的教学队伍。教学队伍成员具有良好的师德,学术造诣高,教学能力强,教学经验丰富,教学特色鲜明。
编译课程负责人刘磊教授1997年获宝钢优秀教师奖,2005年被评为吉林大学十佳优秀教师,并在学校的教学评估中,多次被评为优秀,受到学校的表彰奖励,先后主编出版了多部教材,在各级学术期刊和国际会议上发表学术论文60余篇。
六、教材建设
教研室一直注重编译教材建设,先后在科学出版社、高等教育出版社和机械工业出版社出版了编译原理方面的著作7部,例如:《Algol60编译方法》上下册(1983年,科学出版社)、《编译方法》(1984年,高等教育出版社)、《编译原理与实现》(1989年,高等教育出版社)、《编译程序构造原理和实现技术》(2000年,高等教育出版社)、《编译程序的设计与实现》(2004年,机械工业出版社)、《编译原理及实现技术》(2005年,机械工业出版社)等。
目前在编著的由国家“九五”规划出版的面向二十一世纪教材《编译程序构造原理和实现技术》基础上,教研室又新推出了《编译程序设计与实现》教材,作为“编译原理”实践课程教材,也是“编译原理”课程的配套教材。该教材以实践培养为重点,针对一个教学语言模型,详细地介绍了该模型语言编译器的设计和具体的实现方法。同时,为学生提供国内外先进的编译教材,供学生选读。
这些教材一直是高等院校计算机专业普遍使用的教材,也是计算机软件相关专业的重要参考书籍,至今许多著作经过了多次重印,在国内占有重要的地位。
小组合作论文参考文献:
[1]王坦.合作学习:原理与策略.学苑出版社.2001.
[2]曾琦.合作学习的基本要素[J].学科教育.2000,(6).
[3]王坦.合作学习的理念与实施[M].北京:中国人事出版社,2002.4
[4]郭砚冰.英语课堂合作学习的实施与评价[J].厦门教育学院学报.2002,(9).
[5]章兼中.外语教育学[M〕.杭州:浙江教育出版社.1993.
[6]曾琦.合作学习研究的反思与展望[J].教育理论与实践.2002,(3).
[7]李俏.合作学习的研究及其在英语教学中的应用[J].课程教材教法,2003,(6).
小组合作论文参考文献:
[1]唐晓杰等.课堂教学与学习成效评价[M].南宁:广西教育出版社.2000.
[2]刘上扶.英语写作论[M].南宁:广西教育出版社.1998(12).
[3]国家教育部.普通高级中学英语课程标准(实验稿)[Z].北京:北师大出版社.2002.
[4]陈玉玲,“合作学习理论在大学英语写作教学中的具体运用”《河北大学成人教育学院学报》2002年第3期.
[5]陈琴、庞丽娟,2001,论学生的发展与合作因素,《教育理论与实践》第3期。
[6]张斌,1999,合作学习及其对学生行为和态度的影响,《教育理论与实践》第9期。
小组合作论文参考文献:
[1]约翰逊,D..w,约翰逊,R..T,史密斯,卡尔.A.著,刘春红、孙海法编译,2001,《合作学习原理与技巧》。北京:机械工业出版社。
[2]约翰逊,D.W.,约翰逊,R..T著,伍新春、郑秋、张洁译,2004,《合作学习》。北京:北京师范大学出版社。
[3]约翰逊,R..T,约翰逊,D,W.著,高艳、王坦译,1994,学习中的合作:一个被人们忽视却又十分重要的问题,《教育改革》第5期。
[关键词]计算机教育;研究型教学;编译原理
[中图分类号]G40―057
[文献标识码]A
[论文编号]1009―8097(2009)13―0062―02
引言
传统教学是以教师为核心,以知识点为核心,是由教师确定学生应该学什么,学生怎么学,而研究型教学是以学生为核心,以好奇心作为学习的趋动力,但是如何在教学过程中把学生的激情找回来,这是教学改革中一个一直在探索的问题。本文通过对编译原理课程教学实践,对应用研究型教学进行了一些尝试。
一 研究型教学定义
研究型教学是教师通过指导学生从自然、社会和生活中选择和确定与学科相关的专题进行研究,使学生在独立的主动探索、主动思考、主动实践的研究过程中,吸收知识、应用知识、解决问题、获取新颖的经验和表现具有个性特征的行为,从而提高学生的各方面素质,培养学生创造能力和创新精神的一种实践活动。研究型教学以培养学生创新能力为核心,以培养学生的创新精神和创新能力为目的,立足所学,从实际背景和问题出发,创设问题情境,在教师的引导下,确定课题,通过观察、实验、分析、归纳、猜想、论证、社会实践等方式进行学习。在专业必修课程中结合研究型教学模式能够将比较成熟的专业知识与领域研究热点将结合,使得每届教学内容都有新的变化。
二 编译原理课程特点
编译原理课程是计算机科学与技术专业学生的重要基础课程。通过学习该课程,要求学生掌握计算机语言编译程序的基本原理、方法和工具,以及编译程序的管道/过滤器型软件体系结构,更深入地理解由ACM/IEEE-CS制订的“CC2005”中提出的12个核心概念,特别是其中的“概念和形式模型”。此外,通过学习编译原理还可使学生更好的理解计算机程序设计语言的内部机制,从而更好地理解和运用程序设计语言。因此,在编译原理课程中采用研究型教学,不仅使学生掌握编译技术的知识,还还可使学生更好的理解计算机程序设计语言的内部机制,从而更好地理解和运用程序设计语言。
三 研究型教学在编译原理的应用
学生从被动接受知识到主动获取知识是研究型教学的最大特点,因此,在编译原理课程的教学过程中充分调动学生积极性是被反复强调的。为了更好的让学生理解编译技术,在课程开始时教师可以通过举例说明编译技术在计算机领域中的广泛应用,吸引学生学习课程的兴趣,比如:OQ软件是针对特定字符串进行识别并用图片替换来实现QQ表情,这是编译技术中词法分析的应用;数据库SQL语句执行之前都须对语句进行语法检查,这是正规式和正规文法的应用等。教师还应强调“语言是在软件设计中求解实际问题的一种重要途径”,告知学生在课程设计中可以选择实现当前流行的HTML、JDBC、RTF、PostScript、SQL、报表白定义等语言或子语言的编译器,激发学生的学习兴趣。
在设计教学计划时,为了突出能力培养,将课堂讨论题、课后研究题、课题提问成绩均计入学生最后的成绩。
教学计划将课程课题讨论题设计为36次,即每次课有一题,每题0.5分。根据教学大纲,课题讨论题可以在讲解新的知识点之前设计,比如:LR(1)分析方法会产生大量类似状态,如何将类似的状态合并而不会产生新的问题,从而引出LALR(1)方法;介绍完DFA、正规式和正规文法的定义之后,让学生思考三者之间是否可以转换、如何转换。
对于编译原理课程来说,研究型教学中的问题解决模式是根据学生自身知识水平和学习能力,由教师根据课程内容设置问题,学生收集科学事实,解决问题,得出科学结论并应用新知识这一个过程,教学计划中课后研究题就是采用这种教学模式。
课后研究题占课程成绩的7%一般以2~3人为一组,在整个课程中每组同学至少完成一次课后研究题,每次上课布置课后研究题要求一组同学在阅读教材的基础上对相关知识有所延伸阅读并进行相应实践,在下次课上课时给出10分钟进行演讲,题目的设置体现研究分析性与动手能力结合的趣味性问题,比如:解释型语言和编译型语言运行效率比较、设计URL地址的词法分析器。通过这些方式有效的激发学生学习的兴趣和积极性。
四 课程设计方案设计
编译原理课程是计算机软件学科理论与实践相结合的典范,在理论课中所介绍的基本概念、原理、方法和算法,要通过实验加以理解和吸收,才能能够达到真正的理解和掌握。为此设计一组与理论内容相配套的课程设计是非常重要的。本文利用Lex和Yacc工具,提出了验证、应用、创新的三步掌握编译技术的课程设计方案。
正如前文所述,本课程设计并不要求实现某种指定语言的编译器,学生以小组的形式,可以选定一种目前计算机领域中流行的编程语言或子语言实现,这样的好处是,一方面可以使学生提高学习兴趣,实现某种语言的部分功能;另一方面可以提高学生的自学和创新能力。本课程设计如下:
1 验证型实验,按照编写好的实验操作学习使用Lex和Yacc,如利用Lex计算文本文件的字符数、单词数;利用Yacc生成中缀表示的计算机器。
2 应用型实验,构造选定语言的LALR文法,使用Lex和Yacc实现选定语言的词法分析器和语法分析器。
3 创新型实验,用课程中讲授的分析方法,如递归下降分析法完成对特定语言的语法分析,并生成相应的语法树;将语法分析得到的中间代码换成自定义的四元式中间代码,并将其翻译成汇编代码。
在整个课程设计方案中,有层次的、阶段性实验课题让学生由浅入深系统学习编译技术知识,并能够应用学到的编译原理方法实现选定语言的编译器,使学生通过课程设计的学习后,即掌握编译理论和方法方面的基本知识,也具有设计、实现、分析和维护编泽程序等方面的初步能力。
作为信息产业的核心和国民经济信息化的基础,软件产业日益受到国家的高度重视。权威数据显示,我国软件产业每年人才需求量近一百万,然而令人尴尬的是,许多软件企业却招聘不到真正合适的软件人才。信息社会不断增长的软件人才需求与优质软件专业教育供给不足的矛盾已成为计算机高等教育发展面临的一个重要问题。
然而,软件工程是一个迅速发展的交叉性学科,相关的新概念、新技术、新方法不断涌现,这就要求教育机构要不断调整策略,以应对专业的快速变化。尤为突出的是,无论是全国首批35所示范软件学院还是非示范软件学院,大部分都根植于计算机学院,因此很多软件工程专业学科课程体系与计算机科学与技术专业基本相似,而计算机科学与技术专业的教学内容是远远不能适应软件工程学科的发展要求的。
从根本上解决上述问题的关键是,结合中国软件产业和软件学院已有的硬、软件基础设施及办学的具体情况,研究和定制适合本学院特色的软件工程学科的课程设置、教学内容、教学方法,形成一个良好的软件工程学科课程体系,使软件工程教学更具先进性、目的性和系统性,其中对计算机科学核心课程的工程化改造势在必行。
本文将研究计算机学科的“编译原理”课程在软件工程专业如何进行工程化改造,怎样创建适合软件工程专业知识体系要求的“编译原理”实践教学,从而在科学的软件工程学科课程体系的保证下,形成一个融基础理论、实验教学、工程实践为一体的整体化培养机制,以适应软件工程学科教学要求,使软件工程学科教学质量得到不断发展,使软件工程专业教育得到健康稳步发展,培养社会需要的软件人才。
1 “编译原理”的工程化实践教学体系
1.1教育教学理念
工程化实践教学就是树立工程化能力培养与基础理论教学、专业能力培养并重的教学理念,把工程化教学作为人才培养的核心任务之一,通过全面改革软件工程专业的人才培养模式、调整课程体系、充实教学内容、改进教学方法,在教学过程中全面体现能力和职业素质培养的思路,并将软件工程知识内容由浅入深、阶梯状、循序渐进地贯穿在工程化实践教学的各个开发项目中。
基于上述软件工程专业的知识体系、本科课程设置的指导原则以及工程化实践教学教育教学理念,下面将给出“编译原理”课程的工程化实践教学体系。
1.2 “编译原理”的工程化实践教学体系
如图1所示,“编译原理”课程的工程化实践教学体系由六个部分组成:编译原理课程工程化实践教学环境、编译原理理论教学、软件工程能力培养、阶梯状迭代工程实践项目、配套教材和评价体系。构建理念为以计算机科学为基础,以软件工程为核心,以目标应用为导向。
1.2.1 “编译原理”课程工程化实践教学环境
“编译原理”课程工程化实践教学环境由实验室、项目团队、教师讲座以及团队汇报组成。
(1) 实验室。以工程化培养理念指导教学实验室建设,为“编译原理”课程工程化实践教学提供强有力的基础设施支持。提供全天开放机房,机房实行开放型管理。项目开发时间规定为开时间和闭时间,闭时间为固定时间,要求授课教师到机房现场指导,开时间内,学生可以自由选择时间,以小组为单位进行自行讨论、设计,要求实验室人员在现场,以便解决设备问题。机房的使用和维护要有严格的管理制度,保证项目的顺利完成。
(2) 教师讲座。指导教师在整个的项目开发中纵览全局,项目的开始、结束及中间的每个模块都要进行全面的讲解、引导和组织。教师要系统讲解软件工程知识点和软件技术,统一讲解项目开发过程中学生普遍存在的问题,不断地发现问题,解决问题。
(3) 项目团队。将4~5个学生分为一个项目小组,一名组长作为负责人;每名学生分配一台微型计算机,在开发小组中以分工协作的方式完成指定的软件开发任务,完成项目设计报告,并提交完整的软件开发文档和源代码。学生在团队环境下使用最新的软件开发工具,获得较真实的软件开发经验,提高学生在项目规划、队伍组织、工作分配、成员交流等多方面的能力,培养学生团队合作及工程项目研发能力。
(4) 团队汇报。理论教学中教师唱主角,而工程化实践教学应让学生唱主角,让开发小组自己拟定演讲方案、内容,由教师审核修改后进行汇报演讲。这样可以有效地提高学生总结概括、研究立项、口头表达、演讲和交流沟通的能力,培养学生独立思考、分析问题的能力和创新能力。
1.2.2 “编译原理”理论教学
由知识的先期注入和工程化理论教学组成。
(1) 知识的先期注入。“编译原理”课程的理论性较强,整个课程内容由几个功能模块组成,学生对课程的完全理解应在最后一个模块,即课程结束时。鉴于教学内容的特殊性,应在一门程序设计语言之后安排“CO释程序的面向对象设计与实现”项目,作为前导实践环节,配套教材为《C++实战:解释程序的面向对象程序与设计》。这可以使学生在学习理论之前对程序设计语言的解释执行有较深的理解,由传统的“填鸭式”被动学习转变为学生自主式学习。学生对“编译原理”课程的学习由问“这是什么”变成“这是我需要的什么”,从根本上解决了“编译原理”课程的教学困难。实践表明,这种方法在锻炼学生实践能力的同时先期注入了理论教学需要的解释程序的知识和概念, 有很好的教学效果。
(2) 工程化理论教学。编译程序是庞大而复杂的,这使得如何介绍编译原理本身就是一个难题。中外编译原理教材很多,如果从工程化的角度去诠释编译程序的实现过程及其原理,即对一个完整的源程序到目标程序的转换过程进行详细讲解,不失为一个新的途径。我们的配套教材《编译程序的实现原理》的编写形式如下:先给出编译器的输入——一个C语言小程序;再给出编译器的输出——目标机上的目标语言,完成这样的转换需要进行的工作包括词法分析、语法分析等几个功能模块;再针对每个功能模块给出本模块的输入和输出,如词法分析为一个C语言小程序,模块的输出形式为TOKEN链表,完成这样的转换需要进行的工作由理论和实现两部分组成。这种讲述方法实现了五化:
工程化:以对一个完整的源程序到目标程序的转换作为教学载体介绍编译程序的实现及其原理,以反映编译的工程性。
链接化:将一个完整的源程序到目标程序的转换所需的知识处理成总目标与子模块、子模块内所需知识点之间的链接,以反映编译的整体性。
需求化:将编译原理内容的平铺直叙转换为实现一个完整的源程序到目标程序的转换的所需知识,解决了编译内容的庞杂、不分主次、叙述冗长的问题。
模块化:将一个完整的源程序到目标程序的转换作为总目标,将不同的子转换作为各个子模块的目标,以反映编译的模块性。
形式化:将形式语言的内容介绍放置在为完成目标所需知识的位置,突出形式语言的地位、内容及其应用。
1.2.3软件工程能力培养
在工程化实践教学体系中,软件工程能力的培养是至关重要的。
软件工程能力包括软件需求、软件设计、软件构造、软件工程基础结构、软件配置管理、软件维护等知识单元。有些知识单元在早期学习,以促进学习条件的成熟;而有些知识单元的学习需要一定的成熟条件,应该放在后期讲授,如阶梯状迭代工程实践项目是整个教学过程中理论联系实际,培养学生动手能力、观察能力、分析和解决问题能力、团队合作以及创新精神的重要环节。把软件工程知识单元分期、分阶段引入阶梯状不同开发项目的全过程,形成了特色鲜明的工程化实践教育体系,使学生的软件工程能力在实际项目开发中得到锻炼和提升。“编译原理”课程工程化实践项目内容安排如表1所示。
“实践性、个性化、逐步工程化”是工程化人才培养的重要环节,也是学生成为合格软件工程化人才的实践过程。以上教学组织方法既保证了教学的系统性、知识性,又保证了教学案例的先进性和实践性。
1.2.4阶梯状迭代工程实践项目
编译器代码的长度可从10 000行到1 000 000行不等,编写甚至读懂这样一个程序都非易事,更何况是开发,因此编译器的实现比以前任何课程中学生承担的设计要大得多、难得多。纵观国内外大学研究现状,一般都是先设计一个语言,面向过程式或面向对象式,然后对设计的语言进行面向过程或面向对象程序设计方法的开发,早期采用面向过程语言编译器的面向过程开发,如吉林大学计算机科学与技术学院的编译原理实践课程“编译程序的设计与实现”,近期采用面向过程语言编译器的面向对象开发,或是面向对象语言编译器的面向对象开发,如 “Modern Compiler Implementation in Java”。无论哪一种,学生都是一次性为具有上百条产生式语法的语言开发编译器,难度极大,这使实践课程的收效甚小。采用阶梯状迭代教学法创建的编译原理课程工程化实践项目从根本上解决了这个问题,配套教材为《编译程序的面向对象程序与实现》。
如图1和图2所示,编译原理课程工程化实践项目内容包括“C0解译程序的面向对象设计与实现”,“C1编译程序的面向对象设计与实现”,“C2编译程序的面向对象设计与实现”,“C3编译程序的面向对象设计与实现”。整体项目的源语言定义为C语言的子集,采用阶梯状迭代教学法后,将源语言定义为C0、C1、C2、C3,Cn是Cn-1的扩展。
编译原理课程工程化实践项目的优点有:
(1) 迭展: 每一个项目需求是前一个项目的扩展,因此,每一次的软件开发可以看作是前一次开发的迭代,使学生面对大型软件开发项目中最难处理的用户需求不断变更的问题,最大程度地使用重用技术。所有项目的开发承上启下、循序渐进、阶梯状迭展,为研究和学习软件生产线新技术埋下伏笔。
(2) 起点低:降低了开发难度。学生根据自己的实际水平选择源语言级别,有不同收效。从根本上解决了软件开发水平低的学生对编译程序开发望而生畏甚至放弃的问题。
(3) 阶梯上升:项目内容的选择不是零散的、随机的、重叠的,而是相互关联的。纵向为编译理论,是主要内容;横向为软件工程,是辅助内容。主要内容将难点分散,处理成阶梯状;辅助内容也将难点分散,同样处理成阶梯状。
(4) 知识渗透:将软件工程核心内容及工程化软件开发思想由浅入深逐步渗透到各个项目中,每个项目具有不同级别的培养目标,学生从不同项目循序渐进地掌握工程化软件开发理念,降低了工程化软件开发的难度。
阶梯状迭代工程实践项目发挥了学生的主体意识,给学生足够的空间,激发了学生的活力与创新思维,并培养了学生的“三个能力”(自我管理能力、组织策划能力、社会实践能力)和“五种意识”(责任意识、服务意识、创新意识、团队意识、竞争意识)。
1.2.5配套教材
编译原理课程工程化实践教学配套教材共有3部,前导教材《C++实战:解释程序的面向对象程序与设计》与“编译原理”理论教学知识的先期注入配套;《编译程序的实现原理》与“编译原理”工程化理论教学配套;《编译程序的面向对象程序与实现》与阶梯状迭代工程实践项目配套,3部教材前后关联且各呈完整体系。本套教材为清华大学出版社“编译原理及其实践课程的工程化教学课群研究”立项项目,已出版1部,另2部明年中旬出版。
1.2.6评价体系
编译原理课程的工程化实践教学评价体系包括对学生工程素质和对教学体系的评价。
学生工程素质的评价采用过程化考核管理标准,即把工程化能力和职业素质引入学生工程素质的评价体系,加大工程化实践环节的比重,形成专业理论知识和实践能力并重的考核体制,将期末一张试卷定成绩的考评机制改为由工程化实践项目、随堂测验、论文、面试、考试、团队等多种形式相结合的评价机制,防止实验抄袭现象。编译原理课程考核采取理论知识和工程化实践项目完成情况的综合考核方式,工程化实践项目根据项目设计报告、软件开发文档、源代码和运行系统的质量进行考核,学生成绩以登记评定方式给出。
教学体系的评价采用回馈化考核管理标准,即把企业回馈和毕业生回馈引入教学体系的评价。对企业和毕业生进行跟踪调查,通过收集企业和学生的反馈指导教学和实践项目的设置和修订,形成良性循环,为进一步提高教学质量打下坚实基础。
2结论
软件工程是集计算机科学与技术、数学、经管等多学科的交叉性学科。作为一名软件工程教育者,我们必须建立一套具有自身特色的工程化人才培养体系,培育具有国际竞争力的一流软件产业高级/高端人才,结合软件工程人才的学科交叉性、偏重实用、职业定位等特点,系统深入地研究软件产业对技术型、管理型的人才需求,注重学生综合能力和专业素质的培养,才能在计算机系统、软件工具、软件工程和管理上循序渐进地提高学生的能力。
参考文献:
[1] Aho, Alfred V., Ravi Sethi, Jeffrey Ullman. Compilers: Principles, Techniques and Tools[M]. Reading, MA: Addison-Wesley, 1986.
[2] Appel, Andrew W. Modern Compiler Implementation in Java[M]. Cambridge, UK: Cambridge University Press,1997.
0.引言
编译原理与设计课程是计算机科学与技术专业的核心课程,具有较强的抽象性、理论性和逻辑性,学生学习和理解该课程相对困难。同时,该课程与其他课程,如离散数学、数据结构、算法分析、操作系统、体系结构等课程具有交叉性,因此学生不仅要有扎实的专业基础,还要有很好的创新意识。部分学者在编译原理的教学教改方面已经开展了卓有成效的工作。张晶等人研究了编译原理实践课程“多层次-多目标-多效果”的教学方法;钱忠胜等人提出从典型案例设计、实验实践教学模式、与其他课程知识相融合、与各类应用相结合、复合型考核方式等方面人手展开教学改革研究;徐晶探索了研究型教学在编译原理课程教学实践中的应用,并提出了“验证、应用、创新”三步掌握编译技术的课程设计方案;柴艳妹等人从激发学生兴趣、培养学生专业素质和提高学生动手能力三个方面入手,提出了一系列教学改革的具体步骤和方法;王挺等人提出编译原理课程能够培养学生的计算思维,提升学生的系统能力,使学生在系统的级别上重新认识算法和程序。
笔者面向编译原理与设计课程,以互动式、启发式、案例式教学和实践平台为依托,研究基于创新的“互动式+启发式+案例式”教学方法,基于激励机制的“分层+分系列+分专题”的创新实践活动,构建面向编译原理与设计课程的学生创新性思维阶梯式教学模式,培养从事计算机研究和应用的创新型人才。同时,研究通过此培养模式的实施,培养学生发现问题、分析问题和解决问题的能力,从而使学生的研究能力、实践能力与创新能力得到锻炼和提高的方法。
1.学生创新性思维阶梯式培养模式
科学合理地配置学生的知识结构是构建学生培养模式的第一步。学生创新性思维培养模式是一个反复循环、不断提升的动态发展过程。构建面向编译原理与设计课程的学生创新性思维阶梯式培养模式需根据社会发展对人才的客观需求,结合学校的培养目标和培养方案,选择合适的培养途径加以实施,并针对人才培养模式实施后社会对培养结果的评价做适时地调整。
1.1知识结构的构建
面向编译原理与设计课程的学生创新性思维阶梯式培养的课程主要包括3个方面:数理基础(离散数学、数值分析)、算法基础(数据结构、算法分析)和核心课程(操作系统、体系结构、编译原理与设计),如图1所示。
在课程设置及教学内容安排上要坚持以下两点:一是厚基础、强能力、重创新,努力做到把编译原理与设计课程与前沿知识以及多学科间知识交叉与渗透融入到教学内容中来;二是坚持知识、能力、素质的辩证统一,培养学生的创新性思维。阶梯式培养课程的分类见表1。
1.2学生创新性思维的阶梯式培养模式
学生创新性思维培养模式以课程内容学习、分析评价、创新实践方式3种形式进行阶梯式培养,每个阶段进行学生的反馈,发现学生的创新性思维,激励学生进行创新性活动。教学环节采用互动式、启发式、案例式的教学方式,并通过课堂讨论、学生演讲、课外作业、各类实验、学生科技活动、科研课题等丰富的教学活动提高学生的创新能力。学生创新性思维的阶梯式培养模式,如图2所示。
1.3学生创新性思维阶梯式培养层次
面向编译原理与设计课程的学生创新性思维阶梯式培养包括3个层次,自底向上依次是基础形成层、思维构建层和创新体现层,如图3所示。
基础形成层主要进行数理基础课程的学习,培养方式采用课堂讲解、学生讨论课外作业、课程实验、学生科技活动等形式。
思维构建层主要培养学生的计算机思维和编程素质,启发学生的创新性思维。在这一层次中主要进行数据结构、算法分析课程的学习,培养方式采用课堂讲解、学生讨论课外作业、课程实验、学生科技活动、科研课题。
创新体现层重点培养和强化学生的创新性思维,进行编译原理与设计创新思维的培养,其方式更多元化,包括课堂讲解、学生讨论、课外作业、学生演讲、课程实验、学生科技活动、科研课题等。
2.基于创新的“互动式+启发式+案例式”教学方法
2.1多元化教学形式
编译原理与设计课程采用多元化的教学形式:PPT讲解、课堂讨论、学生演讲、学术报告、课程内容的视频分析、学生的科技活动、各类实验、科研课题等,激发学生的学习兴趣,提高学生的知识水平,增强学生的创新思维和能力。多元化的教学形式如图4所示。
多元化教学形式体现在:丰富的课堂教学手段、教学与研究相结合、学生参与教师的课题研究并参加课外科技活动。
2.2“互动式+启发式+案例式”教学方法
编译原理与设计课程采用师生互动式、启发式课堂教学,将创新性思维训练融于“互动式+启发式+案例”教学方式中,激发学生的创新潜能,为进一步科学研究打下坚实的理论基础和实践能力,激发学生的学习兴趣,使学生形成一种以创新精神吸收知识、应用知识的习惯。在课外作业、各类实验、科技活动和科研课题方面,研讨课内开展“启发式、互动式、案例式”的教学实践,鼓励学生开展创新性思维活动。
3.3培养学生问题意识,提高学生创新能力
培养学生的问题意识和学生创新能力的最主要体现就是问题解决能力。培养学生问题解决能力的主要途径就是各类实验、科技活动和科研课题。因此,教师应不断鼓励学生深入专业领域和社会生活中发现问题、分析问题和解决问题,鼓励学生共同参与课题研究,并从不同角度激发学生,有效培养学生思维的创新性。
3.基于激励机制的“分层+分系列+分专题”的创新实践活动
设计“分层、分系列、分专题”的、具有一定创造性的实践活动是培养学生创新性思维的特色之一。教师应依据课程的内容,采用由浅入深、循序渐进的方式设计实践活动,建立创新活动与研究方向的有机结合,增强教学与研究相辅相成的关联,有效组织和管理学生的学习活动,评价学生的创新活动。
创新实践活动培养学生科学研究的思维方法、科学研究能力和创新精神,分为课程实验、科技活动、课题研究3个层次。在课程实验中分为基础实验、综合性设计实验、应用提高实验3个系列,并在每个系列实验中设定多个专题,解决特定的问题。采用答疑式指导、项目式指导和课题式指导“三级指导”方式。
1)科学设置课程实验。
实验课对检验和巩固学生在课堂中学到的理论知识、启发学生的创新思维、提高实践能力具有重大意义,因此必须有针对性地加强课程实验,并根据培养目标和课程实验建立3层课程设计模式:基础实验、综合性设计实验、应用提高实验。
2)组织科技活动。
有计划地组织学生进行学术科技活动,鼓励学生利用课余时间开展科学研究并参加校内外不同层次的竞赛。科技活动主要包括ACM程序设计竞赛、机器人大赛、各类程序设计大赛等。
3)课题研究。
分专题进行有针对性的课题研究,包括文献查阅、科研选题、实验设计、实验操作、数据整理、结果分析、撰写论文、报告与答辩环节,训练学生的科学研究思想和方法,实施实践活动的个性化教育。
0 引 言
《操作系统》是物联网专业的一门重要课程,学习该课程不仅可以帮助物联网专业的学生理解计算机如何运转,且《操作系统》的功能和技巧还可以在其他领域应用,作为运行在硬件之上的第一层系统软件[1],操作系统起着承上启下的管家作用,不但管理计算机中所有的软硬件资源,还要合理组织计算机的工作流程,在用户和计算机之间起到接口作用。因此《操作系统》的知识面较广,涉及组成原理、编译、数据结构、并称程序设计等内容,而这也导致了该课程知识点跨度和难度都较大,知识点多,理论性强,且过多的重点、难点导致需要记忆的东西很多,且比较抽象[2],加大了学习难度。为了降低课程的教学难度,激发学生的学习兴趣,提升课程的考试成绩,论文提出了物联网专业《操作系统》课程改革研究,该研究主要从教学方法、授课内容、考核方式、教学质量评估等方面进行改革,以提高本课程的教学质量[3]。
1 物联网专业《操作系统》的教学现状
(1)教学方法:目前,物联网专业《操作系统》的教学普遍采用教师集中讲授的方式,学生被动接收,虽然目前大多教师都采用了多媒体技术,但多媒体上以文字居多,这种单调的理论和“满堂灌”的方式很容易让学生感到枯燥乏味,因此很难集中注意力听课,从而产生一系列连锁反应,导致学生无法跟上老师的授课进度,没能构建完整的知识体系,达不到很好的教学效果[4]。
(2)授课内容:目前,很多《操作系统》的教材都是纯理论的,教学内容也偏陈旧,例如现在的计算机都是多核的,但是目前在授课过程中,很多学校仍然按照单核CPU来讲解,教材内容跟不上时代的发展[5]。不仅如此,目前大多数教材的内容都围绕着操作系统的功能展开,学完课程后,学生很难从系统的角度来理解操作系统。且在教学过程中,因授课内容偏重理论,忽略了事件环节,导致学生本课程的实践能力较差。理论性过强,实践性薄弱,内容安排不合理,最终导致学生应用技能训练不足,课程教学与实际相脱节的情况出现[6]。
(3)考核方式:目前物联网专业《操作系统》主要采用卷面笔试的考核方式,考试题型分为选择题,判断题,填空题,简答题,计算题等,考核的内容大多都围绕操作系统的理论知识展开。这种卷面考核方式只是片面测试了学生对理论知识的掌握程度,而忽视了对学生解决实际问题的能力测试[7]。
(4)教学质量评估:教学质量是高校的生命线,教师课堂教学质量的优劣直接影响学校的人才培养质量,而教学信息的反馈是教学质量监控管理的重要环节,因此,要想提高物联网专业《操作系统》课程的教学水平,必须及时准确地收集与教学相关的各方反馈信息,以达到监控教学的目的,同时教学信息反馈还可使授课教师及时发现自己在授课过程中的不足,帮助教师及时改正,从而进一步提高教师的教学水平[8]。
2 物联网专业《操作系统》的课程改革实施
2.1 改变教学方法
《操作系统》是一门人造科学,该学科的诸多原理都是通过对人类生活的各种现象仔细观察并进行抽象得到的[9],操作系统中的很多算法、原理都符合人类的直觉。因此教师授课时,可以利用操作系统这一特性,将学生难以理解的、抽象复杂的原理、算法、概念生活化。如在讲解进程切换时,可以日常生活中洗衣服和做饭两件事的切换为例展开;在讲解优先级算法时,可以银行VIP用户为例进行讲解,帮助学生更好的理解[10],使得枯燥的概念生动化,提高学生的学习兴趣[11]。再者,教师在授课过程中要善于提出问题,让学生分析问题,最后对问题进行总结,以培养学生独立思考和独立解决问题的能力[12]。此外,在课件中,适当增加动画效果,把一些复杂难懂的原理、算法通过动画展示出来,可以大大提高学生的学习兴趣。
2.2 授课内容的改变
计算机和操作系统的发展日新月异,必须在讲解课程时让学生了解最新的技术,可以下载最新的论文下发给学生,让学生自己查资料掌握,并对论文的内容进行阐述。同时,加大实验教学任务。实验采用分级教学,首先是基础性实验,其次是设计性实验,最后是综合性实验。
基础性实验主要采用的平台是Linux,实验内容包括虚拟机下安装Linux、控制实验、文件与目录操作、GCC编译器的使用;设计性实验主要包括进程同步算法实验(生产者――消费者问题)、基于管道的进程通信设计实验、银行家算法实验、进程调度算法实验、页面置换算法实验、磁盘调度算法实验;综合性实验包括调度器实验和文件系统实验。学生采用分组协作的方式,选择完成其中一项或两项实验,培养学生的团队协作能力、动手能力和创新能力。
在基础性实验中,以进程控制实验为例,主要的实验目的是让学生掌握Linux操作系统中的一些与进程控制相关的命令,如ps命令,pstree命令,kill命令、top命令等。实验结果如图1所示。
在设计性实验中,以页面置换算法为例,主要让学生自己设计页面置换算法演示程序,包括最佳置换算法、先进先出置?Q算法、最近最久未使用置换算法,让学生理解在页面置换算法的同时,充分掌握算法在虚拟存储器管理中的作用,学生设计的部分代码如图2所示。
2.3 考核方式的改变
将期末的试卷考试改为上机考试,考试内容除了基本的理论测试外,还应添加动手环节,让学生自己动手在Linux平台下实现进程通信、同步、页面置换等。考试系统界面如图3所示。
2.4 教学质量评估系统的建立
为了更好地监控教师的教学情况,建立自己院系的教学信息反馈系统,该评价系统可以实现学生评价、督导评价、同行教师评价。教学信息反馈系统界面图如图4所示。
2007年,在教育部本科教学质量工程特色专业建设点项目申报中,复旦大学软件工程专业的系统软件方向、企业信息化方向和数字媒体方向被批准为特色专业建设点项目;2008年,学院国际化创新型软件人才培养模式实验区被批准为教育部人才培养模式创新实验区。近年来,学院培养的学生受到社会和业界的充分肯定。
回顾这几年的教学探索,在计算学科人才培养中,我们认为除了要注重社会需求外,更应注重学生创新能力和国际视野的培养。通过开展完善的国际化联合培养和交流,我们建立了良好的国际化教育环境;通过进一步提高软件创新行动项目和创业实践项目的支助力度,我们为学生提供了面向产业实践和个性化发展的条件,为培养综合素质高、创新能力强、具有国际竞争力的高层次研发人才与产业工程师奠定了基础。
1国际化创新型软件人才培养定位与方案
我国提出在2020年建成创新型国家,最近又推出了国家十大产业振兴规划,其中就包括了电子信息产业。而我国的软件人才培养在创新性和工程化方面存在许多不足,难以满足电子信息产业走向世界的需求。无论是传统计算领域的研究还是系统开发,无论是理论研究还是应用研究,都离不开实际应用背景。人才应该集业务、技术、管理三位一体,既具有扎实的基础理论知识,又熟悉产业前沿,能运用国际主流的系统工程技术解决产业中的问题,在国际化团队中具备自我发展能力、团队合作精神和系统调控能力,具备适应市场需求和技术变化的能力。因此,我们在人才培养中必须注重培养学生的创新能力,强化学生的国际视野及对产业前沿问题的敏感性,注重与企业有机结合并平滑过渡,将实践教学环节和工程教育理念融入课程教学中,融基础理论、实验教学、工程实践为一体。
根据复旦大学“宽口径、厚基础、重能力、求创新”的人才培养理念,参照国际知名高校的教学培养方案,同时结合国内企业的实际需求和行业技术发展趋势,我们精心设计了教学培养方案。除综合教育课程、技术类基础课程外,软件工程专业课程分为三个部分:专业基础课、专业方向课、专业选修课。学生首先修完专业基础课程,保证对计算机科学和软件开发的各方面内容有全面了解,具备一定的科研能力;其次修读专业方向课程,保证在特定专业方向上获得严格训练;最后至少选修其他专业方向课程组中的两门课程,并学习专业选修课程,保证必要的知识广度,还要提高职业道德意识、团队精神、交流能力、外语能力。
在课程设计方面,我们一方面设置培养学生工程能力和职业素质为主的课程;另一方面把培养实践能力和创新能力贯穿于教学全过程,建立一套“全过程、递进式”的实践教学体系。通过有针对性的、高强度的项目实践,在低年级强化基本技能和动手能力,在高年级通过综合性设计性实验、课程设计等环节,培养学生分析、设计、实现的综合能力。
我们同时建立健全了创新鼓励机制,鼓励学生参与创新性实践活动,养成创新意识,体验创新过程。我们邀请企业资深研究人员、国外高校著名学者来校兼职、授课,为学生的创新实践活动提供专业指导。将工程能力引入人才素质评价体系,通过收集企业和学生的反馈指导教学和课程设置,形成良好的自我约束、自我发展机制。
国际化创新型软件人才培养定位与方案的基本架构如图1所示。
2创新型软件人才培养的教学内容与方法
与国外的工科学生相比,我国学生明显缺少项目或团队合作的实际经验训练。因此,我们要加强国际化创新型工程人才的培养,更要注意不能停留在教学生用现在的技术解决问题,而要让学生学会用未来的技术解决未来的问题。
在教学内容安排上,我们全面吸收发达国家经典的计算机教学内容,强调学生除了掌握各门课程的基本原理,还要对行业的最新发展及领域内面临的问题有所了解。坚持提高解决问题能力为主的教学原则,把握行业发展最新趋势,教学内容既要与企业当前的需求紧密结合,又不能单纯跟着企业走。高校教育不仅要紧扣行业发展的最新趋势,更应引领社会需求。
为了使学生学会用未来的技术解决未来的问题,我们要求教师不仅要了解目前行业内的最新发展及领域内面临的问题,更要具有前瞻意识,及时把本学科最新的研究成果和未来可能成为行业发展热点的内容安排在课程中。如从2004年开始,我们就把多核技术和虚拟化技术放到相关课程的教学内容里,在计算机体系结构课程中扩展了多核体系结构的内容和多核缓存(Cache)研究的最新进展。而操作系统课程则介绍了多核领域虚拟化的研究原理和现状。编译原理课程则扩展了多核程序设计语言和优化等方面的内容。这些最新内容开阔了学生的视野,到2007年毕业时,这些技术在一些外资企业成为热门,因此我们的学生成为社会迫切需要的人才,非常受欢迎。
好的教学内容必须有与之配套的教学方法。以课堂为主的填鸭式教学方法虽然可以使学生掌握各门课程的基本知识,但是缺乏和学生的互动,存在较大不足。复旦大学软件工程专业在以下几个方面进行了调整和改进,取得了很好的效果。
首先,在讲授基本原理时,教师侧重阐述课程的要点和难点,而对于各种具体的细节,则让学生通过相应的教学实验环节(包括实验和实践项目)体会,解决可能出现的问题。一方面,我们通过教师的讲解与学生的自学来强化学生对概念的准确理解和对理论的全面掌握;另一方面,我们通过课后的实习项目来全面锻炼和提高学生的能力。教师在讲授知识的同时,逐步培养学生的自主学习能力和开发设计能力。
其次,教师注重启发式教学和学生创新能力培养。很多专业课程,如计算机系统基础、计算机体系结构和编译原理等,都增加了研讨性内容,教师定期布置超出课堂知识范围的开放式问题。这些问题并没有标准答案,学生要在自己查阅资料的基础上进行深入思考,因此锻炼了思考能力和创新能力,也开阔了眼界。研讨式学习、案例分析、群组学习启发了学生的思维,锻炼了学生在团队中开展创新性工作的能力。
第三,将实践教学环节和工程教育理念融入整个教学过程,尤其注重对学生项目构思、设计、实现和运作能力的培养。企业项目及企业联合实验室为学生的项目实践学习提供平台,通过解决项目中的实际问题,学生的工程技术创新能力得到了很大提高。我们同时建立了跨度一年的学院科研实验室和知名企业实习制度,为学生的发展创造了良好空间。课程成绩评定改变了期末一张试卷定成绩的考评机制,改为实验、实践项目、随堂测验、论文、面试、笔试、课堂讨论等多种形式相结合的评价机制,期终成绩仅占总成绩的30%~50%。通过不断学习,学生各方面的能力都得到均衡发展,适应现代软件产业的需求。
第四,注重国际化办学,推广双语课程。早在软件工程专业建设之初的2002年9月,学院就与爱尔兰都柏林大学(University College Dublin)签订了合作办学协议,开展计算机软件学士学位联合培养项目;与新加坡管理大学签订了交换生计划,每年两校互派学生到对方学校学习半年;与日本名古屋工业大学建立了推荐学生攻读研究生的国家资助项目。通过与爱尔兰都柏林大学的合作办学以及与其他知名大学的交流,我们吸收、借鉴了国外人才培养的先进理念,提高了教师的业务素质和能力。双语课程打造了一批有代表性和学院特色的课程,使学生能直接接触国外最先进的理念和技术,提高了自学能力、创新能力和综合素质。
3高水平的研究是创新型人才培养的基础
高水平的师资是人才培养必不可少的保障,软件学院应该鼓励具有应用背景的研发。这种研发不是低水平的开发,而是应该具有自主知识产权,在理论或技术上有所创新的研发项目。研究既要保证实用性,也要保证具有产业化时代的核心竞争力;既要能出高质量的论文,也要能得到实际应用。
开展高水平的科学研究,不仅可以培养出优秀的学生,也能吸引一流教师加入学院师资队伍中,更好地培养人才。我院现有宽带网络与互动多媒体实验室、电子商务研究中心、交互式图形学实验室、密码与信息安全研究室等四个研究机构,复旦大学并行处理研究所的研究主体也在软件学院。
在流媒体宽带应用领域的前沿技术研究和高科技产品的研发中,学院成功研发了高性能、高质量、与国际标准完全兼容的流媒体服务器(Clear Server),我们自主研发的IPTV系统成为上海市互动电视闸北区示范项目,其技术产品已经推广到国外,并获得上海市科技进步二等奖。而作为这些项目研发的负责人,我院教师及时把研究成果融入教学,简化项目开发要求,编制出适于学生课程实习的项目,有效提高了学生的实际研究能力,为学生提供及时接触最新成果的机会。
基于全光视频的图形绘制技术、基于GPU的Dome显示设备的实时绘制系统以及基于投影仪的大尺寸、高清晰显示墙系统的研制培养和锻炼了教师和学生。我院毛燕东在本科三年级就参加了学院实验室的科研工作,他和贾奇在导师的指导下参加第九届“挑战杯”全国大学生课外学术科技作品竞赛,一举夺得全国一等奖。2006年,毛燕东直升本院硕士研究生后,成为国家863计划“可伸缩高分辨率投影显示技术”项目的主要研究者,并参加了微软亚洲研究院系统研究组的多核操作系统的研究工作,在操作系统领域最好的会议之一OSDI上与他人合作。在即将毕业时,他先后收到了麻省理工学院(MIT)、斯坦福大学(Stanford)、卡耐基-梅隆大学(CMU)等三所全球计算机领域顶级高校的攻读博士录取通知书。
学院在虚拟化技术、并行与优化编译技术、动态优化编译技术、跨平台优化编译技术的研究中也取得了优异成绩,培养了一批优秀学生。陈海波从本科开始就参加实验室项目的研究,硕博连读阶段,他又在导师指导下取得了长足进步。他在国际并行处理大会上发表的论文获得大会唯一最佳论文奖,这是该会议举办36年来中国大陆作者第一次获此荣誉;而他在国际软件工程大会(ICSE2007)上发表的论文则是中国大陆地区近30年来在该会议上发表的第
4篇论文。
以研发基于智能Web服务和流程整合的应变电子商务集成平台、面向消费者的电子商务性能指标体系、基于RFID的仓库立体自动控制系统为契机,我们选拔了一批优秀的本科生,极大提高了学生的实际项目开发能力。本科生参与开发的软件构件组装工具、配置管理工具和面向特征的软件体系结构建模工具成为相应科研项目的主要成果,通过专家组验收,进入企业试用阶段。以本科生为核心技术骨干的多模型驱动的面向服务协同开发平台,基于数据挖掘和语义本体的商品编码知识库等项目,在教育部组织的鉴定中被认为在技术上达到了国内外领先水平。学院在密码学和网络安全协议、可信计算研究中也取得新突破,2004年和2007年,我们在欧洲密码学会议上发表了2篇有关零知识领域的研究论文,是大中华地区第1个在密码学顶级会议的科研单位。
高水平的研究有效带动了骨干教师队伍建设、优秀学生培养及软件工程专业课程体系建设,培养了一支具有创新意识和实际研发能力的学生队伍。
4人才培养质量和社会评价
由于教学计划和培养方案定位准确,在教学中又突出了能力培养,达到了专业培养目标,学院培养的
学生无论在国内各高校攻读研究生,申请到世界顶级高校留学,或进入IT、咨询、金融、通信等行业的国内外知名企业从事软硬件研发、咨询、管理等工作,都得到一致好评。我校人才的主要特点有:
(1) 具有较强的创新能力,走上工作岗位后能马上熟悉自己的工作。由于具备了创新素养,毕业生站在了更高的起点上,很多学生在实习过程中即成为企业项目骨干,相当一部分学生在实习期满前就获得了企业的聘用合同。成为企业正式员工后,他们很快就升为资深员工、项目组长甚至项目经理。在国际团队中表现突出,既体现了较高的工程素质和动手能力,又展现了管理能力及应用创新能力,部分学生甚至在外企实习期间就创新地解决软件工程中的高端问题,并取得了国外专利,充分展现了国际化人才的素质。
(2) 科学研究和开发实践能力强。学院支持并鼓励本科生加入科学研究和开发实践,在各个实验室的科研活动中,高年级本科生参加多项应用工具开发,发挥了很好的作用。
(3) 学生在校期间成绩斐然。迄今为止,我院已在第九届“挑战杯”全国大学生课外学术科技作品竞赛中获得一等奖1项,在“花旗杯”科技应用大赛中获全国二等奖2项,在上海市大学生暑期社会实践活动中获上海市和复旦大学优秀项目各1项,在“科技创业杯”软件构件制作大赛中也获得多个奖项。在2005年度“上海市高校学生嵌入式系统创新设计竞赛”中获得一等奖1项,在全国计算机仿真大奖赛中获得三等奖1项。
计算机科学与技术本科生的基本学科能力可以归纳为计算思维能力、算法设计与分析能力、程序设计论文与实现能力、系统能力[1]。其中计算思维能力是指模型化、抽象思维能力、逻辑思维能力。系统能力是指计算机系统的认知、分析、开发与应用能力,也就是要站在系统的观点上去分析和解决问题,追求问题的系统求解,而不是被局部的实现所困扰。算法设计与分析能力、程序设计能力是计算机类专业学生应该具备的基本能力之一,是从抽象思维到具体应用方法的转换,涉及到阅读判断、思考分析、抽象综合、表达创造等多项能力,对计算机专业高素质人才的培养不可或缺。
从目前社会对计算机专业人才的需求来看,高校在培养学生的程序设计、算法设计与分析能力上所作出的努力还远远不够。本文探讨了计算机专业学生在程序设计、算法设计与分析方面存在的主要问题,给出了在课程与实践中提高学生的程序设计、算法设计与分析能力的具体措施。
1 现状与问题分析
近年来,企事业用人单位较普遍的反映是计算机类毕业生的实际应用知识、动手能力和程序设计开发经验严重不足,尤其是程序设计能力、算法设计与分析能力无法达到用人单位的要求。这不仅影响学生就业,更阻碍了其进一步发展与自我提升。
我们归纳了问题的主要原因。一是学生对于有关程序设计及算法的知识仅仅停留在了解的程度上,未能融汇贯通,进而应用这些知识解决实际问题。二是教师在讲解程序设计、算法设计与分析的相关知识时,并没有将理论与实际有机的结合。三是实际教学过程中并未对学生进行真正的软件项目开发训练。四是对第一门程序设计课程的教学不够重视。五是学生的数学基础差、逻辑思维能力弱,阻碍了学生进一步设计算法和分析算法。
2 程序设计、算法设计与分析能力培养的具体措施
教育教学工作应该以学生为主体,同时充分发挥教师的引领、指导作用,二者有机结合,才能充分调动学生的学习积极性和主动性,从而达到最佳的教学效果。因此本文以“学生为主体,教师为主导”这一思想为指导,结合本校的实际情况,以及教师在教育教学工作过程中遇到的问题和广大学生的反馈,从以下四个方面探讨教育教学改革的措施。
2.1 调整课程设置和教学目标
用计算机求解一个实际问题,首先要从这个实际问题中抽象出一个数学模型,然后设计一个解此数学模型的算法,最后根据算法编写程序,以便调试、编译、连接和运行,从而形成该问题的解。从实际问题中抽象出一个数学模型的实质,其实就是要用数学方法抽取其主要的、本质的内容,最终实现对该问题的正确认识。设计出解决问题的算法后,要清楚地知道算法的优劣处,如果是好的算法则不必对其怀疑而再浪费时间进行研究;如果不是好算法则应再进行改进。而如何知道算法的优劣,则需要学会分析算法。算法分析是对一个算法需要多少计算时间和存储空间作定量的分析。编程就是设计程序,用计算机来解决问题。
与数据结构和算法设计相关的课程较多,其中三分之二以上的专业课都需要学习编程,主要是提高学生编程能力和算法分析能力。对于本科生来说,这些课程的重要性是不言而喻的。如果掌握不好则会阻碍他们对编程能力乃至对计算机系统的认识和理解。因此,应该从课程的意义出发,以提高学生的编程能力和算法设计与分析能力为目标,结合计算机专业的特点与教学实际情况,将“C语言程序设计”、“面向对象程序设计”、“离散数学”、“数据结构”、“算法设计与分析”、“网络编程”、“Windows编程技术”、“操作系统”、“计算机网络”、“编译原理”和“数据库技术”等几门课程有机地结合起来,并充分利用它们内在的联系优化授课的顺序与内容,为学生提供一套以编程能力和算法设计与分析能力为中心的教学体系,为学好相应的课程打下坚实基础[2]。
“C语言程序设计”和“离散数学”作为计算机专业学生较早接触的两门课程,应该为后续专业课的学习打好基础。C语言是学生在大学接触的第一门编程语言,教学中应该重点介绍程序设计思想,并培养学生的逻辑思维能力、抽象能力、编程习惯,而不是一味地强调C语言的语法特性。同时,“C语言程序设计”这门课也为后续的数据结构、算法设计与分析课程做好实践上的铺垫。“离散数学”的概念、理论及方法应用于计算机科学与技术的诸多领域,并大量出现在“数据结构”、“数据库系统”、“编译原理”、“算法设计与分析”、“计算机网络”等专业课程中。此外,离散数学所提供的训练十分有益于学生的逻辑推理、抽象概括及归纳构造能力的提高,十分有益于培养学生严谨、完善、规范的科学态度。
通过“数据结构”课程,使学生了解数据对象的特性,学会数据组织的方法,以及各种类型数据的处理方法,同时培养学生良好的程序设计技能。“算法设计与分析”课程重点讲授分治法、贪心法、动态规划、回溯法、分支限界法,培养学生分析问题和解决问题的能力,使学生掌握算法设计的基本方法,熟悉算法分析的基本技术,并能熟练运用一些常用算法。“操作系统”、“计算机网络”、“编译原理”和“数据库技术”都是对前面学习到的一些基本的数据结构和算法的具体应用,再加上一些相关领域的专业知识。
在“操作系统”教学中,让学生了解操作系统的一些基本概念,如:进程和线程、虚拟内存、死锁等,并按操作系统的五大功能分模块进行介绍。通过相应实验帮助学生理解重要概念,如通过实现“银行家算法”让学生明白进程间的通信过程、模拟LRU算法了解页面如何置换,通过实验使学生更加深刻地理解有关概念[3]。对于“编译原理”这门课,由于其理论性较强,在教学过程中应该尽量多与实验相结合,在课堂上比较难理解的内容,例如词法分析中的有限自动机内容或语法分析中LL(1)文法的理解等等,都可以通过与实验结合来促进对课堂内容的理解,可通过完成词法分析器的实验了解编译器如何把输入的源程序转化为单词符号串。
2.2 加强实验性课程教学
计算机专业相关的课程总体来说理论性比较强[4-5],开设实验性课程有利于学生通过自己的实际操作加深对课堂知识的理解,同时强化编程能力、算法设计能力和创新能力。许多课程都有上机编程实验内容,如“C语言程序设计”、“面向对象程序设计”、“数据结构”、“算法设计与分析”、“Java程序设计”、“操作系统”等课程,都要求学生完成一定数量的设计性,完成验证性实验。我们设立了工程与学术实践、计算机软件课程设计、独立实验课程以及毕业设计等实训科目,坚持编程实践四年不间断。
实验贯穿于理论、抽象和设计过程;实验对软件的设计和实现、测试原理和方法起示范作用;实验不仅是对理论的验证,也是技术训练和能力培养,包括动手能力、分析问题解决问题能力、表达能力、写作能力等。教学活动是教师和学生不断交流的过程,实验是实现这个过程的桥梁,可以弥补课堂教学的不足,加深对理论过程的理解,启发学生深入思考,敢于创新,理论联系实际。
例如“编译原理”课程是计算机类专业的一门重要专业课。设置该课程是让学生学习编译系统的结构、工作流程及编译程序各组成部分的设计原理和实现技术,使学生通过学习既掌握编译理论和方法基本知识,也具有设计、实现、分析和维护编译程序等方面的初步能力。编译原理是一门理论性和实践性都比较强的课程。实验的目的是加深学生对课堂知识的理解,掌握几个主要编译阶段的处理方法,增强实践能力,能完成初步设计、编制和调试编译系统。
实验一词法分析器构造,通过对给定源语言词法分析程序的设计,加深对词法分析原理的理解,掌握源语言的接受、存贮、预处理和扫描分析,生成正确的单词符号串二元式序列。实验二语法分析器构造,借助于词法分析程序提供的分析结果,编写一个算符优先语法分析程序,程序能进行语法结构分析和错误检查并产生相应的归约信息。同时给出出错信息和错误类型,从而加深对语法分析的理解。进一步设计实现球类描述语言词法分析、语法分析实验(扩展实验),根据球类比赛技战术分析的需求,设计的解释器由词法器、语法器和语义分析模块三部分组成,词法分析器负责词法分析的预处理和输入单词的解释;语法分析负责输入码的语法结构检查和解释;在词法和语法分析器基础上,语义分析模块负责比赛技战术的分类与统计工作。
本校开设了“程序设计专题训练”、“计算机网络专题训练”、“操作系统专题训练”、“数据库专题训练”、“软件测试技术”、“嵌入式技术”等实践课程。如“程序设计专题训练”课程是C程序设计课程后续的训练课程,针对程序设计中常见问题,以专题形式进行训练。通过该课程的学习,使学生能深入理解C语言特性,掌握基本程序设计方法,学会常见问题的处理技巧,提高程序设计能力,为后续专业课程的学习打下良好基础。又如“操作系统专题训练”课程重点提高学生对操作系统的实际操作能力,使学生了解和掌握在Windows、Linux操作系统上运行的应用服务,对操作系统与外部接口(shell)有更深入的了解和认识。
为了能切实提高学生的编程水平和算法设计与分析能力,我们开设了“项目管理实践”、“软件课程设计”、“企业实训”、“学术与工程实践”等实践课程,如“项目管理实践”课程培养学生参与大型软件项目开发的基本能力,使学生能够熟练掌握软件开发环境使用和软件开发的基本方法,为毕业设计和就业提供了必要的技能训练。按照5-8人的规模成立软件开发项目组,以开发一个软件项目作为实训的主线;项目经理由学生担任,项目成员的角色由项目经理根据各成员的技能来确定;由实训方提供项目的用户需求,并且确定要开展的软件工程活动和管理活动及项目里程碑;根据开展的软件工程和管理活动,提取出一些关键知识点,以案例的方式进行项目培训,并将其用于项目开发的实践中,其中案例来自实际开发的软件和系统集成项目。
2.3 紧跟时代变化,实现多模态教学
首先重视教学内容的时效性,教师在教学过程中,不仅仅着眼于所选用的教材,还应融入前沿思想、技术和一些交叉学科的内容。例如在“编译原理”课程的教学中,不局限于一种语言,而应该选择多种不同体系结构的编程语言进行介绍;又例如可以选择C语言、Ruby、Python,甚至是苹果最新推出的Swift语言,通过比较这些语言的不同特征,给出其在编译过程中的各自特点,从而使学生对编译程序所做的工作有更加清晰透彻的了解。在“数据结构”、“面向对象程序设计”这类课程的教学中,可以多介绍一些国内外的文献、最新应用等,从多种不同角度引导学生程序阅读及编程的兴趣。这就要求教师关注计算机及电子信息产业发展研究的最新内容,并及时将这些新内容融入到教学工作中。
其次,重视教学方式的时效性,培养学生程序阅读能力、编程能力,其手段要紧跟时代步伐。充分利用互联网时代的MOOC,如北京大学的MOOC、浙江大学的MOOC、本校的MOOC等,将原先只能在电脑上或书本中的程序放在手机上,使学生可以随时随地从手机端进行学习。学生课外可以利用北京航空航天大学实验类MOOC的计算机网络实验课程、移动计算两门课程,通过计算机网络实验课程,了解网络基本原理,远程配路由器、交换机,组一个小的网络,掌握基本的网络故障排查方法。通过移动计算即Android编程,MOOC已经搭好大的框架,教学生编写小的app程序,并将编写好的代码嵌入到框架中。
通过促进在计算机系本科教学工作中多模态教学模式的实现,可以将原先计算机专业教学以课堂教学为主、课下上机实验为辅,其余全靠学生自觉学习的格局,转化为课堂教学为主导,智能端随时学习为辅,课下上机实验为监督检测的新格局。这样的格局摒弃了过去教学只能在课堂进行的成见,给予学生更多的学习自由,可以有效提高学生的程序设计、算法设计与分析能力,同时节约课堂时间,教师在课堂中能够有更多时间讲解一些更加实用的难以从书本中直接获得的知识。
2.4 注重对学生学习态度的引导
在对计算机系学生的调查中发现,后进生大多有“畏难”情绪。他们往往还未开始编程,就对自己的能力进行主观否定,这种特征在调剂生身上表现得较为突出。对于这种情况,教师在课堂上如果只单方面强调知识的重要性,甚至直接点出考试及格的重要性并不会对这类学生思维模式的转变有好处。教师在教学过程中,常常会不自觉地将自己体验过的应试竞争态度带入教学工作中,具体表现为:过于强调考试分数,为了提起学生的听课兴趣甚至以考试题型作为诱饵,经常强调奖学金和保研问题,整个教学工作围绕着考试等。这其实都是不正当的竞争指引方式,只会增强学生的厌学心理。
因此,计算机专业讲师在教学过程中,应格外注重对学生学习态度的指引,特别是在代码类课程的教学过程中,教师不应根据自己多年的代码编写经验来对代码进行讲解,而是应该想象自己是这种代码的一名新学生,对这类代码一无所知的情况下,可能会从哪里入手进行理解。与其说“这门课挂科了,你毕业就有危险”,不如说“学会写代码,你就可以自由驾驭整台计算机”;与其说“这种数据类型期末考试一定会考”,不如说“你玩的泡泡龙中,屏幕上的泡泡就可以用这种数据类型来写”。在教学中注重引导学生的学习兴趣,激发学生的学习热情和探索精神,真正做到以学生为本,从学生的角度理解教学,才能在教学工作中正确指引学生的学习态度,达到最佳教学效果。
3 总结
计算机科学是一门具有创造性意识活动的学科,计算机本质上是一个程序的机器,只有那些真正懂得程序的人才能懂得计算机。因此程序设计能力、算法设计与分析能力是一名合格计算机类专业的毕业生必须具备的两大基础能力。本文给出的具体措施,有效提高了学生的编程能力、算法设计与分析能力,以及分析和解决实际问题的能力,有利于培养经济社会发展急需的信息产业人才。
民族音乐学在中国的发展,沈洽先生将其分为“比较音乐学时期”、“民间音乐研究时期”、“民族音乐理论时期”、“民族音乐学时期”四个不同的发展阶段。这四个时期基本反映了中国民族音乐学家探索中国民族音乐学学科发展的历程。作为一门从西方引进而来的学科,学习西方民族音乐学著作中的理论和方法显得尤为重要。关于介绍与翻译西方民族音乐学著作的成果,有1985年由董维松、沈洽编著出版的《民族音乐学译文集》,而着力介绍西方民族音乐学的理论与方法却是近几年的事情,随着我国研究生教育的蓬勃发展和国内外学术交流的频繁,陆续翻译了部分学术著作和西方民族音乐学家的学术讲]论文。尽管如此,但是没有形成反映西方民族音乐学理论和方法体系的系统,无法满足当今高校的教学需要和学者的研究需求。2007年7月,中央音乐学院出版社出版的由张伯瑜等编译的《西方民族音乐学的理论和方法》一书,及时填补了民族音乐学教学上教材的不足和学术研究上方法论的部分空白。
该著作根据民族音乐学理论与方法的理论体系的构建特征,将全书分为“民族音乐学的定义”、“民族音乐学的历史与民族音乐学家的工作”、“田野工作”、“民族音乐学的记谱问题”、“音乐民族志理论”、“民族音乐学的音乐分析”、“民族音乐学的局内人与局外人问题”、“民族音乐学与人类学”、“民族音乐学研究中的伦理道德问题”、“音乐语境”、“认知民族音乐学的理论与方法”、“音乐图像志”、“乐器学”十三个理论篇章和三篇附录构成。精读本著作,笔者以为,有几个显著的特征。
一、多视角引入西方民族音乐学理论与
方法 为学科筑起理论大厦
本书编译者以西方20世纪以来民族音乐学(音乐人类学)经典学术著作为编译对象,选取了“阿兰・梅里亚姆(Alan P・Merram)、布鲁诺・内特尔(Bruno Nettl)、玛西亚・赫尔顿(Marcia Herndon)、诺尔玛・麦克雷奥德(Norma Mcleod)、安东尼・西格(Anthony Seeger)、约翰・布莱金(John Blacking)、马克・斯洛宾(Mark Slobin)”等西方著名民族音乐学家关于“民族音乐学”元理论的论述,针对“民族音乐学的定义、民族音乐学的历史与民族音乐学家的工作、田野工作、民族音乐学的记谱问题、音乐民族志、音乐分析、局内人与局外人、伦理道德问题、音乐语境、认知民族音乐学的理论与方法”等十三个理论问题分别选用了来自不同学者的“声音”、这是一种学科理论之综合。它对于构建中国民族音乐学的学科理论体系有着很好的借鉴意义。
关于“民族音乐学的定义”,编译者引用了阿兰・梅里亚姆的《民族音乐学:关于这一领域的讨论和定义》章节,文中认为:“民族音乐学不只是研究非欧洲的音乐,而是‘文化中的音乐研究’,换句话说,我认为音乐不仅仅可以从音乐家和人类家的观点来看,而且也可以从社会学家的观点来研究。”时至今日,民族音乐学的定义有很多,但“文化中的音乐研究”已经成为民族音乐学研究者的一个“行动纲领”,得到学界的普遍认同。
关于“民族音乐学的历史与民族音乐学家的工作”,编译者引用布鲁诺・内特尔的《民族音乐学:定义、方向及问题》章节,在“民族音乐学的历史”方面,文中认为:“民族音乐学的研究行为出现得很早,但作为学科,民族音乐学这个词仅仅出现了25年。它的前身为比较音乐学或者音乐人种学。作为一个领域,这是新兴学科,它在不断变化,并向不同方向迅速发展。另一方面,它也很古老,它的根源可以追溯到那些简单的、甚至有点不可信赖、但有价值的描述,即由那些喜欢音乐并受过高等教育的传教士、旅游者、文人和军人完成的对亚洲、非洲、拉美国家民族音乐的宝贵记录。”作者将早期普通人的“音乐行为”作为民族音乐学发展历史的一个界定维度,具有一定的代表性。在“民族音乐学家的工作”方面,文中认为:“民族音乐学领域有五大特征:对全球的兴趣,这是由多重变化来平衡;强调田野工作;尽可能地记谱并分析,使音乐视觉化和语言化;坚持将音乐放置在文化背景中去学习;关注音乐的进程。这些都是民族音乐学的学科精髓。”这一论述强化了民族音乐学研究中的实际工作问题。
关于“田野工作”,编译者引用了玛西亚・赫尔顿和诺尔玛・麦克雷奥德合著的《民族音乐学田野工作手册:导言》章节,文章阐述了田野工作的方法、范围和文化,最终指出:“我们完全有理由把田野工作看成是一个简单的工作,田野方法就能够通过传统的新闻式的提问方式来总结――谁(who)、为什么(why)、怎样(how)、什么(what)、什么时间(when)和在哪里(where)。”这“五个W”现已成为田野工作的“行为准则”,指导学者走向“田野”。
关于“民族音乐学的记谱问题”,编译者引用了布鲁诺・内特尔的《在我看到乐谱之前什么也不能说》章节,作者通过自身实践,看到了记谱中的悖论,提出了民族音乐学记谱问题的思考。作者认为:“记谱工作是民族音乐学者的核心工作,也是最困难的工作,是民族音乐学者能力的体现,是使其与其他学者分开来的标志。”记谱工作受众多文化背景因素的影响,千变万化,能够完全展现音乐的记谱方式需要多种记谱法的综合,作者提出“在看到乐谱之前我什么也不能说”不失为至理名言。
音乐分析是音乐学研究的重要维度。关于“民族音乐学的音乐分析”,编译者引用了约翰・布莱金《音乐分析的普遍有效性》章节,文中认为:“民族音乐学的研究已经显示,分析的技术作为对作品创作过程的一种描述并不是普遍适用的,但是却能够把音乐作为人类的普遍现象,在此方面的理解上音乐分析还是能够发挥作用的,因为分析至少可以展示分析者对音乐的解释。”围绕音乐分析的普遍原则,面对世界音乐文化的多样性,是否有一种普遍适用的方法?编译者在“注解”中总结了文中的主要内容,并对其进行了梳理和归纳。
关于“民族音乐学的局内人与局外人”,编译者引用了布鲁诺・内特尔的《你永远不能理解这种音乐》章节,民族音乐学研究中的“局内人”和“局外人”在国内外都有很多著述,观点颇多。文章认为:“局内人与局外人并不是简单的角色划分,更体现着对文化的理解方式。”面对局内人与局外人的种种困惑,内特尔提出了一个问题:“在这个工作中是否有真正的‘局内人’。”最好的方法是把自己调整为一个“局外人”,以便提供有限的、却是独特的观点。这也许是国内学者提出“融入与跳出的双视角”观点的有力印证。
有关“音乐民族志理论”、“民族音乐学和人类学”、“民族音乐学研究中的伦理道德问题”、“音乐语境”、“认知民族音乐学的理论与方法”、“音乐图像志”、“乐器学”等理论,编译者根据西方民族音乐学家的研究领域进行了逐一翻译与解读,限于文章篇幅限制,在此不赘述。
西方民族音乐学是在德国的比较音乐学的出现才赋予了真正意义上的学科概念,中国的民族音乐学是1980年的“南京会议”才有了学科概念。学科理论的构建除了理论研究者的努力,更需要一种全方位的学习与借鉴。《西方民族音乐学的理论与方法》根据民族音乐学的理论构架,精选西方民族音乐学家关于民族音乐学的理论与方法论的名篇进行编译,涉及面广,学科框架合理,使国内学者和民族音乐学研究生能充分学习和了解西方民族音乐学家的研究视角和研究成果,及时了解国内外民族音乐学的学术动态,促进了我国的民族音乐学研究与国际民族音乐学对话和交流。
二、引入后的解读,更具实际意义
本书编译者并不仅仅限于编译,而是在每篇之后,均有“编译者注解”。笔者以为,这是编译者对西方民族音乐学著作的读后感与译后感,编译者总结了每个篇章的内容安排,对西方民族音乐家的经典学术著作进行详细的解读,提炼其中的观点和见解,甚至结合我国民族音乐学发展状况进行进一步的阐述,使读者能够在第一时间内对知识进行很好的加深与巩固。如本书第七章《民族音乐学局内人与局外人问题》一节,编译者在注解部分论述美国民族音乐学家布鲁诺・内特尔《你永远不能理解这种音乐》文中的观点以后,对此有两点认识(见著作142页):“(1)局内人和局外人是一个相互比较的概念,即和谁相比来确定自己的位置。西方学者和中国学者相比,中国学者在很大程度上是局内人,而中国学者和当地的民间音乐家相比,他们在很大程度上又成了局外人。(2)音乐概念和文化概念的相互作用。不同的人根据自己的兴趣、学术的需求和社会的需要来进行自己切实可行的研究都将会对民族音乐学做出贡献。”诸如此节,本书还有多处,本文不一一
列举,所有的这些,都成为本书的一大亮点。
三、学科渗透与综合寻求学理导向与纵深发展 民族音乐学从最初被认为是对“非西方音乐的学术研究”的研究模式发展成“文化脉络中的音乐研究”的研究模式,已经成为国内外民族音乐学界的共识。虽然众多国内外学者都曾经为“民族音乐学”下过不同的定义,但是,作为音乐学的一门独立学科,它有着自身独特的理论构架、研究对象、研究方法和发展历程,其中融合了音乐学、人类学、民俗学、语言学、心理学及其他学科的原理。民族音乐学学科的真正目的并不是给“民族音乐学”下合理的、科学的、有限界定的定义,因此,与其说民族音乐学是一门独立的学科概念,倒不如说民
族音乐学是一种音乐学学术研究的方法论。
编译者结合民族音乐学学科体系理论构建的需要,以民族音乐学的定义、历史、田野工作、记谱问题、局内人与局外人等问题为主线,选择西方民族音乐学家的经典著作中的章节作为编译对象,对阿兰・梅里亚姆(Alan P・Merram)、布鲁诺・内特尔(Bruno Nettl)、玛西亚・赫尔顿(Marcia Herndon)和诺尔玛・麦克雷奥德(Norma Mcleod)等人的著作进行有选择的精译,虽然不能窥其著作全貌,但是也能领略西方民族音乐学著作的学术精髓。
值得注意的是,编译者根据西方民族音乐学的学科发展近况,通过编译民族音乐学家安东尼・西格(Anthony Seeger)、诺尔玛・麦克雷奥德(Norma Mcleod)、皮尔科・莫依沙腊(Pirkko Moisala)、日内维沃・杜尔农(Genevieve Dournon)等人的学术著作,系统介绍了西方“音乐民族志理论”、“认知民族音乐学”、“音乐图像志”、“乐器学”等民族音乐学分支学科的理论与方法,对于我国的民族音乐学研究将具有重要的指导意义。
四、寻理溯源为研究者架起求知的桥梁
参考文献本是在学术研究过程中,对某一著作或论文的整体的参考或借鉴,但是本著作中的参考文献的意义更加深远。由于本书是译著,也由于中英文语言的差异性,会导致翻译中文当中的一词多义现象,同一个英文单词在不同的历史文化语境中会产生不同的中文表达意义,有的词义甚至完全相反。对此,笔者以为,参考文献主要有三个用途,其一是遵循良好的学术规范和学术道德,其二是为读者深入理解某个问题提供详细的出处,其三是从一定程度上增加著作或者论文的学术性。正因为如此,该著作的每个章节都详细列举了原文参考资料,编译者还特别注明“此文献列举方式保持了原文的样式”的字样,并且每章的篇名也附上了英文,更加可贵之处在于,编译者在每个篇章注解之后还列举了每个论题进一步的参考文献。列举参考文献之多,涉及学科面之广,将20世纪西方民族音乐学家关于每个专题的研究成果都纳入其中,其中不泛有西方人类学、社会学等学科的研究成果,更加说明了编译者的良苦用心。很多学者都有同感,原著阅读是极其重要的,也是必要的,诚如编译者张伯瑜先生在本书前言中说:“本人曾在中央音乐学院、中国音乐学院、首都师范大学等院校开设《西方民族音乐学的理论与方法》课程,尽管我国发表或出版了部分西方民族音乐学的文献,本人一直认为学习这种理论还是阅读原文。大家都学过英文,阅读原文对促进英文水平的提高也有好处……”。笔者深为赞同,但是笔者以为,即使很多读者拥有阅读外国文献的英语水平,但是如果没有人提供西方民族音乐学最新的研究成果,我们还是不能及时获得西方学者的最新研究领域和动态,本书提供给我们很多西方音乐学和其他学科的研究成果,值得我们去阅读。参考文献提供的著作将成为通向深谙西方民族音乐学理论和方法的桥梁,这些成为本书的又一大亮点。
另外、本书的附录部分选用了埃利斯(Alexander J.Ellis)的《论各民族的音阶》(方克、孙玄领龄译)和霍恩博斯特尔(Hhornbostel)的《乐器分类表》(俞人豪译)两篇民族音乐学古典文献作为民族音乐学的必读之作,选用了杰尼福・伯斯特(Jennifer C Post)的《辅助材料:民族音乐学研究文献资料》(张伯瑜译)作为了解和研究西方民族音乐研究文献的资料,起到了很好的导读和桥梁作用。这些文献都是我们探视西方民族音乐学发展历史的窗口,只有充分了解别人在做什么,才能够为自己的研究找到合适的切入点,才能够找到和国际民族音乐学研究的平衡点。
总之,《西方民族音乐学的理论与方法》在学术观点之新颖、体系构建之合理、编写内容之精当等方面均堪称旌表。如此高的质量,自然得益于编译者中央音乐学院张伯瑜教授等人[界之高远、学识之博洽,为当代民族音乐学学术界树立了一个良好的治学榜样。当然,由于全书文稿出自众手,各章节在编译过程中因文化语境相异在概念的表达上尚难获得完全的统一。但此乃大醇之小疵,绝无碍于其作为一部当代中国民族音乐学理论巨著价值的存在。编译者在前言中说:“虽然这里所选择的几篇文章发表的年代较久远,但还是能够展示出西方民族音乐学的理论思想和发展过程。如果今后有机会,本人很想再翻译一本最新的理论,作为此集子的补充”。我们衷心希望作者的最新集子能够尽早和读者见面,那将又是民族音乐学学术界的一件盛事。
参考文献
[1]张伯瑜等《西方民族音乐学的理论与方法》,北京:中央音乐学院出版社2007年版。
关键词:语音编译码;CVSD;FPGA;CMX639
中图分类号:TN919文献标识码:B
文章编号:1004-373X(2009)03-151-03
Analysis of CVSD Algorithm and Its Realization in FPGA
XIANG Zeyong,GAO Yong
(College of Electronics and Information Engineering,Sichuan University,Chengdu,610065,China)
Abstract:Through analyzing the speech code-decode principle of the Continuously Variable Slope Delta modulation(CVSD),the CVSD algorithm is discussed in detail.Due to the preferable parameter of the algorithm,its simulation and implement are designed in FPGA.A practical solution based on hardware platform of FPGA is presented,on which the algorithm of CVSD is verified and the intercommunication is realizied between FPGA and CMX639.The results show that the algorithm in FPGA is attractive and the design is successful.
Keywords:speech code-decode;CVSD;FPGA;CMX639
0 引 言
在众多的语音编译码调制中,连续可变斜率增量调制(CVSD)作为许多增量调制中的一种,只需编一位码,在发送端与接收端之间不需要码型同步,量阶Δ的大小能自动地跟踪信号变化,因而具有强抗误码能力,在10-3时仍可保持高质量的话音[1]。目前市场上有CVSD的专用芯片,但专用芯片的通用性、灵活性和可扩展性受到了很大的限制,并且产品的开发周期长,开发成本也较高。专用CVSD芯片只能实现一路编译码,在需要多路CVSD编译码时则需要很多专用芯片,具有局限性;而单片FPGA容易实现多路CVSD编译码功能。此外如果专用芯片停产或者买不到,已有的通信设备维修将会因器件缺乏导致后续工作无法开展。为了弥补专用CVSD芯片的不足,同时也方便在现场可编程门阵列(FPGA)[2]中增加一些其他相关的应用功能,因此在FPGA中实现CVSD语音编译码调制功能的前景将是非常广阔的。
这里将详细介绍基于FPGA的CVSD语音编译码的设计思路、具体实现以及和专用芯片CMX639[3]之间的互相通信。
1 CVSD工作原理
CVSD是一种量阶Δ随着输入语音信号平均斜率(斜率绝对值的平均值)大小而连续变化的增量调制方式[1]。它的工作原理如下:用多个连续可变斜率的折线[1]来逼近语音信号,当折线斜率为正时,对应的数字编码为“1”;当折线斜率为负时,对应的数字编码为“0”。
当CVSD工作于编码方式时,其系统框图如图1所示。语音信号xin(t)经采样得到数字信号x(n),数字信号x(n)与积分器输出信号g(n)比较后输出误差信号d(n),误差信号d(n)经判决后输出数字编码c(n),同时该信号作为积分器输出斜率的极性控制信号和积分器输出斜率大小逻辑的输入信号。在每个时钟周期内,若语音信号大于积分器输出信号,则判决输出为“1”,积分器输出上升一个量阶Δ;若语音信号小于积分器输出信号,则判决输出为“0”,积分器输出下降一个量阶Δ。
当CVSD工作于译码方式时,其系统框图如图2所示。在每个时钟周期内,数字编码c(n)被送到连码检测器,然后送到平滑电路以控制积分器输出斜率的大小。若数字编码c(n)输入为“1”,则积分器的输出上升一个量阶Δ,若数字输入为“0”,则积分器的输出下降一个量阶Δ,这相当于编码过程的逆过程。积分器的输出g(n)通过低通滤波器平滑滤波后将重现输入语音信号xout(t)。
可见输入信号的波形上升越快,输出的连“1”码就越多,同样下降越快,输出的连“0”码越多,CVSD 编译码能够很好地反映输入信号的斜率大小,有效地避免了斜率过载失真和颗粒失真。为使积分器的输出能够更好地逼近输入语音信号,量阶Δ随着输入信号斜率大小而变化,当信号斜率绝对值很大,编码出现3个或4个连“1”或连“0”码时,则量阶Δ加一个增量Δ0;当不出现上述码型时,量阶Δ则相应地减少。
2 CVSD的软件算法
2.1 CVSD的编码算法
图3是CVSD编码算法框图[4],其量阶Δ调整是基于前3位的连码。x(n)是语音经过采样得到的数字信号,数字信号x(n)与积分器地I1输出的预测信号xp(n)经过比较后输出误差信号d(n),误差信号d(n)经一阶量化(d(n)≥0,c(n)=1;d(n)<0,c(n)=0)得到输出的数字编码c(n),该信号同时作为积分器I2的极性控制信号和控制积分器I2输出斜率大小逻辑的输入信号。当输出码出现连续的“1”码或者连续的“0”码,则说明信号波形的斜率较大,因此量阶Δ需要适当增加,当输出码c(n)长时间没有出现连码,则积分器I2向“0”值方向衰减,量阶Δ减小。最小和最大阶距是由ΔMIN和ΔMAX分别确定的。当长时间没有出现连码,CVSD编码器退化为一个线性增量调制(LDM)编码器。
2.2 CVSD的译码算法
图4是CVSD译码算法框图[4],其量阶调整是基于前3位的连码。译码过程就是编码的逆过程,只是在积分器I1后面增加了一个低通滤波器,用于抑制带外干扰。
3 CVSD算法在FPGA中的实现
3.1 硬件实现框图
考虑到实际需求,采用了通用性较强的A/D,D/A元器件和FPGA器件。该硬件可以同时实现3路CVSD编译码算法,一路采用FPGA(XC3S1500)[5]实现,两路采用专用芯片实现;同时编译码之间可以通过FPGA内部逻辑控制互相通信。在FPGA内设计实现了CVSD编译码算法,在该器件内融合多种控制功能,可以在线编程、方便调试。
音频信号在进行A/D采样之前,为了防止带外信号进入,首先进行低通滤波;再通过高倍时钟进行采样得到数字信号进入FPGA进行编译码处理。译码过后的信号通过D/A输出模拟信号,该信号再经过低通滤波器后输出,得到音频信号。
3.2 CVSD算法实现框图
在FPGA内部算法实现上,采用了 “自顶向下”的设计方法,即根据要求的功能先设计出顶层的原理图,该图由若干个功能模块组成。再把各个模块细化为子模块,各子模块的功能采用电路图实现,也可用硬件描述语言实现。设计中顶层采用原理图实现,子模块采用VHDL硬件描述语言实现,利用ISE自带的IP Core乘法器,经过综合和优化等过程,最终将程序下载到芯片中,使用在线逻辑分析仪ChipScope Pro进行逻辑和功能测试分析[6]。
3.3 CVSD算法的仿真
以正弦单音输入信号为例,利用信号源产生信号幅度0.5 Vpp,频率fin(t)=1 kHz的正弦信号作为测试信号,在FPGA中利用高倍时钟产生fs(t)=64 kHz的采样时钟。对输入A/D的音频信号采用专用低通滤波芯片进行了滤波。D/A输出的信号包含了许多不必要的高次谐波分量,因此也采用低通滤波器对其进行了平滑滤波。
在设计上,不仅仅是采用FPGA实现和验证自己的CVSD编译码算法,还和专用芯片CMX639进行互相通信进行验证。CMX639是一款CVSD全双工音频调制芯片,集成了编码和译码功能,实现了单芯片语音处理能力,设备简单,用户可以根据实际情况,自主选择采样速率。
图8是通过ChipScope Pro采集的实时正弦信号。从图中可以看出量阶Δ的大小能够很好地反映输入信号斜率的大小,输出端输出信号能够很好地重现输入信号,说明CVSD编译码方式是有效的。
3.4 CVSD算法的实现
采用原理图和VHDL语言相结合的方式在FPGA中实现了CVSD电路。具体实现步骤如下:
(1) 根据算法框图设计顶层原理图CVSD.SCH;
(2) 利用IP Core产生底层所需要的乘法器;
(3) 利用VHDL语言完成CVSD编译码模块;
(4) I/O管脚定义,约束条件编写;
(5) 设计综合、编译;
(6) bit文件生成、下载,通过ChipScope Pro进行仿真测试;
(7) 根据仿真测试结果返回修改设计,直到设计成功;
(8) mcs文件生成、加载,最终验证。
验证是FPGA设计中很重要的一环,只有通过验证才能说明设计的正确与否。采用XILINX公司的Spartan-3系列中的XC3S1500[5]来具体实现CVSD的编译码功能。通过自己设计的编译码算法和CMX639专用芯片的编译码模块互相通信,输入实际语音信号测试,能够很好地从D/A输出语音信号,从CMX639译码输出也能听到语音信号,达到了满意的效果。
4 结 语
本文提出的FPGA设计方法很好地实现了CVSD编译码功能,充分利用了FPGA的优势,可以同时实现多路CVSD编译码功能,弥补了采用专用芯片实现CVSD编译码的不足,设计灵活、简单,成本低,具有很好的应用前景。
参考文献
[1]吕洪生,杨新德.实用卫星通信工程[M].成都:电子科技大学出版社,1994.
[2]赵曙光,郭万有,杨颂华.可编程逻辑器件原理、开发与应用[M].西安:西安电子科技大学出版社,2001.
[3]CML Microcircuits.CMX639:Consumer/Commerical CVSD Digital Voice Codec[Z].2005.
[4]CML Microcircuits.Continuously Variable Slope Delta Modulation:A Tutorial[Z].1997.
[5]XILINX.Spartan-3 FPGA Family:Complete Data Sheet[Z].2004.
[6]EDA先锋工作室.FPGA/CPLD设计工具:Xilinx ISE 5.x使用详解[M].北京:人民邮电出版社,2003.