关于超想
本站导航
邮件列表
  首页 | 本站产品 | Delphi资料 | 免费资源 | 程序人生 | 软件工程 | 网站设计 | 推荐网站
你所在的位置 -> 主页 -> 超想软件 -> 软件视点 -> 软件观察 ->详细
相关内容  
 
 
在Delphi程序中应用IE浏览器控件
DELPHI 中动态链接库的使用
利用Hook技术实现键盘监控
Delphi下汉字输入法的编程及使用
在Delphi中用拼音首字符序列来实现检索功能
在DELPHI中处理时间
Delphi 元件撰写常问问题
任意动态改变/添加网络设置中的 TCP/IP 的 DNS 地址
Delphi 3中Cookie的建立使用
Delphi4.0 开发WEBMAIL程序
用DELPHI制作留言板
 
【新品推荐】

  详细内容
 

软件的哲学思维
作者: 评价: 上站日期: 2002-05-01
内容说明:
来源:


一.什么是软件

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

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


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

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

二.软件的基本矛盾

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

  • 人与计算机之间的矛盾

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

  • 软件和硬件之间的矛盾

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

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

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

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

  • 开发商和用户之间的矛盾

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

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

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

  • 开发人员之间的矛盾

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

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

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


三.矛盾的发展

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

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

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

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

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

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

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

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

2.面向对象的理论

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

3.软件工程理论

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

4.设计范式理论

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

五.结论

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

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

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

参考文献

  • <矛盾论> <实践论>
  • <论语>
  • <孟子>
  • <老子>
  • <神秘的人月>
  • <编程之道>



 
你所在的位置 -> 主页 -> 超想软件 -> 软件视点 -> 软件观察 ->详细
  首页 | 本站产品 | Delphi资料 | 免费资源 | 程序人生 | 软件工程 | 网站设计 | 推荐网站
声明:本站内容除注明原创以外均从网上摘抄,如有侵权请指明。
  如果您对我们的网站有什么意见或者建议,请与我们联系
powered by 建站易上手- V2.0