日期:2008-06-08  浏览次数:20412 次

软件开发的哲学思考
(2002.01.11)   来自:计算机世界   枣庄张伟 编译  




  
译者注:这篇文章虽然年代久远(1996年写的,对于IT行业来说用‘久远’二字应该说还是十分合适的),但读过之后还是为作者的才华所倾倒,这是不可多见的一篇文章。

卡内基-梅隆软件开发学院及其它学院的研究人员用尽毕生的精力去定义一个理论学科(即软件开发理论),到后来才发现仍有很多东西比较模糊,他们对此也不隐瞒。软件开发,自从产生以来,它以迷人的风采征服了许许多多有才华的人,一些教授、专家学者及商业管理人士不由提出这样一个问题:即然软件能迷住这么多人,为什么人类无法定义它、解释它,深刻地了解它?为什么一些天才的科学家穷其一生的精力也不能把这些迷惑归纳成一种科学工程学科或行业标准?  

我们当中的大部分人,特别是商人、工程师及学术机构研究人员把计算机与软件看成一个非常普通的东西,他们用各种荒唐的方式同计算机交流,计算机对来自用户的威胁与谴责充耳不闻。软件无处不在,然而软件却常常表现为失败、罢工及不正常,这主要有两方面原因:一是程序失败,就会导致文件定义不准确,最后软件表现为罢工、不正常;二是一些软件开发主管胡乱指挥,逼迫软件应用一些华而不实的技巧来实现主管们不切实际的想法及美妙的空想。

缓慢的软件开发与互联网访问占用了人们大部分时间,尤为重要的是,这两方面在当代都容易使人上瘾。一旦上瘾,正常的人也会成为文件处理、文件上载及下载的奴隶,这种情况大都要归结为管理它的软件具有一定的缺点。这时不得不让人疑惑:我们能盖摩天大楼、能造速度很快的赛车及高性能电子产品,我们甚至能理解量子力学及亚原子,那为什么我们不能开发出高质量的软件?





【神秘背后的真相】
软件开发的本质就是基于人类思考的一种心智活动,计算机及运行其上的软件就是人类大脑活动的一面镜子,因此软件开发同样也面临心理学与精神学所固有的一些问题。众所周知,心理学的所有目的不外乎去了解人类难以捉摸的灵魂,一些医学专业人员研究这方面。软件开发与之相比,情况可能会更糟糕,因为软件开发毕竟只是人类智力活动的一个模型,它来自于人类的智力思考。不管你承不承认,智力活动只是灵魂行为的一部分。

从相当多的方面来看,软件与心理学的关系要比工程学、技术及数学的与心理学的关系要近的多,这是因为软件直接来自于人类灵魂的思索,上等的软件常常要借助于灵魂的创造性。与艺术相比,软件缺少了艺术之美;与自然科学相比,它缺少一点正规性。此外,软件永久只能是软件开发人员的心理模仿。

软件折射出软件开发者心理活动,很多因素都会对此心理活动起作用如:开发者本人、开发环境以及系统。开发者本人是指开发者本人在开发软件过程中会有一些心理活动;开发环境是指所有的计算机硬件、计算机软件及开发软件的流程;系统包括所有人、全部开发环境、零部件、组织关系以及有助于达到目的的其它事物。

软件如人一样易变灵活,它受智慧、想像力、恐惧以及希望等诸多情绪的影响。它折射出开发者的观点、对目标的理解、对客户的感情、概念的敏锐性、高深的思想、权威的尊敬等等。如果你想用计算机制造一个比较好的产品,软件开发是核心,它代表着整个系统的精髓之所在。到底是什么赋予软件产品独有的格调与感觉,按照人类的观点来说:是个性。





【毫无生气的个性】
软件有个性吗?如果你问我这个问题,我会脱口而出:当然有了。因为软件开发完工时,将会形成一套用于交流、内部分析逻辑、视音频支持及内存的一套词汇。从当代技术的观点来看,这些资源在理论上是没有限制的。问题出现在什么地方?问题就出现在由其开发者所规定的乱七八糟的规定上。软件开发人员,刚开始不受它人影响,后来随着规模的扩大加入了外来一些计算机高手,以及一个瞎指挥的部门负责人,这一切都会打乱开发人员的工作。

首先我们要指出的是词汇是必须的,不管是用于外部交流还是用于内部交流,词汇是构成思考模块的基石,如果一个人没有词汇他将无法思考,人类之所以能同冷冰冰的机器交流也在于词汇的存在。计算机能很轻易地被教会对某些词汇做出反应,它的能力是无限的。但又是什么地方出了问题?首先,虽然计算机具有能理解无限词汇的潜能,但它的人类主人通常情况下是有限制的,所以人类认为任何事情都要尽可能简单短小,这竟味着性能很高的计算机也必须委屈一下向能力不大的人类看齐;另外,如果软件拥有很大的词汇量,则它肯定会变得很大、很复杂,难于理解、开发与维护。所以虽然计算机有无限的能耐,但是也要套上开发者为其准备的金箍咒。

