从易经中看软件开发之道

       《易经》是阐述天地世间关于万物变化的古老的辩证法哲学经典。

       老祖宗留下的东西,博大精深,保罗万象,自然不会漏掉软件开发这个行当。

       从软件开发者角度去看易经,其实就是一个高层级的软件架构。

一、从“易”说起

       “易”字,从字形上看,上为日下为月,表示日月变化。专业点讲,是阴阳两级变化:阳极为阴、阴极为阳。万事万物相互转化,互为基础。这就是下面的阴阳图的意涵。整个易经讲的就是变化,从日月之变化,引申到阴阳之变化,再引申到万物之变化。封装变化,然后通过极其隐晦的语言说明变化概要。这样做的好处就是无论谁,都可以对现实世界的变化做出自己的解读。

阴阳图

二、从阴阳八卦看设计模式

       对于设计模式,初学软件开发和初学易经,应该有同样困惑,干嘛弄这些幺蛾子,直接点不好吗?

       卦象只是对某种现象的总结,并不指定场合,这就是易经的高明之处,对应软件中的接口类(虚类)。易经只根据 一些隐含的寓意去规范卦象的名称和用途,怎么实现就是你的事了。所以说对卦象的解释,对应的是对虚类的实现,也就五花八门,各论其道了。

       例如,街头算命的人使用易经,去预测一些事情;易经只是算命先生的一个噱头,故弄玄虚,可以增加神秘感、神圣感和仪式感,让请求算命人可以快速入戏。正是这些江湖术士把号称帝王之学的《易经》念歪了,导致很多人以为易经就是用来算命的。其实算命中真正有用的东西是算命先生的直觉、学识、口辩及情感的控制能力。

       算命的就不说了,但《易经》确实是用来算卦的,算卦又是干什么的呢?是用来做决策的,并且是重大决策;小决策中《易经》似乎也派不上用场。

        如何做决策呢,可以想想这样一个情形:

        你是公司老板,面前有产品A和产品B,应该如何生产和投放市场?产品不对或投放市场顺序不 对,有可能让公司陷入困境,这就需要作出决策。这种决策实际上非常难。当实在无法抉择的时候,该怎么办?这时候《易经》就可以派上用场了。

        先停下来,喝杯咖啡,拿出三个硬币,抛两次算一卦,结果一次三个都是正(乾),一次三个都是反(坤),乾在上坤在下,否卦,乾主外,坤主内,主方必须顺应客方而变化,否极泰来,突然灵光一现,突然作出了决策,同时上市,小规模投放,让市场决定两个产品的好坏,好吧,就这么定了。

       其实这才是算卦真正的用途,是在困境中用来提供灵感的,不是用来搞什么预测的。

       据说当年毛主席在困境中也用《易经》算卦来着(具体史实不可考),倒也是正当其用啊。

       在古代在军事用途上,《易经》的升级版本叫《奇门遁甲》,汉代张良先生的大作。里面各种玄乎,但作用无外乎是给行军打仗的将军做决策用的。比如那天出征、在那扎营、在那布阵、如何出击等。关乎很多人的生死,不可不慎重,将军们的决策压力其实很大的,没个超脱局势、激发灵感、辅助决策的手办还真不行。在那些年代,《奇门遁甲》确实是让人思想跳出三界外的不二法宝;其中不乏各种怪力乱神的传说,那都是瞎扯,现代人学那个基本没用。

       回到软件行业,前辈们根据编程实践,整理出了23条设计模式,形式上讲,和《易经》的64卦是一个意思,都是对特定情况下的行为和结果做的总结,并且不限制应用场合。

       这里既然把设计模式和易经相提并论,就必须说下学习顺序的问题。

       和学易经一样,直接去看那些卦象/UML图和玄乎乎的文字,效果真的很差。需要在实际实践中去回顾总结,则效果要好的多,才会真正的理解。

       在实际的应用中,没学过设计模式,不等于没用过设计模式。很多时候都是遇到一个问题的时候,自己那么做了,回过头去看设计模式,原来我用的就是这个模式,就会很容易记住。比如遇到很多个算法分支,自然会想到把每个算法分支封装到一个类里,再做个公共的父类,使用switch case语句做分支选择,不管你实际是怎么实现的,这就是策略模式了。

       记得有个虚工厂模式,看到时候觉得莫名其妙。直到一个项目把架构层和应用层严格分开,并且还允许应用层修改/替换底层算法的时候,发现最终的实现方式恰恰就是虚工厂模式。

       易经中的模式也是这样,只有经历过,才能对卦象有深刻的里好像。当一个人大红大紫之后,突然发现一蹶不振,没落了。如果看看易经,也许会悔过。一定会完全理解乾卦中的“飞龙在天”和“亢龙有悔”。

三、从六十四卦看软件架构

       为什么要看易经六十四卦,不看可不可以?为什么要做软件架构,不做可不可以?

       都可以!没有什么是必须的。

       刚接触软件架构,我们应该都有这样的疑问,为什么要做架构,把简单的事情弄复杂? 直接new对象不可以吗,弄一个类封装起来再new是几个意思?直接拍桌子决策不好吗,还用易经?

       为什么要把简单的事情搞复杂?这好像成了一个哲学问题,如果直接用目光短浅回答,会伤人自尊。

       往深了想,这就是生活。我们不能只是简简单单的为了今天,我们要为更好的明天活着。

       简单的事情弄复杂,大致有三个原因:

       1.能力不足,找不着简单的解决办法。

       2.为了增加仪式感,比如婚丧嫁娶。

       3.为了给将来发展变化留有解决余地,比如设计软件架构      。

       易经把阴阳之变弄的这么复杂,非常难懂;但2000年了历久弥新,依然没有过时,就是抽象和封装的好处。

       软件架构设计的目的也是封装变化,为了应对软件未来扩展升级的需要。如果软件开发只需要应对目前的功能,完全没有将来升级的需要,设计软件架构的复杂性则完全是给自己找麻烦。

       所以,易经描述、封装万事万物之变化,架构描述、封装应用需求之变化,他们是一致的。

       易经中的六十四卦,就是六十四个高级接口类,里面的各个“爻”即接口函数,描述了这个接口类的基本功能,是非常抽象的。至于如何实现则是各位看官的事。这就出现了对易经有许许多多的解读的事儿,也即对易经这个架构不同的实现而已。

       一个好的架构应该和易经一样,要是在很高的层次上进行抽象,一个模块就是一个卦象,要封装/描述尽可能多的变化,并且可以实现为不同的应用框架。

       老祖宗留下的东西,隔行不隔理,认真的去理解,去实践,还是挺好用的。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值