道德经解道之二:有之以为利 无之以为用

道德经其实真是大道至简的一门哲学,如何追随自然规律,并顺势而为,我们设计企业软件也是这样,Martin Fowler曾经对企业软件说得很透彻:企业软件就是一个跟踪Tracing系统.

既然企业软件是一个跟踪系统,那就不能跟错,那么它跟的是什么?如果跟踪钱money,就是财务金融系统;如果跟踪货物就是采购物流销售仓储系统;如果跟踪人就是管理信息系统。总结一句:它跟踪的是我们现实生活中的流程规律,关于这一点,其实为我们明确了企业软件的领域范围,领域范围决定办法和措施,问题决定工具,你不能拿老虎钳当做锤子用。

其次,企业软件就不能跟丢,现实规律是不断变化,只不过周期不象股票周期那么短暂剧烈,但是变化是其本质,那么企业软件跟着变化走,就很容易跟丢,老子说:善抱者不脱,善于抱紧跟随的就不能脱离,这对企业软件更加重要。

通过以上简单分析,可以明了中国古老的哲学对于我们开发现代企业软件依然有借鉴作用。这也说明中国先秦古人的智慧。

老子的道德经哲学告诉我们看待分析事物的方式,有助于我们和规律中美妙之旋共振(Evans DDD引言),例如:

三十辐共一毂,当其无,有车之用。埏埴以为器,当其无,有器之用。凿户牖以为室,当其无,有室之用。故有之以为利,无之以为用

