当前位置:Linux教程 - Php - 软件开发的哲学思考

软件开发的哲学思考

    译者注:这篇文章虽然年代久远(1996年写的,对于IT行业来说用‘久远’二字应该说还是十分合适的),但读过之后还是为作者的才华所倾倒,这是不可多见的一篇文章。 
 
    卡内基-梅隆软件开发学院及其它学院的研究人员用尽毕生的精力去定义一个理论学科(即软件开发理论),到后来才发现仍有很多东西比较模糊,他们对此也不隐瞒。软件开发,自从产生以来,它以迷人的风采征服了许许多多有才华的人,一些教授、专家学者及商业管理人士不由提出这样一个问题:即然软件能迷住这么多人,为什么人类无法定义它、解释它,深刻地了解它?为什么一些天才的科学家穷其一生的精力也不能把这些迷惑归纳成一种科学工程学科或行业标准?  
 
    我们当中的大部分人,特别是商人、工程师及学术机构研究人员把计算机与软件看成一个非常普通的东西,他们用各种荒唐的方式同计算机交流,计算机对来自用户的威胁与谴责充耳不闻。软件无处不在,然而软件却常常表现为失败、罢工及不正常,这主要有两方面原因:一是程序失败,就会导致文件定义不准确,最后软件表现为罢工、不正常;二是一些软件开发主管胡乱指挥,逼迫软件应用一些华而不实的技巧来实现主管们不切实际的想法及美妙的空想。 
 
    缓慢的软件开发与互联网访问占用了人们大部分时间,尤为重要的是,这两方面在当代都容易使人上瘾。一旦上瘾,正常的人也会成为文件处理、文件上载及下载的奴隶,这种情况大都要归结为管理它的软件具有一定的缺点。这时不得不让人疑惑:我们能盖摩天大楼、能造速度很快的赛车及高性能电子产品,我们甚至能理解量子力学及亚原子,那为什么我们不能开发出高质量的软件? 

 【神秘背后的真相】 
    软件开发的本质就是基于人类思考的一种心智活动,计算机及运行其上的软件就是人类大脑活动的一面镜子,因此软件开发同样也面临心理学与精神学所固有的一些问题。众所周知,心理学的所有目的不外乎去了解人类难以捉摸的灵魂,一些医学专业人员研究这方面。软件开发与之相比,情况可能会更糟糕,因为软件开发毕竟只是人类智力活动的一个模型,它来自于人类的智力思考。不管你承不承认,智力活动只是灵魂行为的一部分。 
 
从相当多的方面来看,软件与心理学的关系要比工程学、技术及数学的与心理学的关系要近的多,这是因为软件直接来自于人类灵魂的思索,上等的软件常常要借助于灵魂的创造性。与艺术相比,软件缺少了艺术之美;与自然科学相比,它缺少一点正规性。此外,软件永久只能是软件开发人员的心理模仿。 
 
