简析计算机专业知识在编译课程教学中的渗透与融合
简析计算机专业知识在编译课程教学中的渗透与融合
“编译原理”、“操作系统”和“计算机体系结构”是计算机专业的三门核心课程,在计算机科学的教学体系中占有重要地位。学生对于这三门课程的掌握程度在一定程度上反映了他们对计算机专业知识的掌握情况;进一步讲,能否确✞切理解编译程序、操作系统和硬件系统之间的关联及它们在计算机系统中的层次地位,直接反映了学生对专业知识的整体把握程度。遗憾的是,受限于目前的教学大纲和学时,这三门课程的教学很少涉及对相关课程的介绍和联系,只注重课程自身教学内容的讲解和分析,导致学生无法理解所学知识的应用背景,产生学无所用的想法。
由于编译课程内容具有较强的理论性、逻辑性和实践性,学生在学习过程中感到过于抽象和难以理解。编译教学内容涉及到程序设计、操作系统和计算机系统结构等相关课程,掌握编译技术有助于加深学生对整个计算机系统的理解[1]。目前,编译课程的教学更多关注自身内容的讲解和传授,与其他课程横向联系的内容相对较少。许多学校虽然开设了实验课及相应的课程设计,但只对编译理论中的某些算法或编译系统的某一阶段功能进行单纯的实现与验证,缺少实际背景。另外,现行的编译教材大部分都是从编译技术本身的角度撰写的,为的是让学生掌握编译的基
本理论与思想[2]。所有这些最终导致学生无法对高级语言程序设计每条指令的执行过程有清晰的认识和理解,因而不能实现专业知识的融会贯通。计算机专业的理论基础对培养学生的计算机专业素养具有非常重要的作用[3],因此课程间封闭的教学方式不利于专业素养的培养和提高。
目前,这一现状在短时间内很难改变。笔者认为应以编译课程为切入点,在教学过程中加强相关课程的联系,促进计算机专业知识的交叉融合。
1以编译课程为切入点,强化专业知识融会贯通
编译程序在计算机系统不同层次中处于核心地位,在程序设计及运行过程中起到桥梁和纽带作用,因此应以编译课程为切入点,促进专业知识的融合。按照教学大纲安排,学生入学后首先要学习程序设计的相关课程,进入高年级后,主要学习操作系统、计算机体系结构和编译原理等核心专业课程,它们之间的关系如图1所示。由图1可以看出,编译程序在从程序设计到程序运行产生输出结果这一过程中处于核心地位,编译系统对用程序设计语言编写的源程序
进行编译,编译过程中会用到源语言自身的规范和库程序,需要操作系统提供的库程序和接口以及目标体系结构的相关信息生成可执行的二进制程序。可执行程序根据用户的需要,由操作系统调度运行,并与下层的硬件系统产生密切的关系。 为此,编译课程的部分内容需要程序设计语言、操作系统和体系结构等课程作为支撑,这样学生才能更好地理解计算机系统从软件设计到程序执行的完整过程。
正是由于编译系统在计算机系统中处于重要地位,以编译课程为切入点,在教学过程中加强核心课程之间的横向联系,不仅有助于实现编译课程抽象内容形象化,也有助于加强学生对整个计算机系统的认识。另外,随着计算机系统结构的不断发展与更新,嵌入式计算、并行计算与可重构计算系统逐渐得到发ღ展和普及,这些都使编译系统和计算机系统结构之间的关系变得比以往更加密切。一种新结构的出现需要新编译系统的支持才能真正发挥作用,因此在编译课程的教学中加强与其他课程的联系,也是符合计算机系统发展的大趋势。
2以编译课程为切入点的可能性分析
以编译课程为切入点,强化各个核心专业课程之间的关联,其可能性概括如下:
“编译原理”是计算机专业重要的专业课程,且在计算机系统中具有重要地位。
编译课程开课的学期较为合适。我们查阅了国内部分高校的教学计划,研究了计算机核心专业课程的课程安排。如表1所示,在我们调查的高校中,除北京大学、北京航空航天大学和西安交通大学外,近一半高校编译课程的开课学期多位于程序设计、操作系统和计算机体系结构等课程之后,或与操作系统和体系结构等课程同时讲授,因此在编译课程的讲授过程中穿插联系相关课程的内容比较合理。通过对相关知识进行整理归纳、巩固与提升,能够取得较好的教学效果。
编译课程多次涉及其他专业课程的内容,例如“编译原理教学引论”部分要讲授程序设计语言的发展历史、编译程序在计算机软件系统中的重要地位等内容;讲授“编译运行时的环境”部分时,一定学时用于讲述存储分配,特别是基于栈的运行时环境的动态存储分配和基于堆的运行时环境的动态存储分配部分,与操作系统相关内容相互渗透;在“代码生成和优化”部分,尤其是过程调用的翻译部分,针对目标系统结构的优化部分,亦需要体系结构相关知识作为支撑。反观操作系统和体系 ッ结构等课程的教学内容,与其他课程的联系则相对较少。
基于以上几点认识,我们认为,以编译课❦程为切入点,充分利用有限的学时,在部分教学内容中强化与其他核心课程的关联,实现专业知识融会贯通的可能性是存 ت在的。
3关于课程教学的几点建议
如前所述,目前教与学的实际情况不利于学生对计算机专业知识的融会贯通,在注重软件能力培养的计算机学院中,学生对图1的阴影部分知之甚少,而对阴影前后两部分的内容更加熟悉,掌握程度更高。所以,学生没有从总体上对所学知识建立完整的知识体系,对所学专业课程没有构成清晰的轮廓和概括。
为了强化编译课程的教学效果,教师需要将课程教学置于计算机系统大的背景环境之中,重点阐述编译程序在计算机软件系统中的重要性,与其他核心专业课程之间的联系,同时运用实例教学,使学生从抽象的教学内容中解脱出来,真正感受到所学知识的可用性和有用性。鉴于此,我们对编译课程的教学提出如下几点建议:
在引言部分强调编译课程与其他课程的关系,重点
说明编译程序在整个计算机系统中的作用和层次地位。需要说明的是,教师不应只强调编译程序自身的地位和作用,还要将其放入图1所示的背景中,使学生能够理解编译程序在从语言到程序执行过程中所处的位置和作用,加强对计算机专业大背景的认识。
在运行环境、代码生成和优化部分,教师应结合操作系统和计算机体系结构内容进行讲解,使学生能更好地理解目标代码格式、函数调用方式、基于栈的存储管理、代码优化的原因和目标等概念。
例1:对可优化的简单程序源码,使用同一编译程序多次编译,每次编译时指定不同的优化级别,通过分析编译程序生成的汇编源码比较生成的可执行程序运行性能,向学生解释编译程序在编译过程中实施的优化措施,说明优化的目的和效果。
例2:针对最简单的C语言HelloS320 C6000系列)及其调试模式下指令的执行过程,说明针
对具体计算机系统结构进行编译优化的必要性和重要性。
建议针对目前常用的系统平台设计小型完整的实践课程,实践内容应适量涉及体系结构和操作系统的相关内容。针对常见的处理器架构和操作系统设计实践课程,可以使学生在实际的系统中观察到实践结果,通过实际操作和验证增强感官认识,对所学知识融会贯通。
例:针对学生熟悉的程序设计语言、经常使用的操作系统、常见处理器架构,设计简单完整的实践课程。教师提供能够处理一小部分语法子集的完整编译程序,供学生学习,作为实践过程的参照。学生可以将一小部分没有实现的语法子集作为实践任务,完善已有的编译程序,实现从词法分析到代码生成的各部分功能。最后应能使增强的编译程序在现有的系统平台上运行,编译源码文件并生成可运行的应用程序。
4结语
通过调查目前计算机核心专业课程教与学的实际情况,我们发现各个课程的教学相对封闭,因此提出了以编译课程为切入点,强化专业知识的融会贯通,强调加强编译课程与其他课程内容的交叉联系,并从必要性和可能性等方面进行了论述,最后对具体教学内容提出了几点建议,希望能够抛砖引玉。