软件的哲学思维(转贴)
一.什么是软件
什么是软件,软件的本质是什么?
软件是思维的产物,是人类脑力劳动的结晶,是人的创造物.
软件的本质是思想,它反映了人们对客观世界的认识.
软件是人对自然界,对社会,对人自身认识的反映.
软件分为有形部分和无形部分.
软件的有形部分,是指软件的可见,可闻,可论的部分.软件的无形部分,是指超出这
些有形部分的部分,不可见,不可闻,不可论.
软件的有形部分,是软件的各种具体表现形式,包括软件文档,程序代码,二进制代
码,用户界面,输出报表等.软件的无形部分,是软件的内部逻辑,是软件本身所包含
的思想.
有形的部分是现象,无形的部分是本质,有形部分和无形部分之间的关系,是现象和
本质之间的关系.
思想是软件的核心,其他部分只是思想的具体表现形式而已.在软件的不同阶段,表
现为不同的具体形式,例如从需求文档转化为设计文档,只是软件的思想从一种形
式转化成了另外一种形式.变化的只是其外在形式,而不是其本质.
思想是无形的,所以不可见,不可闻,不可论,它只能被人理解,顿悟,感觉,要真正理
解软件,就要通过其有形部分来理解其无形部分,要透过现象看本质,在这个过程中
需要使用感性的逻辑方法而不是理性的逻辑方法.
二.软件的基本矛盾
软件的发展过程,就是矛盾的发展过程,在此过程中,同样存在各种各样的矛盾.软
件在矛盾中发展,在矛盾中变化.这些矛盾包括:
人与计算机之间的矛盾
计算机是人的创造物,无论硬件还是软件,都是人类劳动的结果.人的创造力和想象
力是无限的,而计算机是没有创造力,没有想象力的.计算机,无论它是怎样庞大一
台机器,无论它的运算能力有多大,它的能力是有限的,即使把全世界的计算机都加
起来,其运算能力也是有限的.当人的要求和希望超越了计算机的实际工作能力时
,矛盾就表现出来,这时,计算机要么响应速度降低,要么干脆崩溃.
软件和硬件之间的矛盾
没有风,草不动;没有软件,硬件是没有用的.
计算机又分为硬件和软件两部分.硬件是计算机的肉体,软件是计算机的灵魂.硬件
的具体工作能力是固定的,而软件是变化的,发展的.硬件和软件之间的矛盾,具体
表现在硬件工作的不确定性,随机性,以及软件编程导致的硬件失败上.前者可以用
量子力学和测不准原理来解释,后者则是人的因素所造成.
应用软件和支持软件系统之间的矛盾
应用软件,是指项目具体开发的软件部分,支持系统,是指其他的软件系统,包括数
据库,操作系统,中间件等非具体开发的软件部分.两者之间的矛盾,具体体现在对
系统资源的争夺,对系统响应的要求上.例如,就最基本的客户机/数据库服务器来
讲,如果从客户机的角度考虑问题,自然希望数据库服务器的响应越快越好,可是从
数据库服务器的角度来考虑,由于要为多个客户提供服务,必须进行调度和排队,矛
盾就这样体现出来.
开发商和用户之间的矛盾
开发商和用户之间的矛盾,主要体现在对项目的不同期望上.开发上希望功能越简
单越好,付钱越晚越好,用户则希望功能越全面越好,付钱越晚越好,这个矛盾产生
的根本原因,是因为双方所处的位置不同,看待一个问题的角度不同,所以矛盾本身
贯穿于软件开发的全过程,直到双方的这种合作关系结束为止,矛盾可能会激化,也
可能会隐藏起来,也有可能会以转化为另外一种矛盾的形式表现出来.
管理者和开发人员之间的矛盾
管理者是指开发商的管理者,开发人员是指隶属于开发商的所有开发人员.管理者
和开发人员之间的矛盾,也是由于双方所处的位置不同,所以看待问题的角度不同
,得出的结论也大相径庭,具体表现在对软件技术的选择上,管理者倾向于保证项目
的成功,选择已有的技术和方法来完成项目,不求有功,但保无过.开发人员倾向于
提高自己的技术水平,选择新的技术和方法,刻意进取,不考虑后果.在对待开发的
费用上,管理者力图节省开支,提高效益,所以控制人员规模,开发人员则力求增加
人员,减轻自己的工作压力.正是由于存在这样的难以调和的矛盾,所以对于中层管
理者是一个巨大的挑战,他们必须在完全相反的意见中间达到妥协和调和,既让管
理者满意,又让开发人员满意,所以项目经理的角色是一个难办的角色.
开发人员之间的矛盾
开发人员之间的矛盾,是指由于开发人员处在不同的角色上,所以他们之间的要求
经常是相互制约,相互影响,相互矛盾的.例如,设计人员希望需求分析人员提供尽
可能详细的分析调研文档,而需求分析人员则倾向于将问题简单化.设计人员希望
编码人员完全执行自己的设计要求,不要加入自己的发挥,而编程人员则倾向于将
自己的个性融入到代码之中.测试人员希望编程人员提供尽可能详细的接口说明进
行测试,而编码人员则厌恶在编码之余写一些他们认为没有用处的文档.这些矛盾
的根本原因,是因为所处的位置不同所造成的.这种矛盾,是项目管理人员需要处理
的最主要的矛盾,也是软件开发的最基本的矛盾.
应用系统和外界环境之间的矛盾
这个矛盾是指应用系统本身必须符合的法律,社会,伦理,习惯等特征.比如财务软
件必须遵守国家的财务制度,可是这些外部的制度是在不断变化的,而软件本身是
相对固定的.这个矛盾在一般系统中并不明显,在某种情况下会变得特别尖锐甚至
导致系统的失败.
三.矛盾的发展
在软件开发的各个不同阶段,上述几种矛盾都始终存在,始终发展,只不过在某个阶
段,某个矛盾被激化,表现为主要矛盾,而在另外一个阶段,这些矛盾没有激化,处在
积累之中.当矛盾一步一步激化时,最后整个系统就会发生变化,具体表现就是项目
无限期延迟,人员变动,甚至项目完全失败.当矛盾被正确处理时,矛盾被缓解,事情
正常进行.
软件开发的主要矛盾是开发人员之间的矛盾.当他们成为一个团队共同进行工作时
,他们逐渐有了统一的意志,统一的想法,统一的思路.这就构成了软件的核心和本
质,然后通过各个不同的阶段,最后形成软件产品,完成开发的全过程.软件是人与
人协作的典范.
软件开发的负责人,一般叫项目经理,则是软件开发的灵魂人物.他需要在各个不同
的,相互矛盾的人之间进行协调,满足相互矛盾的要求,让整个事情按照其规律进行
发展,处理好上面的七种矛盾,在不同的阶段扮演不同的角色,他不仅需要了解技术
,而且需要了解管理,但最重要的是要了解人.一个好的项目经理,不一定是一个技
术专家,但他可以判断出谁是技术专家,谁说的话有道理,不一定知道各种管理理论
,但他知道人,知道人的优点,人的缺点.
软件开发中的各种矛盾,开发人员之间的矛盾是内因,是软件创造者之间的矛盾,其
他的矛盾相对于软件本身是外因,内因是变化的依据,外因是变化的条件,外因必须
通过内因来发挥作用,但又表现为其他矛盾的激化和爆发.但从问题的本质来看,是
开发人员之间矛盾的发展和表现而已.
四.各种软件思想和他们的局限性
从上个世纪七十年代以来,随着软件危机的出现和发展,人们提出了各种各样的理
论来分析,解决软件开发中存在的问题和现象.可是局限于每个人所处的环境,每种
理论都有其可取之处,也有其不可取之处,有其优点,有其缺点.但总的来说,都属于
从一个片面的角度,一个局部的角度,一个静止的角度来看待问题,而没有把软件危
机产生和软件本身的发展联系起来,没有认识到软件本身是在不断发展的,软件本
身的矛盾也在不断发展,软件危机的出现只是其现象而已,而不是其本质.或者说,
软件危机的出现不是偶然的,而是必然的.
1.结构化分析和设计的理论
这种理论的思想是,从顶向下,逐步求精,大问题分解为小问题,最后分解为一个一
个单独的模块来进行编码,再一个一个模块进行测试,最后组装起来统一进行测试
.它的局限性在于对软件本身的发展考虑不足,当软件复杂到一定程度时,软件不再
是静止的,而是流动的,这样等你把所有模块编写完成,系统已经发生变化了,这时
再希望软件正常工作,无异于刻舟求剑.
2.面向对象的理论
面向对象的思路是把每一个可分离的模块都看成一个有生命的东西,有数据,有行
为,他们相互交互来完成功能,提倡采用对象化的思维方式来考虑和分析问题,它的
局限性在于过分教条,有时把一些本来不是对象的东西强制进行对象化,有画蛇添
足之嫌,例如在java中,连整数都变成了一个对象,这样太让人迷惑了.
3.软件工程理论
软件工程的理论是使用工程化的方法来管理软件开发的全过程.借鉴建筑项目的开
发,分阶段一步一步来达到目的.它的局限性在于只看到了建筑业和软件业的共性
,都是一大堆人完成的,却没有看到两者的本质区别,一个是脑力劳动,一个是体力
劳动.生搬硬套建筑业的成功经验到软件开发上,有时会得出一些令人莫名其妙的
结论,提出一些令人莫名其妙的方法.
4.设计范式理论
设计范式是对以往设计经验的总结,总结出一些常用的标准结构方式,供人们再设
计时加以采用.它在一定程度上减轻了设计的复杂程度,但在另一方面,也桎梏了人
们的思想和创造性,不敢越雷池一步,或者只知道这样做,不知道为什么这样设计,
最后完成的设计没有统一的主线,没有统一的思想,很难做出非常伟大的软件来.
五.结论
那么,怎么办呢?答案就是,具体情况具体分析,根据每个项目的不同,选择不同的开
发策略,针对遇到的不同问题来分别进行处理,不要希望有所谓的灵丹妙药,那种放
之四海而皆准的东西,一般是没有太多实际价值的.
归根到底,软件是人的创造物,而不是工具的创造物,所有的理论,方法,范式,工具
等等,都是为了人服务的,都是为了更好的发挥人的创造性而服务的,而不是相反.
人,也只有人,才是软件的决定性力量.
参考文献
<矛盾论> <实践论>
<论语>
<孟子>
<论语>
<孟子>
<老子>
<神秘的人月>
<编程之道>
[33m※ 来源:·BBS 水木清华站 smth.edu.cn·[FROM: 202.116.42.132][m