软件之道 -- 道篇全文

前言

      软件作为信息时代的核心,由于它的抽象性、不易见性等,使得软件设计开发过程变得复杂、难于治理,开发团队如同在焦油坑中挣扎的巨兽,美国软件泰斗Fred Brooks在1987年发表的经典论文《没有银弹》中指出没有任何一项技术或方法可以能让软件工程的生产力在十年内提高十倍。25年过去了,我们在软件工程方面仍然没有根本性的突破,理论界和实践领域一直在努力探寻。
      诸事有道,老子的《道德经》把“道”字推到了一个哲学的至高位置,使之更加抽象,甚至有些神秘;软件之道何在?如果我们掌握了软件之道就能够解决软件的根本问题吗?能够消灭软件领域中的人狼吗?人们通过数学、逻辑学、工程学等多学科对软件工程进行研究,试图掌控软件的根本,但目前为止收获甚微。
      《道德经》是东方圣人李耳的不朽典籍,军事、政治、哲学、医学、武学等都将它视为经典,对各种学科具有普遍的指导意义,那么它是否也适用于软件领域呢?如果我们悟透其中之精微,是否可以登堂入室窥见软件之道的真容呢?这里我想引导读者进入《道德经》的神圣殿堂,努力用东方智慧来审视我们软件领域遇到的问题,或者努力把它视为软件领域的经典认真研究,看看能够对我们有怎样的启迪和帮助。
      《道德经》成书于公元前700多年,由于时代久远加之语言文字的发展、语意语境的变迁、传抄印刷过程中的错漏等,导致后人理解的困难和谬误的产生,甚至蒙上了一层迷信和宗教色彩。事实上它是一部哲学著作,它从哲学的高度阐述了宇宙万物的本原和相互关系,它既是认识论亦是方法论,因此对软件领域必有深刻的指导价值,它阐述的是万物之道亦是软件之道啊!
      纵观《道德经》全文,它的观点和精神是科学的,认为万事万物都不是简单机械的,诸多因素相互关联、相互影响、相生相克,即使你掌握了一个事物的本源,也需要因时、因地、因势、因人的综合分析治理;对于软件也是同样的道理,因此软件之道不仅涉及软件本源和根本,同时涉及到企业精神、团队合作、设计师风采、需求管理、设计纲要等等,《道德经》在这诸多方面都给我们指引了方向,做出了精辟的论述。




      深夜,Brooks先生正在苦思冥想,20多年前他发表了著名的论文——“没有银弹,软件工程的根本和次要问题 ”,提出:“没有单纯的技术或者管理上的进步,能够独立承诺在十年内大幅度地提高软件的生产效率”。现在20多年过去了,银弹依然没有,人狼大肆泛滥。他怀着焦虑、苦闷和纠结,苦苦思考着,类似的情景在最近的十多年里经常发生,“没有银弹”,我为什么写下这样魔咒,他感慨着、自责着,苦闷、绝望时刻围绕着他,折磨的他日渐消瘦。
      晴朗的夜空,繁星点点,Brooks依靠在沙发上又陷入深思,恍惚间他来到了一个空旷、神秘、祥和的境界,眼前出现了一座高大而威严的殿堂,隐约间他感到一股神秘的力量吸引着他,他一步一个台阶地朝殿堂走去,迈过八十一个台阶,他来到了大殿的正门,门豁然顿开,Brooks惊奇地看到四位圣人端坐在大堂之上,慈祥而庄严。“啊!这是人类智慧的尊者”,他意识到,我必须把握这个机会,向圣人求教,他们一定能够为我指点迷津。
      想到这里,Brooks首先来到上帝面前,虔诚的拜伏下去,未等他开口,就见上帝和蔼地说道:“孩子,我创造了一切,包括那困扰你的软件和困扰你的问题,你真心地去爱它们吧,一切苦闷、烦恼就会自然消失。”说完他合上双眼,沉静的如广袤的宇宙。
      Brooks若有所思,他又来到佛祖面前,佛祖哪庞大的身躯、庄严的面孔,使Brooks感到敬畏,他刚俯下身,就听到一个洪亮、宽厚的声音说道:“小施主,一切起于信,你认为没有银弹,它自然就没有,你坚信它有,它自然就有了。”说完佛祖合上双目,庄严中透着慈祥。Brooks深深的一阵自责,撕心裂肺的剧痛穿过他的躯体,瞬间又灭度了,他在佛祖宽洪的音波震荡下,领略了佛学的真谛,他略有感悟,但依然困惑。
      他转身来到默罕默德面前,一个铿锵的声音传来:“将程序员们训练成无坚不摧的钢铁战士吧,人狼自然就不存在了”,Brooks抬头仰望时,先知已经恢复了沉默,他思考着,心理又一阵纠结。
      他来到东方圣人老子的面前,满怀期盼和崇敬之情拜伏下去,刚要开口就听到了一个慈祥而空灵的声音传来:“孩子,我了解你的痛苦,三位圣人已经为你指明了方向,只因你天性未开,参悟不透,我给你一本典籍,回去慢慢研读吧。唉!可怜的孩子。”,只见他老人家拂尘一抖,一个木匣迎面朝Brooks飞来,他伸手去接,就觉的一股巨大的力量向他扑来,身躯一晃就从殿堂上跌落下来……
      依靠在沙发上的Brooks使劲地摇着身体,睁开眼,才意识到又是南柯一梦,然而让他惊喜的是手中居然真的捧着一个古色古香的精致木匣,他兴奋异常,急忙打开,顿时万道霞光、紫气环绕,一部《道德经》呈现在他的面前。
      Brooks如获至宝,经过十年的苦心研读,多次来到中国,请教了无数国学大师,终于参透全书,圣人的思想虽天马行空,似无章法,但大道通明,读后如醍醐灌顶,豁然开朗,茅塞顿开、迷茫尽失,大彻大悟的他盘腿而坐,面向东方,怀着万分崇敬的心情,深深的拜伏下去,顿觉全身轻灵,飘飘如仙,欲归去来兮……,突然那个慈祥而空灵的声音又一次响起:“Brooks,你尘缘未了,你还有任务没有完成。”,Brooks顿时醒悟,“啊!圣人竟然叫出了我的名字。对,我必须把这本宝典,翻译成程序员们都能看得懂的书籍,以拯救IT民工于苦海啊,这是圣人的期盼,也是我的责任啊”。于是,他在首页上写下了——《老子的软件之道》,并开始奋笔疾书。

什么是哲学,兼谈如何理解老子的道德经

      哲学是科学家的宗教,宗教是百姓的哲学。
      这是我个人的一个观点,我认为哲学是解决自然科学无法解决的问题的一门科学,换句话说,哲学是科学的科学。哲学也解决不了的问题就只好求助于宗教了,因此许多伟大的科学巨匠最终都成了虔诚的教徒。
      但是随着科学的日益发展,哲学的领域不断受到挤压,它似乎处于比较尴尬的地位,但我相信哲学将永远存在,并越来越发挥其重要作用,因为当人类知道的越多时,会发现不知道的也越多。
      老子是我国古代的先哲,是一位伟大的思想家、哲学家,代表了无尚的东方智慧。
      老子的《道德经》是一部伟大的哲学经典,它反映了东方圣人的宇宙观、人生观、认识论和方法论,由于它的高度抽象,使得它具有广泛的适用性,可以说放之四海而皆准啊;因此军事家认为这是一部军事战略著作,政治家认为这是一部有关权谋的经典,武术家则认为这是一部武林秘籍……
      但是由于道德经成书年代久远,文章言简意赅,加上概念的高度抽象以及文字和词语的历史变迁,使得人们很难理解它内容的准确含义,甚至造成很多误读和误解,例如:
      “绝学无忧”很多人翻译为放弃学习就没有忧患了,这真是对老圣人天大的亵渎,他老人家就是管理图书的,几乎研读了当时所有的书籍和典章,是一位著名的大学问家,孔子曾经向他求教;他怎么会提出这样愚昧的观点呢,绝无可能吗。
      其实很简单,绝学无忧就是说“最高的学问就是无忧无虑”,换句话说“无忧无虑是学问的最高境界”,多么深刻!实际上理解道德经并不困难,我们首先要掌握书中定义的一些高度抽象的名词和概念,然后再理解老子的一些基本思想,这样读道德经就没有困难了。


      名词概念


      这是本书最重要的概念,我认为它有两个方面含义,首先从“无”的层面看,道代表一切事物(这事物既包含物质亦包含精神)的根本规律——天地之始;其次从“有”的层面看,它是构成事物的最基本单位——万物之母。实际上目前的物理学研究成果,已接近证明老子宇宙观的正确性——宇宙之初没有任何物质,只有无穷的能量集中在一点,它扩散开去,两秒后氢元素诞生了,然后是氦元素……,经过几十亿年的演变,宇宙就呈现出目前我们看到的样子。
      是道的另外一个名字,它是一切事物的根本规律,也是产生事物的基本动因,它是概念层面的道、是精神层面的道。
      是道的又一个名字,是构成万事万物的最基本粒子和基础构造,是物质层面的道。
