从易经中的看软件开发之道

《易经》是阐述天地世间关于万象变化的古老经典,是博大精深的辩证法哲学书。

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

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

一、从“易”说起

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

从易经中的看软件开发之道

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

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

卦象只是对某种现象的总结,并不指定场合,这就是易经的高明之处。例如,街头算命的人就可以使用易经,导致很多人以为易经就是街头算命用的。但是《易经》可是号称帝王之学,只能说是那些人故弄玄虚,把经念歪了,用易经算命无异于杀鸡用牛刀,大材小用。

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

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

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

从易经中的看软件开发之道

先停下来,喝杯咖啡,拿出三个硬币,抛两次算一卦,突然灵光一现,突然作出了抉择,好吧,就这么定了。

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

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

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

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

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

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

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

当然,易经中的模式也是这样。当一个人大红大紫之后,突然发现一蹶不振,没落了,如果看看易经,也许会悔过,一定会对乾卦的卦象中,飞龙在天之后的亢龙有悔有很深的理解。

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

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

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

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

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

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

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

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

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

3.为了给将来发展变化留有解决余地。

易经把阴阳之变弄的这么复杂,非常难懂,但2000年了历久弥新,依然没有过时。

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

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

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

从易经中的看软件开发之道

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

所以,老祖宗留下的东西,想想看,还是挺好用的。