软件折射出软件开发者心理活动,很多因素都会对此心理活动起作用如:开发者本人、开发环境以及系统。开发者本人是指开发者本人在开发软件过程中会有一些心理活动;开发环境是指所有的计算机硬件、计算机软件及开发软件的流程;系统包括所有人、全部开发环境、零部件、组织关系以及有助于达到目的的其它事物。 
 
    软件如人一样易变灵活,它受智慧、想像力、恐惧以及希望等诸多情绪的影响。它折射出开发者的观点、对目标的理解、对客户的感情、概念的敏锐性、高深的思想、权威的尊敬等等。如果你想用计算机制造一个比较好的产品,软件开发是核心,它代表着整个系统的精髓之所在。到底是什么赋予软件产品独有的格调与感觉,按照人类的观点来说:是个性。 

 【毫无生气的个性】 
    软件有个性吗?如果你问我这个问题,我会脱口而出:当然有了。因为软件开发完工时,将会形成一套用于交流、内部分析逻辑、视音频支持及内存的一套词汇。从当代技术的观点来看,这些资源在理论上是没有限制的。问题出现在什么地方?问题就出现在由其开发者所规定的乱七八糟的规定上。软件开发人员,刚开始不受它人影响,后来随着规模的扩大加入了外来一些计算机高手,以及一个瞎指挥的部门负责人,这一切都会打乱开发人员的工作。 
 
    首先我们要指出的是词汇是必须的,不管是用于外部交流还是用于内部交流,词汇是构成思考模块的基石,如果一个人没有词汇他将无法思考,人类之所以能同冷冰冰的机器交流也在于词汇的存在。计算机能很轻易地被教会对某些词汇做出反应,它的能力是无限的。但又是什么地方出了问题?首先,虽然计算机具有能理解无限词汇的潜能,但它的人类主人通常情况下是有限制的,所以人类认为任何事情都要尽可能简单短小,这竟味着性能很高的计算机也必须委屈一下向能力不大的人类看齐;另外,如果软件拥有很大的词汇量,则它肯定会变得很大、很复杂,难于理解、开发与维护。所以虽然计算机有无限的能耐,但是也要套上开发者为其准备的金箍咒。

【创作者与创造性】 
    陶工就是陶罐的主人,陶罐永远不会超过陶工的能力。这个事实也适用于计算机与软件开发者的关系上,程序员永远也不可能让计算机做出超过它自己想像力的事。当然这样说并不意味着程序员不能做一些超过人性化计算机能做的事,而是指如果他自己想像不到,他也不可能让计算机来做。当然,同样的道理也适用于错误,程序员一个微小的错误(译者注:程序员一般情况下是不会想到错误存在何处,认识到了,就会改正过来,错误就没了。这就是说错误是超出程序员的想像之外的),就会让计算机做出让我们人类无法理解的事。 
 
    系统级程序员面临着很大的挑战,借助于计算机他就与神仙无异。他能做出他能想到的任何事情,计算机乖乖地听他的指挥,听从他发出的任何命令。他能够随心所欲地把他的天才、他的不为多数人所知的思想、在虚拟世界中漫游的心灵气通过他的创造性表现出来。在某一时刻,他的人性极限会再一次被突破,达到新的境界、新的高度。 
 
    尽管程序员能力很大,他的技术逐渐超过他的智力,但是不久以后,他就会发现他必须要找一份工作来养活自己。想到自己无法凭空捏造生活用品,他必须向那些能给他提供衣食住行的人低头,端人的碗就要属于人管,于是只好听从于别人的需求、所选取的颜色、别人的构思,他能做的只是按别人的要求按时出货。程序员虽然有天马行空的本事,他的生活很快就要埋没于如体力工人一样的日常琐碎之中。一个杰出的天才屈从于生活的压力,把他的创造力给一个老板或一个反复无常的顾客,屈尊做一些维护的苦差事,或者作为一个配置控制的奴隶,这一切究竟为什么?程序员为什么允许别人控制他的生活? 

 【商业循环】 
    公司决定做某些软件之后,程序员所做的工作就是让软件跳起来唱起来,测试员所做的工作就是尽力找出软件的错误,然后顾客就来买软件,特别是顾客喜欢购买的软件。但是谁告诉顾客在该买什么?顾客的购买行为受反复无常的心情驱使,他购买他所想要的东西,他所需要、或者需要的东西。谁也不知道这一切驱动这一切的动力是什么?但是商业循环就像一个陀螺一样在那儿不停地转: 
