软件危机理论上是无法解决的
也许这个题目有些危言耸听
可能很多朋友认为这个罐头又出来妖言惑众了
反正今天公司不忙,闲得出来扯两句
软件危机的根本在于复用
而复用的原因在于我们拥有各种各样不同的设计
设计之间的差异在于不同的设计是有不同的假设作为前提的
是不是有些头晕,举个例子,就用水晶剑锋所用的建筑的例子(我很喜欢这个比喻,码代码和造房子是一样一样的阿。都分建筑工人和设计师以及程序员和构架师)
两幢房子的不同,它的根本在于设计不同
而设计的不同是源于对他功能的假设
为什么有别墅,有大厦,就是因为对他们功能的假设不同
就好像别墅不可能住下1000个人,原因就是他们最初设计的假设前提就已经定好了
而它们所用的建材
也都因为最主旨的假设不同而不同
别墅可能用空心砖,而大厦采用的是钢筋混凝土
这个层面上的复用,就是不可能的了
如果要再往下一层来复用
那就到了砖头和混凝土的原子分子了
这个层面就好像到了计算机的0和1
确实通过0和1能构建任何软件
但是这样来写一个现代软件,恐怕是任何人都无法接受的了
各种各样的软件同样都是有不同的假设作为前提的
而各种库一样就有了不同的假设作为前提了
我们编写实际程序中
常常发现他人的库要不就是缺少某些自己想要处理的内容
要不就是过于庞大导致复用困难
导致了我们有些时候不得不又从头写一遍自己的库
其最根本的原因
就是因为当初库的设计者的假设和我们是不同的
而要构造一类没有任何假设前提的库
就好像和上帝创造整个世界一般包罗万象
这又基本是不可能的
所以软件危机只能从一个角度来缓解
而无法从根本来解除
除非我们始终只做一件事情
否则是不可能排除各种各样设计的不同目的和假设的
写的有些乱,当中思路断了好几次。大家勉强看吧
问题点数:100、回复次数:137Top
1 楼5zero(秋风)回复于 2006-08-15 11:53:25 得分 0
以后...
软件会怎样发展?
硬件会怎样发展?Top
2 楼cime63(流浪的孩子)回复于 2006-08-15 12:20:51 得分 0
软件危机从60年代提出,到现在也没有太大的进展Top
3 楼jixingzhong(瞌睡虫·星辰)回复于 2006-08-15 12:39:33 得分 0
软件危机 危机来源于很多方面...
要说 软件危机的根本在于复用 这么个观点我看有待商榷 ...Top
4 楼chenhu_doc(^0^纯一狼^0^ 看书看到大笑,直到不能自已)回复于 2006-08-15 13:47:59 得分 0
鱼和熊掌不可兼得!Top
5 楼redleaves(程序员)回复于 2006-08-15 15:31:32 得分 0
俺觉得,主要问题是软件大到一定程度,就几乎没法明确的把它做出详细设计(主要是时间不允许,再加上个人能力有限),而现在的软件,从开始设计,就注定了它的需求在不断的变化,就更加剧了这一问题.再加上软件设计的智力因素,工作的效果受到人这个因素的影响.所以软件工程完全不同于传统的工程.要像传统工程那样严格量化时间,进度,是完全不可能的.Top
6 楼dead_of_winter(寒冬)回复于 2006-08-15 15:38:20 得分 0
随着我们对自然现象和实际问题进一步的分析
并且进行逻辑上的整理
制度和协作方式的改善
至少可以避免重新发明轮子这种事情。Top
7 楼wanderfox()回复于 2006-08-15 15:39:56 得分 0
码代码和造房子是一样一样的阿
顶一下这句Top
8 楼codename11()回复于 2006-08-15 17:43:09 得分 0
所以,unix的设计思想是吓人的超前!一个模块只做一件事。通过模块间的交流来做很大的事!这是由低到高的设计思想!
而面向对象的思想却是做一个无所不包的东西,再层层细化,进而到具体的对象,这是由高到低的思想!
随着事物的复杂度的加深,这个无所不包会越来越困难!也就是说这个“假设”会越来越困难!
比如在实现一个具体的小狗时,用oo的思想,会先有一个动物类,再在其基础上有一个哺乳类,然后是犬类,最后到具体的snoopy狗这一对象。这个东西在开始时,你就需要一个假设,即“动物类”,肯定是有细胞组成的,有生命迹象的东西,在你以后的设计中你必须在符合这个假设的前提下复用他,而当你设计一个机器狗的时候,这个假设就不成立了,这个类就无法用了。也许你会说用机器类啊,那我要是设计一个石头狗呢?用石头类?木头狗呢?木头类?有无数个种类的狗,就要无数个类?这就是“假设”的弊端,你根本无法“假设”出所有东西!也许有人会说可以多重继承啊,是的,但那时问题的复杂度就太过了,反而得不偿失!
既然无法假设,那我就索性不假设!我先做一个电子和质子,电子就是电子性质,质子就是质子的性质。我不假设你用他们来合成什么原子。然后有了原子,我不假设你用它来做什么分子,然后不假设你用它做有机物还是无机物,然后不假设你用它来合成细胞还是什么,。。。。最后我可以得到石头狗,肉狗,木头狗,xx狗。。。
道法自然!普通的细胞可以构成多彩的生命,细胞也不知道自己将来会成为什么生命,他只做好一个细胞应做的事情。
面向对象,是一个美丽的谎言,他只是在表面让接口更友好,而不能解决整个纵深体系的问题,当然,也许是人们误解它了。
就像 c 之父 D.M.Ritchie 说的,“oo让我觉得在界面上花的时间太多,在具体的问题解决上却不够,分散了我不少精力。”Top
9 楼iamcaicainiao(老菜,长征)回复于 2006-08-15 19:20:11 得分 0
嘎嘎Top
10 楼Wolf0403(废人:独活十年~心如刀割)回复于 2006-08-15 19:21:59 得分 0
有谁记得 universee 和他的 太极 语言?把代码片段抽取出作为一个 code 概念加以复用,回归最底层,也是最可靠的复用,确实很有道理:)如果能够对这些 code 片段加以标记,使计算机能够理解和复用它们之间,以及它们与问题域之间的联系,计算机辅助程序设计应该还能进一步大幅提高软件构建效率。
至于设计……那是分析问题领域的干活,难度取决于人对自己世界的把握程度和对复杂问题所能达到的掌握程度,认命吧。
面向对象错就错在,一种设计思想却想自顶向下大小通吃……Top
11 楼codename11()回复于 2006-08-15 20:14:55 得分 0
终于看到几位有深度的朋友,我接着说:
在面对一个复杂的问题时,对复杂度层层分解,符合人类思维的规律,然而,随着问题规模的增长,这种分解的架构,变得越来庞大,形成一个规模庞大的倒立树。于是,表面上看来,这种分割,“越分越多”,大有使问题复杂之趋势,其实,这种形式上的扩展,恰是复杂度上的收缩,即问题越来简单了,致使最后,可以用少量的,标准的算法,来一个个填充。这种面向结构的设计可以看作是“形散而神聚”!
面向对象的设计,则是在面对复杂的问题时,要进行更加复杂的抽象,这与人类的认识规律相违背,但如果迈过这一关,就会有从基本类开始,次基本类,再次。。。直到具体的对象,这就形成了一个正立树。给人的感觉好像是“万物归一”,可以看作是“形俱而神散”。当然,这种更复杂的抽象,是很痛苦的,这就导致,编写好的类库是一件极其艰巨的任务。毕竟,他违背了人类认识事物的规律。
sun 把这种复杂的工作都拿来自己做,所以人们用起来感觉很好,很舒服。但 c++ 却不这么幸运了,可以说争议颇多。
楼主的观点是正确的,因为问题的复杂度是无法改变的,我们只能通过一定的方法使其可控。所以面对着越来越复杂的应用,人们总想挣脱,于是,oo 打着救世主的旗号出现了,并且看上去还真是那么回事,但事实证明,他根本没有解决什么问题,如果说有,那么它也只是提供了一个比较新颖的设计思想而已。Top
12 楼VirgoCeleste(沐沐)回复于 2006-08-15 20:18:10 得分 0
MARK一下,细听诸位高手讲解。Top
13 楼code_tin(代码罐头[看来牛魔王快做不成了])回复于 2006-08-15 20:54:26 得分 0
对于现有OO库中缺少自己功能而需要用户自己添加的
一种是比较好解决的。就是已经提供的类是自己需要的类的子集
你很幸运,碰到了OO擅长的
当时如果你不那么幸运碰到了已经有的类和你需要的类之间是相交关系的话
只能用C++提供的多重继承来解决复用问题
可是这个方法连bs自己都难说他是好是坏
基本上所有人都会说,尽量别打开这个潘多拉魔盒Top
14 楼steedhorse(晨星)回复于 2006-08-15 20:59:08 得分 0
嗯,只要没法解决,或许写代码的就可以比垒砖头的过得稍微好点。。。。Top
15 楼Wolf0403(废人:独活十年~心如刀割)回复于 2006-08-15 22:20:32 得分 0
哈哈,要是 universee 的太极真的成功了,咱就只能喝西北风了。。
纯水。高手们继续。Top
16 楼lexchou(龍子龍孫)(本人已死)(有事烧纸)回复于 2006-08-15 22:30:58 得分 0
呵呵,代码片断的复用,在C/C++中有 #include,Pascal/Object Pascal中有{$I }。很老的想法了Top
17 楼Wolf0403(废人:独活十年~心如刀割)回复于 2006-08-15 23:07:31 得分 0
这种直接插入的复用,未免太低级了。
要做,首先要做到二进制层面的复用,其次是通过元数据描述关系,最后是工具支持
Java 5 的 annotation 啊。。口水哗啦的。。。Top
18 楼sjjf(水晶剑锋)回复于 2006-08-15 23:09:19 得分 0
markTop
19 楼steedhorse(晨星)回复于 2006-08-16 09:41:37 得分 0
嗯,JAVA的跨平台的二进制层面的复用,确实挺强大的。
不过好像离题了哈。Top
20 楼windindance(风舞轻扬·白首为功名)回复于 2006-08-16 09:45:27 得分 0
markTop
21 楼ilove8(千里|你去哪里了,我等了你很久了!)回复于 2006-08-16 16:42:37 得分 0
jfTop
22 楼cber(cber)回复于 2006-08-16 17:46:34 得分 0
从来就是No Silver Bullet,软件危机这个玩意的根源来自复用貌似是有问题的说话,我更倾向于F.D.Brooks所说的来自“软件自身的复杂性”
另外,Java什么时候可以跨平台来进行二进制层面的复用?不同的OS有不同的ABI,不同的Architecture又有不同的Object Code,做到“跨平台的二进制层面的复用”是永远不可能的,Java现在做到的只是一个跨平台的ByteCode的复用罢了,还是需要JVM的JIT编译,什么时候java可以摆脱它那一大堆的jvm+jdk,我就不再歧视它Top
23 楼sjjf(水晶剑锋)回复于 2006-08-16 18:49:19 得分 0
设计模式是用来给罐头说的那一层复用的。
设计模式不是软件模式的产物,是建筑行业里面发展出来。
亚历山大的一本著作里面总结了 200多种模式。
软件行业也有几十模式,加上架构模式,估计有100左右吧.
这在很大程度上解决了设计师的重用问题。
关于砖一层的复用,我想应该是各种语言的算法实现吧。
不过亚历山大强调整体,认为砖也是整个模式的一部分,不可分割。
关于原子或者 0,1不能复用的原因是组合爆炸。
复用必须有共性,模块化,oo的抽象等东西从另外一个角度去看就是把
在既定的范围下依然存在的东西独立出来。
关于造房子的那个例子我也是拾人牙慧,呵呵,好像来自 《java与模式》。
不过推荐一本关于建筑的,关于哲学的,关于道家思想的书:
亚历山大的 <the timeless way of building >。
一本很棒的书,严重的改变了我对事物的看法(而不仅仅是软件领域)。
(即使没什么用也可以用来忽悠人,呵呵,
gof就是从那本书里面开始设计模式的思考,
不过gof忘了抄上一句,学习设计模式就是为了忘掉设计模式。
)
codename11 似乎对oo还存在芥蒂,呵呵。
你说的设计思想无非是微观还原论。雷蒙德在他的 unix编程艺术 似乎倍赏这种理论。
而且带上了个人色彩,这种理论已经被实践证明,它也有局限性,
只在小系统(是研究范围而不是我们说的操作系统)里适用。
(曾看过一个帖子,据说一个裸露的电子概念对我们来说很自然,但是解决不了一些问题,
导致提出重正化电子这个概念,这花了科学家20年的精力)
帮你google一下相关的文章,他们可能比我更具有说服力,
第一个是一本书,书中怎么说,我不知道,不过估计里面是说还原论的局限的吧。
http://www.sjfx.com/cache/books/view/41/view-0202010000959041.htm
和
http://www.studytimes.com.cn/txt/2005-03/28/content_5822940.htm
(我也不知道还原论的具体内容,了解它的概念这个过程已经使我花费了很大的成本)
关于如何构建类体系,可以看看这篇帖子,
http://community.csdn.net/Expert/topic/4888/4888140.xml?temp=.1489527
虽然比较抽象,于具体的领域设计没有什么帮助,而且帖子里面的各持己见(没有谁对谁错)
但是看了肯定能引起你思考。
这就够了。有了问题肯定会迫使你去找办法解决。Top
24 楼OOPhaisky(异化$渴望成功~~)回复于 2006-08-16 18:57:38 得分 0
markTop
25 楼laomai(老迈)回复于 2006-08-16 19:49:51 得分 0
先看看,呵呵Top
26 楼codename11()回复于 2006-08-16 20:01:10 得分 0
感谢 sjjf(水晶剑锋) 的推荐,我看了下,不错,争论的挺激烈的,呵呵。
总的来说,我还是比较支持还原论的,但我绝对捍卫整体论的正确性和科学性。怎么说呢,就像中医和西医,都是科学的,都能治病,但他们恰是两种理论的表现,中医更像整体论,西医更像还原论。
在具体到oo还是op,就我工作中的感觉来看,我个人更偏向于op,我喜欢简单的东西,自然的东西,我不太喜欢人为的雕琢,做oo的项目时,我经常感觉是这种思想本身让本已复杂的工程,变的更加的复杂。特别是遇到多层次的继承时,那真是噩梦,我到宁愿遇到op里函数的乱调,因为一个是平面的,一个是立体的,平面的再怎么繁终究更简单一些。
正所谓:清水出芙蓉,天然去雕饰,简单一点,自然一点,总是好的。Top
27 楼DelphiGuy()回复于 2006-08-16 20:16:23 得分 0
面向过程->面向对象->面向组件->面向模型
C++的还停留在第二个阶段。:)
Top
28 楼sjjf(水晶剑锋)回复于 2006-08-16 20:49:31 得分 0
整体论也有不足,它不承认低层次的元素对系统行为或者特征的影响。
单从还原论或者是整体论看,都只能解释,底层或高层次的组分关系问题,不能解释层次和层次之间关系,
现在比较先进的是 综合微观分析论,将两种理论容纳到一个框架中,
不过奇怪,google上找不到,不知道是不是我记错了。
我是在一本关于系统理论的书看到的。
我私下认为 亚历山大的 <the timeless way of building > 中的思想和这种理论的思想比较像,cpp也比较符合这种理论的特点。不过,感觉而已,没有可以量化说明的依据。
Top
29 楼code_tin(代码罐头[看来牛魔王快做不成了])回复于 2006-08-16 23:48:35 得分 0
我还是挺认同ERIC在UNIX编程艺术里面的看法
UNIX从古至今能够生存到现在的原因就是
keep it simple and stupid
足够的简单.只做一件事情并把它做好.
如果所有的程序员都是这样.那么软件开发也许就和硬件开发一样快速高效了
没有一个硬件设计师会从头设计已有的模块.他们总是用已有模块去拼凑更高级的模块.
他们用的方法也很简单.把一个电路分解成更多的功能子电路.每个模块之间就是输出和输入的关系.就和unix程序都是以文本流合作,宽输入严输出一样.
只凭简单的方法.硬件设计师已经制造出了类似CPU这种不论从功能还是从结构上都复杂无比的怪物.(还无错)Top
30 楼voxer(voxer)回复于 2006-08-17 12:44:36 得分 0
码代码和造房子是一样一样的阿
--------------------------------
我不认为这个比喻是对的,反而认为这是绝对错误的,软件工程学是从建筑工程发展而来的,但实际情况是完全不一样的。造房子必须是确定需求再确定好非常详细的设计图,确定好检验方法,然后按照图纸开始施工,最后交给用户。
而软件的需求是不可能一开始就能确定好的,如果一个房子建好了,是不允许修改的,你要是对建筑工程师说“你的房子作的不好,现在上班的人太多了,你给我这里再加一个电梯,哪里加个楼梯,顶上再加几层”,工程师肯定会砍死你。但是同样的情况放在软件中,这是非常普遍的情况。Top
31 楼raze911()回复于 2006-08-17 13:00:34 得分 0
所以,unix的设计思想是吓人的超前!一个模块只做一件事。通过模块间的交流来做很大的事!这是由低到高的设计思想!
而面向对象的思想却是做一个无所不包的东西,再层层细化,进而到具体的对象,这是由高到低的思想!
================================================
面向对象就是由高到低吗??
你难道就不能理解成“多类具体事物可以抽象出一个顶级抽象事物”吗?
比如做一个具体的系统
首先就是考虑需要管理的具体事物是什么,然后再根据具体事物被管理的特点进行层层向上抽象
而不是先给出一个抽象事物,再层层向下分解为具体事物
至于最顶级的那个最抽象事物,它永远是存在的,并不是为了层层分解出具体事物而存在,它的存在仅仅只是表明(对全部具体事物进行抽象的过程中产生的)抽象事物以及具体事物本身到最后都要归入这个最抽象事物的子集而已,并不是让你先立出一个最抽象事物,然后层层分解到最底层的具体事物
你对面向对象的理解,是你首先把面向对象定义为自上向下分解的模式,然后脱离了具体事物,先立出一个抽象事物,然后感觉无从下手,应该往哪个方向分解下去呢??
面向对象分析,当然是先收集需要管理的具体对象,再层层抽象,最后归入一个最抽象的顶级类这样一个自底向上的过程
Top
32 楼healer_kx(甘草(楼主揭贴吧,我们这些上班灌水的也不容易))回复于 2006-08-17 13:02:08 得分 0
。。。 。。。。Top
33 楼Wolf0403(废人:独活十年~心如刀割)回复于 2006-08-17 13:02:29 得分 0
Bell Lab
U California, Berkeley
IBM
Sun
HP
数数看,从 70 年代以来,有多少世界顶尖的研究机构和 IT 公司致力于发展 Unix?结果呢?市场份额现在还不是被 Windows 和 Linux 这些后起的无名小卒步步侵吞?
Unix 能存活这么久,是靠当初自由流传的源码,和源码的可移植性,而不是 KISS 的哲学。Top
34 楼healer_kx(甘草(楼主揭贴吧,我们这些上班灌水的也不容易))回复于 2006-08-17 13:08:01 得分 0
根据江泽民文选的观点看:软件危机将会一直存在下去,其根源在于不断变化、提高的用户需求和现有开发方法提升的差距的矛盾。
PS:本来就是这样的,即便到了汉语语音编程的时代,也依然会出现新的问题的。
Top
35 楼codename11()回复于 2006-08-17 13:29:45 得分 0
Unix 的衰弱并非 kiss 原则所害,活这么久,也非自由流传的源码所幸,是硬件体系问题和版权之争问题,unix 开始是鄙视 x86构架的,认为它的设计十分丑陋,再加上当初授权费高昂(sun的是4万美金!),各个版本十分混乱,故此被 linux 钻了空子,后来也不得不屈尊转到了x86上来了。
能活这么久,是得益于其优良的性能的,目前来看,服务器市场,性能来说还是 unix 称王。而提到其性能,不能不说得益于 kiss 原则!
kiss 哲学是经过几十年经验证明的有用的理念,也适用于其他一切领域(不仅仅是软件),并不存在 op 、 oo 之分,op 不遵循kiss,是垃圾,同样 oo 不遵循 kiss 也一样是垃圾。
简单就是美,无论中国哲学还是外国哲学都是认同的(毕竟是人类哲学)。
而人为的把简单的东西搞复杂,是有问题的。(客观上的复杂除外,毕竟是不可避免的。)
ak47,t34,il-2,mig25,都是符合kiss的,苏联在理念上胜了德国!Top
36 楼sandrowjw(我的小猫照片给弄坏了,心都碎了)回复于 2006-08-17 14:53:28 得分 0
是用软件去解决问题,还是教会软件去解决问题……Top
37 楼sjjf(水晶剑锋)回复于 2006-08-17 15:38:48 得分 0
我想 unix编程艺术 一书中,有一章在开头引用了小爱的一句话 :
尽可能的保持简单,但别过了头。
kiss是肯定对的。每个人都不想要复杂,但是事实上,有些问题就是很复杂的。
我并不认为 oo把事情搞复杂了。他是提供了一种更接近我们世界的更自然的一种描述方式。
但是有些东西适合用oo描述,比如,cpu的调度之类的,(虽然有什么cpu调度策略,但是我认为他们是雷蒙德说的机制)他们的实现需要提供一种机制,
机制的东西不宜用oo描述。
最后,我觉的原子弹不应该是符合kiss的。
Top
38 楼sjjf(水晶剑锋)回复于 2006-08-17 15:39:48 得分 0
kiss原则我想应该是我们中国的中庸思想,不偏不倚,过有不及。Top
39 楼sjjf(水晶剑锋)回复于 2006-08-17 15:45:37 得分 0
我也喜欢雷蒙德的 unix编程艺术 一书,书中虽有有点偏激,但是大体还是很不错的,
有自己的独到之解,而且能够唤起一个从事软件人员的骄傲,特别是最后一段话。
Top
40 楼codename11()回复于 2006-08-17 15:56:06 得分 0
小爱的话好像是在bj的《the cpp programming language》里的吧,unix编程思想里好像没有。
好多人都说:“他是提供了一种更接近我们世界的更自然的一种描述方式。”我的感觉却不是这样,可能我的水平太次了吧,无法受用。
原子弹是符合kiss的,参看网上的《原子弹diy》,呵呵。
“kiss原则我想应该是我们中国的中庸思想,不偏不倚,过有不及。”有道理,不过我感觉更像道家的学说:
“曲则全 , 枉则直 , 洼则盈 ,敝则新 , 少则得 , 多则惑 。是以圣人抱一为天下式。”Top
41 楼codename11()回复于 2006-08-17 15:59:02 得分 0
解释一下上面的话:“曲线能成为圆,弯弧能成为直,凹陷能成为满盈,破旧能成为崭新。少取反而多得,贪多则会迷惑。所以圣人所抱持的只是一个原则,是天下的榜样。”Top
42 楼sjjf(水晶剑锋)回复于 2006-08-17 16:06:09 得分 0
unix编程艺术(ps,不是unix编程思想) 一书肯定有,
但是我把书托运回老家了,不能给你翻出来,
不是在正文里,而是 类似名言之类的写在章节首页里。
Top
43 楼codename11()回复于 2006-08-17 16:08:34 得分 0
哦,我相信你。Top
44 楼lbaby(春天来了...)回复于 2006-08-17 16:12:45 得分 0
回复人:codename11() ( 一级(初级)) 信誉:100 2006-08-15 17:43:00 得分:0
?
所以,unix的设计思想是吓人的超前!一个模块只做一件事。通过模块间的交流来做很大的事!这是由低到高的设计思想!
而面向对象的思想却是做一个无所不包的东西,再层层细化,进而到具体的对象,这是由高到低的思想!
随着事物的复杂度的加深,这个无所不包会越来越困难!也就是说这个“假设”会越来越困难!
比如在实现一个具体的小狗时,用oo的思想,会先有一个动物类,再在其基础上有一个哺乳类,然后是犬类,最后到具体的snoopy狗这一对象。这个东西在开始时,你就需要一个假设,即“动物类”,肯定是有细胞组成的,有生命迹象的东西,在你以后的设计中你必须在符合这个假设的前提下复用他,而当你设计一个机器狗的时候,这个假设就不成立了,这个类就无法用了。也许你会说用机器类啊,那我要是设计一个石头狗呢?用石头类?木头狗呢?木头类?有无数个种类的狗,就要无数个类?这就是“假设”的弊端,你根本无法“假设”出所有东西!也许有人会说可以多重继承啊,是的,但那时问题的复杂度就太过了,反而得不偿失!
既然无法假设,那我就索性不假设!我先做一个电子和质子,电子就是电子性质,质子就是质子的性质。我不假设你用他们来合成什么原子。然后有了原子,我不假设你用它来做什么分子,然后不假设你用它做有机物还是无机物,然后不假设你用它来合成细胞还是什么,。。。。最后我可以得到石头狗,肉狗,木头狗,xx 狗。。。
道法自然!普通的细胞可以构成多彩的生命,细胞也不知道自己将来会成为什么生命,他只做好一个细胞应做的事情。
面向对象,是一个美丽的谎言,他只是在表面让接口更友好,而不能解决整个纵深体系的问题,当然,也许是人们误解它了。
就像 c 之父 D.M.Ritchie 说的,“oo让我觉得在界面上花的时间太多,在具体的问题解决上却不够,分散了我不少精力。”
这个言论听起来比较吓人,不过也比较有道理,
顶一个先Top
45 楼CQZE(Say It Loudly And Proudly - 发颗药)回复于 2006-08-17 16:19:20 得分 0
造房子和写软件压根就不一样。又见过把房子造到一半时更改设计图纸的么?写软件这种事情是经常发生的Top
46 楼raze911()回复于 2006-08-17 16:54:16 得分 0
比如在实现一个具体的小狗时,用oo的思想,会先有一个动物类,再在其基础上有一个哺乳类,然后是犬类,最后到具体的snoopy狗这一对象。这个东西在开始时,你就需要一个假设,即“动物类”,肯定是有细胞组成的,有生命迹象的东西,在你以后的设计中你必须在符合这个假设的前提下复用他,而当你设计一个机器狗的时候,这个假设就不成立了,这个类就无法用了。
============
这就是你理解“面向对象”的严重问题,理论上看我前面的发言
具体的来说
要实现一个具体的小狗,用OO的思想,首先不应该是创建一个“动物类”,而是将对象按实描述
也就是首先描述出的是一个具体对象“小狗”,如果没有其它管理要求,则根本不需要抽象出一个“动物类”来,只有在具体对象存在多类有管理差异的对象时,才会抽象出一个抽象类,如果你仅仅只是要实现一个具体对象“小狗”,那你凭空抽象出一个名称为“动物类”的抽象类来做什么呢??你抽象出动物类的管理意义在哪里??没有管理意义的东西你抽象出来做什么??
只有在比如系统增加了多类管理对象,比如一个猫还有一个松树一棵青菜,我们会发现,猫与狗在某些属性与行为上有共同之处,而与松树及青菜有差异之处,而这些差异信息又是管理上需要管理的内容,而松树与青菜在某些属性与行为上也有共同之处,OK,此时我们才应该把猫与狗的共同之处抽象出来成为一个抽象类(被猫与狗同时继承的一个抽象类)——叫“动物”,把松树与青菜的共同之处抽象出来成为另一个抽象类叫“植物”
而不管是猫还是狗还是松树还是青菜,其被描述出来的属性与行为也必然是我们当前需要管理的东西,不需要管理的信息根本不需要描述到系统中去
也就是说,假定我们仅仅只有管理猫狗松树及青菜的数量方面的要求,则一样根本不需要抽象出“动物类”跟“植物类”这两个抽象类来,而当客户提出要对这些事物的行为进行分类管理时,我们再把这些事物的行为分别添加描述到系统中相应的具体类(狗猫松树青菜)的信息中,此时才有必要抽象出动物类与植物类这两个抽象类
我在这里对你说一句,你对面向对象的理解方式完全是令我不可思议的
Top
47 楼lbaby(春天来了...)回复于 2006-08-17 16:54:42 得分 0
回复人:raze911() ( 一级(初级)) 信誉:100 2006-08-17 13:00:00 得分:0
?
所以,unix的设计思想是吓人的超前!一个模块只做一件事。通过模块间的交流来做很大的事!这是由低到高的设计思想!
而面向对象的思想却是做一个无所不包的东西,再层层细化,进而到具体的对象,这是由高到低的思想!
================================================
面向对象就是由高到低吗??
你难道就不能理解成“多类具体事物可以抽象出一个顶级抽象事物”吗?
比如做一个具体的系统
首先就是考虑需要管理的具体事物是什么,然后再根据具体事物被管理的特点进行层层向上抽象
而不是先给出一个抽象事物,再层层向下分解为具体事物
至于最顶级的那个最抽象事物,它永远是存在的,并不是为了层层分解出具体事物而存在,它的存在仅仅只是表明(对全部具体事物进行抽象的过程中产生的)抽象事物以及具体事物本身到最后都要归入这个最抽象事物的子集而已,并不是让你先立出一个最抽象事物,然后层层分解到最底层的具体事物
你对面向对象的理解,是你首先把面向对象定义为自上向下分解的模式,然后脱离了具体事物,先立出一个抽象事物,然后感觉无从下手,应该往哪个方向分解下去呢??
面向对象分析,当然是先收集需要管理的具体对象,再层层抽象,最后归入一个最抽象的顶级类这样一个自底向上的过程
-------------------------------------------------------
我想,软件抽象再次倒在软件复杂性的面前的原因是:
软件抽象并非对事务的本质抽象,而是对客户需求及环境等的总解而已,
它涉及到了大量变化的复杂的东西,因而只能是“快照”而已。
真正的对事务本质的抽象,如物理定律,是事务的本质特性,因而不受环境的影响。
面向组件的编程听起来无限美好,可不要忘了,没有一种组件是可以适用于所有会变化的复杂性的
以下为引用:
Chapter 13. Complexity: As Simple As Possible, but No Simpler
Everything should be made as simple as possible, but no simpler.
—Albert Einstein
Top
48 楼lbaby(春天来了...)回复于 2006-08-17 17:03:32 得分 0
回复人:code_tin(代码罐头[看来牛魔王快做不成了]) ( 二级(初级)) 信誉:96 2006-08-16 23:48:00 得分:0
?
我还是挺认同ERIC在UNIX编程艺术里面的看法
UNIX从古至今能够生存到现在的原因就是
keep it simple and stupid
足够的简单.只做一件事情并把它做好.
==================================================
如果所有的程序员都是这样.那么软件开发也许就和硬件开发一样快速高效了
没有一个硬件设计师会从头设计已有的模块.他们总是用已有模块去拼凑更高级的模块.
他们用的方法也很简单.把一个电路分解成更多的功能子电路.每个模块之间就是输出和输入的关系.就和unix程序都是以文本流合作,宽输入严输出一样.
只凭简单的方法.硬件设计师已经制造出了类似CPU这种不论从功能还是从结构上都复杂无比的怪物.(还无错)
=================================================
赞一句上边以事实讲道理的方法,不管“已经制造出了类似CPU这种不论从功能还是从结构上都复杂无比的怪物.(还无错)”的最主要原因是不是这种“只凭简单的方法”,这种论证方法都值得赞扬。
类比证明是有意的欺骗...
Top
49 楼guyana(天外魔鸟飞翔)回复于 2006-08-17 17:04:37 得分 0
学习各位前辈的思想~
不过说OO是倒退我还是不能同意的,OO还是能解决很多问题的,我认为OO和面对细节的实现方式最大的不同就是将细节隐藏了起来,让人更好的去思考其他的东西(要解决的业务,人员间的沟通);
UNIX的成功是有很多因素的,至少有很多历史因素,光看技术就解释一切,是不是太片面了?
那本《建筑的永恒之道》,确实是好书,呵呵,大家有空都去看一看,不要把它作为建筑技术书看,要作为一本哲学书来看~Top
50 楼ilove8(千里|你去哪里了,我等了你很久了!)回复于 2006-08-17 17:05:18 得分 0
再次upTop
51 楼codename11()回复于 2006-08-17 17:06:25 得分 0
to raze911(),吓倒你实在不好意思,哈哈。。。
你的意思是用到什么抽象什么,我可以理解成“浅层次”抽象吗?如果这样的话,那当然没有问题,但你考虑过复用吗?考虑过设计一个类库吗?那个时候你就会感到不可思议了,这也是设计c++的类库为什么如此困难的原因啊。你不考虑通用性,当然很简单,这与上来就写函数的 op 有什么区别呢?
不要在不可思议了,因为,令你不可思的东西还有很多呢,呵呵。Top
52 楼lbaby(春天来了...)回复于 2006-08-17 17:11:07 得分 0
以下为引用自另一帖子的某位同学的话,原帖地址我现在找不到了
-----------------------------------------------------------------------------------------------------
总体来说我支持罐头。 我碰到很多的情况都是把c++当成better c,或者object c在用,少数用到模板的人,在用boost或者ace而且怨声载道,说实话c++形象很差,甚至可以说没有形象。我们c++项目不少,但是在楼里转一圈我不知道能碰到几个懂模板的人,上周我还和我boss说做workflow designer的界面不要用c++,虽然我很乐意做一个,但是时间上肯定划不来。
其实想来原因也很简单,c++没有正常地去描述问题,或者至少它有一部分没有正常地去描述问题。当我们没有那么去想,我们就不会那么去做。当大多数人不那么去想的时候,这个东西的位置就尴尬了。就我个人来言,我只是有时候会去那样思考问题(我说不清楚,不好意思),所以也只是有时候会用c++,虽然我个人更加喜欢c++(其实是因为我觉得c的代码难看)。这里的有时候是指我做一些学术性比较强的项目(比如算法),并且又想保证代码执行效率的时候(当然我现在觉得用java也不错,可能以后会只用java了)。所以如果一种语言不能做到让至少一部分人正常地考虑问题,而只是想让所有人都用他来考虑问题的话,那它就会变成一种古怪的语言。
-------------------------------------------------------------------------------------------------
//引用结果
我想争论的意义不在于争出来个谁对谁错(况且这种情况似乎很难出现)
,而在于大家都有机会停下脚步来想一想,
停下你匆匆的脚步,想一想。
大家继续
Top
53 楼codename11()回复于 2006-08-17 17:22:04 得分 0
切磋武学,讲的是点到为止,恶意中伤,致人死地,非我辈所为。各位英雄,有什么看家本领、绝活妙招,尽管招呼,请!Top
54 楼codename11()回复于 2006-08-17 17:23:06 得分 0
哈哈。。。大家继续啊,“停下你匆匆的脚步,想一想”,是很重要的。Top
55 楼code_tin(代码罐头[看来牛魔王快做不成了])回复于 2006-08-17 17:38:52 得分 0
>>而不管是猫还是狗还是松树还是青菜,其被描述出来的属性与行为也必然是我们当前需要管理的东西,不需要管理的信息根本不需要描述到系统中去
我很赞同这句话
但是你不认为很多软件本身就只有1,2层
这样oo所能用的范围就小的多了
大多时候猫就是当猫用,狗就是当狗用
除非我们编写的是动物园管理软件
否则我们可能很少有机会去管理衍生出的如此多的类似物件
OO被用在GUI上更过也更适合的原因
也许正是因为界面上的东西都很相似,并且数量很大Top
56 楼lbaby(春天来了...)回复于 2006-08-17 17:39:12 得分 0
以下为大便时想到的:
----------
为什么会有这些问题?可能跟我们的计算体系有关:
我们现在的计算体系是存储程序式,
程序代码不会吃饭生长学习思考恋爱ML生小孩
因而,所有的action都是我们预先想好的存入到程序代码中的,
一旦出现了我们所预想不的情况,问题就会出现。
谁能预见未来?谁能考虑到所有的情况?谁能解决所有问题(包括未来的)?
Top
57 楼codename11()回复于 2006-08-17 17:53:38 得分 0
"大多时候猫就是当猫用,狗就是当狗用,除非我们编写的是动物园管理软件" ,鼓掌!
“程序代码不会吃饭生长学习思考恋爱ML生小孩”,鼓掌!
幽默诞生自智慧,善于思考的 programmer 们,正是个中高手!
思维的碰撞,往往伴随着智慧的火花,这几天的讨论,让我收获颇多,感谢各位的精彩演说!并热切期待下文。。。Top
58 楼code_tin(代码罐头[看来牛魔王快做不成了])回复于 2006-08-17 17:58:08 得分 0
楼上提醒了我
对于建筑设计
并不是建筑设计不会有设计变更
而是开始运作以后就不能变更
如果真的能变更
需求方未必不会一直更改建筑的设计Top
59 楼ForestDB(冰)回复于 2006-08-17 18:00:28 得分 0
对LZ的观点有赞同,但个人觉得这并不就是危机了;也许是危机,但在个人看来,这也提供了很多的机遇和空间,解决特定的问题(也就是特定的假设)这不就是魅力所在么?Top
60 楼19az(相信我,没错的!)回复于 2006-08-17 18:09:52 得分 0
软件复用很好,为我们省下了宝贵的时间。算是一种危机吗?Top
61 楼templarzq(原谅我这一生不羁放纵爱自由,也会怕有一天会跌倒)回复于 2006-08-17 18:12:04 得分 0
建房子之前要规划好,比如造价,材料,人工,风格,空间等等。这些弄好了,剩下的只是具体工作而已。可怕的是砖头可以用一个模子造,代码和模块是不行的。所以就有了接口这个东西。于是修改就可以只针对模块,而不会牵一发而动全身。Top
62 楼xiaoxiao1984(笨猫儿)回复于 2006-08-17 18:40:14 得分 0
受教了Top
63 楼goodboy1881(积木)(谁都别拦着我在水源升星)回复于 2006-08-17 18:42:13 得分 0
对楼主的话深有感触,复用最大的困难不是对设计模式,OO思想不熟悉,其根源在于开发基础库时开发者的假设和使用基础库的用户的用法的不同。
我需要开发一个供给别人做二次开发的一个组件,发布以后,总有很多人发过来需求说需要这个说需要那个,说某个功能能不能改一下--众口难调哦,所以要开发一个大家都满意的东西真是太难了,最终,软件是符合大家的要求了,结果,软件的代码比原来增加了3倍--这也是罐头说的那个问题吧,简单的东西不好用,功能全的东西太臃肿,鱼和熊掌不可兼得--这才是硬道理。
所以嘛,做软件只要针对功能写代码就可以了,不要想太多,想这个东西有没有可复用性--复用性可是要用效率的牺牲作为代价的!我们只要写出来合适的代码就可以--这就是我的观点。在某些显而易见的地方使用模式或者模板,不要为了复用而写代码--这会事倍功半的。Top
64 楼goodboy1881(积木)(谁都别拦着我在水源升星)回复于 2006-08-17 18:43:49 得分 0
既然说到复用,我认为不要复用代码,而是复用经验,这才是最有效的复用呢。Top
65 楼fengge8ylf(秀视工作室,承接P2P项目)回复于 2006-08-17 21:36:57 得分 0
大家可以想想COM的思想 COM就是要设计一个个功能独立的模块 然后把这些模块组合起来形成一个系统 但实现中一个事物的组成错综复杂,功能不一,所以很难分解出功能独立的模块,总有这样或那样的差别 OO可不可以看成是一种代码的组织Top
66 楼rightyeah(众妙之门)回复于 2006-08-17 21:48:04 得分 0
软件危机存在的根本问题在于:人类对世界的理解永远不能做到100%,人类的各种理论永远只是在试图接近这个宇宙的复杂度。模型和现实的差距,就是软件危机存在的理由Top
67 楼SpaceLin(Franklin)回复于 2006-08-17 22:03:35 得分 0
有没有软件业的摩尔定律
从第一台计算机产生开始,硬件技术和软件技术几乎同时开始它们的发展历程。但是半个世纪以来硬件技术的发展速度要远远高于软件技术的发展,从电子管到晶体管,从集成电路到超大规模集成电路,运算速度从每秒几千次到每秒几十万亿次。相比之下软件技术就远远跟不上硬件技术的发展。著名的摩尔定律归纳了硬件技术的发展速度,那么软件技术有没有相应的定律呢,几十年来,软件业界人士一直没有停止过这方面的思考。
近二十年前,美国著名的图灵奖获得者布鲁克斯博士曾在他的《没有银弹:软件工程的根本和次要问题》论文中将能给软件产业带来本质上突变的技术称为“银弹”,并且宣称,“没有单纯的技术或者管理上的进步能够独立承诺在十年当中大幅度地提高软件的生产率、可靠性和解决性”。这个论断在这二十年里一直没有被打破。
基于组装的人工软件工厂
软件开发一直以来都受到以下几个方面的困扰:开发进度缓慢、开发费用超支、维护成本增长过快、不恰当的功能设计、拙劣的性能、不断膨胀的bug和代码量、不兼容、重复开发等等。这些问题在最严重的情况下就会导致所谓的“软件危机”。可喜的是,由面向对象技术发展而来的组件技术以及基于组件技术的软件开发的工厂模式,有望解决以上的问题。
软件工厂是一个按照流水线的工作方式、遵循一定的生产质量规范,批量、高效地生产标准化的软件产品组件,并对其进行组装从而批量完成产品的机构。
组件的组装产生了软件工厂的概念。为了构造新应用程序,软件开发人员找出适当的组件,将这些组件加入到正生产中的应用程序,同时对应用程序进行测试并保证应用程序的组装工作按照预定的规划正常进行。软件开发人员所起的作用和车间流水线工人别无二至,只是开发软件的“流水线”上跑的是应用程序产品。
软件工厂的出现使得软件开发商可以通过可重复的开发过程快速生产出高效率、低成本、高质量的企业级软件。
到目前为止,“软件工厂”这一概念基本上还停留在“基于组装的人工软件工厂”阶段,也就是说,由软件开发人员人工组装软件组件来构造应用软件系统。在这一阶段,整体的软件开发效率还很大程度上依赖于软件开发人员的组装效率,软件开发并没有质的飞越。
企业级应用软件开发
近年来,企业级应用软件系统遇到了很大挑战。
首先,企业级应用软件系统所要处理的环境更为复杂,功能要更为全面、细致。现在经济全球化和竞争越来越激烈,社会中不稳定与干扰因素也处处可见、时时发生,这导致在研发企业的应用软件系统时,需要考虑的因素越来越多,也越来越难以控制。
其次,企业需求的变化越来越快。这是现在企业级应用软件系统研制过程中遇到的最大问题。由于竞争的残酷,企业的管理与业务经常变化,可能是今天刚制定了一套业务流程,明天就要推倒重来。这就意味着,企业级应用软件系统必须要能适应、且是快速适应企业需求的变化。
最后,企业的要求越来越苛刻。由于IT系统越来越成为企业提升竞争力的最佳武器,它们对系统的功能要求越来越高,不仅要处理日常的工作,还要具有分析、预测和决策等各种功能。只要能想到的,企业都希望IT系统帮它实现。另一方面,IT系统在企业的日常管理与业务中的地位越来越重要,它甚至已成为企业的关键业务系统。对于这样的系统,企业要求不能有丝毫的差错,不能有一刻的停顿,不能有任何的意外,否则的话它们会为此而遭受巨大损失。因此,企业对系统的快速交付性、安全性、可靠性、稳定性提出了极高的要求。
这样的复杂的企业级的应用软件开发不是仅仅靠软件组件的简单组装就可以完成的,而且也不是人工组装就能适应的。
“基于组装的人工软件工厂”开发模式在复杂的企业应用软件系统开发面前是束手无策的。
基于设计的全自动化软件工厂
软件业的发展再现了制造业的发展过程,软件业与制造业具有很大程度上的相似性。制造业提供硬件产品和服务,它的工序包括市场调查、产品定义、产品设计、产品加工;软件业提供软件产品和实施服务,同样需要经历业务调查、需求定义、软件设计、软件开发等。从本质、流程上说,软件业也是制造业,其发展的必然归宿是生产的自动化和装配的柔性化。
在很多人的直观印象中,汽车是工人在生产线上一个个零件组装起来的、高楼大厦是建筑工人一砖一瓦盖起来的,因此软件系统也应该是程序开发人员一个个组件组装起来的。这种印象其实是错误的,事实是,真正起关键作用的是汽车设计图纸、建筑设计图纸,因此软件系统应该是设计出来的。
理想的软件开发模式应该是“基于设计的全自动化的软件工厂”开发模式,在这种模式下,软件开发的主要工作是进行软件设计,应用软件系统由“全自动化的软件工厂”加工而成。
想深入了解“基于设计的全自动化的软件工厂”,请访问http://www.kcomsoft.comTop
68 楼raze911()回复于 2006-08-17 22:45:38 得分 0
面向组件的编程听起来无限美好,可不要忘了,没有一种组件是可以适用于所有会变化的复杂性的
================
面向对象的编程难道有强调过所产生的组件可以适用于所有变化吗??
当然是NO
面向对象的分析过程,可以让我们在收集整理希望管理的实体类时,抽象出这些实体类的共性信息,而这些共性信息被集中在一个类里形成抽象类,这个抽象类有可能会在一个新的有相同共性信息管理要求的事物被纳入管理范围时被使用,近而形成原来抽象出来的东西被复用的现象,而不是首先扩大化的考虑这个抽象类的使用范围
也就是说,在工作过程中被抽象出的类,有可能永远不会再派上用场,但有可能在未来被其它新的需要管理的某些实体类继承,如果产生这种状况——也就是我们发现我们新纳入管理视野的实体类有一部分被管理信息的项目是与以前抽象出的某个抽象类相同,则我们就让这个新的实体类继承此抽象类,进而减小了设计工作量
而如果要改一个共性信息管理项,则也就只需去修改那个抽象出来的类即可,而无需依次将每个实体修改过去,同样也降低了维护的工作量并提高了可靠度
面向对象的编程,从来不是说一个类能够一次设计满足无穷的需求变化,而只是让设计过程中发现的共性的信息管理项目形成抽象类,一方面使抽象类可能被未来的编程过程所复用,另一方面降低了维护、修改的复杂程度,增加了可靠性,方便了系统的扩展设计
在具备合理抽象的类图系统中,因为需求的变化而产生修改的要求时,如果修改的内容仅涉及某个实体类的个性信息管理,则只需要修改这个实体类;如果修改的内容涉及多个实体类的共性信息管理,则只需要修改这些实体类所继承的抽象类;如果修改的内容涉及新增管理对象(新增实体类),则可以查看原系统图中是否有可被新增实体类继承的抽象类,如果有,则就产生了类复用的效果
同样的,在设计一个系统图时,如果发现多个实体类的管理要求有共性,且发现这些共性管理要求可以通过继承一个外来的组件(已经成形的其它人生产的成熟组件)所解决,则就将这个外来组件做为继承上级,同样也达到组件复用的目的
面向对象的编程,我的理解是
让设计者更准确的定义需要管理的核心实体是什么,明确的分界各实体的边界及明确各实体之间的关系,对实体进行抽象,产生可能可被未来设计过程复用的抽象体(是通过对实体进行抽象产生抽象体,而不是为了复用而创建抽象体),定义系统接口体系(接口也可以理解为特殊的类),系统形成整体可复用的概念
面向对象编程,根本不是为了产生一个万能软件或万能组件,最核心的,让你最大限度的框定、定义清楚目前所要管理的每一个对象是什么Top
69 楼qinhl99(林鸿)回复于 2006-08-17 23:19:07 得分 0
有时间好好来研究一下Top
70 楼sjjf(水晶剑锋)回复于 2006-08-17 23:37:59 得分 0
to codename11()
有三种策略可以建立一个类体系,自顶向下,自底向上,混合策略。
================================
大多时候猫就是当猫用,狗就是当狗用
除非我们编写的是动物园管理软件
================================
如果是写动物园管理软件了。
猫这个概念已经带着抽象了。
你想要表达的意思实际上是
前一个猫: 可能是一个名叫小虎的金丝波斯猫。一个具体的物体。
后一个猫: 抽象概念上的猫。
尽管你无意识,但是你还是按照oo的方式进行思考了。
================================
谁能预见未来?谁能考虑到所有的情况?谁能解决所有问题(包括未来的)?
================================
很多年前,牛顿认为只要给出每一个粒子的初始位置和速度,就能够计算出任意时刻的
粒子的位置和速度,也就是说,我们的命运已经是注定了。这就是有名的科学宿命论。
直到有一天,量子理论的出现.....
强烈的推荐一本我认为的好书<从一到无穷大,科学的臆测和猜想>也是改变我的时空观的一本书。
小爱的相对论太严肃了,我看不懂,看看这个挺有意思的。
虽然读懂了 goodboy1881的意思
但是觉得他说的语法上前后矛盾。
==========================================
复用最大的困难不是对设计模式,OO思想不熟悉
既然说到复用,我认为不要复用代码,而是复用经验,这才是最有效的复用呢。
==========================================
设计模式就是一种经验的复用。
另外我也同意他的一个观点,不要刻意强调重用。
可以重用的东西,是经过分析得来的,有共性自然就能共用,不是刻意为之。
能共用多少就共用多少吧。如果在某个行业混久了,经过不断的重构过程,
一套好用的库就出慢慢的出现了,而在于使用op还是oo(当然也要有功力才行)。
连上帝都不是万能的,何必要苛求一个编程思想万能呢?
况且只要存在多个评价标准,就不存在最好的东西,阿罗都证明不可能定理了。
只要你能说服自己采用某个编程思想而不是采用另外一个编程思想就可以了。
Top
71 楼TG1005()回复于 2006-08-17 23:52:42 得分 0
请用数学证明软件危机理论上是无法解决的
否则一律无视Top
72 楼ckp(surge)回复于 2006-08-18 00:47:02 得分 0
如果想用软件的砖头搭起一个软件大厦来,如果砖头数量有限,那倒还可能。
但是,从目前来看,砖头种类只会越来越多;此外,不同的砖头还需要不同的粘结剂,似乎粘结剂的种类也越来越多。似乎算法的数量和总量是无穷无尽的,只要有新的应用领域出现,新的研究领域出现,总有新的算法出现。而系统的结构似乎也不是一成不变的。
此外还要考虑到零件与零件之间粘结的牢固程度,也就是它们之间的交互成本;当系统足够复杂,零件与零件之间的交互成本大到不能忽略的程度,这时候,用已有的零件来构建大厦似乎就很困难了。Top
73 楼goodboy1881(积木)(谁都别拦着我在水源升星)回复于 2006-08-18 08:17:39 得分 0
。。。这两天说话语无伦次。。。Top
74 楼goodboy1881(积木)(谁都别拦着我在水源升星)回复于 2006-08-18 08:20:09 得分 0
把自己的经验写成文档流传下来,比写成代码给别人使用,在某些情况下面更加地使用。
例如,与其给某人一个封装好的排序函数,不如给他这个算法的描述性文档,让他自己实现一个适合自己的排序函数。Top
75 楼cuizm(射天狼 http://www.j2soft.cn/)回复于 2006-08-18 08:21:14 得分 0
UP
╭═══════════════════╮
║ 免费的源码、工具网站,欢迎大家访问!║
║ http://www.j2soft.cn/ ║
╰═══════════════════╯
Top
76 楼JFlyer(一万年太久,只争朝夕)回复于 2006-08-18 08:51:28 得分 0
妖言惑众Top
77 楼codename11()回复于 2006-08-18 09:12:27 得分 0
1. 人的智力是有限的,世界是越来越复杂的,人之所以能够用有限的智力建设并操控越来越复杂的世界,靠的是层层抽象。
2. 原理:(建造大楼为例)
a. 最原始的状态:人的所有精力都放在研究制造砖头上,此时没有也不可能顾及如何造大楼(因为人的智力是有限的)。
b. 砖头造出来后,人就不再考虑砖头,把砖头当作原料进行更高一层的抽象,开始把所有精力放在用砖头造墙上。
c. 墙造出来后,人就不再考虑墙,把墙当作原料进行更高一层的抽象,开始把所有精力放在用墙造房间上。
………………
最后造成大楼。
计算机科学"层"的概念特别突出(与其自身复杂性有关),例如:汇编层、高级语言层…,操作系统层、网络层…,每一层都有自己关心的问题和处理对象。面向过程编程中的自上而下层层分解的方法,也符合分层思想。
Top
78 楼yzx110(原振侠)回复于 2006-08-18 09:24:18 得分 0
软件危机理论上是无法解决的 这句话我不敢妄下结论
LZ举的例子也有道理,但是从楼主的例子而推导出标题所说的结论就不敢苟同了Top
79 楼ShanChunZhenZi(山村贞子)回复于 2006-08-18 10:27:08 得分 0
不是我说共产党没能耐,这个世道是最多骗子的时代,比历史上任何一个时代都多骗子,各位小心自保才是。政治就是政治,在中国,政治被北方人和东部沿海地区的人掌握着,说是西部大开发,只有雷声不见雨下,实为欺骗西部地区人民的卑劣手段尔,可悲呼!南方人和西部地区的人只有挨穷的份,不在沉默中爆发,就在沉默中死亡,一场好戏正在上演。Top
80 楼dead_of_winter(寒冬)回复于 2006-08-18 10:31:16 得分 0
楼上说远了......Top
81 楼codename11()回复于 2006-08-18 10:35:08 得分 0
不要“共产党”这三个字连打,会被抓的。打“共产party”or“gchd”,现在网络都不自由了,-_-|||Top
82 楼codename11()回复于 2006-08-18 10:41:09 得分 0
-_-░Top
83 楼code_tin(代码罐头[看来牛魔王快做不成了])回复于 2006-08-18 10:52:29 得分 0
解决了复用问题
就说明我们已经做出了可以描述整个世界的东西(类库也好API也好)
那么我们又如何去理解这个能够包含整个世界的库呢。
悖论,赫赫Top
84 楼goodboy1881(积木)(谁都别拦着我在水源升星)回复于 2006-08-18 11:14:18 得分 0
软件危机指,随着计算机工业的发展,在软件开发过程中逐渐形成了一些矛盾。比如:软件开发没有计划性;软件前期需求分析不足;软件开发过程没有规范等等。
在这个层面上来讲,软件危机永远也爆发不了。在管理严禁,开发目标明确,手下各个精干的情况下,软件开发是可以顺利进行的。
而复用,只不过是其中提高效率的环节而已。我可以不复用而达到目的。复用与否区别在于劳动量,而不应该是软件质量的差别 -- 这个差别是软件人员的开发水平造成的。
其实java之所以流行,一个重大的原因是其提供的类库降低了开发人员的入门门槛,让一个不懂数据库的人也能写数据库程序,让一个不明白TCP的人也能轻松上手网络。
继续语无伦次。。。Top
85 楼shellyyee(☆☆☆☆☆-----疏狂一醉,生活大师)回复于 2006-08-18 11:17:50 得分 0
shellyyee怒吼道:"告诉我,我们的出路究竟在哪???????????????"Top
86 楼Airway1314()回复于 2006-08-18 11:40:25 得分 0
.NET-Club-9 (20152522)!.NET开发俱乐部仅提供开发交流平台,实现资源互补,共同进步!谢绝聊天!
进群需有.NET开发经验
欢迎广大。NET开发者踊跃加入Top
87 楼ocoogo(噢,酷哥)回复于 2006-08-18 12:33:40 得分 0
mkTop
88 楼TryToday(超口术生命体)回复于 2006-08-18 12:42:17 得分 0
错!
肯定有出路的,万物复杂,但是看一看我们的大脑,不一样把万物包容了吗。将来软件发展方向是需要向大脑学习!
软件开发的类只是一个小工具,大部分模糊的问题解决不了,原因在于类树只能按照级别关联,让我们认识类树容易,但是并不完全反映实际。比如哺乳动物的类树上的类包括眼睛、四肢、声音、尾巴等等,但是反向告诉你一定特点的眼睛、四肢、声音、尾巴,从类树中能找到是哪一类吗,不要告诉我需要遍历所有类。但是大脑可以任意运作。
将来需要的是类网!这是大脑的运作方式。Top
89 楼wakebook(醒书)回复于 2006-08-18 13:36:21 得分 0
看了楼主所言,感觉软件的危机主要是来自于人们对软件的期望值过高。
就向目前的相当成熟的建筑业来看,实现功能的扩展是很不方便的,设计时提供给1000人住的,而后期需要修改成提供给2000人住,不是简单的增加楼层就可以解决问题的,至少地基就已经决定了这点。
这个例子大家很容易理解,也很容易接收;如果换成软件,大家似乎就不能接受了。其实软件也有结构,也有布局,一开始的设计也决定了这个软件的扩张性。有部分扩张性是正常的,但是不能无限的扩展,这个和房子其实是一个道理,但是大家对软件的期望太高了,提出了无限的要求。
希望大家能够理解、能够体谅软件,人无完人,软件也没有无所不能的软件,能专注的做好一件事情的软件就是好软件,而无限考虑其他方面的事情,最终让软件失去了软件的本质。
-------------------------
醒书网,免费精品电子书下载
www.wakebook.com
-------------------------Top
90 楼yi_jun_jun()回复于 2006-08-18 14:07:38 得分 0
我是一个软件初学者,但是看到这么多朋友发表自已的看法,我也来发表一下我的看法。
我从哲学角度来看这个问题,首先问一下,在哲学上人类有没有解决“世界可不可认知”问题?
如果世界可以认知的话,那么我们就可以相信有一天我们能够写出模拟世界的软件。如果不能的话,那么软件遇到的问题,就是一个哲学问题。
其实现阶段,软件行业遇到的问题都是,采用方法论中的分析法写程序,而且是试图用静态的二进制去描述动态的世界。使用分析法写出来的程序,前提是对问题理解很清楚,而且问题不会出现超出程序的范围。这是一个很重要的问题,而我们没有解决。
再有一个是我们写出来的软件不能自主进化,不能自主学习。假设人是软件,人一生中不可能不犯错,同样软件生命周期不可能不遇到不知道的情况。但是人不同于软件,人可能是吸取错误,改正自已,但是我们软件不行,世界是动态的,是不断变化的,而我们的软件是静态的,用静态的东西去描述动态的,发展的东西,会成功吗?
人们总喜欢用静态的观点去对待动态的事物,总想创一种什么都能搞定的方法。这种思路可行吗?
“软件自主进化,软件自主学习”-----个人认为才是王道,才是软件的终结。Top
91 楼lovefreex(笨わ孩)回复于 2006-08-18 14:28:39 得分 0
路过~~Top
92 楼arkwrightzhn(阿克赖特qq673188423,arkwright@21cn.com)回复于 2006-08-18 14:36:14 得分 0
最近听到一个理论,说现代人类所认识到的“迷信”部分是迷信,部分是真理,而现代人所认识到的“科学”全部是“迷信”,“科学”是指引人类走向实践的,却不是走向真理的,只有全人类的道德的提升才能让人类认识宇宙的真理。
由于我对于软件开发不了解,所以不敢说这话是对的,可能行业内的人会有更加深刻的理解和解释,但这种理论对于我这个不懂科学的人更加能解释一些事情,我也在努力学习科学知识,希望能有一天知道这到底是怎么回事。Top
93 楼boiciy(喜欢去哪去哪)回复于 2006-08-18 14:52:09 得分 0
软件技术的进步是思想的进步
赞成楼主的话,但是不赞成楼主的危言耸听
从第一代语言到第二代,到面向对象的第三代
我们在用过第三代语言的时候,很少会考虑用第二代语言编写程序。对吗?
未来是系统大集成的年代,计算机不在孤立,网格技术进一步成熟,光脑的面世
不能不说是下一次飞跃。趋利避害,是人的基本思维方式。不管他是自私的还是什么的。
未来软件开发越来越注重思想,而非代码Top
94 楼ynduanlian(进一步海阔天高,退一步粉身碎骨)回复于 2006-08-18 15:06:02 得分 0
楼主是我在CDSN见到是最睿智而又说真话的人!Top
95 楼kimryo(God is on my side)回复于 2006-08-18 15:40:41 得分 0
感觉说的没什么意义~
数学、物理化学这些自然科学,他们讨论问题也是有假设和前提的,也是不可能一个方程,一组公式就解决所有问题,还不要说问题环境不同,即时是相同的问题,也会有截然不同的求解思想和方法~但是这些在某些假设下的求解多了,自然就解决了绝大部分的问题,最终一步步逼近真理~通用软件库的发展也是一样的道理,特定环境下通用库多了,他们的集合,就能解决大部分的问题~科学领域绝对不会有所谓的万金油,要的是油万斤~~Top
96 楼zsf81(天生黑翼)回复于 2006-08-18 16:14:39 得分 0
软件危机,这个问题还真是有点深了。看了上面各位大大巨巨们的回答,我也有一些想法。
而楼主所说的软件复用造成,有一定道理。从一个完成的具体事物来看吧。比如说一支笔,大家这时可以分了,从芯,外壳,弹簧,工件。。。来分;再细下去分为哪几个材料。。。。再下去就分到原子层了。一个软件的建立就如一个完整的事物,可以细分到模块甚至更小。而到原子层,质子和电子就一样吗?还是不一样的,其速度,重量,体积都不同。
我们现在复用的模块,那是一样的,在如此变化的世界中,用一个固定的东西去描述,肯定是不行的。每一个事物都有其特性,复用只能做到类似,而每个新的软件产生,每个版本的更新就是一个学习过程。虽然它不是自主学习,但他是由我们控制的,他们都是一个新的。软件危机理论上无法解决,我认为是正确的,但这和软件没有什么太大的关系。
因为我们做软件,不是做一个事物而是一类。设计的不同,做出来的也不同。不论是从高到低,还是从低到高,都是我们看世界和认知世界的方法,都可以从一定的角度去理解和解释问题。当然处于这个世界中,当然有他们的局限性,这是不可避免的。
说到局限性,我看过之后到现在仍记忆尤新的是:如果二维世界的生命想了解三维世界是一个什么情况?这是不可能做到的。他们本身的局限性就已经限制了他们,也许他们并不知道这个限制的存在。
我们只能一步步去改善看世界的方法,而一步到底。如果真那样的话,世界在所有的生命的眼中,将是同一个东西,一个永恒不变的东西。这样的世界我们需要吗?
活就要活的精彩!!Top
97 楼wd_6532(用frontpage写asp,jsp,php,ace)回复于 2006-08-18 16:59:35 得分 0
你们都在胡扯什么。
软件危机的根本问题在于人类对于自身以及周围事物以及事务的无法彻底公式化理解(即便模糊神经系统也是一种公式)
当人类彻底理解了人类大脑和蚂蚁的大脑的存储过程和思维过程,软件危机就解决了。
因为那个时候,可以用公式来100%模拟人类大脑在已知条件下的反应。Top
98 楼ipooy(中央党校毕业,我却发现我还没入党)回复于 2006-08-18 17:01:45 得分 0
个人觉得建筑工程和软件工程是有本质区别的。建筑是实实在在的物体,而软件始终是在PC或其他电子世界存活的。当然,你也可以说我的软件是在我的硬盘中的磁性介质,没错!所以,两种工程的绝大部分区别也由此衍生出来--不足为奇。
我本人对OO了解甚浅,不敢妄发评论,但是我不认为软件危机有多严重。危机是技术上的还是市场上的 ?软件越来越大的市场说明了问题。有市场就让软件发展的最好理由!Top
99 楼wd_6532(用frontpage写asp,jsp,php,ace)回复于 2006-08-18 17:02:57 得分 0
到时候,数学物理建模,是最流行最大众的职业。Top
100 楼wd_6532(用frontpage写asp,jsp,php,ace)回复于 2006-08-18 17:07:48 得分 0
我很喜欢这个比喻,码代码和造房子是一样一样的阿
==========================
这是一种放屁言论。
建筑只是面向一种行业。
而软件要不仅要面向建筑行业,还要面向其他所有行业。Top
101 楼kimryo(God is on my side)回复于 2006-08-18 17:10:32 得分 0
软件危机的根本问题在于人类对于自身以及周围事物以及事务的无法彻底公式化理解(即便模糊神经系统也是一种公式)
==============================================
这个貌似是自然科学要解决的问题吧。。。寒一个~Top
102 楼zsf81(天生黑翼)回复于 2006-08-18 18:22:21 得分 0
你们都在胡扯什么。
软件危机的根本问题在于人类对于自身以及周围事物以及事务的无法彻底公式化理解(即便模糊神经系统也是一种公式)
当人类彻底理解了人类大脑和蚂蚁的大脑的存储过程和思维过程,软件危机就解决了。
因为那个时候,可以用公式来100%模拟人类大脑在已知条件下的反应。
======================================================================
大哥,公式化那只是人们自己定义出来的,模拟真实的世界。世界是没有基准的,谁定的谁就是基准,100%模拟大脑,请问一下,两个人之前的DNA有多大差别,不用我说吧,那么这么大的差别的两人是什么样子的呢?所以不要说百分百,那不现实,还有请不要这技术论坛说出这样的话;
==================================================================
我很喜欢这个比喻,码代码和造房子是一样一样的阿
==========================
这是一种放屁言论。
建筑只是面向一种行业。
而软件要不仅要面向建筑行业,还要面向其他所有行业。
==================================================================
即使你不认同。还有软件的模式和建筑有很大的相同点,请仔细想一下,不要不用大脑思考问题Top
103 楼wd_6532(用frontpage写asp,jsp,php,ace)回复于 2006-08-18 18:30:38 得分 0
即使你不认同。还有软件的模式和建筑有很大的相同点,请仔细想一下,不要不用大脑思考问题
================
仅仅是工作过程一样而已,但是不仅仅是建筑行业是这种工作过程,很多行业都是这种工作过程,只是你眼里只有盖房子而已。
虽然工作过程看起来差不多,但是工作内容差远了。Top
104 楼addictg()回复于 2006-08-18 18:32:04 得分 0
请问楼上的你能等到那个时候么?Top
105 楼wd_6532(用frontpage写asp,jsp,php,ace)回复于 2006-08-18 18:55:48 得分 0
人类能不能等到都不一定。
所谓软件危机,跟OO没有什么关系。Top
106 楼MyAngel(人力资源专家)回复于 2006-08-18 18:56:14 得分 0
正因为软件存在着各种危机,所以那些大的软件公司才可以每隔2、3年就变一个花样来骗客户,这些片子们才能把这些傻傻的程序员用一种虚幻的东西牢牢地套住。Top
107 楼Featured(我握着爱情的门票静静排队……)回复于 2006-08-18 22:01:48 得分 0
一致苟同,强烈地Top
108 楼pacman2000(pacman)(影子传说)回复于 2006-08-18 22:35:41 得分 0
软件是用来描述世界的。可是,有谁能描述清楚整个世界呢?Top
109 楼lei001(太极)回复于 2006-08-18 23:51:56 得分 0
软件主要还是讲功用的,不能过多的关注艺术上的东西。还是要去繁就简的,
不要试图去包罗万象的,应该关注于某个领域的。Top
110 楼code_tin(代码罐头[看来牛魔王快做不成了])回复于 2006-08-19 00:48:41 得分 0
TryToday(超口术生命体)
但是看一看我们的大脑,不一样把万物包容了吗
===================================
任何一个大脑个体只能转载和记录有限问题以及有限的解
即便是所有的大脑,也只能记录有限的解。
wd_6532(胜败有常)
建筑只是面向一种行业。
而软件要不仅要面向建筑行业,还要面向其他所有行业。
========================================================
建筑也只是面向一个行业?那你不用住房子么?你写软件的时候都是露天的?
任何行业都会需要面向他的客户群才能产生。
你所说的软件面向其他行业,只是软件的客户群包括各行各业。难道建筑业的客户群只包括建筑业么?
wd_6532(胜败有常)
虽然工作过程看起来差不多,但是工作内容差远了。
========================================================
我们所提到的软件设计,就是从设计和方法,手段等方面讨论相似性
你要说工作内容,那自然是不同,两个行业怎么可能连工作内容都一样?
那你列举的所有事物我都能说是不同的。因为人不能两次踏入同一条河流。Top
111 楼Wolf0403(废人:独活十年~心如刀割)回复于 2006-08-19 03:05:59 得分 0
回复人:pacman2000(pacman)(影子传说) ( 两星(中级)) 信誉:115 2006-08-18 22:35:00 得分:0
?
软件是用来描述世界的。可是,有谁能描述清楚整个世界呢?
==============================
顶这句。人掌握复杂情况的程度是有限的,而软件甚至计算机的出现就是为了辅助人们,甚至代替人们对复杂现实情况进行模拟、归纳和处理,甚至包括决策支持,这样的系统自然会具有超乎一般的复杂程度。Top
112 楼daiguan()回复于 2006-08-19 08:42:41 得分 0
最大的不同是,设计一个普通软件的设计复杂度不亚于设计个鸟巢,但是他的设计费用只有一个普通4层楼那么多。
1个老农民可以自己搭个房子,你见过哪个老板给自己设计个MIS吗?
对于普通住宅楼,基本上已经是有固定模型了,所以设计的时间往往要<<建筑的时间,但是程序设计目前看来设计的时间要>>编码的时间。Top
113 楼mozhu916(蓝是那么的天,白是那么的云)回复于 2006-08-19 11:31:18 得分 0
嗯,好贴,说得都有道理,见识了
Top
114 楼lysheng(自然)回复于 2006-08-19 15:25:08 得分 0
markTop
115 楼cfan_wang(不学武术是不行滴)回复于 2006-08-19 20:06:56 得分 0
Mark
Top
116 楼FEB15(张郎)回复于 2006-08-19 20:09:12 得分 0
这让我想起了木工。一块好的木材需要好的木工去挑选,经过斧子劈、刨子刨、锤子锤、锉子锉、油漆,才有了床和棺材,区别是一个给死人躺一个给活人躺。就是这么简单,估计保持了很多年的历史吧!到现在才有了危机,因为现在人活着躺钢床的有,死了躺瓷器小盒子的有。流行不用木头了。Top
117 楼boyzhang(张郎)(爱你爱到Windows没BUG的那天)回复于 2006-08-19 20:20:50 得分 0
MarkTop
118 楼xdspower(杂食菜熊)回复于 2006-08-19 22:01:29 得分 0
先mark
其次谈谈我的看法:
我觉得复用应该是有限度的,当然一些很基础很基础的东西可以做到随处复用,比如语言直接提供的基本运算符就可以看作复用,比如算法中的加法实现两个数的求和也是一种复用,但和一个类别的应用联系的层次下,就不要太苛求复用了,我想考虑好应用的实现情况下,在比较高的层次对以往经验进行借用就是很好的复用。
此外复用的目标有两个:减少编码工作、减少错误(这个解释一下:应为被复用的都应该是长期经受检验的优秀有效代码成果,当然比随意的再编辑一个出现错误的可能要少,也就是标准件出问题更少)Top
119 楼CAYU(中原)回复于 2006-08-19 23:18:55 得分 0
世界上需要很多相同的房子,物品,但不会需要两个相同的软件。
Top
120 楼bigc2000(公元2005年4月9日)回复于 2006-08-19 23:31:37 得分 0
真理不一定能够用实践检验
人类的认识能力是无限的,但不能认识的也是无限的,
Top
121 楼kwer(理想生活:白天种地,晚上上网 ) (▲▲▲▲▲▲)回复于 2006-08-20 01:50:37 得分 0
1.软件危机 与 OO 没有太多关系。
2.我们写的软件都是静态的,不能ML生小孩。
======================================================
codename11() ( ) 信誉:100
1. 人的智力是有限的,世界是越来越复杂的,人之所以能够用有限的智力建设并操控
越来越复杂的世界,靠的是层层抽象。
2. 原理:(建造大楼为例)
a. 最原始的状态:人的所有精力都放在研究制造砖头上,此时没有也不可能顾及如何
造大楼(因为人的智力是有限的)。
b. 砖头造出来后,人就不再考虑砖头,把砖头当作原料进行更高一层的抽象,开始把
所有精力放在用砖头造墙上。
c. 墙造出来后,人就不再考虑墙,把墙当作原料进行更高一层的抽象,开始把所有精
力放在用墙造房间上。
………………
最后造成大楼。
计算机科学"层"的概念特别突出(与其自身复杂性有关),例如:汇编层、高级语言
层…,操作系统层、网络层…,每一层都有自己关心的问题和处理对象。面向过程编
程中的自上而下层层分解的方法,也符合分层思想。
===============================================================================
只是方法论而已,有扔下一个种子,能自己生长为房子的事情吗? (完毕)Top
122 楼9731boy(叉叉TV - 班头爷)回复于 2006-08-20 12:14:00 得分 0
不要把问题复杂化了啦.
你可以边重构边设计.犯不着扯上危机这种可怕的词语Top
123 楼baoxx()回复于 2006-08-20 16:25:37 得分 0
一个从来被人忽视的软件容易失败及发展缓慢的原因
(上篇)(分四次刊出)
前言
软件的发展缓慢和容易失败一直困扰着广大软件从业者,但长期以来人们更多地是从技术、过程、产品、人等等角度去探究其原因。而本文试图从哲学的层面去探究。有趣的是软件与哲学有共通之处。哲学是集多学科之首,人称为智慧学的学科,是一种形而上的对事物的抽象而具有普遍指导意义的科学。它看到的是整片森林,而软件则是集人类活动经验之精华,具有极强操作性的智能化工具。它的对象是树木甚至枝叶。作为森林和树木的关系,软件的出现是人类文明进步的重要标志,自然和人类的社会、政治、经济、文化等方面的发展有着密不可分的关系。如果我们把哲学的思辨方法和软件的成功与失败经验联系起来研究,我们会发现软件发展的一个巨大的潜在力和更大的空间。
本文上篇将政治经济学,管理学,文化等视角来揭示软件失败的原因。而本文的下篇则从经济学的角度,对软件的业态,开发模式,市场模式,赢利模式等全方位去揭示软件成功的方向。希望抛砖引玉,并请专家提出宝贵的意见。
E-mail ;baoxx@zjunitech.com
blog:http://blog.ccidnet.com/blog/ccid/uid_16624.html
Top
124 楼wisdom_zh()回复于 2006-08-20 21:57:52 得分 0
简单就是好:)
我的blog:http://blog.csdn.net/wisdom_zhTop
125 楼songlife33(美女,偶们结婚吧)回复于 2006-08-21 11:19:45 得分 0
看完了,感觉就一个,大家都以一种世界终极理论的要求去分析和批判所有提出来的方法,不管是oo,还是op
我只觉得只要解决了当前现实需要,就算一个成功的方法,以后会出现什么方法,只有上帝才知道喽,呵呵,大家等待上帝解决问题吧,呵呵Top
126 楼universee(吾乃太极语言之父)回复于 2006-08-21 18:53:50 得分 0
markTop
127 楼universee(吾乃太极语言之父)回复于 2006-08-21 18:55:52 得分 0
Wolf0403(完美废人·无良版主) ( ) 信誉:121
有谁记得 universee 和他的 太极 语言?把代码片段抽取出作为一个 code 概念加以复用,回归最底层,也是最可靠的复用,确实很有道理:)如果能够对这些 code 片段加以标记,使计算机能够理解和复用它们之间,以及它们与问题域之间的联系,计算机辅助程序设计应该还能进一步大幅提高软件构建效率。
至于设计……那是分析问题领域的干活,难度取决于人对自己世界的把握程度和对复杂问题所能达到的掌握程度,认命