你认真研究道德经就会发现,老子在开篇就首先介绍了上面的基本概念,如果你不能正确地理解这些抽象的概念,后面的章节你就更难于理解了。
      “有”、“无”还有另外一层概念,它是一个高度抽象了的名词,对于不同的事物可以代表不同的具体概念;就如我们在会计系统中使用“借”“贷”作为账户行为的一种抽象一样,随着账户种类的不同,借、贷代表的具体含义也不同。
      “道”、“有”、“无”作为一种高度抽象的哲学概念,它不仅适用于物质世界,而且适用于意识领域,这是东方哲学思想的高深之处;同时我们要打消对这些抽象名词的神秘感和迷信色彩,实际上哲学必须建立在抽象之上,抽象就必然不具体,因此就不容易理解,甚至产生了反感和不信任,认为这是迷信和伪科学,其实“道”“有”“无”就是一个抽象名词而已,像“借”“贷”一样,毫无神秘可言,总得为这些抽象概念起个名字吧, 不叫“道”就得叫“DAO”了:)。
      为了阐明具有广泛适用性的大道理,就必须先建立起高度抽象的概念。
      无为 许多解释都是根据字面的意思,望文生义,实际上忽略的道德经开篇对“无”的定义,无为,就是“无”的行为;也就是道的行为,就是合乎自然规律的行为,而非按个人的主观意志的行为。理解了无为的这个正确的概念,就容易理解无为而治了,可不是无所作为就可以治理一切了,而是要认真研究,按照事物的本性和客观规律进行治理啊,顺应大势而为,无为更不是不为。
      就是无为或无为的结果,它是道在某种事物上的一种具体行为和表象,亦可称为“道体”。老子在道德经中经常平等地看待二者,其实他们是“同出而异名”。“道”通常在无的层面,“德”则在有的层面;“道”无形无相,虽有大用但无可用(你不能拿来直接使用,只有正确认识、掌握它的人才能运用它);具体到软件行业,软件之道只是概念、理论、规律和规则,依据软件之道建立起来的软件生产体系。才是软件之“德”,方能在软件领域发挥提高生产效率和质量的具体功用。
      注意:“道”和“德”都是抽象的名词,并非我们目前通常理解的道德,更不是什么离奇古怪甚至迷信的东西,只是许多人的不理解和误解,才给它披上了神秘和宗教的外衣。任何事物都有其“道”,都有其“德”,道是永恒唯一的,德却有丰富的表现形式。
      道有大用却无可用,德无至用却可大用。
     “道”是无形无相的,需要我们去研究、去悟,德是由道演化而生,或由我们人类依据对道的认识设计制造,它只能接近于道,但永无止境,越接近道,它的表现就越卓越,生命力越强劲、威力无穷。
      另外,我们在道德经中经常发现“婴儿”“无极”“谷”“水”“江海”“朴”等名称,如果不能正确理解,会导致对全文误解。
实际上它们都是“道”(或者说非常接近与“道”的德)的别名,老子担心“道”过于抽象,于是他老人家从客观世界中选出最具有道性(接近道的)的事物,以此来揭示道的内涵,以便于我们对抽象概念的把握和理解。例如婴儿它具备许多道的特征,他饿了就哭、困了就睡,纯朴自然。
      这里“谷”是指山谷,“朴”是指天然未经雕琢的美石(玉--石之美者为玉)。
大家可以认真分析研究一下这些事物,它们有哪些共同的美好的品质特征?这都是“道”的一种表现,也呈现“道”的一些本质属性,深刻体会你就能有所感悟。

第一篇 道

你发现构成软件体系最基本的粒子了吗? 这是通往软件之道的门户。

1. 软件的本源-抽象

      圣人曰:道可道,非常道。名可名,非常名。无名天地之始。有名万物之母。故常无欲以观其妙。常有欲以观其徼。此两者同出而异名,同谓之玄。玄之又玄,众妙之门。
       世间万事万物都有其内在的规律、结构、构造、表象等等,老子称之为“道”,它是全息的、全方位的,因此任何的对“道”的表述都不是“道”本身,而只是一个方面,我们试图沿着老子《道德经》的思路探索软件之道。
软件之道是客观存在的,但并不是我们通常学习的那些条条框框;为这个软件之道命名是可以的,但不能用常规的方式命名;它需要从“无”和“有”两个层面命名,从无的层面,它可以称为一切软件的起始,从有的层面,它可以称为所以软件系统的造物主。
       实际上任何事物都存在“有”、“无”两层概念,通常对于事务“无”的层面,我们要注意观察其微妙的本源和本性,这样你才能把握本质;对于事务“有”的层面我们要细心观察它的状态、边界、行为模式和变化规律,这样才有助于对事物本体的理解,反过来促进对其本性了洞悉。(这时已经提出了“道体”、“道性”的概念,注意体会)
“有”和“无”它们实际上又是一个整体,只是不同层面的两个概念罢了,有无互生,听起来很玄妙,但实际上很容易理解,其实就是一个抽象的概念,软件设计的精髓不就是要依赖抽象吗,这可是登堂入室的大门啊,也是软件之道。
软件体系都是由“无”和“有”构成的啊,觉得有点玄了吧?这就对了,不玄就不是“道”了,别急,开个玩笑,举几个例子你就明白了。
       你看任何软件首先都是建立在一个想法之上的,这个想法就是“无”,它看不见摸不着。那些数据和代码就是“有”,它们在那个铁盒子里运行着。
       再说一个你熟悉的吧,类,就是你们OO中所谓的哪个类,它相对对象而言就是“无”,比方说账户类,它虚无缥缈,即不是全部账户也不是某一具体账户,它似乎什么都不是,但一切具体账户对象都是由它创建的。
       “无”、“有”只是一个高度抽象的名字,对于不同的具体事务,它们都可以有对应的具体名称。“无”是宇宙万事万物的源头和起点,“有”是构成宇宙具体事务的基础构造。世间万物都是无中有有,有中有无,无上还有无,有下还有有,听起来有点晕吧,认真思考深刻体会吧,对你编程会大有好处的,抽象是软件的本源啊。

      你在做类的设计时,可以非常好地体会有无互生的道理,你通过对具体对象的观察、思考、抽象,建立起了类(有生无),类又在你的软件系统中生成无数的对象(无生有)是这样吧,而这一切又诞生于你无形的思考和有型编码之中,妙啊、玄啊,玄啊、妙啊,这广袤的宇宙就诞生于这“有”、“无”之中。

     软件之道在于抽象,但软件过程充满了艰辛和困难,如何能够使软件开发过程变得更加容易呢?

2. 难中求易

      圣人曰:天下皆知美之为美,斯恶矣;皆知善之为善,斯不善已。故有无相生,难易相成,长短相形,高下相倾,音声相和,前後相随。是以圣人处无为之事,行不言之教。万物作焉而不辞。生而不有,为而不恃,功成而弗居。夫唯弗居,是以不去。

       现代科学之父爱因斯坦发现了相对论,实际上相对论可是老圣人最先发明的啊(开个玩笑)。比如美与丑、善与恶,易与难、长与短、高与下、前与后、音与声、有与无,它们的关系都是相互对立的,同时又是相互依存的。如果不能辩证地看待它们,矛盾就不可能得到很好地解决。世人多追求前者,而厌恶后者,其结果往往求之而不得。老子向世人指明的是,求“有”须向“无”中求;得“易”必须通过难。
       建立企业级的技术架构(ETA)是困难的,但是为了使具体的应用系统“易”与开发和维护,必须克服困难建立ETA;软件大师关注各应用功能的共性需求,思考设计与具体功能无关的ETA,不是侃侃而谈,而是敏于行动,建立起似乎无为无用的ETA;各种应用系统就能够如雨后春笋,在ETA的土壤上成长繁荣了,但它既不把持又不争夺和替代应用的具体功用,因此它能够成为应用的恒久支撑。
        ETA是应用软件骨架,的确非常重要,但构建软件有两大实体,一个是构建软件的人,一个是构成软件的代码,这两个实体如何治理呢?

3. 员工及代码的治理原则

      圣人曰:不尚贤, 使民不争。不贵难得之货,使民不为盗。不见可欲,使民心不乱。是以圣人之治,虚其心,实其腹,弱其志,强其骨;常使民无知、无欲,使夫智者,不敢为也。为无为,则无不治。

      员工治理方面,不要标榜所谓的贤良,这会使员工争名夺利,相互羡慕嫉妒恨,不利于团结;而要建立制度,建立科学合理的考核激励机制。引导员工不要单纯追其物质的愿望,而要有更高的精神追求;追求用户完美感受,用户满意了,和谐应运而生,程序员以此为荣,从而享受工作成果和工作过程。
     代码治理方面,使用抽象类和接口(虚其心)隔离实现层的变化,用丰富、完备的(实其腹)基础架构(强其骨)支撑应用体系,设计过程顺其自然,而不要人为做作、主观臆断(弱其志),利用最小知识原则(使民无知),使系统与系统、类与类、对象与对象之间尽可能少地相互了解,不要欲望强烈地去关心其他系统和模块,专心地做好自己的事。让那些自以为聪明绝顶的人,不去写那些炫耀技术、弄巧成拙的东西;剔除诸多的人为的奇思妙想,软件系统就容易治理了。

      虚其心 – 使用接口和抽象类。
      弱其志 – 就是不要主观臆断,苦思冥想制造怪物和混乱

     

      软件的关键在于需求,如何获得真实的需求是做好软件的前提。

