理论教育 对C程序设计课程的思考

对C程序设计课程的思考

时间:2023-12-07 理论教育 版权反馈
【摘要】:对C程序设计课程的思考武汉东湖学院计算机科学学院吴佳芬武汉东湖学院计算机科学学院2011级计算机应用技术李志伟本文主要讨论了C语言是否还应该作为计算机专业的教学语言存在。如果“是”,那么当前环境下的C语言程序设计课程的教学应该关注什么?第一种是以C语言为中心,关注的出发点是语言的各种结构和它们在程序中的使用,这种方式称为从语言到程序的过程。

对C程序设计课程的思考

对C程序设计课程的思考

武汉东湖学院计算机科学学院 吴佳芬

武汉东湖学院计算机科学学院2011级计算机应用技术 李志伟

本文主要讨论了C语言是否还应该作为计算机专业的教学语言存在。如果“是”,那么当前环境下的C语言程序设计课程的教学应该关注什么?应该与过去的C语言教学有什么不同?本文对这些问题进行了回答和讨论。

一、背景

C语言是1970年代开发的语言,在目前使用比较广泛的语言里已属老字辈。今天已有许多更新更时髦的语言,比如直接作为C的后继的C++、Object-C,希望作为改良版的C++,面向对象的Java、C#,特别是网络应用系统方面占据重要地位的各种脚本语言,例如Perl、Python、Ruby等。有了这么多新的语言,为什么C语言仍值得关注?

二、为什么讨论C语言

从实际看,C语言是长期以来一直被最广泛使用的编程语言。图1是TIOBE开发语言排行榜2013年的最新统计数据,它反映了10种使用最多的编程语言最近10年的变化情况。

img14

图1

虽然C语言产生较早,但C语言仍然在软件领域占据着不可替代的地位,其主要原因有以下几点。

(1)大量现有的基础软件系统或软件模块,它们的无穷无尽的开发、修改、维护工作的需要。

(2)各种网络基础软件仍旧采用C语言编写。

(3)近年来蓬勃发展的嵌入式系统的应用开发。从图1可看出,从2011年开始,C语言的使用又呈现出迅速的上升,并且一度超过了Java语言的使用。

显然,未来对具有精深的C语言程序设计技术人才的需求在相当长一段时期内都不会停息,中国也必须培养一批这样的技术专家,以支持软件产业的大发展。从另外一个角度看,正是由于C语言出现的时间早,目前很多正在使用的系统就是由C语言开发,C语言要为今天计算机系统的许多安全性问题负责。如果不理解C语言,人们很难理解计算机系统的安全性问题和安全漏洞,不知道如何防止它们,或是在发现安全性漏洞之后如何修改它们。那么,想要未来的计算机系统做的比现在更好,计算机工作者必须深入理解和掌握C语言。

从教学的角度看,C语言是很多高校计算机相关专业的必修课程,因为C语言作为教学语言有其自身的优点。

第一,学习可以循序渐进。学生了解很少的东西就可以开始编写程序,通过实际锻炼逐渐理解程序设计的真谛,程序设计也只能通过实践才能真正学会。

第二,它基本反映了基于函数、数组和结构的面向过程程序设计的特点,包含能支持基本程序设计课程的主要机制。

第三,它能比较好的反映计算机的特点,例如数据的结构、计算的复杂性等,有助于帮助学生理解计算机和计算的本质。

第四,它能很好的支持计算机专业的后续课程。

但许多人也认为C语言缺点不少。

第一,程序设计中经常涉及较多的细节,因此往往要做很多事情才能写出一个功能比较简单的程序。

第二,语言里有许多陷阱,容易写出表面上能运行但实际上包含一些隐藏错误的程序。而编译程序在帮助检查程序错误方面的功能不够强,许多实际上的错误检查不出来。(www.daowen.com)

第三,没有运行时检查支持,程序运行可能不报错,但运行中早已出错,得到的结果完全不对。

第四,用C语言解决问题常常有许多可能的选择方案,而作为初学者很容易感到迷惑。

总之,在C语言程序设计的教学和实践的许多方面都有着多种矛盾。一方面有社会和行业发展的实际需要,另一方面又有学习和教授上的难度。在考虑了以上认识的基础上,作为教授C语言的教师,应着重思考如何改造基于C语言的课程本身,包括课程应该如何设计,应该关注那些问题,帮助学生建立哪些认识、掌握哪些技能等。

三、语言与编程

教师选择一本C语言程序设计的教材或讲授C程序设计的课程,必须涉及两个主题,一是C语言各方面的功能和机制、形式和意义等;二是程序设计、数据和流程控制,控制和数据抽象以及思考、设计、组织程序的过程和技术等。这就出现了两种组织课程材料的可能性。第一种是以C语言为中心,关注的出发点是语言的各种结构和它们在程序中的使用,这种方式称为从语言到程序的过程。第二种则是以程序设计为中心,关注的是问题分析和分解、解决问题过程的设计,C语言的各种机制在描述这些过程中的作用,这种方式称为从问题到程序的过程。

