APP下载

论编译原理在程序设计类课程建设中的重要作用

2011-12-31徐旭东蒋宗礼

计算机教育 2011年18期

  摘要:阐述程序设计类课程群在计算机专业教学中占有的重要地位,探讨课程群中课程之间密切的关联关系,提出以编译原理课程为重心,按照专业能力培养的需要,充分利用这些关联关系,有效提升整个课程群的教学效果。
  关键词:程序设计课程群 编译原理 关联关系 效果提升
  文章编号:1672-5913(2011)18-0027-02 中图分类号:G642 文献标识码:A
  计算机程序设计(简称“程序设计”)是计算机科学与技术专业人才最基本的专业能力,计算机专业程序设计类课程群也就自然成为计算机专业教学的重心,在“实现计算机问题求解”这一最终的专业教学目标的实现过程中发挥着至关重要的作用[1]。
  一般来说,计算机专业程序设计类课程群包括“C语言程序设计”、“面向对象程序设计”、“数据结构与算法分析”和“编译原理”等计算机专业必修课及“形式语言与自动机”、“C++程序设计”等选修课程。它们以“程序设计”为中心形成了一个有机整体。而其中的编译原理课程因其涉及计算学科抽象、理论、设计三个形态,含有基本问题求解的典型思路和方法,是继程序设计、数据结构与算法分析等课程后,从系统级再认识程序、算法最恰当的知识载体,将使学生的程序设计能力得到升华,并促进系统能力的提升,这些使得该课程在整个程序设计教学中扮演着无可替代的重要作用[2]。因而,以编译原理教学为核心探索程序设计课程群教学体系的构建,对于深化教学改革、促进学生计算机专业基本能力的培养具有重要的现实意义。
  1 编译原理在程序设计类课程教学中的重要地位
  计算学科是对信息描述和变换算法的系统研究,主要包括它们的理论、分析、效率、实现和应用;计算学科的根本问题是什么能且如何被有效地自动计算。
  计算学科问题求解的基本思路是“问题、形式化描述、计算机化”。编译原理(即程序语言的实现原理)涉及的是一个比较适当的抽象层面上的数据变换,既有明确的、便于抽象的问题,又有较成熟的理论,而且在限定规模下又容易实现(设计),所以编译原理是计算机专业本科生的重要专业技术基础课程,属于教学计划中四大系列之一——软件技术系列。除了相应的知识对于计算机学科的人才培养非常重要外,其中一些基本问题的求解方法、处理问题的思路也是非常重要的,而且广泛地用于很多新的研究领域。该课程的内容对于培养学生的计算思维,程序设计与实现,算法设计与分析,计算机系统的认知、开发和利用等四大学科基本能力非常重要,是学生在程序设计、数据结构与算法等课程中受到一定的锻炼后,从系统的级别上对程序、算法的认识进行再提高。Alfred V.Aho在其名著《编译原理》的开篇曾写道“编写编译器的原理和技术具有十分普遍的意义,以至于在每个计算机科学家的研究生涯中,本书中的原理和技术都会反复用到”。即编译原理在整个程序设计教学中担负着重要作用。
  教育部计算机专业教育指导委员会明确提出了从事高级语言程序设计教学的教师应该了解语言的实现原理(即编译原理)。正是站在“培养学生计算机专业的基本能力”的高度对计算机专业程序设计类课程群的教学改革提出的指导性意见。
  2 构建程序设计类课程群教学体系
  明确了编译原理在程序设计类课程群的重要作用,我们将教学研究的视角转向课程群总体教学思路的改革上,即以编译原理为纽带建立一个由浅入深、由具体到抽象、由实践到理论、再由理论指导实践的完整的教学体系。
  2.1 通盘考量、相互渗透
  计算机专业程序设计类课程群以“程序设计”为中心形成了一个有机整体,从一定意义上讲,编译原理可以充当纽带作用。因此,为了提升程序设计类课程任课教师的学术素养,就计算机科学与技术专业的教学来说,有必要要求他们了解高级语言的实现原理(即编译原理),在此基础上,组织计算机程序设计类课程群中各个课程组(其中包括“C语言程序设计”、“面向对象程序设计”、“数据结构与算法分析”和“编译原理”等课程)教师展开教学研讨,深入剖析与研究各门课程在专业知识领域上的相互衔接与渗透关系、挖掘其教学上的逻辑关联。根据以往的教学实践并结合教育心理学理论分析、掌握学生的需求,切实把握好课程的教学难点所在;在教学内容上强调“前后衔接、相互渗透”,力求实现程序设计类课程间的“无缝连接”,使学生的专业能力不断提升。
  2.2 统筹兼顾、难点分散
  依据程序设计类课程的知识结构和教学规律,我们在教学中进行大胆的改革实践。如在“高级语言程序设计”的教学中有意识地渗透语言实现的原理与方法的若干知识点(即“编译原理”的内容) [3],例如,将编译器中栈式存储管理的概念提前简要地介绍给学生,可使其从语言实现机制的高度理解局部变量与全局变量的差别,这必将使学生更容易理解与运用高级语言从事程序设计,达到“知其然又知其所以然”的教学目标;而在“编译原理”的教学中深化“高级语言程序设计”及“数据结构与算法分析”的若干核心内容,又可以使学生从语言实现的角度更明智地选择数据结构,并按照问题的实际需求运用高级语言进行程序设计。这体现了教学
  方法上的“统筹兼顾、难点分散”理念,达到润物细无声的效果。对于计算机专业学生而言,尽可能早地接触、了解高级语言的实现原理与技术特点必能加深其对本专业魅力的体会,激发学习动力,使其更多地获得成功的体验。
  3 建立逐次递进、从易到难的系列化实践环节
  编译器实现技术是一大宝库,完成其不同功能的算法的实现本身即可满足几乎所有程序设计课程的实践需求[4]。一方面以编译器的实现为背景可以实践几乎全部在数据结构与算法分析课程中学到的主要数据结构与算法;另一方面,编译器设计中使用的问题求解方法、处理问题的思路被广泛地用于自动数据处理(转换)及其他一些新的研究领域。因此,我们可以根据编译器设计的需求,并结合计算机最新的应用背景为程序设计课程群设计出一整套“逐次递进、前后呼应,由浅入深、从易到难”的系列化实践教学环节(包括课程设计),一改以往那种以各门课程围绕着局部知识点、课程间互不相关的分散实验模式[5]。逐步完成对学生实现“从实例计算到类计算、从简单程序设计到复杂系统设计”的培养。
  4 结论
  在计算机科学与技术专业学生的教育中,程序设计类课程群占有重要的地位,它在培养学生算法分析与设计、程序设计与实现、以及系统能力中起到关键作用。所以,在各种类型的计算机专业人才培养中,也许缺少一门两门,也许有的课程以其他的面目出现,但这个系列课程是必须的。我们注意到,在过去的教学中,大家虽然关注到了这些课程之间的联系,但是并没有深入地探讨如何更好地利用这些联系。我们认为,更好地利用这一联系,将会大大提升这个课程群的教学效果。要想更充分地利用这种联系,不仅需要课程群的负责人能够更深入地了解这些课程、更远地看待这些课程的教学,还需要课程群的教师们能够站在人才培养的高度上看待课程教学,真正摆脱以课程为本思想的影响。
  参考文献:
  [1] 中国计算机科学与技术学科教程2002研究组. 中国计算机科学与技术学科教程(2002)[M]. 北京:清华大学