4. 洞悉需求

      圣人曰:道冲而用之,或不盈。渊兮似万物之宗。挫其锐,解其纷,和其光,同其尘,湛兮似或存。吾不知谁之子,象帝之先。
      搞清楚做什么?目标是什么?是软件的根本,洞悉需求获得真实需求至关重要,怎样获得需求呢?
      首先你不要高傲自大,在客观的业务领域面前,沉下心、低下头,认真观察仔细分析,拨开表面的重重迷雾,剔除你头脑中的臆想、杜撰和纷争(挫其锐,解其纷);顺着事务脉络,剖析它的表象,渐渐的你就可以洞察事务的根本了,从而获得对事务本质的抽象了,你需要认真的分析、综合、反复推敲。
      事实上,万事万物的本源和规律就客观地摆在那里,在上帝之前就已经存在了,你发现的也只是你感知道的一个侧面。

      知道做什么仅是第一步,大型软件的开发是一个企业行为,软件企业需要怎样管理呢?

5. 企业管理

     圣人曰:天地不仁,以万物为刍狗。圣人不仁,以百姓为刍狗。天地之间,其犹橐迭乎?虚而不屈,动而愈出。多言数穷,不如守中。

      企业难于管理,软件企业的管理更难,但如果你理解了大仁不仁的道理,你就找到管理之道了。
      天地平等地看待万事万物,圣人视众生平等;公平、公正、平等的制度是管理之本,人治越治理越乱,以“不仁”之法方能至仁。
      你看广袤的宇宙,宽广而空灵,无私、无欲、无情,而万事万物自生自长,五光十色、气象万千、其乐融融。
企业的制度、规章要稳定适度(守中),多而易变必然导致混乱。
    

      不同企业的核心技术是不同的,应用软件企业的核心是什么?是企业技术架构!

6. 企业技术架构

      圣人曰:谷神不死是谓玄牝。玄牝之门是谓天地根。绵绵若存,用之不勤。
                                  
      应用软件的关键是要建立基础的、完备的与具体业务无关的企业应用架构ETA(这就是软件的谷神),这是整个应用的母体和根本,而具体的应用可以在此基础上,成长繁荣,但你也不要操之过急,急于求成,要有所克制,尊重客观规律,按客观规律办事,软件项目都有它客观合理的建设周期和生命周期,ETA建设也是一个过程,诞生、成长到成熟。

     企业技术架构如此重要,它应该是个什么样子呢?它具有怎样的特征呢?

7. ETA的特征

      圣人曰:天长地久。天地所以能长且久者,以其不自生,故能长生。是以圣人後其身而身先,外其身而身存。非以其无私邪!故能成其私。

      你一定知道天长地久这个成语!
      这和软件有关系吗?是的,有关系,只有你搞懂了天长地久的原因,你才知道如何建立企业技术架构ETA。天地无为,万物丛生,天地不去做万物之事,因此它才长久。
      ETA不应身先士卒,代替具体应用做具体的事情。
      ETA必须与具体应用良好隔离,才能既不影响具体应用,也不受具体应用之影响,因此能够独立长存。
      ETA不能怀有替代具体应用之私欲,才能够实现成就其它应用之本意。
软件与人类其他产品不同,没有磨损和消耗,整体的看它有“无”的特征,按理它应该有很长的寿命,但现在的应用软件却只有几年的生命期,究其主要原因是我们把软件做的太硬,更多的呈现出了“有”的特性,完全面向了具体功能。
天长地久才应是ETA的特征,具体软件寿终正寝也是大自然的规律啊。

      ETA不能仅仅是概念和规划,它必须落地为一个实实在在的软件平台,这个平台又该如何呢?

8. 平台若水

     圣人曰:上善若水。水善利万物而不争,处众人之所恶,故几於道。居善地,心善渊与善仁,言善信,正善治,事善能,动善时。夫唯不争,故无尤。

      圣人赞水,因为水的品行近乎于道。
      在软件系统中,企业技术架构平台及应用软件的工装设备(如:中间件、数据库等),就类似于水啊,它生于软件之道性,它居于应用之下,支撑、滋养、治理着各种应用,承担着琐碎、卑微、繁杂的“脏活累活”,提供着应用所需的一切基础功能,处理和隔离着外界一切变化。默默耕耘、无私奉献,即不介入具体应用内部,又不与之争功,因此没有过失,也不会制造混乱。

  

      平台仅是工具,只有得道的企业才能建好它、用好它,软件企业应该遵循怎样的企业之道呢?

9.企业之道

    圣人曰:持而盈之,不如其已;揣而锐之不可长保;金玉满堂莫之能守;富贵而骄,自遗其咎。功遂身退,天之道。      

     一个软件企业,当它掌握了软件之道,建立了企业技术架构体系,它的生产能力和发展速度会大幅提升;但是危险也会随即到来,要想稳健发展,还必须知晓企业之道。
      如果把企业比作一个茶杯,那么企业的理想、追求和价值观就是它的容量,它的产值和利润就是它里面装的水,装的太满不如留有一定空间,自满自傲必招败亡。懂得这个道理,并不是要你止步不前,而是要你扩大茶杯的容量及适当的“放水”——让利于员工、让利于社会。具体地说就是不断提高企业的理想与追求,努力为客户为员工创造价值、努力为社会、为人类多做贡献,多做慈善事业;这就是企业之道。

      ETA平台是软件企业的核心,它应该具有怎样的内在和外表呢?

10. 平台之美

      圣人曰:载营魄抱一,能无离乎?专气致柔,能如婴儿乎?涤除玄览,能无疵乎?爱国治民,能无智乎?天门开阖,能为雌乎?明白四达,能无知乎?生之,畜之。生而不有,为而不恃,长而不宰,是谓玄德。
      架构与应用之间能够高度统一、形神合一吗?架构自身内部能是一致和高度协调的吗?
      能够像婴儿一样,高度柔和可塑吗?(你要注意一个婴儿他不仅是身体柔软,更重要的是他可以成长,能够成长为各种人才,木匠、画家、软件大师、企业家、哲学家、政治家,圣人,无所不能啊!)
      剔除了华而不实的东西,运行稳定、坚固没有任何瑕疵吗?
      支撑应用、治理服务,没使用繁杂、玄巧、华而不实的技术吗?
     为应用预留方便灵活、易于拓展的接口,像一个可以繁殖各种应用的母亲吗?
      掌控各种关键技术,前后、内外融会贯通、四通八达。对各种技术的使用能够做到不关心其内部细节,对这些具体技术的内部变化甚至替换不受影响吗?
      各种应用在平台的基础上诞生并独立运行,但平台却不把应用据为己有,不把持和限制应用的成长和自由,这就是平台的美德和特征啊。
      怎样构建企业技术架构,本章给出的方向和指引,如果我们能够依据这样的思想去构建企业技术架构,就可以获得成功,就能够从根本上解决应用软件系统建设中遇到的困难。

      根据我们前面描述的ETA平台,它与具体业务无关不实现任何业务功能,它有何用呢?

11. 无之大用


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

      车轮的中空使车辆运行更加平稳,瓷器空虚的部分成就了它的功用,房屋有了空间和门窗,才有了房屋的作用,可见一个实体,完全依赖它的无(空虚)来实现其功用。
      因此在软件领域,作为支撑应用的企业技术平台,必须留有充足的空间和接口,以容纳各种应用;如果它实现了诸多具体业务,就如同一个装满杂物的杯子,无有大用了。
      这里的“无、有”又是另一个层面的抽象概念,无代表着抽象和空白,有代表着具体;例如:接口只是一个抽象的方法,抽象类中的抽象方法只是一个方法的空壳,但它们却至关重要,代表着设计水准,决定着系统结构。
      说一句许多程序员不愿意接受的话(但忠言逆耳啊,希望你能有所感悟),方法体的具体编码实现(算法)并不重要,重要的是为什么要有这个方法(方法的职责),它的输入输出是什么;你可能会说,我们程序员不就是写这些代码的吗,如果你说这个不重要,不就等于说我们不重要吗!别急,其实我也是个程序员,我们试想一下,如果一个系统所有的类、方法及方法的输入输出都设计好了(不再需要修改了),只是每个方法还没有具体实现,你是否认为这个系统已经接近完成了呢?
      算法重要乎?不重要乎?这是一个很重要的话题!
      搞软件的人贬低算法不就是贬低自己吗!算法当然重要,有多少人因为发明一个算法而获得诺贝尔奖,目前还没听说谁开发了一个系统获此殊荣的。
      但是,目前大量的基础算法都已经有了相应的算法库支持,我们不需要不停地发明轮子了,另外,高深的算法那是科学家们的职业领域,我们学会运用就好了。
      对于一个系统而言,具体算法并不重要,整个系统的构造、架构更加重要。
注重结构设计吧,不要随意的设计类和方法。

搞清楚了平台之大用,软件领域还有一个重要的关系需要理清,那就是表示层与处理层的关系。

