软件与哲学

一.什么是软件

什么是软件,软件的本质是什么?


软件是思维的产物,是人类脑力劳动的结晶,是人的创造物.
软件的本质是思想,它反映了人们对客观世界的认识.
软件是人对自然界,对社会,对人自身认识的反映.
软件分为有形部分和无形部分.
软件的有形部分,是指软件的可见,可闻,可论的部分.软件的无形部分,是指超出这些有形部分的部分,不可见,不可闻,不可论.
软件的有形部分,是软件的各种具体表现形式,包括软件文档,程序代码,二进制代码,用户界面,输出报表等.软件的无形部分,是软件的内部逻辑,是软件本身所包含的思想.
有形的部分是现象,无形的部分是本质,有形部分和无形部分之间的关系,是现象和本质之间的关系.


思想是软件的核心,其他部分只是思想的具体表现形式而已.在软件的不同阶段,表现为不同的具体形式,例如从需求文档转化为设计文档,只是软件的思想从一种形式转化成了另外一种形式.变化的只是其外在形式,而不是其本质.

思想是无形的,所以不可见,不可闻,不可论,它只能被人理解,顿悟,感觉,要真正理解软件,就要通过其有形部分来理解其无形部分,要透过现象看本质,在这个过程中需要使用感性的逻辑方法而不是理性的逻辑方法.


二.软件的基本矛盾

软件的发展过程,就是矛盾的发展过程,在此过程中,同样存在各种各样的矛盾.软件在矛盾中发展,在矛盾中变化.这些矛盾包括:


人与计算机之间的矛盾

计算机是人的创造物,无论硬件还是软件,都是人类劳动的结果.人的创造力和想象力是无限的,而计算机是没有创造力,没有想象力的.计算机,无论它是怎样庞大一台机器,无论它的运算能力有多大,它的能力是有限的,即使把全世界的计算机都加起来,其运算能力也是有限的.当人的要求和希望超越了计算机的实际工作能力时,矛盾就表现出来,这时,计算机要么响应速度降低,要么干脆崩溃.


软件和硬件之间的矛盾

没有风,草不动;没有软件,硬件是没有用的.

计算机又分为硬件和软件两部分.硬件是计算机的肉体,软件是计算机的灵魂.硬件的具体工作能力是固定的,而软件是变化的,发展的.硬件和软件之间的矛盾,具体表现在硬件工作的不确定性,随机性,以及软件编程导致的硬件失败上.前者可以用量子力学和测不准原理来解释,后者则是人的因素所造成.


应用软件和支持软件系统之间的矛盾

应用软件,是指项目具体开发的软件部分,支持系统,是指其他的软件系统,包括数据库,*作系统,中间件等非具体开发的软件部分.两者之间的矛盾,具体体现在对系统资源的争夺,对系统响应的要求上.例如,就最基本的客户机/数据库服务器来讲,如果从客户机的角度考虑问题,自然希望数据库服务器的响应越快越好,可是从数据库服务器的角度来考虑,由于要为多个客户提供服务,必须进行调度和排队,矛盾就这样体现出来.


开发商和用户之间的矛盾

开发商和用户之间的矛盾,主要体现在对项目的不同期望上.开发上希望功能越简单越好,付钱越晚越好,用户则希望功能越全面越好,付钱越晚越好,这个矛盾产生的根本原因,是因为双方所处的位置不同,看待一个问题的角度不同,所以矛盾本身贯穿于软件开发的全过程,直到双方的这种合作关系结束为止,矛盾可能会激化,也可能会隐藏起来,也有可能会以转化为另外一种矛盾的形式表现出来.


管理者和开发人员之间的矛盾

管理者是指开发商的管理者,开发人员是指隶属于开发商的所有开发人员.管理者和开发人员之间的矛盾,也是由于双方所处的位置不同,所以看待问题的角度不同,得出的结论也大相径庭,具体表现在对软件技术的选择上,管理者倾向于保证项目的成功,选择已有的技术和方法来完成项目,不求有功,但保无过.开发人员倾向于提高自己的技术水平,选择新的技术和方法,刻意进取,不考虑后果.在对待开发的费用上,管理者力图节省开支,提高效益,所以控制人员规模,开发人员则力求增加人员,减轻自己的工作压力.正是由于存在这样的难以调和的矛盾,所以对于中层管理者是一个巨大的挑战,他们必须在完全相反的意见中间达到妥协和调和,既让管理者满意,又让开发人员满意,所以项目经理的角色是一个难办的角色.


开发人员之间的矛盾

开发人员之间的矛盾,是指由于开发人员处在不同的角色上,所以他们之间的要求经常是相互制约,相互影响,相互矛盾的.例如,设计人员希望需求分析人员提供尽可能详细的分析调研文档,而需求分析人员则倾向于将问题简单化.设计人员希望编码人员完全执行自己的设计要求,不要加入自己的发挥,而编程人员则倾向于将自己的个性融入到代码之中.测试人员希望编程人员提供尽可能详细的接口说明进行测试,而编码人员则厌恶在编码之余写一些他们认为没有用处的文档.这些矛盾的根本原因,是因为所处的位置不同所造成的.这种矛盾,是项目管理人员需要处理的最主要的矛盾,也是软件开发的最基本的矛盾.