以语言为纲组织材料,很容易陷入对语言细节的过分关注,从而导致书籍中热衷于讨论C语言中各种奇特的写法,过多讨论错误的程序、语言机制的错误用法。其实这些东西在程序设计中很少会出现或根本不应出现。以程序设计为纲组织材料,是以解决程序设计中典型问题为线索,着重关心C语言中最重要、使用最多、最有价值的机制,关注最常用、最清晰、最不容易写错的编程范式和习惯,关注最常见的错误认识和错误写法。

针对这样的问题,笔者认为,C语言课程及相关的教科书应该以程序设计为主干来进行组织,并在教学中遵循以下几点原则。

(1)使学生尽早开始编程,在实际操作中学习程序设计,逐步深入地掌握思考、设计、组织程序的方法和技术。

(2)先讨论C程序设计中使用最多、最规范的结构和技术。如开始只介绍最常用的类型int和double,然后根据情况逐步介绍使用较多的运算符、最常用的控制结构。

(3)应该把函数的定义和使用尽可能前移,在后续的讨论中反复强调函数在C语言编程中的重要作用,以及在设计程序过程中抽取和定义函数的技术。

(4)把C语言里比较复杂、较难理解、使用很少、不规范的细节隔离出来,在介绍时给以分析或贬斥。

四、功能与结构

编写一个程序,最基本的是关注程序的功能。在初级编程课程中,对习题、上机练习、试题的主要要求就是功能正确,进一步的要求则是程序的格式、标示符命名规范等问题。但是,从培养有发展潜力的计算机专业工作者的角度看,这些要求是不够的。计算机专业工作者需要思考和努力解决的重要问题之一是控制我们的产出品(程序、系统)的复杂性,否则我们将不可能做出有价值的、复杂的系统。

如何控制程序的复杂性?现代科学技术提出的方法是通过分解和抽象。该方法同样体现在C语言中。例如在C语言的语句层面上,通过顺序复合把复杂工作分解为一系列较为简单的工作;通过条件分支,把整体的处理分解为一些互不相交的情况分而治之,每个处理要考虑的问题都会变得相对简单;通过循环,把复杂问题的处理分解为顺序进行的一系列类似处理等。语句层面的分解非常重要,但还远远不够,因为只在语句层工作,就只能始终在语言的最低抽象层工作,无法引进高层抽象、新的概念。

主流程序语言的发展主要就是提供了各种组织程序的机制,例如面向对象语言里的类,还有一些语言里的更高层的程序组织机制,如C++中的命名空间、Java中的包等。要开发大型的程序,必须用好语言中的各种组织机制。没有良好的组织,大型程序或者根本不能完成,或者要付出更高的代价和更多的时间。

因此,在程序语言的初级学习阶段,就应该理解程序组织的重要性,包括养成正确的编程习惯,建立时刻关注程序分解和抽象的意识,学会用这样的方法思考程序问题,初步掌握在各个层面上分解和抽象的技术。由于C语言的抽象机制较弱,最主要的机制只有函数,那么函数的学习和使用就更为重要。

合理的程序设计课程教学必须把函数的概念提前,并在课程和练习中反复强调,并特别要注意以下几点:第一,函数不应该是学习了各种基本编程机制之后的补充,虽然现在很多教科书仍旧是这样安排和组织;第二,初学者容易忽视函数的重要性,包括教科书的编写者;第三,函数抽象和定义不是短期内就能熟练掌握的技巧,需要反复地学习和实践,并与C语言里的各种机制交叉碰撞。只有掌握了分解和抽象思维方法的学生,才能更好的掌握计算的真谛,才能更好的适应后面的学习和工作。

在实际的教学中,学生并不需要学习很多东西教师就可以介绍函数的概念了。比如最简单的C程序就表现了函数的基本结构;只要介绍return语句,就可以写出一步计算的函数;定义一些简单的输出函数,直接调用printf等。在没有介绍控制结构之前就可以用这些例子介绍函数,给学生建立初步印象,并让他们做一些简单的函数定义练习。在后续的讨论中,要不断加深学生对函数的理解,直至给出函数和基于函数思考的完整讨论。

此外,教师不仅要教学生能写出程序,而且要教他们写出好程序。只有学会了如何写出好的小程序,才有可能写出大程序。“好的C语言小程序”概念包含以下几个层次:命名和正确缩进;结构化控制语句的使用;良好的函数分解和抽象。应该让学生理解什么是结构良好的程序,并有能力做出这样的程序,理解程序中的信息组织、信息局部化和屏蔽的重要性,在思考和设计程序时知道如何关注这方面的问题。

五、结语

本文从为什么讨论C语言、语言和编程、功能和编程三个方面对C程序设计课程进行了思考,提出了各个方面应关注的问题。囿于篇幅限制,本文对程序开发、修改和维护方面,正确与可靠性方面,安全性方面的思考未叙述,希望能在续篇中予以讨论。

免责声明:以上内容源自网络,版权归原作者所有,如有侵犯您的原创版权请告知,我们将尽快删除相关内容。

我要反馈