12. 表示层与处理层

      圣人曰:五色令人目盲,五音令人耳聋,五味令人口爽,驰骋畋猎令人心发狂,难得之货令人行妨。是以圣人,为腹不为目,故去彼取此。

      绚丽的界面、美妙的声音和图像,他们的确能够给人带来愉悦,但过度追求,往往本末倒置,哗众取宠;在各种新技术中间游来荡去,会使你心浮气躁、行为失常;标新立异,使人偏离正轨。
     软件系统的关键是架构、模型和算法。
     表示层为目,处理层为腹,圣人教导我们要为腹不为目。
     要把两者分开,处理归处理,展示归展示,这非常重要。
     在软件设计过程中一定要把数据加工处理和具体的展示严格分离,许多不良的设计经常将两者纽在一起,不仅增加了复杂度,而且不利于变化,事实上,后台加工处理好的数据,可能会有多种不同的展示要求,例如:有的需要以表格的形式,有的需要以曲线的方式,有的需要显示,有的需要打印,展示层的需求可能五彩缤纷,但处理层却是相对稳定的。因此我们必须重视后端的设计,但后端有可以分为展示层和处理层,对外的服务接口(或API)就是展示层,处理层又可以进一步分为面向功能的服务和面向业务的基础服务,基础服务是更加稳定,稳定的部分是系统的关键和内核。
      在具体实现时,往往由于表现层需求的易变性,造成前端表示层开发的难度非常之大,因此必须给予高度重,为了降低表示层开发的困难,我们要遵循“易从难求”的思想,必须建立前端的平台技术,使前端开发简单易行。

     看到这里你似乎对软件之道有了些许了解,你或许跃跃欲试了,你真的想成为一名探路者吗?

13. 探路者
   

     圣人曰:宠辱若惊,贵大患若身。何谓宠辱若惊?宠为下。得之若惊失之若惊是谓宠辱若惊。何谓贵大患若身?吾所以有大患者,为吾有身,及吾无身,吾有何患。故贵以身为天下,若可寄天下。爱以身为天下,若可托天下。

      由于软件自身的抽象性,使软件行业的路途更加艰难;对于从事该领域的企业和相关人士,必须有充分的思想准备,在追寻和发展的过程中,会遇到各种困难,有成功、有失败,有宠有辱,只有那些全身心投入并热爱这项事业的人,才能够成功。
      工业领域的许多工程化思想值得借鉴,但我们必须注意不要进入误区,必须认识到软件工程与工业领域的不同,就工业的纯生产过程而言,软件就是简单的拷贝即可完成,几乎是零成本和不需要过程管控的,因此工业的生产过程对软件产业来说,参考价值有限。但目前许多理论却在套用这些工业过程的思想和方法,取得的效果有限也是自然的;软件与工业的这个本质区别,必然导致诸多根本性的不同。因此我们在探索软件之路时,必须充分认清软件自身的本性,寻找软件自身发展的科学之路。

      探路者在启程之前请了解一下软件的特征吧!

14. 软件的特征

      圣人曰:视之不见,名曰夷。听之不闻,名曰希。抟之不得,名曰微。此三者不可致诘,故混而为一。其上不皦,其下不昧,绳绳不可名,复归於无物。是谓无状之状,无物之象,是谓惚恍。迎之不见其首,随之不见其後。执古之道以御今之有。能知古始,是谓道纪。
      要想搞好软件,必须了解和掌握它的特征;许多学者总喜欢拿工业领域的管理模式来套用软件之开发过程,总是不得要领。
      我惊叹于圣人在数千年前对软件特征的描述:
      看,看不见;听,听不到;摸,摸不着。
      连绵不断、浑然一体。
      往上看,并非清晰可辨,往下看,也不是昏暗一片。
      恍恍惚惚,摸不着头,看不见尾;
      当你理出了头绪,你就找到掌握它的门道了。
      软件过程的不易见性是软件的重要特征,因此要治理好软件过程就要针对这个特征,努力使不易见和不可见的东西尽快可见,这样软件过程就易于治理了,可以说软件治理的关键就在如何于将软件过程中不可见的东西尽快可见,实际上无论是工业产品还是软件系统,其设计过程都是类似的,都是不易见的,但工业体系经过一百多年的积累,形成了一整套方法和标准,它通过图纸、木模等方式尽快将设计可视化,尤其是现代计算机软件的发展,我们为工业设计、模拟试验等开发了功能强大的软件体系,不仅提供设计软件,而且将设计直接转化为效果图,直接驱动模具生产系统制作出1:1的实物模型,通过3D打印机技术甚至可以直接生产出最终的产品,工业的这个体系是非常值得软件工程认真研究和借鉴的。遗憾的是“泥瓦匠住草房”,我们软件业确没有良好的软件设计平台和使软件可以快速呈现的工具,如果我们建立一套软件需求、设计、实现、测试、运维的体系化平台,让我们的软件分析师和设计师能够高效的、标准的进行分析和设计,在设计完成时能够立即将用户界面呈现出来,并能够模拟运行,就可以使分析和设计的成果尽早的可视化,避免需求的误解和设计的谬误,如果设计平台能够将设计成果直接生产目标系统的框架,就可以保证实施过程不会产生系统结构性错误,不仅可以提高实施的效率,更关键的是实施过程的差错限定在局部细节之中。因此建立软件需求、设计表达的基础模型,建立贯彻软件全过程的平台体现,才是解决软件生产的正确道路,才能够摆脱手工作坊式的软件生产方式。正如工业领域有多种设计平台一样,软件领域同样会因为软件类型、领域的不同需要不同的软件过程平台。

     

     平台仅是解决软件过程中的生产和表示环节,有了平台之后只是改进了生产方式,但是做什么、怎么做还是需要人来完成,这时需求和设计更加凸显出来,如何作出更好的软件,需要杰出的软件大师,什么样的人能够成为软件大师呢,老子向我们揭示了他们的一些特征。

15. 软件大师的特征

      圣人曰:古之善为士者,微妙玄通,深不可识。夫唯不可识,故强为之容。豫兮若冬涉川;犹兮若畏四邻;俨兮其若容;涣兮若冰之将释;敦兮其若朴;旷兮其若谷;混兮其若浊。孰能浊以静之徐清。孰能安以动之徐生。保此道者不欲盈。夫唯不盈故能蔽而新成。           

      软件大师在上古就存在了,他们微妙通达,各具风采,深不可测,很难描述,这里就勉强形容一下吧。
      他们穿着随意得体、舒服自然,在正式场合从不穿无领衬衫和裤头拖鞋;
      他们小心谨慎,如履薄冰,以免陷入危局。
      他们谦虚慎惧,与人相处,无贵无贱,无宗无派,对周围的人(四邻)团结友爱,谦诚有加,以礼相待,不因为有超常的智慧而傲视四邻,相反却主动接近他们,以沟通情感和意志,体现的是谦下之德。
      他们容貌庄重、恭敬郑重,爱人如己,敬重他人,对人有礼有节,如客人一般。
      他们精神涣然,不会为身外之物所侵扰,全心投入到软件事业之中。
      他们诚实、忠厚,至诚不移,像未经雕琢的玉,朴实而内敛。
      他们胸襟宽广,如同幽深的山谷。
      他们有时傻傻呼呼,令人捉摸不透,但当你静下心来,抛开杂念,就能看清他们的宏图远志——为软件工作者过上正常生活努力奋斗,为客户用上舒适体贴的软件孜孜以求不舍昼夜。
     他们从不自满,所以不断创新。

   

      有了平台,有了软件大师,剩下的就看我们要做什么了!

16. 再谈需求

      圣人曰:致虚极,守静笃。万物并作,吾以观复。夫物芸芸,各复归其根。归根曰静,是谓复命;复命曰常,知常曰明。不知常,妄作凶。知常容,容乃公,公乃全,全乃天,天乃道,道乃久,没身不殆。

      软件是以需求为基础的,因此做好需求分析是非常关键的,如何把握事物的本质,做好需求分析呢?圣人的思想能够给我们深刻的启迪。
      首先让我们得心虚空下来,消除心智的作用,排除一切杂念,沉心静气地研究业务、研究客户。
反复观察该领域内各种事物及其相互作用和发展变化,它们虽然复杂多变,但最终都会反映其本身的基本特征(归根)。
      事物的特征往往表现为静态特征和动态特征,其中静态特征属于事物的根本,反应事物的永恒规律,掌握了它就把握了事物的本质;不能认识和掌握事物的本质的、稳定的自然规律,而轻举妄动,就容易出乱子,容易为表象迷惑。相反,掌握事物的本质属性,就可以容纳和控制它的变化,能够掌控变化就具有灵活性和通用性了,具备了通用性,就能贯穿整个业务领域,从而遵循业务之道了,分清变与不变,让不变的稳定下来,形成系统的骨架,让变的更易于变换,是系统具备柔性和可塑性,这样你设计的系统就能够长久,使你的软件系统终生不会有危险了。

     

      现代软件企业需要体系化的企业级开发平台,需要配套的管理系统,需要训练有素的技术队伍,三者之间的关系和形态决定软件企业的层次。