【创作者与创造性】
陶工就是陶罐的主人,陶罐永远不会超过陶工的能力。这个事实也适用于计算机与软件开发者的关系上,程序员永远也不可能让计算机做出超过它自己想像力的事。当然这样说并不意味着程序员不能做一些超过人性化计算机能做的事,而是指如果他自己想像不到,他也不可能让计算机来做。当然,同样的道理也适用于错误,程序员一个微小的错误(译者注:程序员一般情况下是不会想到错误存在何处,认识到了,就会改正过来,错误就没了。这就是说错误是超出程序员的想像之外的),就会让计算机做出让我们人类无法理解的事。

系统级程序员面临着很大的挑战,借助于计算机他就与神仙无异。他能做出他能想到的任何事情,计算机乖乖地听他的指挥,听从他发出的任何命令。他能够随心所欲地把他的天才、他的不为多数人所知的思想、在虚拟世界中漫游的心灵气通过他的创造性表现出来。在某一时刻,他的人性极限会再一次被突破,达到新的境界、新的高度。

尽管程序员能力很大,他的技术逐渐超过他的智力,但是不久以后,他就会发现他必须要找一份工作来养活自己。想到自己无法凭空捏造生活用品,他必须向那些能给他提供衣食住行的人低头,端人的碗就要属于人管,于是只好听从于别人的需求、所选取的颜色、别人的构思,他能做的只是按别人的要求按时出货。程序员虽然有天马行空的本事,他的生活很快就要埋没于如体力工人一样的日常琐碎之中。一个杰出的天才屈从于生活的压力,把他的创造力给一个老板或一个反复无常的顾客,屈尊做一些维护的苦差事,或者作为一个配置控制的奴隶,这一切究竟为什么?程序员为什么允许别人控制他的生活?





【商业循环】
公司决定做某些软件之后,程序员所做的工作就是让软件跳起来唱起来,测试员所做的工作就是尽力找出软件的错误,然后顾客就来买软件,特别是顾客喜欢购买的软件。但是谁告诉顾客在该买什么?顾客的购买行为受反复无常的心情驱使,他购买他所想要的东西,他所需要、或者需要的东西。谁也不知道这一切驱动这一切的动力是什么?但是商业循环就像一个陀螺一样在那儿不停地转:
开发→测试→交付使用→淘汰
在现实世界所有产品中,软件看起来具有最大的灵活性。它可以随着程序员的好恶、客户的要求、老板的指示以及臭虫的影响或长或短;它可以被扩充、被升级甚至形成循环;它的寿命可能会长达数年,也可能会短则一瞬。软件开发的周期就掌握在设计者手中,可长可短可大可广,它也有可以增加功能、被升级,甚至螺旋式上升。怎么会这么乱?

主要是灵活性导致如此混乱的情况,你想想在软件中有如此多的变量、如此多的判断点以及多得无限制的选项。如人类的思维一样,软件也必须有一个操作系统来支撑,操作系统时刻运行,一点也不能停息,忙着存储、进行逻辑运算、声音视频处理与其它部件的通信;且有些任务瞬间就可完成,但是操作系统也要过问,很快系统感到很杂乱,干脆罢工。要知道计算机与人类一样都不喜欢杂乱。

其实你越琢磨一下计算机,你越会发现计算机简直就是人类的一面镜子。在计算机中,你会发现我们人类的一些心智活动:我们一闪而过的灵光、我们愚蠢的错误,它惟妙惟肖地模仿我们人类的活动,它把我们人类的思想进行转化并输进机械性设备、电子传送装置、实实在在能判断的设备,然后给我们所需要的反馈。当然有些时候,它也许表现得不是那么完美、跑了调或者根本就是错误的。

一旦软件编写完毕,个性也逐渐显现出来。面向呆板的怪物进行编程最终不可避免地会给出一个呆板的灵魂。是要机器人式的灵魂还是天才式的灵魂?也许两者都有,但是最有可能的是一个带有怪癖特性、可笑失常的高效率的帮助者。为什么会产生这些问题?要知道我们了解我们自己的需要啊。为什么会产生如此混乱?请正视如下的事实:主人制造了怪物,而我们就是那个主人。

计算机应该比我们人类要稳定地多,因为它没有感情,它一直是客观、逻辑与正确的化身;