教改,不能只做减法了事

时间:2022-08-24 08:51:56

新的教育形势对教学改革提出了很多要求,其中一些要求集中体现到了教学课时的安排上:学生就业难,学校要开设职业规划教育课程;学生就业能力差,需要增加实训实验和实践课时;专业技术发展迅猛,需要开设相应的新课以使教育教学跟上时代的步伐,如此等等。于是,一些被部分人群认为“没用”和“用处不大”的课程或课时数被减少,或干脆被某个理由主导(例如:学生学不好,老师教着也困难)而取消。一些学校计算机专业的传统主课“汇编语言”(或“汇编语言程序设计”)就受了这样的遭遇。

1关于汇编语言的简单回顾

汇编语言(Assembly Language,作为课程,又常称作“汇编语言程序设计”,它是面向机器的程序设计语言,也是能够利用计算机所有硬件特性并能直接控制硬件的一种功能很强的计算机语言。在汇编语言中,用助记符代替操作码,用地址符或标号代替地址码,这样用符号代替机器语言的二进制码,就把机器语言变成了汇编语言。因此,汇编语言亦称为符号语言。

作为一门计算机语言,使用汇编语言编写的程序(原文件),机器不能直接识别。对应于高级语言的编译器,“汇编语言”也需要一个“汇编器”来把汇编语言原文件汇编成机器可执行的代码。这种将汇编语言翻译成机器语言,起翻译作用的程序又叫汇编程序。汇编程序是系统软件中语言处理系统软件。汇编语言编译器把汇编程序翻译成机器语言的过程称为汇编。

高级的汇编器如MASM、TASM等,为编写汇编程序提供了很多类似于高级语言的特征,比如结构化、抽象等。在这样的环境中编写的汇编程序,有很大一部分是面向汇编器的伪指令,已经类同于高级语言。如今,汇编环境已经如此高级,即使全部用汇编语言来编写Windows应用程序也是可行的。但是,汇编语言的长处还在于编写高效且需要对机器硬件精确控制的程序。

汇编语言比机器语言易于读写、调试和修改,同时具有机器语言的全部优点。但在编写复杂程序时,相对于高级语言则代码量较大,而且汇编语言依赖于具体的处理器体系结构,不能通用,因此不能直接在不同处理器体系结构之间进行移植。

“汇编语言”的主要特点是:

(1) 面向机器的低级语言,通常是为特定的计算机或系列计算机专门设计的。

(2) 保持了机器语言的优点,具有直接和简捷的特点。

(3) 可有效地访问、控制计算机的各种硬件设备,如磁盘、存储器、CPU、I/O端口等。

(4) 目标代码简短,占用内存少,执行速度快,是一种高效的程序设计语言。

汇编语言经常与高级程序设计语言配合使用,其主要应用包括:

(1) 70%以上的系统软件是用汇编语言编写的。

(2) 许多快速处理、位处理、访问硬件设备等高效程序是用汇编语言编写的。

(3) 一些高级绘图程序、视频游戏程序是用汇编语言编写的。

但人们经常认为汇编语言的应用范围很小而忽视它的重要性。其实,汇编语言是我们理解整个计算机系统的最佳起点和最有效途径之一,对每一个希望深入学习和掌握计算机科学与技术的人来说都是非常重要的,甚至是不能不学习的语言。

2 学习汇编语言的专业意义

长期以来,“汇编语言”课程一直是培养学生了解和直接使用计算机硬件资源的语言,一直是学习和理解其他高级程序设计语言的基础,在专业建设中也是“计算机组成原理”、“微机原理与接口技术”、“操作系统”、“接口与通信技术”和“计算机控制技术”等许多课程的前导课程,准备必要的基础知识。“汇编语言”在计算机与相关学科的课程设置中起着承上启下的作用,它对训练学生掌握程序设计技术,熟悉上机操作和程序调试技术都有重要作用。与其他大多数的计算机语言一般被用于应用软件程序设计不同,在实际应用中,汇编语言通常被用在底层硬件操作和高要求的程序优化的场合。对汇编语言知识的应用需求主要体现在:与硬件有关的嵌入式系统的底层设计、操作系统的核心部分设计、实时控制系统的软件设计、接口电路的初始化程序、外部设备的底层驱动程序以及复杂算法的优化等。

随着现代软件系统越来越庞大复杂,大量经过封装的高级语言如C/C++,Pascal/Object Pascal也应运而生。这些新的语言使得程序员在开发过程中能够更简单、更有效率,使软件人员得以应付快速的软件开发要求。而汇编语言由于其复杂性使得适用领域逐步减小,但这并不意味着汇编已无用武之地。由于汇编语言更接近于机器语言,能够直接对硬件进行操作,生成的程序与其他语言相比具有更高的运行速度,占用更小的内存,因此,在一些对时效性要求很高的程序、许多大型程序的内核模块以及工业控制方面得到大量应用。

通过学习和使用汇编语言,能够感知、体会、理解机器的逻辑功能,向上为理解各种软件系统的原理打下技术理论基础;向下为掌握硬件系统的原理打下实践应用基础。即:向上理解软件,向下感知硬件。现实生活中虽然有众多编程语言可供选择,但学习汇编,学生才能更好地深入了解计算机运行原理,为今后的计算机研究与应用打下良好的基础。“汇编语言”课程,依然应该是高校计算机及其相关专业学生的必修课。

说汇编语言是“低级”语言,并不意味着汇编语言会被更高级语言所淘汰,相反,这里的“低级”应该当“基础”讲,汇编语言仍然是程序员必须了解的语言,在某些计算机技术应用的行业与领域,汇编语言是必不可少的。

由熟练的程序员使用汇编语言编写的程序,其运行效率与性能比其他语言写的程序会是成倍的优秀,但代价是需要更长的时间来优化。因此,对比现在已经市场化的软件行业,加上高级语言的优秀与跨平台,软件企业不可能让一个团队使用汇编语言来编写所有的东西,多花上几倍甚至几十倍的时间,这还不如使用其他语言来完成,只要求最终结果不比汇编语言编写的差太多,这是市场经济下的必然结果。

但是,至今为止,还没有哪个程序员敢断定汇编语言是不需要学的,一个不懂汇编语言的程序员,通常被认为只是三流的程序员。同时,技术精湛的汇编程序员,已经脱离软件开发而挤身于工业电子编程中。电子工程师的主要开发语言就是汇编,使用C语言的只占极少部分。在一些工业公司,一个核心的电子工程师比其他任何职员待遇都高,一般电子工程师待遇则可能是程序员的十倍以上。这种情况是因为现在学习汇编的人虽然也不少,但是真正能学到精通的却不多。汇编语言难学、难用、适用范围小,虽然简单,但过于灵活。学过高级语言后再去学习汇编,比一开始学汇编要难得多,但学过汇编之后再去学习高级语言却很容易,正所谓简从繁易,繁从简难。

3从内容到方法的教学改革

虽然优点多多,但汇编语言确实是一种层次非常低的语言,说它简单方便,都是相对于机器语言而言的。汇编语言的缺点也很明显:

(1) 编写的代码难懂,不好维护。

(2) 很容易产生Bug,难于调试。

(3) 只能针对特定的体系结构和处理器进行优化。

(4) 开发效率很低,时间长且单调。

在如今的教学实践中,“汇编语言”课程确实存在着学生缺乏学习兴趣,老师开展教学困难的普遍问题,原因是多方面的。其中既有技术进步使我们有了更多更好的选择,但也有学生群体的变化、人们的志向与追求、教育教学方法的发展等积极和消极的因素。

尽管如此,专业建设、教学改革中也需要尊重和坚持其中的基本原则。一个学科的知识的基本组成也是学科发展中人类智慧的结晶,随意的加减是不负责任的,也是不符合专业精神的。

尽管与发展初期相比,计算机开发和应用技术已经有了根本性的变化,我们有了各种高级语言,有了网络应用开发的许多编程工具,很多程序甚至可以自动生成,但机器语言、汇编语言和高级语言的程序设计语言体系仍然是计算机技术的基础,也是计算机技术的重要知识体系之一。对于计算机及其相关专业的学生以及喜欢计算机的一般学生和读者来说,汇编语言程序设计肯定是需要掌握的重要的专业基础知识之一。不能了解和熟悉汇编语言知识不仅将导致学生知识结构的缺憾,也可能导致学生认知水平的降低、开发手段的缺乏。在一些应用中,汇编语言甚至是其开发工具的唯一选择。

通过学习汇编语言,学生可以了解到如何有效地设计数据结构,让计算机处理得更快并使用更少的存储空间;同时,学习汇编语言可以让学生熟悉计算机内部运行机制,并有效地提高调试能力。经验表明,调试一个非结构化程序的困难程度,要比调试一个结构化程序的难度高很多,因为“结构化”是以牺牲运行效率来提高可读性与可调试性的,这对于完成一般软件工程的编码阶段是非常必要的。然而,在一些地方,比如,硬件驱动程序、操作系统底层,或者程序中经常需要执行的代码,结构化程序设计的这些优点有时就会被它的低效率所抹煞。另外,如果想真正地控制自己的程序,只知道源代码级的调试是远远不够的。

那么,一方面是确实存在着弱点和困难,另一方面又是不可或缺的知识体系的重要成分,解决问题的方法是什么呢?

首先,不能砍!我认为,“汇编语言”作为一门计算机专业的重要基础知识和开发工作,简单地一砍了之是不能容忍的;但可以根据专业的需求,根据学校的不同培养目标,在教学内容的组织上有针对性地进行组合,有针对性的提出考核要求,例如浅的可以是“了解”、“熟悉”,深的可以是“掌握”,甚至,还可以在高年级开设要求“熟练掌握”的专业选修课程――毕竟,今天计算机应用市场中以硬件或软硬件兼施为主要特色的岗位也为学生就业提供了丰富的机会。

其次,深入开展汇编语言课程的教学改革,在教学内容和教学方法上做深入研究与实践,是解决问题的有效途径。“汇编语言”课程本身具有的理论抽象性和鲜明的应用性,决定了我们必须充分重视这门课程的实践环节。

4 教学内容的分层次设计

教育部计算机科学与技术专业教学指导委员会在其的“中国计算机本科专业发展战略研究报告”中指出:大多数院校都有比较完善的教学大纲、教学计划和进度表、教学档案等,实践着一套有效的管理规范,但同时教学内容的研究则需要加强。报告进一步指出:

(1) 有些学校计算机专业的教学内容设计存在明显的盲目性,还有些学校在培养人才定位上有明显偏差。尽管CC1991开创了一种对计算机科学教育的创造性的、理性的思考,但它并不应该成为我国所有大学计算机专业教学实践的共同追求的目标。

(2) 作为一种比较普遍的规律或者现象,学生就业通常会有较强的地域性:一个企业通常在周边地区招收较多员工,一个学校的毕业生大都就业在学校周边地区的单位。因此,学校周边地区社会发展的情况对计算机专业的教学内容的设计应该是很有参考意义的。

……

由于大多数大专院校一般都设置有计算机科学技术及其相关专业,我们至少可以认为:根据所在院校的办学类型不同、培养目标不同、所在地及其周边地区社会需求的不同,这些计算机专业的教学内容应该有所不同,这些计算机专业对于“汇编语言”这门课程的教学内容也应该是有所不同的。对于那些非研究型院校的相关专业,对“汇编语言”的教学可以集中在适度的理论知识和充分的操作实践上,通过实验与实践,了解汇编语言程序设计的基本概念和知识,激发对相关理论知识的学习兴趣,理解和掌握汇编语言程序设计的基本方法。

汇编语言涉及的技术领域宽泛,要让学生真正理解汇编语言的基础理论知识,具备将汇编语言技术应用于社会实践的能力,积极加强汇编语言程序设计课程的实验环节是至关重要的。

5把实验作为课程的主要教学手段

“汇编语言”课程一向都有上机实验的教学要求,但教学主体是课堂教学,无论是实验设计还是实验强度都远远不够,带有强烈的“验证性”色彩。然而,单凭课堂教学和一般作业,要真正领会汇编语言课程所介绍的概念、原理、方法和技巧等,是很困难的。经验表明,学习尤其是真正体会和掌握汇编语言程序设计的最好方式是对它进行充分的实践。把实验作为学习汇编语言的主导方法,为学生提供一个掌握汇编语言全新的学习方法,可以由此来体验汇编语言的知识及其应用技巧。当然,通过实验,也一定能够很好地提高学生的汇编语言程序设计能力。

根据以上思考,我们在实验内容的选择、实验步骤的设计和实验文档的组织等诸方面都做了精心的考虑和安排,尝试为“汇编语言程序设计”课程编写了《汇编语言程序设计实验教程》教材。该实验教材依据课程教学大纲,充分理解课程的大多数主教材,遵循课程教学的规律和节奏,体现了实验的可操作性,帮助学生切实把握本课程的知识内涵和理论与实践的水平。

显然,学生在“汇编语言”等课程中产生的学习困难,首先来自于他们对所学知识缺乏必要的感性认识,而我们在教学中把根据学科理论知识精心设计的实验实践环节与学科理论教学相融合,抓实验实践教学、促进学科理论知识学习,较好地解决了学生的认知困难,符合特定的学生对象,取得了很好的教学效果。

6后记

其实,“汇编语言”课程所存在的问题在计算机专业课程中有一定的代表性,例如计算机原理、操作系统原理、计算机网络等。但专业建设和课程建设不能单纯为学生兴趣和教师水平所左右,应该坚持以培养学生综合素质和提高学生就业能力为原则。

本文关于“汇编语言”课程的建设思路和教改实践,对许多其他专业课程的教学改革具有积极的借鉴意义。

参考文献:

[1] 马力妮,赵刚,夏红科.“汇编语言程序设计”课程的教学内容与实践方法的探讨[J]. 计算机教育,2009(10):106-107.

[2] 金海溶,周苏. 用实验方法改革汇编语言程序设计的教学[J]. 计算机教育,2007(1):34-37.

[3] 周苏,金海溶. 操作系统原理的教改思路与实验创新[C]//第二届大学计算机课程报告论坛论文集.北京:高等教育出版社, 2006:191-195.

[4] 周苏,王文. 大学计算机专业基础课程实验教学的改革与创新[C]//首届大学计算机课程报告论坛(西安,2005)论文集. 北京:高等教育出版社,2005:194-198.

[5] 刘均,周苏,金海溶,等. 汇编语言程序设计实验教程[M]. 北京:科学出版社,2006.

上一篇:案例法和项目驱动法在“数据库原理”教学实践... 下一篇:“C语言程序设计”课程双语教学的教学实践