17. 软件企业的层次

      圣人曰:太上,下知有之。其次,亲而誉之。其次,畏之。其次,侮之。信不足焉,有不信焉。悠兮其贵言,功成事遂,百姓皆谓:我自然。

      成熟的软件企业,都应有自身的开发平台和管理体系,但不同企业之间确存在巨大的差异。
     最好的企业,由于员工们已经与平台及管理体系做到了水乳交融,他们非常自然地使用这统一的平台,管理体系如影随形地支撑和呵护着他们,就如鱼在水中,仅知其有,不知其他,一切都和谐而自然。
      次一级的企业,员工非常喜欢他们的平台,赞赏他们管理体系,但不理解其精髓,不能够融会贯通。
     再次一级的企业,员工畏惧使用他们那蹩脚的平台,恐惧那混乱的管理体系。
      更次的企业,员工诅咒他们的平台和管理体系,因为他们那不成体系的平台经常给他们带来无穷的混乱,那些朝令夕改的规章制度,让他们无所适从。
     由于企业没有诚信,所以员工和客户自然就不信任它。
      最好的企业从容、泰然地应对各种挑战,因为它对自己的言行认真负责,注重建立激励员工的体系建设,员工在这个良好的平台支持下不断的取得成功,他们不知不觉,认为这是自己自然而然做到的。

     

      好的软件企业建立了各种各样的软件过程标准和规范,这是非常好的,但同时要意识到,比标准和规范更重要的是软件之道,是以开闭原则为基础的软件体系架构,正如松下公司的一句名言:任何标准都应该允许以非标准的形式执行。看看标准之上更重要的是什么吧。

18. 标准之上

      圣人曰:大道废,有仁义;慧智出,有大伪;六亲不和,有孝慈;国家昏乱,有忠臣。                              

      由于软件工作者不能遵循软件之道,无法对业务领域做出本质的抽象,他们只是面向功能、依赖具体,无法保证软件的灵活性和质量,因此用各种标准、规范来限制和要求;(大道废,有仁义)
     但是,当规范和标准建立起来后,自作聪明的人也出来了,认认真真搞形式,扎扎实实走过场,虚伪和欺诈也就产生了。
      由于企业缺少精气神,缺少团队精神,所以才强调团结、互助;
      由于存在混乱的代码,所以才出现了抓虫英雄。
      现在你知道比标准更重要的是什么了吗?

     

      标准能够帮助我们做出中规中矩的系统,但做不出来杰出的系统,知道了比标准更重要东西,你就有希望达到软件的更高境界了。

19. 更高境界

      圣人曰:绝圣弃智,民利百倍;绝仁弃义,民复孝慈;绝巧弃利,盗贼无有;此三者,以为文不足。故令有所属,见素抱朴少私寡欲,绝学无忧。

      最顶级的分析师是摒弃智巧的,他们能准确地把握需求的本质,从而使开发团队受益匪浅;大师一句话能省几十个人月啊。
     最顶级的设计师是摒弃规范束缚的,规范已经融入了他们的骨髓,同时那些条条框框已经消失,能够对事物进行更本质的抽象,从而能使设计更加科学合理,使开发团队恢复天性,使系统更具人性(系统具备人性不仅包含注重使用者感受、令使用者舒服,还包含更重要的一层意思,就是使系统具备人工系统一样的灵活性、可塑型,能够所需而变)。
      最顶级的工程师是摒弃个人私利的,他们都努力按设计要求做好本职工作,从不弄虚作假、斤斤计较。
但仅有如上三类大师还不充分,文档方面的工作还必须加强,以使软件过程和软件自身更加完备。
在分析和设计的过程中,应该努力保持淳朴自然,合情合理,消灭私心(只做该做的要事)和欲望(不做不该做的事)。
      设计的最高境界就是无忧!何为无忧?就是你设计的系统不用担心需求的变化、环境的变化、接口的变化、数据的变化……,总之,你的系统能够在未来的生命周期内,无忧无虑、从容地应对一切变化,伴随和推动业务共同发展。

   

      仅通晓了这些还不行,企业还必须有高尚的价值观,才能够引领员工志同道合,建设优秀的软件系统。

20. 企业价值观

      圣人曰:唯之与阿,相去几何?善之与恶,相去若何?人之所畏,不可不畏。荒兮!其未央哉!众人熙熙,如享太牢、如春登台。我独泊兮,其未兆,如婴儿之未孩;傫傫兮!若无所归。众人皆有馀,而我独若遗。我愚人之心也哉!沌沌兮!俗人昭昭,我独昏昏;俗人察察,我独闷闷。澹兮!其若海。飂兮!若无止。众人皆有以,而我独顽且鄙。我独异于人,而贵食母。    

      本章老子阐述圣凡之间的区别,我把它引申为一个优秀企业应具备的价值观。
      对员工和客户尊重、爱护与冷漠、呵斥是多大的差距啊!
      努力诚信经营与弄虚作假,又是多么的不同啊!
      因此企业必须以客户为本、以员工为贵,诚信经营,造福社会。
      人们畏惧的是无名无利,而正是这些名利荒芜了人类的心灵,而且对名利的追逐好像从古到今没有尽头的样子。
大家在追逐名利的路上,高高兴兴,如赴盛宴、如登高揽胜;而伟大的企业在名利面前淡泊恬静,无动于衷,就如质朴的孩童,勤奋忙碌,却似乎没有明确的追求(事实上却是志存高远)。
      众多企业似乎都欢庆有余,而它却好像若有所失,像是愚钝未化不解世俗;众多企业对利益都十分精明,而它却似乎糊里糊涂;众多企业对于名利斤斤计较、精打细算,而它却似乎心不在焉,内心淡薄、深沉得像大海一样,心怀高远,为崇高的企业目标不断努力;众多企业似乎都有所图谋,而它却似乎顽冥不化、节俭有加。
      它与众多企业不同,但却注重企业道德,努力为人类造福。

      谈了这么多,还是很空泛,企业应用软件到底应该是个什么样子呢?

21. 企业技术架构的形态

      圣人曰:孔德之容惟道是从。道之为物惟恍惟惚。惚兮恍兮其中有象。恍兮惚兮其中有物。窈兮冥兮其中有精。其精甚真。其中有信。自古及今,其名不去以阅众甫。吾何以知众甫之状哉!以此。          

      科学的企业技术架构ETA是遵循软件之道建立起来的,不同软件的表现形式虽然是多种多样、千姿百态的,但优秀的软件都有共性的框架(象)和构造(物),其深层包含着最精密的组件,而构成这些精密组件的就是那最基础的元数据(信息)和基础逻辑,通过元数据这基本软件元素,才能把握住软件的根本,这数据才是最基础和真实的,透过它就可以掌握软件的本源了,我对软件之道的了解就是靠这个。

      你理解这段话的深刻内涵了吗?理解了。祝贺你!你已具备了大师风范!

22.大师风范

      圣人曰:曲则全,枉则直,洼则盈,敝则新少则得,多则惑。是以圣人抱一为天下式。不自见故明;不自是故彰;不自伐故有功;不自矜故长;夫唯不争,故天下莫能与之争。古之所谓∶曲则全者」岂虚言哉!诚,全而归之。
      在第15节中我们描述了软件大师的特征,本节再向你展示大师的风采,卓越的软件系统设计是离不开软件大师的。
      软件大师在需求分析及设计过程中:
      为坚持正确的方向,他们不畏曲折、周旋,甘愿承受各种委屈,为的是保全系统的优雅、和谐与设计之美;
      甘愿承受各种误解,为的是纠正错误的观点,伸张系统的科学性与合理性;
      甘愿承在背后无私奉献,为的是整个团队取得圆满;
      他们不断推陈出新、与时俱进改革创新;
      个人所求很少,团队却获益匪浅;
      经常多思多虑,团队却少了许多困惑;
      他们能够遵循一致的思想体系,按照软件的自然规律确定正确方案和设计模式;
      他们不固执己见,所以对事物看得更加透彻清晰;不自以为是,所以彰明昭著。不自我夸耀,所以获得成功;不自高自大,所以为长期地保持虚心学习的姿态,掌握最新的思想与技术;
      他们从不争名夺利,所以在团队中没有敌人,能够得到广泛的支持;
      他们能够在设计的关键部位坚持按自然规律办事,在非关键部位又懂得谦让、折中,古人所说的“委曲求全”就是这个意思;
      诚,使设计归于完美啊!所谓诚就是真实无欺、守信无妄、言行一致、表里如一、以诚待人。
   

      卓越的设计来源于卓越的设计师 ------ Brooks.

    软件大师如此风采,软件企业应该如何作为呢?

23. 企业行为准则

    圣人曰:希言自然。故飘风不终朝,骤雨不终日。孰为此者?天地。天地尚不能久,而况於人乎?故从事於道者,同於道。德者同於德。失者同於失。同於道者道亦乐得之;同於德者德亦乐得之;同於失者失於乐得之;信不足焉,有不信焉。

     虽然我们听不见大自然的语言,但如果认真观察自然界的现象,我们会悟出许多真理,你看龙卷风虽然彪悍,但却来去匆匆,一般坚持不了几个时辰。暴风骤雨虽然来势凶猛,却不会超过一天。这种自然现象,虽然是天地所为,也不能长久。何况于人呢?因此企业要少说多做,少搞轰轰烈烈的内部运动,多做踏踏实实的基础建设和制度建设。
