作者 内容
 sealw  通用平台有多通用?——概念完备性及其它
 

看到大家对一个彻底解放(解雇?)程序员的贴子讨论激烈,想起自己写过一段与之有点关系的小文,欢迎大家斧正!

"As always, if you propose to build something, make sure it has some conceptual integrity--it should not be merely a collection of unrelated "features". And build it in increments, not all at once."

--Software Tools by Kernighan and Plauger, p. 250

Brooks在它的人月神话中说:对一个产品来说,概念完备性是最重要的。但是怎样才算是概念完备的?我试图以我的经验来理解概念完备性。

对于一台硬件计算机来说,它提供了一套指令集,即机器语言。机器语言是概念完备的,用它可以完成所有机器能完成的工作。Assembler和机器语言差不多。在这一个层次上来说,概念包括内存地址,寄存器,比较,跳转等。

如果一台计算机还提供一个C编译器和C运行时刻库,那它就提供了另一个层次的概念完整性。在这个层次里的概念是指针,数组,变量类型,结构、函数等。一个C程序员可以仅仅工作在这一层,而完成很多的工作。虽然C运行时刻库中的很多函数只能用该机的汇编指令来实现,但C程序可以完全不了解汇编。C用另一组概念把汇编层次的概念封装掉了。

如果机器提供一个操作系统,那程序员面对的就是一组系统调用。那里面会有创建进程,线程,进程间通信,资源锁定,文件,中断等概念。

进一步,如果机器提供C++编译器和象Qt这样的类库,它就引入了类,对象实例,方法等概念,当然还保留了指针的概念。C++程序员可以工作在STL,Qt所提供的一组对象概念上,而很少需要他有特定硬件平台的汇编知识了。

如果机器提供J2SE JDK,那工作在这一层的程序员可能从来不知道指针这个东东。他们谈的是类,对象实例,对象引用,按值传递和按引用传递,以及JDK提供的那一堆类和方法。那是一个汇编程序员可能完全不了解的世界,那里面有象MVC之类的pattern概念。

如果机器提供一个象JBOSS那样的Application Server,那将引入服务器端组件,分布式组件,组件访问控制,命名和目录服务,分布式对象事务等等概念。

我想我已经描绘了整个宇宙了。我们看到了一组组的概念集,这些概念集从纯粹的计算机概念,越来越朝着现实世界的方向发展了。所有的努力,都是为了开发最终用户系统的费用和品质。

插入一个问题,在一台只提供了指令集的机器上,怎么样用最小的费用提供一套最具品质的电子商务系统?

答案很明显,你不能用汇编直接来写电子商务系统,你必须借助于那些中间层次的概念集合。汇编的世界离电子商务的世界距离太远了,不能直接到达。如果一个汇编程序员和一个搞电子商务的客户坐在一起,他们谈点什么好?这也是很多书提到的,用户无法去了解链表,栈等,那些概念还是离用户的世界太远了。

一个程序员有哪些概念决定了他的世界,一个程序员需要哪些概念?

在eXtreme Programming的模式里,程序员跨越着几个世界活着。他是系统分析员,要和用户交流需求。他是设计师,体系结构设计,模块设计和函数设计都由他完成。他是测试人员,写单元测试和集成测试。他也要写文档。

程序员可以选择自己生存的世界有多大。典型的是日本的程序员。他们不知用户是谁,这个程序是干嘛用的,分析和设计是怎么做的,文档由谁来写。他们只是按1234的要求完成代码。

再有一个问题就是分析和设计之间的鸿沟,设计和实现之间的鸿沟。我认为其根本原因就是分析师,设计师和程序员活在不同的世界里,做分析的不懂设计和实现,做实现的不懂分析和设计。他们之间存在着沟通问题。

如果要提供一个通用的MIS平台,既能用于医院MIS,又能用于电力系统MIS,这个平台该是什么?好象答案只能是Application server了。

在Application Server之上我们做些什么工作呢?如果我们需要做一个公共免税仓库管理系统,它离一个Application Server还有多少路要走?如果是一个专门做仓库管理系统的公司,他应该有一个通用仓库平台,在上面有普通型仓库和制造业仓库,在上面还有公司专用仓库和提供租赁服务的公共仓库。这样离公共免税仓库就不太远了。在这样一个物流系统大行其道的日子里,做一个“仓库世家”的产品不是很有意思吗?你可以在仓库管理的概念层次上和你的用户沟通。 

 02/06/24 16:13 酷帖!    臭帖!    回复  
酷帖评价:           臭帖评价:
返回页首
 风雪漫天  好文章,发散性很强。
 
 02/06/24 16:28 酷帖!    臭帖!    回复  
酷帖评价:           臭帖评价:
返回页首
 sealw  和和,我知道你想说“不知所云”。没关系,很多人都这么说我的。
 
 02/06/24 16:36 酷帖!    臭帖!    回复  
酷帖评价:           臭帖评价:
返回页首
 Charity_Zhou  上贴错了,呵呵。好文章,适用性广,本身就通用。
 
 02/06/24 16:36 酷帖!    臭帖!    回复  
