上次就说要好好看温伯格的书,今天开始看《程序开发心理学》,在这里做一点点摘录和写一点点感想(蓝色部分),权当是读书笔记吧。

读完序,给我留下最深印象的是译者的序中这么一句:“本人曾经因为侥幸发现其中(指此书)一处小纰漏,得到了温伯格先生寄来的一美元奖励,他对科学的这种严谨而坦率的态度,令人钦佩。”

 

----张亚勤院士曾经这样评价温伯格先生:他是从个体心理、组织行为和企业文化角度研究软件管理和软件工程的权威和代表人物,他有着程序员、系统事、咨询师、专业作家的多重身份。因而我先前就知道自己开始阅读的将是一位软件业大师的作品,现在又被温伯格先生的高尚人格深深打动,于是心里顿时生出了顶礼膜拜般的感情,我也毫不怀疑自己将从中受益匪浅。

 

第一章        阅读程序

 

----这一章的名称是阅读程序。温伯格认为阅读程序是了解程序员编写程序的一个关键步骤。但我认为这一章并没有具体介绍阅读程序的方法,实际上主要介绍了影响程序编写的几个因素,提出了在程序编写的过程可能涉及到的程序员心理原因,为后面的章节埋了伏笔。另一个重要的观点是,将程序开发作为一种人类行为来观察,从这个意义上来说,程序开发也是一种艺术创造的过程,同写作、作画并没有质的差别。是在特定的环境下,特定的程序员在特定的心理状况下的艺术品,其中任何一个因素的变化都可能导致艺术品的结果不同。这解释了为什么将程序开发和心理学结合起来研究的来由,因为毕竟,程序员也是人。

 

程序开发也是写作的一种形式,他和其他的写作形式没有什么两样。要学习写作,最直接的途径就提笔写作。

 

----我坚信这一点。所以我完全明白我现在的编程水平差是平时写程序太少的缘故。

记得有一次看NBA比赛,当雷吉.米勒一次次出手三分手起网破,唐蒙给他的评价是“无它,惟手熟尔”。这一场景使我时时回想起来都倍感振奋,成为我脑海中永恒的经典画面。写程序和写作一样,想写得好,没什么捷径可走。

 

程序被写成什么样子,取决于众多的因素;一旦我们真的阅读了程序,就会发现无论是否必要,其中这些代码之所以如此编写,有的是由于计算机的局限,有的是由于程序语言的局限,有的是由于程序员的局限,有的是因为历史的偶然,而有的则可能是因为规范。但是,不管究竟是什么原因是最终的软件加入了某段特定的代码,这种原因必然有其基于心理学的一面。这使我们相信,把程序开发作为一项以人为主的活动来加以研究,将会取得丰硕的成果。

 

----这也使得我相信,温伯格将程序开发和心理学结合起来研究,并不是毫无道理的。

 

关于上面所说的五个局限

1.  机器的局限:比如,如果制造主存储器的成本足够低,中间存储器就根本没有必要存在。但这只是个理想的假设,实际上,我们不得不是用磁盘等存储介质这将带来大量的程序开发工作。另外,每种设备都有其特定的时钟特性、定址模式以及存储容量。我们发现大量代码的作用,只是为了克服那些我们将可能遇到的硬件配置的不尽完美之处。

2.  语言的局限:例如,FORTRAN语言中存在大量的冗余代码,有的是因为DO循环无法逆向计数,有的是因为不允许用表达是作为跌代的增量或上下限,有的是因为数组下标必须从1开始。在其他的许多语言中,同样充斥着对旁枝末节的无聊限制。除非这些限制被去除了,否则我们可能根本不会意识到有这些限制。(温伯格说,这是一个心理学的问题,将会在后面的章节讲到,我也很期待看到后面相关内容,这里先留个悬念)

3.  程序员的限制:一是程序员可能不了解程序语言的所有功能,二是程序员可能不知道某些特定的算法,或者不能同时兼顾一个大问题的各个部分,从而有效的避免重复劳动。

----比如我第一次写程序,是一个打印乘法表的程序,不知道用for语句循环,只会直接在屏幕上打数字。这就好比小时候写作文,不知道小心翼翼这个词要比“很小心的样子”这样的描述好得多一样。

 

4.  历史遗留问题:一些代码并没有根据程序语言的最近改进而作修改,这就使得任何一段代码都可能存在历史遗留问题。而且如果某段程序运行很好,那么任何人都不大可能对它进行考察。

5.  规范:在几乎所有的程序中,总可以找到一些代码,现在的确已经成为人们所需要的功能。即使能够成功地从程序中剥离出这些核心部分,我们也不应被假象所误导,以至于认为可以在一开始就以该内核为规范。在知之甚少的情况下,程序员很难确定其最终的意图;如果在制定规范时,缺乏对计算机功能的起码了解,据此去写出搞校的代码也是很困难的。规范随着程序和程序员的发展而获得改进,写程序的过程是在特定的计算机硬件上使用特定的程序语言,由特定的程序员在特定的工作环境中,以一系列特定的历史事件为背景进行的,这些事件不仅决定了程序的形式,而且包括代码的功能。

第一章的内容就这些,先写到这里。

posted on 2004-09-12 23:49  banian  阅读(3054)  评论(6编辑  收藏  举报