要努力按照科学、自然的规律办事。不要过于激进,不要搞形式主义,任何事物的成长都需要时间,都有其自身的客观规律,急于求成、急功近利往往适得其反。
      软件企业必须遵循软件之道,按照行业自然规律行事,就能走向发展的金光大道;
      能够按照软件企业的品行努力进取的,就能得到社会的尊重和认可。
      不能遵循软件行业自然规律的必然会失去自身的发展机会。
      遵循软件之道,你就会进入成功之路;
      遵守行业道德,你就能赢得良好口碑;
      如果你失去这些,失败就在不远处等着你(失於乐得之)。
      诚信不足,自然就得不到信任;企业要以诚信为本啊!

      设计师在软件企业承担重要职责,他们应当遵守哪些规则呢?

24.设计师守则

      圣人曰:企者不立;跨者不行。自见者不明;自是者不彰。自伐者无功;自矜者不长。其在道也曰∶馀食赘形。物或恶之,故有道者不处。
      “踮起脚跟,想高人一头,但你很难站稳、很难持久。将两腿使劲跨开,想超越别人,但反而无法行走。”圣人用这样简单的例子告诉我们一个深刻的道理:实事求是,按自然规律办事!一切形式的主观的、激进的行为都是背道而驰的。只有遵循客观规律,脚踏实地,循序渐进,具有诚心和恒心,才能达到目的。
还记得23.大师风范 中,圣人关于“自见、自是、自伐、自矜”的论述吗?本节作为守则,要求设计师摒弃如下不良行为:
 固执己见:
    容易导致不能接受正确观点,因此对事物的认识会出现偏颇,不利于综
合多方观点搞清事物本质;
 自以为是:
    认为自己的观点和做法总是正确,从不听取他人的意见和建议;过分主观、
不虚心。这必然会导致一叶障目,事物的本源就难以彰显,更得不到多数人的配合和支持。
 自我夸耀:
    是名利之心的膨胀和表现,这样会受到大家的鄙视,因此无法获得成功;
 自高自大:
    是骄傲自满的表现,这样的人就无法进步了,也就不可能取得新的成就。
    以上行为都是多余的、无用的,更是有害的和令人厌恶的,遵循软件之道的设计师是绝不会有类似行为的。
作为软件设计师你必须遵守上面的规则,这样你才能逐步成长为卓越的设计师;此外你还要遵守如下具体规则:
    1) 追本求源
    深入研究涉及的业务领域,把握它稳定、本质的逻辑和流程,这是良好设计的基础;不要被表面现象蒙蔽,切记面向功能的设计必然是平庸的设计!
    2) 抽象
    必须对该领域内的概念、数据、功能等进行反复认真的综合分析,并抽象出应用领域稳定的业务模型,对业务领域的本质抽象是卓越设计的关键。
    3) 追求完美、精益求精
    少于三个方案的设计就不是设计!低于五次修改的设计一定不是一个优秀的设计。要反复推敲、孜孜以求。
    4) 不断学习实践,勇于批判和质疑
学习、实践、体会、思考、批判、总结、再实践,“批评性实践”是设计师的可贵精神。
    5) 热爱设计,追求卓越;建立高远的信念
   设计给你带来快乐,设计使你的生命更丰富,设计可以改变世界。
   热爱设计,追求卓越的设计。
   
    谈了这么多,软件之道到底是什么啊?

25.道为何物

     圣人曰:有物混成,先天地生。寂兮寥兮独立不改,周行而不殆,可以为天下母。吾不知其名,强字之曰道。强为之名曰大。大曰逝,逝曰远,远曰反。故道大、天大、地大、王亦大。域中有四大,而王居其一焉。
       “人法地,地法天,天法道,道法自然。”,到此为止“道”到底为何物?我们仍然不清楚,这也是“道”难于表述的原因,老子在全书中有三篇具体描述“道”的文章,但也很难对它进行全面的表述,“道可道,非常道”啊。这需要反复通读全文才能有些体会。
      本篇阐述的关键有两点,首先老子认为“道”在天地万物生成之前就存在了。我们应感谢东方的先哲,他们没有创造神和宗教,而是建立的以无神论为基础的博大文化体系,使我们能长久地屹立与世界民族之林,而且按当代几位大思想家的说法,解决目前世界上各种危机的唯一办法就是东方智慧了。
其次提出“道法自然”,注意这里自然的意思并非是我们目前自然科学的自然,那时还没大自然的概念;自然就是简单的字面意思,即自己的样子,这句话翻译过来就是:“道就是遵循它自己的样子”,你可能觉得气愤,但我认为这句话非常深刻,事实上一切真理、一切规律都客观地存在着,它就在那里等待我们去认识、感知和掌握;能够认识到这一点是多么重要啊!
      道德经这段文字到底是什么意思?
      软件之道到底是什么呢?
      我会阐述我的观点,也希望听到你的高论。
      “道”是一个概念,世间万物都有它的“道”。
      首先我们来看看老子描述的高度抽象的“道”:有一个东西在天地万物之前就已经存在了,它寂静无声,空旷无际;它独立存在,本性如一;它周而复始,循环运转。它是形成世间万物的基础和母体。这是老子的宇宙观,他不知道这东西是什么,勉强称之为“道”,它数量巨大,无情无尽,逐渐向周围散去,扩撒到无穷远处,远到极限后开始返回。

      这是老子对道在有这个层面上的描述。实际上目前的物理学研究成果,已接近证明老子宇宙观的正确性—宇宙之初没有任何物质,只有无穷的能量集中在一点,它扩散开去,两秒后氢元素诞生了,然后是氦元素……,经过几十亿年的演变,宇宙就呈现出目前我们看到的样子,整个宇宙目前仍在向远方扩撒,当扩散到极点,“熵”达到零,此后有两种可能,一是保持永恒的寂寞;二是开始返回。伟大的老子预测将开始返回,宇宙会周行而不殆。
      世间万物道与天地比,道大,天与地比,天大,地与人类社会比,地大,人间王法与人的个体比,王法大。因此人要遵循、效法地的规律,地要遵循、效法天的规律,天要遵循、效法道的规律,道则遵循、效法它自己。
     以此而论,软件之道就是软件自己的样子,这话似乎无聊,但它极端正确!我们换一种说法,假设有一个最棒的软件系统它是完全遵循软件之道构建出来的,是那样一个企业、那样一群大师、设计师、工程师把它精心打造出来了,它这个样子就体现了软件之道,软件之道就是它这个样子,你理解了吗?
      这样说并非无聊,相反它非常有价值,它鼓舞我们去追求那个终极的最佳软件系统,它应该具备怎样的架构和构造,它应该怎样去设计和实现。
      讲了这么多似乎还是没有明确地阐述什么是软件之道,这就是道可道、非常道啊!道的确难于表述,下面我就试图表述一下,但这样一说出来它就不是(真实的)软件之道了。
      软件有它内在的规律,甚至软件从原始形态逐步向高级形态发展的过程都是软件之道的一部分。
各类软件必然有其合理的、科学的构造(我们称为架构,但我认为“构造”更恰当),软件构造的不同决定了软件的形态(原始形态、初级形态、中级形态、高级形态、终极形态),就如同生命形态一样,最原始的形态是单细胞生命,一堆细胞杂乱地组合在一起共同维持生命,是一种初级的生命形态;细胞开始分工有的负责运动、有的负责消化,这样逐步进入了生命的中级形态;分工精细化、合理化、最佳化、最优化、最适应环境化,这样生命就逐步进入了高级形态。
      高级软件应该具有相同或相似的构造和组织(这就相当于ETA),不同行业的具体应用,属于它的大脑中蕴含知识的不同,就如同我们人类从出生就具有几乎相同的躯体,后天学习训练的不同,我们会成长为会计师、建筑师、软件工程师等等。
      有了对软件这样的一个认识你就得道了,但你是否可以成仙,那还得看你如何修炼。万事万物的道就那么一点点,它是成就这个事物的动因、基因、信息、微结构、基本规则……,也就是成就万物的那个无!你理解软件之道了吗?
      上士闻道,勤而行之;
      中士闻道,若存若亡;
      下士闻道,大笑之。
      不笑不足以为道。___ 道德经第37篇,我是怕您笑我,所以引了这么一段。

      你似乎对软件之道有了些了解,但具体到如何做好软件,你还需要了解软件的根基是什么。

      26.应用软件的根基


      圣人曰:重为轻根,静为躁君。是以君子终日行不离轻重。虽有荣观燕处超然。奈何万乘之主而以身轻天下。轻则失根,躁则失君。
      本文先以树木为例阐明了重与轻、静与躁之间的关系,得出重为轻根,静为躁君,轻则失根,躁则失君的深刻道理。
      那么对软件领域有什么启发和指导意义呢?在软件领域何为重?何为轻?何为静?何为躁呢?
行业应用中那些体现业务根本的数据架构和关键业务处理的逻辑(基础服务)为重,那些支撑应用体系的基础技术架构为重。
      那些具体功能,服务和操作界面为轻。
      业务领域数据模型和基础业务逻辑是稳定的,为静;功能、流程则是随需而变的,为躁。

      搞清楚软件领域的重与轻、静与躁,运用重为轻根,静为躁君原则,就知道应用软件该如何做了,清楚何为软件的根基了。

       大型企业软件是由一个甚至多个团队来建设,团队如何管理决定着项目的成败!

