软件之道 -- 道篇全文

前言

      软件作为信息时代的核心,由于它的抽象性、不易见性等,使得软件设计开发过程变得复杂、难于治理,开发团队如同在焦油坑中挣扎的巨兽,美国软件泰斗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

  • 2
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 2
    评论
第1篇 了解开源软件 第1章 开源软件概述 1.1 开源软件的理解 1.2 开源软件的定义 1.3 开源软件定义的意义 1.4 开源软件和其他类型软件的比较 第2章 开源软件的历史与未来 2.1 开源软件的历史 2.2 开源运动背后的理想与现实 2.2.1 理想主义的兴起 2.2.2 技术精英的推动 2.2.3 现实业界的需求 2.3 开源社区的壮大 2.4 开源软件的领袖 2.5 开源软件的未来 第3章 开源软件的好处 3.1 高质量 3.2 零许可证费 3.3 开放和自由 3.4 灵活可定制 3.5 公开透明 3.6 良好的学习平台 第4章 开源软件的成本 4.1 部署和迁移成本 4.2 人员和培训成本 4.3 管理维护和技术支持成本 4.4 风险控制成本 第2篇 使用开源软件 第5章 正确使用开源软件 5.1 管理体制 5.2 法律风险 5.2.1 法律因素之著作权 5.2.2 法律因素之许可证 5.2.3 法律因素之专利 5.2.4 问题解析 5.2.5 验证著作权,正本清源 5.2.6 调查专利,借力打力 5.2.7 解读许可证,明察秋毫 5.3 成熟度 5.3.1 优秀的领导者 5.3.2 差异化的开发者社区 5.3.3 庞大的优质用户群 5.3.4 健康的项目“脉动” 5.3.5 健全的安全补丁体制 5.3.6 较完善的文档 5.4 服务 5.5 寻找合适的开源软件 第6章 开源软件之语言和平台 6.1 Harmony 6.2 Android 6.3 Python 6.4 Ruby 6.5 PHP 6.6 Groovy 6.7 Perl 6.8 Flex 6.9 OpenLaszlo 第7章 开源软件之框架和库 7.1 Spring 7.2 Struts 7.3 JBossSeam 7.4 Equinox 7.5 Hibernate 7.6 iBATIS 7.7 Lucene 7.8 Webkit 第8章 开源软件之服务器软件 8.1 ApacheHTTP服务器 8.2 Tomcat 8.3 Jetty 8.4 Geronimo 8.5 JBoss 8.6 GlassFish 8.7 MySQL 8.8 PostgreSQL 8.9 Derby 8.10 FileZillaServer 第9章 开源软件之开发工具 9.1 Eclipse 9.2 NetBeans 9.3 ApacheAnt 9.4 ApacheMaven 9.5 CVS 9.6 Subversion 9.7 GIT 9.8 Bugzilla 9.9 JUnit 9.10 TestNG 第10章 开源软件之桌面应用 10.1 GNOME 10.2 OpenOffice.org 10.3 Emacs 10.4 Firefox 10.5 Thunderbird 10.6 GIMP 10.7 FreeMind 10.8 7-Zip 第3篇 参与开源项目 第11章 开源社区的基础设施 11.1 基础设施 11.1.1 主页(HomePage) 11.1.2 代码库(CodeRepository) 11.1.3 邮件列表(MailingList) 11.1.4 缺陷追踪系统(BugTrackingSystem) 11.1.5 Wiki 11.1.6 其他 11.2 开源项目托管网站 第12章 开源组织和社区 12.1 Apache软件基金会 12.1.1 Apache的历史 …… 第13章 商业模式与实例 第14章 参与开源社区 第15章 开创事业
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值