看看网上通用解释(http://muyuya.lingd.net/article-474720-1.html):三十根辐条汇集到一根毂[GU第三声]中的孔洞当中,有了车毂中空的地方,才有车的作用。揉和陶土做成器皿,有了器具中空的地方,才有器皿的作用。开凿门窗建造房屋,有了门窗四壁内的空虚部分,才有房屋的作用。所以,“有”给人便利,“无”发挥了它的作用。

这个解释对于“当其无”这一句有些牵强附会。更有甚者,将它向修身养性方向引导,这是道教的阴谋,见这个解释:http://zhidao.baidu.com/question/2384641.html

其实,我们搞面向对象分析设计的,看这一句很好理解:基本是只身庐山中,不识庐山真面貌以及横看成岭,侧成峰的意思,对象取决你关注什么?

下面是我的理解:三十根辐条合起来是一根毂[GU第三声],但是当你不再关注这个车轱辘时,你才会如何使用车,换句话说:你成天只看到车轮,只和车轮打交道,怎么会开车呢?这也是盲人摸象的意思。揉和陶土做成器皿,如果你成天在做陶器这个事情,你怎么会用器皿呢?或者说,当做完陶器,你才会用到陶器;开凿门窗建造房屋,当你完成了房屋建造,才会有房屋的作用。

所以,有之以为利,无之以为用,也就是说:当你身处其中有之的时候,它对你是有好处的,你有一技之长啊,你会做车轮,会做陶器,会盖房子,当你没有它的时候,虽然利失去了,但你可以用它,享受用它的乐趣啊。

比如我们的工作事业,当你有工作时,你可以赚钱(这是利),但是当你失业的时候,你就可以用钱(这是用之)。只有这样才顺经济规律而动,渡过经济危机啊。

总得来说:老子这句说明我们思维动态缩放的重要性,就象看地图,当你仔细看一个地方时候,需要放大镜,关注它,但是当你纵观全球地图时,你原来的关注点就没有了,这个感觉我们在用google Map时最有体会,需要不断缩放,其实这种方法对于任何事情都是这样的。

用我们企业软件术语来讲:就是领域范围(Domain)不一样,这就是Domain的意思,真理也是有范围,只在这个Domain区域内,你的道理是对的,但是如果到其他范围或更广阔的范围,你的真理就变成小不点,微小足道,我们通常称之为“正确的废话”,平时生活中,说说正确废话没有关系,但是如果我们的软件都是正确的废话,那就没用了,真正的无以为用了。

所以,我们企业软件建模特别讲究Domain Model,在一定范围内的模型,“三十根幅条”在“车轮”这个范围内是正确的模型,但是对于整个“车子”来讲,它就变成无了,“车子”只由“车轮”这个高聚合子对象组成。

如果不懂老子这个哲学,那么你就经常在分析“车子”时,将“三十根辐”直接作为“车子”一个聚合子对象,这就是眉毛胡子一把抓,这是我们经常范的错误,比如,“订单”中有多个“采购商品”和“数量”,那么你建模时,会将“采购商品”和“数量”直接作为“采购单”对象的子对象,你没有看到其实存在一个“采购单条目”来封装采“购商品”和“数量”,正确的应该是:“采购单”、 多个“采购条目”、 “采购商品”和“数量”。这就和“车”、 “车轮” 、“三十根辐”一样的层次。

所以,企业软件就是一门哲学,哲学能够帮助更加认清世界本质,给你一双慧眼,让你明,如果你不但明,而且能够顺势而为直至无为,那么你就是一个真正有道德的人,玄德之人,厚德之人。

谁说程序员和道德无关呢?关键在于我们要还清道德的本义并掌握它。

[该贴被banq于2008-12-31 10:39修改过]

落到实处,个人以为正是“接口与实现分离”的重要性。

也就是说,对于设计良好的接口来说,实现是“空”的(也就是说不要去关心如何实现)。对于“车”这个接口来说,“轮子”是“空”的,而对于“轮子”这个接口来说,“三十根辐”也应该是“空”的。

我觉得,其实在我们的开发中,一直关注的点是DB。DB就相当于车轮,那真正的汽车我们却从未整体关注,或者说我们是以车轮为目标来整合汽车(面目全非).
或者说我们现在是以车轮制造者的身份来制造汽车。
[该贴被ITfuture于2008-12-31 16:22修改过]

三十辐共一毂,当其无,有车之用。埏埴以为器,当其无,有器之用。凿户牖以为室,当其无,有室之用。故有之以为利,无之以为用

这句话还阐述一个本质的利用之道:创造一个事物和使用一个事物是有不同的规律和道理,没有高低之分,是一对有无的矛盾关系;这就我一直提倡的电视机概念是一致的,你买电视机是为了使用它,而不是研究它的原理;国外软件行业谚语“不要重复发明轮子”也是这个道理,如果有轮子用,就直接利用它,而不是再发明一个相同的轮子,造轮和用轮是两回事,也没有高低之分。

不懂这个普通道理就会走很多弯路,范很多可笑的事情,比如有人对框架就有些生畏,认为使用框架久了,就成为框架的奴隶,就没有自己的东西,这就是不明白制造框架和框架使用是不同之道,两者是有无的关系,怎么会发生你使用习惯框架就不会制造框架这些可笑的推理结果呢?

有些人学习框架,首先从研究框架本身源码开始,这也是错误了,应该从研究使用框架的案例源码开始,而不是框架本身。

还有些单位本来就是软件应用单位,也就是用“车”单位,但是他还考程序员一些造车知识:算法数据结构等,比如:一个车轱辘有几根条幅,三十就是正确答案,哈哈。

然后更多人认为算法数据结构就是基础,如果好好读了你老祖先的文化和哲学,你就知道,基础也是有范围,算法数据结构编译原理是制造软件语言包括JDK库(相当于制造车轱辘)的基础,而不是使用软件语言(相当于用车)的基础。

所以,我们实在应该对我们过去接受的所有教育和思维清零,如果你还是所谓中国人后代,老子就是第一,就从老子文化出发重新思考你过去每一点一滴。

[该贴被banq于2009-01-05 08:16修改过]

这跟物质组成一样,分子由原子构成,但原子一般而言可能比分子还要复杂。

不同时期,过来看jdon banq的帖子,都感觉收获颇多,thks

行了,别道德经了,实在不懂设计模式怎么就和道德经有关?不要乱联想好不好。这些所谓道家虚无缥缈的东西不要也罢。

>实在不懂设计模式怎么就和道德经有关?
两个都是抽象思想,OO是哲学,不是算法,这点是想通的。

道德家崇尚无为。可OO最终还是要一条一条语句写出来。因此,向老子学是对的。最高目标就是以后不用写码了。

两个都是抽象思想,OO是哲学,不是算法,这点是想通的。

我极度赞同此说法, 思想最重要,是内力, 至于其他在我眼里都是兵器, 趁手不趁手而已.

老子对这方面的认识同样也阐述了一个很好的道理:实现是可以千变万化的(各种数量或种类的车辐),相对稳定的是接口(车轮)

楼上理解角度不错,两个事物组装是通过接口进行,相互都有让步,才能融洽成为一体,房屋首先让自己空,才能装进新的东西,我们要让自己学习新的东西,必须把以前知识搬出去,做好接口准备。

banq讲的每句话都是经过深思也会得到相当多“过来人”的认同。
但我想提醒一句,对于还在摸索阶段的初学者,更多的注意力,仍应该在基础即“数”上,而不应该急于去悟“象”。有“象”的意识足矣。
毕竟,基础是“数”,数不精,何来象。不知合适否,个人认识。
清朝的闭关锁国以至被“数”精的列强掠夺,也许是过于依赖“象”了。。。
[该贴被aden_zhang于2009-04-25 17:25修改过]