从一条语句说起
谈谈中国的计算机程序教育问题
“for ( ;a>b?4:p>>2; c||4&a)”,懂C语言的朋友都知道,这是C语言的一个循环语句,但是这个语句的具体含义是什么,我想并不是每个学过C语言的朋友都知道的。(作者只是对VB较熟悉,所以对这个语句的含义不是很肯定,所以不解释 了,以免贻笑大方。)关于这样的语句是不是应该放在一本启蒙读物中,最近www.csdn.net上面也有一些争论,我想借这个话题,发表一下我对中国的计算机教育的看法,当然,这只是个人观点,希望能够起到抛砖引玉的作用。
谈谈中国的计算机教育问题,我想首先要从我们学习计算机的目的说起。这个问题是根本,只有在明确学习目的的前提下,我们才能清楚地了解现在计算机教育中可能存在的问题。虽然说 现在国家正在努力从应试教育转变到素质教育,但是现在很大程度上还是应试教育唱主角,计算机虽然是一门新新课程,但是也没有逃脱应试教育的框架。现在大多数人学习计算机的动机就是为了应付各种各样的计算机考试。当然,考级不是坏事,考级是对于自己的知识的一种检验,但是也有人考级的惟一目标只是获得更高的收入。我并不想对考级做任何评论,假设我们学习计算机的动机很单纯,就是掌握一门新学问。
计算机是否应该设为必修课?
要掌握好一门新技术,特别是计算机编程,我想最主要的是要对编程感兴趣,没有兴趣,我想学习的过程将会是很乏味的,效果自然也是事倍功半。而现在国家要求理、工、商学院的学生,不管有没有兴趣,都要学习编程,而且是必修课,我想,让编程变为选修课更为合理。编程是计算机应用中最最顶层的,一般我们所说的计算机应用,只是应用人们事先编好的程序,而自己编程却是一种创造性的艺术,并不是所有人都有兴趣的。
我是材料系的学生,我的很多同学对编程不感兴趣,但是我们必须要学习编程。为了宝贵的学分,很多人硬着头皮啃书,背算法,学习程序成了一种负担。考试结束后,当然有部分没有通过的人,没有通过,只能重修,重修后还没有通过,又要重修,不知不觉中,程序已经成了一种噩梦了。我有个朋友,就是这种情况,我曾经问过他为什么考不好,他很明确告诉我:没有兴趣!!当然学习是不能单凭兴趣的,但是,请大家想一想,谁敢用一个对于程序完全没有兴趣,甚至是厌恨的人编写出来的软件?既然大家都不想也不敢用,那么为什么要逼着这个人学习程序呢?
考试考完后才一个月,撇去没有通过的同学,在考试通过的同学中除了几个想考全国计算机等级的人以外,几乎所有人将编程都还给了老师!我不赞成学了就忘,但是要我记住我不感兴趣的,而且几乎不用不到的东西,那有点难度。与其过过场,还不如认认真真学点自己感兴趣的东西呢!
我们应该选什么样的语言作为编程的入门语言?
据我所知,现在全国院校大部分的计算机编程都是教 C语言。(当然工商类的可能是学习Visual Basic,上海的计算机能力考试考Foxpro,也有学Borland C 的)。C语言是现在最广泛使用的编程语言VC的基础,但是我们现在还学习C语言,而不是VC,是不是值得商榷一下呢?
在程序员中流传了这样一句话,聪明的程序员用Delphi,真正的程序员用VC。虽然我使用VB,但是对于C语言,我还是相当尊敬的。尊敬归尊敬,不过初学者是不是应该学习C,我想我的回答是否定的。C语言由于年代问题,还是那种面向过程的编程方式,而现代的编程都已经是面向对象的编程方式了,我们为什么要学习过时的东西呢?C语言诞生在20年前,由于那个时候计算机运行速度慢,软件也比较小,容易维护,所以对效率要求胜过程序的可读性要求,所以导致了C语言的语法很难,甚至是很晦涩,我想这样的语言是不适合初学者的。现在的计算机的运算环境有了飞跃,许多编程语言有着良好的可读性同时又是面向对象的,我们是不是能变通一下,将新鲜的血液输入计算机教育界呢?我认为VB是学习编程的一门比较好的语言。(但是千万不要以为它很弱小,看看Visual Studio.Net吧!!)
入门教育是以程序语法为重还是以程序思想为重?
这个问题,我也没有什么发言权,只是大家探讨一下。
程序是什么?说到底就是“顺序,分支,循环”,编程语言的一切都是围绕着这三种情况展开的,都是服务于这三种情况的!我始终认为程序学就是一门仿生学,就是模仿人类的思考解决问题的方法让计算机用它的速度去解决问题!既然这样,初学者是应该关注于如何找到一个解决问题的方法,还是去如何实现这个方法呢?这个问题换一种说法就是“初学者是应该关注程序思想,还是程序语法?”网上的一些朋友是这样说的:
“程序设计思想是一个初学者最该搞清楚的问题,他们需要知道什么是程序,如何才能把语句‘拼凑’成程序。过多的语法细节只能让初学者迷惑。
如果学程序设计之初就建立了对复杂语法和“变异”语法的敬畏感是非常可怕的。
现在有些编程的书,在语法讲解上是很高深的。我很佩服学习者的学习能力,也很为学习者担心,因为他们很有可能陷入“语法高手”的误区,也就是只关心语法的复杂和华丽,并且追求程序的最“不可读性”。
我认为入门教材应该尽量少涉及复杂的语法,因为可以证明,程序设计语言中的很多语法是冗余的。也就是说,应该让初学者先接触一个尽可能小的语法子集,在这个语法基础上,尽量多讲编程方法和工程方法。
复杂的语法不仅对于初学者是有害的,对于程序员害处更大,语法的复杂程度和程序的可读性成反比。
过分注重语法细节,会忽略程序的思想.特别是初学者,最紧要的是尽快理清脉络,有一个高屋建瓴的概观。”
“一门语言主要就是学他的语法,如果没有严格认真的学习语法,写5个语句的程序要调试半天才正确通过编译,这样学了也等于没学,只能炫耀说自已学过**语言,而根本不敢上机写程序。因为他不知道用什么关键字和怎样表达。
想想现在这样多语言的编程思想大都相同,不相同的就是各个语言的写法。
如果要学编程思想不是一本“入门”的书就能讲清楚讲完整,即便是讲了许多编程思想读者未必就能消化吸收掉。因为他们根本就没有编程的实际经验。你说对于不同功能的语句段要分块来写,读者就会想用得着这样麻烦吗?写在一起又简单又节省代码,输入的结果还不是一样,然后不削一顾继续练习着他的一根肠子通到底的程序。(也许不是绝对的,但是大部分人才开始接触程序设计的时候都有过这样的矛盾。)
编程思想形成的过程是在实际程序设计中和对照书本中来总结、提练、开发的过程。对一本入门的书要侧重编程思想这要求太苛刻了也是不现实的。
对于一开始学习就要学编程思想,就要学OOP技术的人是站着说话不腰疼的人。最后让读者云里雾里什么也没学到。承认我们学习的最终目标是编程思想。但是不要忘了千里之行始于脚下,只有打好语法的根基后,才能想什么写就怎么写,以后在实际写作中再来提高自己的编程思想也不晚。如果为写一个输出语句的格式翻遍整个书也没找到话,那就完了。即使你掌握了再多再有用的编程思想也是没有用的。”
看了上诉两种不同的发言,我想这个问题要一份为二看。打个比方说吧,编程有点像是造房子。造房子的过程,就是先请建筑设计师画个设计图,然后请工人师傅按照设计图建造房屋。一般设计师不会亲自动手去造房子,但是懂一点建造房子的知识;而工人师傅只是按照图纸建造就可以了,并不要理会图纸的设计理念。程序思想就是如何画设计图的学问,程序语法就是如何建造房子的学问;不同的是,程序员往往同时扮演设计者和建造者的角色。有的人立志成为设计者,有的人只是想当建造者。在实际生活中,建筑师先学的是设计,然后再通过具体的亲手实践过程不断完善设计。当然一个好的建造工人如果有好的创意,也能成为好的设计者,但是他要付出的努力要大大多于先学习设计的人。
现在的印度,他们用这样的方法写软件:主要的软件工程师负责“画格子”,安排软件的大体结构和确定各个功能模块,然后请一些年青人来“填格子”,将各个模块具体的代码完成。初学者,可能只要能“填填格子”就行了,但是如果你的目标是成为“画格子”的人,从编程思想开始,我想比较好!