应用系统和外界环境之间的矛盾

这个矛盾是指应用系统本身必须符合的法律,社会,伦理,习惯等特征.比如财务软件必须遵守国家的财务制度,可是这些外部的制度是在不断变化的,而软件本身是相对固定的.这个矛盾在一般系统中并不明显,在某种情况下会变得特别尖锐甚至导致系统的失败.


三.矛盾的发展

在软件开发的各个不同阶段,上述几种矛盾都始终存在,始终发展,只不过在某个阶段,某个矛盾被激化,表现为主要矛盾,而在另外一个阶段,这些矛盾没有激化,处在积累之中.当矛盾一步一步激化时,最后整个系统就会发生变化,具体表现就是项目无限期延迟,人员变动,甚至项目完全失败.当矛盾被正确处理时,矛盾被缓解,事情正常进行.

软件开发的主要矛盾是开发人员之间的矛盾.当他们成为一个团队共同进行工作时,他们逐渐有了统一的意志,统一的想法,统一的思路.这就构成了软件的核心和本质,然后通过各个不同的阶段,最后形成软件产品,完成开发的全过程.软件是人与人协作的典范.

软件开发的负责人,一般叫项目经理,则是软件开发的灵魂人物.他需要在各个不同的,相互矛盾的人之间进行协调,满足相互矛盾的要求,让整个事情按照其规律进行发展,处理好上面的七种矛盾,在不同的阶段扮演不同的角色,他不仅需要了解技术,而且需要了解管理,但最重要的是要了解人.一个好的项目经理,不一定是一个技术专家,但他可以判断出谁是技术专家,谁说的话有道理,不一定知道各种管理理论,但他知道人,知道人的优点,人的缺点.

软件开发中的各种矛盾,开发人员之间的矛盾是内因,是软件创造者之间的矛盾,其他的矛盾相对于软件本身是外因,内因是变化的依据,外因是变化的条件,外因必须通过内因来发挥作用,但又表现为其他矛盾的激化和爆发.但从问题的本质来看,是开发人员之间矛盾的发展和表现而已.


四.各种软件思想和他们的局限性

从上个世纪七十年代以来,随着软件危机的出现和发展,人们提出了各种各样的理论来分析,解决软件开发中存在的问题和现象.可是局限于每个人所处的环境,每种理论都有其可取之处,也有其不可取之处,有其优点,有其缺点.但总的来说,都属于从一个片面的角度,一个局部的角度,一个静止的角度来看待问题,而没有把软件危机产生和软件本身的发展联系起来,没有认识到软件本身是在不断发展的,软件本身的矛盾也在不断发展,软件危机的出现只是其现象而已,而不是其本质.或者说,软件危机的出现不是偶然的,而是必然的.

1.结构化分析和设计的理论

这种理论的思想是,从顶向下,逐步求精,大问题分解为小问题,最后分解为一个一个单独的模块来进行编码,再一个一个模块进行测试,最后组装起来统一进行测试.它的局限性在于对软件本身的发展考虑不足,当软件复杂到一定程度时,软件不再是静止的,而是流动的,这样等你把所有模块编写完成,系统已经发生变化了,这时再希望软件正常工作,无异于刻舟求剑.

2.面向对象的理论

面向对象的思路是把每一个可分离的模块都看成一个有生命的东西,有数据,有行为,他们相互交互来完成功能,提倡采用对象化的思维方式来考虑和分析问题,它的局限性在于过分教条,有时把一些本来不是对象的东西强制进行对象化,有画蛇添足之嫌,例如在java中,连整数都变成了一个对象,这样太让人迷惑了.

3.软件工程理论

软件工程的理论是使用工程化的方法来管理软件开发的全过程.借鉴建筑项目的开发,分阶段一步一步来达到目的.它的局限性在于只看到了建筑业和软件业的共性,都是一大堆人完成的,却没有看到两者的本质区别,一个是脑力劳动,一个是体力劳动.生搬硬套建筑业的成功经验到软件开发上,有时会得出一些令人莫名其妙的结论,提出一些令人莫名其妙的方法.

4.设计范式理论

设计范式是对以往设计经验的总结,总结出一些常用的标准结构方式,供人们再设计时加以采用.它在一定程度上减轻了设计的复杂程度,但在另一方面,也桎梏了人们的思想和创造性,不敢越雷池一步,或者只知道这样做,不知道为什么这样设计,最后完成的设计没有统一的主线,没有统一的思想,很难做出非常伟大的软件来.


五.结论

那么,怎么办呢?答案就是,具体情况具体分析,根据每个项目的不同,选择不同的开发策略,针对遇到的不同问题来分别进行处理,不要希望有所谓的灵丹妙药,那种放之四海而皆准的东西,一般是没有太多实际价值的.

归根到底,软件是人的创造物,而不是工具的创造物,所有的理论,方法,范式,工具等等,都是为了人服务的,都是为了更好的发挥人的创造性而服务的,而不是相反.

人,也只有人,才是软件的决定性力量


  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值