27. 团队管理的真谛

      圣人曰:善行无辙迹。善言无瑕谪。善数不用筹策。善闭无关楗而不可开。善结无绳约而不可解。是以圣人常善救人,故无弃人。常善救物,故无弃物。是谓袭明。故善人者不善人之师。不善人者善人之资。不贵其师、不爱其资,虽智大迷,是谓要妙。                         

      老先生教导我们,人要顺应自然,因物为用,不可妄用私智,自作聪明。讲述了善行、善言、善数、善闭、善结之人的高超境界;得出“善人,不善人之师。不善人,善人之资”的高明论断。如果按软件领域的语言可以表述如下:
      善于做需求分析的人,能够杳无痕迹地把不恰当、不合理的需求转化为合理的需求,并能预测需求的变化控制需求的发展。
      善于讲解方案的人,思维清晰敏捷,深入浅出,逻辑缜密,没有瑕疵,打动人心。
      善于设计的人,神思妙想、巧夺天工,使系统即适用于现在又满足未来,不需修改就能实现功能拓展与开放(开闭原则)。
      善于编码的人,写出的代码优雅、清晰而稳定,让人读起来如同优美的小诗。
      善于管理的人,能够深刻地了解他们的专长,激励他们内心的斗志和热情,将他们的才能发挥到极致;优秀的作为榜样和导师,能带动更多的人成就优秀,不优秀的是优秀的资源和借鉴; 这样大家就会相互帮助成为优秀的团队。相反,如果不优秀的不以优秀者为师,优秀的不关爱不优秀的,这是极端不明智的。这就是软件团队管理的真谛。

      懂得了软件的根基,掌握了团队管理关键,你还需要掌握软件设计的哲学。

28.设计哲学
     

      圣人曰:知其雄,守其雌,为天下溪。为天下溪,常德不离,复归於婴儿。知其白,守其黑,为天下式。为天下式,常德不忒,复归於无极。知其荣,守其辱,为天下谷。为天下谷,常德乃足,复归於朴。朴散则为器,圣人用之则为官长。故大制不割。                        
      本章老子提出了为人处世的根本原则:知雄守雌、知白守黑、知荣守辱。为人不要只知刚显,追逐荣华,而要慈柔、内敛、持静、含藏,坚守根基。同样它可以作为软件领域的设计哲学:
      不仅要知道系统稳固和健壮对软件的重要,而且要坚守着柔韧、灵活的根本,这样才能包容业务需求;包容了业务需求,才能经常得到赞美,像婴儿一样得到大家关爱,成就无限可能;
      不仅要知道展示层对用户感受度的重要,而且要重视后台数据结构和服务粒度的设计,这样才能成为经典的设计;卓越经典的设计,软件才能有卓而不俗的表现,达到随需而变的境界;
      不仅要知道炫丽的界面能够为软件带来美誉,而且要忍辱负重地在基础架构上不断耕耘,这样才能使架构完美、功能丰富;完美的架构就能够不断地满足业务发展的需求,使应用软件纯朴自然、浑然天成。
      软件系统中的根本规律转换为具体的软件实体,就形成了技术架构和面向架构的构建平台,有志于软件行业的企业使用它就能成为行业的领导者,企业级的大型应用系统应该是面向架构的有机整体,而不是条块分割的混合体啊。

      掌握了设计哲学你也未必能够建设好企业级的应用系统,它必须通盘考虑、整体规划。

29.整体规划

      圣人曰:将欲取天下而为之,吾见其不得已。天下神器,不可为也,为者败之,执者失之。夫物或行或随、或歔或吹、或强或赢、或挫或隳。是以圣人去甚、去奢、去泰。                                

      本章老子告诫我们要按客观规律做事,不要走极端,不要心存奢望,不要好大喜功。
对软件领域更具有指导价值:
      想通过强行开发的方式建设企业级应用系统,我认为这样不可能达到目的,企业级应用系统是多种力量以不确定的方式聚合在一起的变化结果,不是任何个人意志的软件体系,不能强行去开发,强行去做必然失败,没有系统的整体规划而试图掌控它是不可能的。
      企业级应用系统是由众多部件构成的有机整体,这些部件中有些需要通过编程实现,有些使用参数定义,有些使用数据库,有些使用文件系统,有些稳定,有些易变,有些粒度较粗,有些粒度较细;所以卓越的设计师能够遵循客观规律对软件进行合理设计,在各部分恰当地运用相关技术,不走极端,不乱用私智,努力按业务的自然形态、内部结构和业务规则设计系统,这样应用系统才能更好地表达业务领域,才能做到形神合一,才能与业务架构浑然天成。
事实上,软件系统是对业务领域的一种表达,其结构越接近业务领域模型,表现的就越妥帖,不仅在效率和准确性方面胜于人工系统,而且在灵活性方面也能够接近它,结合机器和人工系统各自优点的应用软件体系才是我们追求的真正目标。

     

      以上谈及的内容无论是软件的“道”、特征、设计哲学,还是团队管理,还都是技术层面的东西,而软件必然是人做的,正如业界著名的一本书《人件》直截了当地称软件为人件,这是一本对软件行业影响巨大的著作,请您参见我在附录中为之写的缩写。而以人为主的集体行为过程,领导者的意志品质是至关重要的。

30. 领导者的行为规范

     圣人曰:以道佐人主者,不以兵强天下。其事好还。师之所处荆棘生焉。军之後必有凶年。善有果而已,不敢以取强。果而勿矜。果而勿伐。果而勿骄。果而不得已。果而勿强。物壮则老,是谓不道,不道早已。

      圣人常怀仁爱之心,老子更是悲天悯人,他老人家反对战争,强调以道辅佐国君,而不要以武力逞强与天下,其中的道理对于软件企业的领导者也值得借鉴:
      企业管理者要以个人的品德修为作为基础,以合理的管理系统和制度辅佐企业成长,不能靠强权和压制来管理,靠强权管理必然引起反弹,强压之下必然草木皆兵,人人自危,无心工作;大规模的内部斗争必然造成业绩下滑和人心动荡。
      真正善于管理的企业领导者,能够调动人们内心的工作热情,激励他们的主人翁意识,为大家指明方向,引领员工争取最好的成果;取得成果后要归功于大家,不要自我标榜,自高自大,不要因为取得了成果就自我膨胀,邀功求赏,要明白物壮则老的道理,要持盈保泰,这样才符合于道,心胸开阔、目标远大,才能历久弥新,长久保持和激励工作热情。
      托尔斯泰的个人价值公式:
     个人价值 = 他的实际价值/他自以为的价值 
      个人自以为的价值越大,他的价值就会越低,如果自以为的价值为无穷的,其个人价值就接近零了。可见智者的观点都是相同的啊。

     

      软件及软件企业的成长都需要环境,恶性竞争是其成长的大敌,它不仅伤害乙方亦伤害甲方,甲方以为低价对自己有利,殊不知从长远看它伤害了一个行业的根基,使软件企业无法健康成长,最终甲方得不到优秀的产品和服务,反伤自身。为避免恶性竞争乙方需要自律,甲方需要理性,需要建立科学的招标策略,鼓励合理价格、鼓励创新。

31.避免恶性竞争

      圣人曰:夫佳兵者不祥之器,物或恶之,故有道者不处。君子居则贵左,用兵则贵右。兵者不祥之器,非君子之器,不得已而用之,恬淡为上。胜而不美,而美之者,是乐杀人。夫乐杀人者,则不可得志於天下矣。吉事尚左,凶事尚右。偏将军居左,上将军居右。言以丧礼处之。杀人之众,以悲哀泣之,战胜以丧礼处之。                                   

      本章是讲战争之道,老子进一步阐述了他的反战立场,兵者不祥之器,非君子之器,不得已而用之,要胜而不美,战胜以丧礼处之。
      同样的蒙森也说过“战争重要的是求取政治上的成果,而不是军事上的成功。”
      应用软件领域什么是战争呢,我们认为恶性竞争就是战争,用于恶性竞争的各中手段和阴谋就是兵器,它们都是不祥之物,我们应该鄙视它、厌恶它。
      恶性竞争通常采用低价或不正当手段来获取市场份额,这样不仅伤害对手而且也伤害自己,因此也称为 “自杀式竞争”、“毁灭性竞争”或“破坏性竞争”,它不是把资源和精力用于提高产品和服务的质量和自身的效率,而是投入到不良的手段和阴谋的过程中,企业自身的生产能力得不到合理的投资和关注,因此产品和服务的质量无法得到提高,甚至会逐步下降。最终导致整个行业遭到破坏,因此说它是毁灭性和破坏性的。
      事实上,最终用户在这个过程中并不是受益者,相反用户成了最终的受害者,我们以低价竞争为例,从两个方面来看,首先就一个具体项目而言,用户似乎节约了投资成本,但在产品和服务质量等方面都很难得到保障,很难到达预期的目标,给企业发展带来的损失远远超过节约的投资,更重要的是企业在应用项目的投入方面,项目本身的直接投入仅是整体投入的一部分,项目策划、需求人员的投入、测试人员的投入、设备投入,开发场地费用、培训费用等,总成本远超过直接投入,一旦达不到预期目标而造成的时间成本和机会成本的损失更加难以计算。另一方面,由于恶性竞争造成的破坏,导致为本领域提供服务的企业自身不能健康发展,没有必要的研发、培训和人才激励机制,造成这类企业整体能力低下、人才匮乏,无法满足用户日益提高的应用系统建设要求,从而对最终用户造成深远的不良影响。
      由此可见恶性竞争具有巨大的破坏性,必须引起我们的高度重视。

    

      尽管你了解了ETA,知道了软件即人件,懂得了软件与企业、设计师、团队的关系,但软件毕竟是门技术,它内在、外在如何治理也是重要的话题。