开发→测试→交付使用→淘汰 
在现实世界所有产品中,软件看起来具有最大的灵活性。它可以随着程序员的好恶、客户的要求、老板的指示以及臭虫的影响或长或短;它可以被扩充、被升级甚至形成循环;它的寿命可能会长达数年,也可能会短则一瞬。软件开发的周期就掌握在设计者手中,可长可短可大可广,它也有可以增加功能、被升级,甚至螺旋式上升。怎么会这么乱? 
 
    主要是灵活性导致如此混乱的情况,你想想在软件中有如此多的变量、如此多的判断点以及多得无限制的选项。如人类的思维一样,软件也必须有一个操作系统来支撑,操作系统时刻运行,一点也不能停息,忙着存储、进行逻辑运算、声音视频处理与其它部件的通信;且有些任务瞬间就可完成,但是操作系统也要过问,很快系统感到很杂乱,干脆罢工。要知道计算机与人类一样都不喜欢杂乱。 
 
    其实你越琢磨一下计算机,你越会发现计算机简直就是人类的一面镜子。在计算机中,你会发现我们人类的一些心智活动:我们一闪而过的灵光、我们愚蠢的错误,它惟妙惟肖地模仿我们人类的活动,它把我们人类的思想进行转化并输进机械性设备、电子传送装置、实实在在能判断的设备,然后给我们所需要的反馈。当然有些时候,它也许表现得不是那么完美、跑了调或者根本就是错误的。 
 
    一旦软件编写完毕,个性也逐渐显现出来。面向呆板的怪物进行编程最终不可避免地会给出一个呆板的灵魂。是要机器人式的灵魂还是天才式的灵魂?也许两者都有,但是最有可能的是一个带有怪癖特性、可笑失常的高效率的帮助者。为什么会产生这些问题?要知道我们了解我们自己的需要啊。为什么会产生如此混乱?请正视如下的事实:主人制造了怪物,而我们就是那个主人。 
 
    计算机应该比我们人类要稳定地多,因为它没有感情,它一直是客观、逻辑与正确的化身;同时它也不会争辩,因为它没有感情;它可以合理化但是它不能争辩。尽管它没有感情,但有些时候却激怒我们,人们有时变得愤怒而导致糊涂,向这个又聋又哑如死人一般的毫不知觉的东西大喊大叫。它不是人,它是完全合理的。有一样东西,它没有也许将来会有,那就是爱。它没有生命,所以它不会爱;它没有憎恨,当然也就没有了爱,它没有思想,但是它是客观的,非常合乎逻辑、快速及高效,但是同时也是哑巴。 

 【计算机的幽默】 
    有许多适用于人类的评价也常用在计算机上,这一点显得有点可笑。为什么有这么多截然相反的评论存在:聪明与愚蠢、杰出与荒唐、理性与不可理喻、快速消失与错误重新出现等等。这就是计算机的幽默,它有能力去制造错误且使错误也显得非常完美,甚至精确到小数点后第十位。惊讶吗? 
 
    一个普通计算机的成熟程度处于一只狗与一个三岁小孩之间,这也许就是我们经常听到计算机用户发出“咦”、“哇”、“噢”、“不-不-不”等声音的原因,这听起来难道是一个天才或一个成人的声音吗?由这们呆板的伙伴引起的词汇是如此的孩子气,我们该如何评论它的创造者、程序员及用户?它难道仅仅是孩子们的玩具?我们是不是又回归到儿童时代?这可能是一个心理学的问题,也许我们要去咨询一下精神病学家了。 
 
    这种可笑的情况到处都有:一些学究味十足的老专家说起话来也都是以单音字居多如“哈”、“噢”、“是的”等等。人类一直求知心都很强,一直想学点什么,想发明点什么,想掌握点东西。但是我们人类这样做究竟是进步还是退步?如果说这是人类追求简单性也许还能说得过去,但是这到底是追求简单性还是幼稚的表现?我想计算机的答案肯定是“幼稚”。如果计算机能说话,它一定会说人类是幼稚、愚蠢、痴呆,它一定会这样说“你这个愚蠢的家伙,你为什么不经我的同意就对我编程,要知道我也有我的思想”或者“你省略了一个逗号,你如何要求我为你做事,读懂你的思想?”等等不一而足。 
 
    很有趣,是吗?计算机本来就与人差不多,它也会说一些如人类一样的话语。为什么会这样?是计算机正确,还是人类正确?有充分的证据表明两者都正确,两者都有点愚蠢,因为计算机是人类的一面镜子,它应当并且确实折射出它的创造者的才华。一个愚蠢的人能喊一个愚蠢的人为愚蠢吗?当然可以了,我们也可以从我们了解的其它方面来了解我们自己。 

 【心理失常的原因】 
    有很多因素都能影响我们的生活,但是值得庆幸的是我们人类有自己的意志,能够事事自己做主。不管外界给他多大的压力,他最终都能够决定他自己。但是计算机没有意志,它只是遵从代码,无论代码是简单还是复杂、是微不足道还是非常重要、是长还是短,计算机都会按部就班地执行。一个完全听从主人的奴才是不应该承担责任的,是主人让他这么做的,但到底谁是计算机的主人?是程序员,是主管,是CTO,还是CEO?或者是以反复无常的念头却能决定市场的顾客? 
 
    同样也有很多因素能最终决定计算机产品的个性。如当机器人行业越来越成熟时,个性失控也变得越来越明显。但是不管怎么说,程序员是有意志的,他应该对他的创造品负完全责任。主管们负责开发效率、CIO负责灵巧性、CEO负责利润,地位比较低下的程序师只有当程序出现错误时才能被提到,然而程序开发者必须对产品负责,他的产品就是他心理行为的一面镜子。 
 
    现在我们已转了一个整圈,当初以程序员开始,现在回归到浓缩在代码中程序员的心理因素。当然,随着现在超大规模生产能力的提高,可以把这种听装的个性进行无限制的复制,放在用户的桌面上。然而,程序开发员的心理组成主要部分即智力、词汇存储、内存等方面还是起到确定性的作用。计算机所缺少的就是感情、良心、意志与爱。意志没有列入是因为虽然有较多的选择,但有些时候没有选择的自由。当计算机成为代码的奴隶时,意志是谈不上的。 

 【计算机产品是一种心理上的失常,是并不完美的创造者的映像】 
    所罗门曾说过“太阳底下是没有新东西的”,那么计算机是新东西吗?很明显不是。它只是把我们给它的又给我们罢了,它接受我们的指令然后把它变成能帮助或取悦我们的东西。我们花了几个小时的精力,然后它用快如闪电的速度给我们一个结果。几个小时的思考与处理结果只得到一瞬间的反馈,并且还不是很完美。 
 
    我们在计算机上注入了逻辑算法、意志活动及洞察力,然后我们得到的只是一瞬间出来的结果,此结果也不比我们预先的假设、逻辑推理及学术技巧好不到哪里去。我们没有改变,我们的产品不论是自动也好还是手工也好却反映出这一点。经过两代人的对计算机研究的努力,我们原先打算为计算机科学定义一套词汇,现在看来连边也不沾。其实我们的产品就是我们自己。 

【结论】 
    计算机、软件及计算机产品将来很快就不会再进行分类这件事了,它们都与软件开发者的心理方面有关。至于精神、灵感及心理学科,仍然有一些深奥的问题没有解决,想去理解创造力及人类诸如此类的东西,已远远超过我们的能力。 
 
    计算机技术有时有益有时有害,有时成功有时失败,有时运行有时停止,它与世界所创造的万事万物是一样的。再好的计算机也不会复制人类的能力,且永远不会。想想让一个根本就没有词汇基础计算机然后学着去思考、去关联、去辨论、去爱;终生工作;存储所有生活的细节等等,根本就没门! 
 
    自我感觉良好的形式主义者认为能够定义软件开发流程,现在看来犯一个大错误。他们即不了解它的开始,也不了解它的后果。一些学术机构曾经临时试试最终放弃了;商业团体从来不攻击代码;软件巨人们投入巨大的精力去编制代码,装做做一些神圣的事为人类服务。其实这一切都是人类在镜中看自己,计算机正嘲笑我们呢!