酷帖评价:           臭帖评价:
返回页首
 众妙之源   思路很清楚
 

完备性就是一套正交集,永远无法代替这套正交集的所描述的空间,所以人的因素是永远不可能被清除的。关键在于这个自动得正交集和我们希望解决问题的正交集,越接近越好,这样就可降低我们的工作强度。

 02/06/24 16:37 酷帖!    臭帖!    回复  
酷帖评价:           臭帖评价:
返回页首
 smilemac   写的不错
 

越通用的概念,要想获得其完备的描述,你就需要用越抽象的概念去定义它,这样,它距离具体的需求(具象的描述)就越远,你从抽象到具象需要走的路就越多。(最通用的概念也就是最抽象的概念----道,呵呵)。所以,最通用的平台当你研究到最后,你发现一个世纪前就有了,就是图灵机。

 02/06/24 17:51 酷帖!    臭帖!    回复  
酷帖评价:           臭帖评价:
返回页首
 sealw  关键就是定义一个完备概念集,并把它做出来。
 

定义概念集和实现概念集两个行为是相互穿插进行的。

所以如果要描述一个新的系统,我期望了解这个系统有哪些不同的概念?为什么是这些概念而不是其它概念?这些概念借由什么机制来实现?特别是描述一个大家从来都没见过的系统。

这令我想起施乐Pola Alto实验室里那些用Smalltalk开发GUI程序的前辈们。

 02/06/24 18:32 酷帖!    臭帖!    回复  
酷帖评价:           臭帖评价:
返回页首
 commondata   回复: 通用平台有多通用?——概念完备性及其它
 

如可以将三大中间件平台CORBA、EJB和DCOM/COM+集成在一个网络集成总线平台之上,我想它的通用性应该足够了,这也是我们一直努力的方向。目前,我们已经具备将CORBA和EJB集成在一个网络集成总线平台上。
希望和你进一步交流。

 02/06/24 19:03 酷帖!    臭帖!    回复  
酷帖评价:           臭帖评价:
返回页首
 w_rose   或许我们恰好处在一些小系统“组合”的历史阶段里,但是并不只要“组合”就能开发所有系统。一旦“组合”产生了太多的庞大的软件怪物,“灵巧”就要占据上风了!但是总的来说,软件是越来越灵巧,灵巧的软件需要深思熟虑。
 
 02/06/24 21:02 酷帖!    臭帖!    回复  
酷帖评价:           臭帖评价:
返回页首
 w_rose   “将商业规则完备地写到一个软件库里”,好多年来都使许多大公司的不成熟的项目经理头脑发热!但是问题是“拿出一个商业规则方案来”,这个要求能把他们真正吓跑了(除非他不是程序员而是...)!
 
 02/06/24 21:11 酷帖!    臭帖!    回复  
酷帖评价:           臭帖评价:
返回页首
 w_rose   关于“逻辑完备性”的定义
 

任何一套符号系统(包括任何种类自然语言,虽然自然语言充满歧义)都是对一定事物的规律的反映。这套符号系统越简单并且没有歧义,就越强大。当然人脑的已经开发利用的空间有限的,并且容易忘事,所以我们不会仅用二进制来思考问题。

如果这套系统的每一个推理步骤都在所反映的对象领域存在一个对应的证明步骤,则这套系统是正确的。

如果他是正确的,并且对象领域每一个证明步骤都可以在这套系统中对应找到一套推理步骤,得到相同结论,则它是完备的。

因此不需要证明符号系统与所反映的对象领域的表现方法一致(也不可能),只需要是完备系统,就能放心地使用。

对于某些科学系统(比如加减法),针对已经发现的属于此领域的自然现象,可以通过科学方式证明它是完备的(不外乎通过枚举和归纳两种方法)。如果一个人拿出新的一套理论,他就应当仿照前人的方法证明自己理论的完备性。

顺便指出一个事实,存在有“面向对象的汇编语言”,他不比Java难学。只是要让一般程序员追捧还需要商业上的许多考虑。

 02/06/24 21:28 酷帖!    臭帖!    回复  
酷帖评价:           臭帖评价:
返回页首
 raincy   有限通用
 

同意,一个可以运转的系统必须是自证的,这种自证
建立在一定的前提条件的基础上,符合条件,则系统
可以良好的运转。我们之所以说某些系统是不可能的,
是因为该系统的基础条件是无法满足的,“永动机”
之所以无法实现,就是因为它的基础被证明是不正确
的。
离开物理的世界看,人类的各种活动也是一个自证的
圆环,它的基础是各方利益的保障,并为达到这个目
的而产生的一系列被参与成员遵循的规则。
由此看来,某一问题域内,纯理想的角度上的通用平
台是可以实现的,只要你能制定一套完备的规则并吸
引成员参与其中,那么其间的管理平台自然是通用的
了。即使是这样的通用,也是局限在一定范围内的。

只要有能力制定一套标准,就是通用的了。

 02/06/25 11:34 酷帖!    臭帖!    回复  
酷帖评价:           臭帖评价:
返回页首