32.软件治理

      圣人曰:道常无名。朴虽小天下莫能臣也。侯王若能守之,万物将自宾。天地相合以降甘露,民莫之令而自均。始制有名,名亦既有,夫亦将知止,知止可以不殆。譬道之在天下,犹川谷之於江海。
      本章老子进一步阐述“道”及“道”的作用,提出“始制有名,知止不殆”的思想,告诉我们治理需要建立体制,确立边界,明确概念和职责,使各项事务有归属和约束,适可而止,这样有了秩序就不会陷入困境。按软件领域的语言可以表述如下:
       软件之道通常是无形无相的,是质朴而浑然天成的,它并非是我们在软件书籍中看到的条条框框;事实上,抽象是软件的根基,那些稳定而抽象的接口、元数据和反映行业和系统本质的基础数据结构和组件,它们虽然很渺小,但它们却是支持系统的基石,软件设计师如果能够以此为基础,应用系统成千上万的功能就自然形成,应用与技术自然相合,天衣无缝,不用强制命令,各项功能和数据就能自然合理分布,因为系统已经做了整体规划,确定了各种规范,明确了层次架构和部署规则,规范和规则既然确定了,在具体执行过程中知道遵守规矩,一切就秩序井然,不会出现混乱了。
      软件之道对于应用系统的建设和治理而言,就如江海之与百川,是它的归宿和源点。
      

      构建了软件企业的核心技术,建立了良好的企业管理制度,拥有了优秀的团队,就能够设计和开发好的软件系统吗?不能!我们还需要企业家精神。

33. 企业家精神

      圣人曰:知人者智,自知者明。胜人者有力,自胜者强。知足者富。强行者有志。不失其所者久。死而不亡者,寿。
      本章是谈如何做人和如何修身的哲学,指导我们如何做到“智、明、力、强、富足、有志、健康长寿”。具体到软件行业,我们也可以把它理解为企业家精神:
      要想把软件企业做好,创业者必须具备企业家精神。不仅要有知人善用的智慧,更要有剖析自己、克己灭私、内省自查的明智,不仅要拥有战胜困难和对手的力量,更要有不断战胜自己,超越自身的坚强,不仅要知足感恩,更要志存高远、知行合一,不断努力实践。能够坚守理想和目标,就能够长久保持旺盛的战斗力和饱满的精神面貌,能够将这种期盼事业的精神和意志注入到企业的每一个成员的精神中,这样企业就能够长盛不衰、长存不亡。

      只是有企业家的精神也是不够的,作为从事企业应用的软件公司,必须深刻认识企业技术架构的价值。

34. ETA的价值

      圣人曰:大道泛兮,其可左右。万物恃之以生而不辞,功成而不名有。衣养万物而不为主,常无欲可名於小。万物归焉,而不为主,可名为大。以其终不自为大,故能成其大。                        
本章是老子对“道”的赞颂:大道能左能右、无所不至,造就万物、滋养万物却不居其功、不显其德,万物所归却不主宰它们,这就是伟大的道!
      而软件之道构建的企业技术架构Enterprise Technical Architecture-ETA就具有道的特征!它就像应用系统的宽广舞台,能上能下、可左可右,各种应用功能都依托它,繁琐细碎的工作都由它去承担,它却任劳任怨豪无怨言。应用系统因为有它的支撑而获得成功,但它却不居其功、不争其荣,承载和运行着各种应用,使它们各得所需,但却不约束和限制它们,对各种技术细节处理的无微不至、细到微毫可称为“小”!埋头细作、无欲无求,但所有应用都运行在它上面,真可谓“大”!大而不自以为大,所以它具备了道的美德!

      参透软件之道,按照软件的规律和法则进行软件系统建设,前景如何呢?

35.前景展望

      圣人曰:执大象天下往。往而不害安平太。乐与饵,过客止。道之出口淡乎其无味。视之不足见。听之不足闻。用之不足既。
                                           
      本章继前一章对“道”做了进一步的歌颂,叙述了“道”的作用和影响:“天下往,安平太,乐与饵,过客止,用不既”。运用于软件领域,可以理解为通过ETA进行应用软件开发和治理后的景象:
      构建完ETA后,原有的各应用系统就会心向往之,它们就可以基于ETA逐步整合为企业级一体化系统了,各应用系统相互融合,不会相互干扰和冲突,企业级应用治理就会呈现太平安宁的景象。
      在ETA的支撑下,应用开发摆脱了技术细节的束缚,可以更加关注业务和界面的美观和实用,配合美妙的视频与音乐,使用户用起来更加赏心悦目,于是客户就被吸引过来了,他们停下来,共同参与到应用系统的建设之中。
虽然应用系统表现的丰富多彩、有声有色,然而隐藏于其背后的ETA却是平平淡淡,闻之无味,视之无形,听之无声,但当你使用它的时候,却用之不竭!

       当你完全洞悉软件之道,并努力遵循其法则开始软件系统建设时,你会发现一切豁然开朗,柳暗花明,但事务的另一普遍规律会立即生效——当一个主要矛盾被解决的时候,另一个矛盾又凸显出来。这时你不要沮丧而要高兴,因为这是在更高层次的矛盾治理。

36.矛盾治理

      圣人曰:将欲歙之,必固张之。将欲弱之,必固强之。将欲废之,必固兴之。将欲取之,必固与之。是谓微明。柔弱胜刚强。鱼不可脱於渊,国之利器不可以示人。                                    

      矛盾无处不在,老子用于他高超的辩证思维,提出来治理矛盾的总原则:“欲歙必张、欲弱必强、欲废必兴、欲取必与”,运用于应用软件领域可以叙述为:
      如果希望开发队伍将精力集中到业务领域和设计本身,就必须努力扩大ETA的覆盖范围,封装全部技术细节,使开发者不必关注具体技术。
      如果想削弱对开发人员个体的依赖,就必须加强ETA及构建平台的建设,使开发过程可视化、规范化。
      如果想废弃传统的手工开发模式,就必须兴起和建立现代的面向架构的开发体系,使开发过程现代化、程序化。
      如果想在业务需求和设计方面获取开发人员更多的创造灵感和成果,就必须为他们提供更好的开发平台工具,使他们从繁重的编码细节中解放出来。
      这就是通晓软件之道后的大彻大悟!使用灵活、柔性的ETA平台体系构建应用系统,远胜于传统开发的硬编码。
      ETA不能脱离业务领域,它需要在应用环境中成长,它只是用于应用系统构建的有利工具,不要用于炫耀,卓越
的应用系统来源于人的思想和精心设计,平台仅是工具而已。

      不断地治理矛盾和冲突,你将在这样的过程中不断提升,量变的积累必然导致质变,必然有一天你将闲庭信步、挥洒自如、大道通明、无为而治。

37. 无为而治

      圣人曰:道常无为,而无不为。侯王若能守之,万物将自化。化而欲作,吾将镇之以无名之朴。无名之朴,夫亦将无欲。不欲以静,天下将自定。

      本章是道篇的最后一章,也是对道的总结;老子认为道常无为而无不为,遵道而行即可治国安邦亦可强身健体。表达了老子《道德经》的核心思想---剔除一己之私念,努力遵从客观规律办事。事实上,世间万事万物,包括社会意识形态和精神活动,都有其客观的发展规律,这就是“道”,它们的发生、发展有其必然的方向和走势,顺之者昌、逆之者亡,智者顺势而为,造福天地成就自身。
      软件领域同样存在其内在必然的发展规律,我们这些软件领域的从业人员,如果能够努力去发现和遵守这些规律,这个领域的矛盾、困难,包括Brooks先生的“人狼”就都会被化解;可当一个层面的问题得到治理时,另一个层面的问题就又会凸显出来,我们继续研究该层面的客观规律,进行恰当的治理,这个层面的问题就会被化解,各层面的问题都治理好了,整个软件领域就安定下来了。
      事实上,由于软件领域的特殊性,存在的问题确实非常之多,无论是设计还是编码,大量充斥着个人私智---小聪明、小技巧,人为的东西太多,牛头马面的怪物层出不穷,使软件领域“人狼”泛滥,难以治理;行业应用软件本身就是对客观的业务领域的一种表述,必须认真研究业务领域的规律、变化与稳定的本质特征,客观真实的表达业务领域,剔除人为造作,应用软件就远离“人狼”走向光明大道了。
      所以我认为真正的企业级技术架构应该是与行业无关,但需要建立体系化的、功能完备的企业技术平台,从前台、中台直到后台,为应用提供全方位的技术支撑和性能支持,并且能够良好地隔离各种应用工装设备(我将数据库、中间件、工作流、规则引擎等称为应用工装设备),降低对他们的直接依赖,使它们的更换对应用不产生影响。
      无为而治是软件的最高境界,也是研究软件之道的目的,无为可不是不为啊!

你可能感兴趣的:(软件之道 -- 道篇全文)