加法是自然之道
写代码和数据处理有一个共同规则:只新增append/insert.不修改替换update/replace。这个原理符合自然加法规则,符合构造定律Constructal Law。
我们一直在说道法自然,那么自然之道是什么呢?我认为自然是在做加法,老子道德经说道生一,一生二,二生三,三生万物,这句话符合构造定律Constructal Law。
所谓构造定律,是由Adrian Bejan于1995创立的构造定律:
For a finite-size system to persist in time (to live), it must evolve in such a way that it provides easier access to the imposed currents that flow through it.
对于一个有限大小的持续活动的系统,它必须以这种方式发展演进:它提供了一种在自身元素之间更容易访问的流动方式。
这个定理在自然中比比皆是,典型的是树的生长,先有根,再有枝,枝上再生枝叶。这种自发性质的设计反映了这一趋势:他们允许实体或事物更容易地流动 - 以最少的能量消耗到达最远的地方,就连街道和道路这些人为地构建物体,往往也是有排序的模式,以提供最大的灵活性。
构造定律的本质是什么?是以树形结构做加法。这是我认为的自然之道。
首先从软件开发工作谈起,我们软件系统平时面对的是两个不断增长量:代码量和数据量。
代码的加法
代码一行一行在编写,当我们的代码类变得很多很多时,怎么办呢?有人说,Java的问题不是太罗嗦,而是OOP使得类的数目很多,我想不管使用什么语言,代码量增多迟早会面对,不是抱怨指责,而是要积极面对。
面向对象编程原则和GOF设计模式已经在告诉我们如何维护拓展这些类代码,宁可增加新的类代码,尽量不要去修改那些经过测试已经成熟稳定的代码,也就是说,不要去做修改替换,而是要做增加。这种增加如同树的成长,是一种枝生叶的繁茂。
我们唯一需要做的是跟随自然之道,使用树形结构去组织这些代码量,具体在软件的复杂性和构造定律中讲得很清楚。
数据的加法
当我们的系统从小到大,用户量越来越多,数据越来越大时,原来传统的关系数据库可能已经无法容纳这些大数据,我们需要增加系统规模,使用分布式系统来实现数据处理的加法。当然过去还有一种集中式的实现方式,通过小型机 大型机垂直伸缩大到处理大数据的能力,这种集成式整体式的架构正在被扁平的水平伸缩的微服务分布式架构替代。
来自LinkedIn的Kreps发布了其具有程序员史诗般的博文:日志是每个软件工程师关心的统一数据抽象
该文主要提出使用日志复制的方式来实现分布式系统之间的数据同步,而日志是一种只有新增append,没有修改替换的数据处理方式,当我们将一台服务器上业务操作日志复制到其他服务器上,是不是类似自然中一棵树将营养以最低能量的消耗方式在枝叶节点之间传输呢?我们唯一需要做的是让整个分布式系统的服务器之间关系如同树形结构一样,正如我们将代码之间使用对象或层封装隔离成一种树形结构一样。
性能和效率
函数编程之所以没有副作用,关键是因为它没有可变状态,基本都是不可变的,如果需要共享数据怎么办?那么就实现数据的复制。
状态通过修改替换的操作实现的变化称为可变状态,看来计算机系统本身比较厌恶状态修改替换,因为可变状态不仅带来副作用,更重要的是无故耗费计算机性能,为了保证一个状态的可变操作原子性,需要ACID,无论数据库还是应用服务器 或者编程语言都需要通过特别的事务机制保证原子性,特别是并发编程情况下,可变共享状态简直是并发并行的死敌。
如果我们将一个系统的可变状态尽可能缩小甚至消灭,那么无疑我们的系统处理能力就能够以纯粹线性加法方式增长。函数编程语言能够从语言层面达到这个目地,而在业务层面,我们使用EventSourcing + DDD + CQRS的方式也能缩小可变状态,使用聚合根来包裹可变状态,使用事件日志记录的追加和回放实现可变状态的切换。
是否能广泛适用?
因为我们的软件系统是人造的系统,相当于人类学习大自然一样在制造一个新的“大自然”,正如我们模拟人脑神经网络发展我们的机器学习一样,无怪乎爱因斯坦会说:看啊!看!深入研究自然,你就会明白一切。
自然规律是以树形结构方式进行加法发展,那么我们是否在做其他科学系统时也要注意到这个自然之道,而不是忽视它们,那就变成了“作”, No Zuo No Die。
比如一条新闻:中国工程院院士倪光南表示,基于应用商店的国产操作系统将有望在今年10月份推出。倪光南表示,希望在这两年完成对XP系统的替代,在这基础上,在3到5年内实现对(安卓、苹果和微软)三大智能终端操作系统的替代。
我首先想到的是:为什么我们不做新增append,而是要做替换?我们不一定要在乎是否拥有自己的发动机或操作系统(因为这些别人已经发明),而是我们是否在为世界文明添砖加瓦(做别人没有的才是做加法)。
当我们注重跟随自然之道,而不是注重“人有我无”这种人之间争夺时,我们就会垄断下一个根资源。自然是做加法,过去石油是垄断资源,我们通过科学创新做加法,我们就可能将太阳能等其他资源作为未来的垄断资源。中国一些传统文化在影响我们,常常让我们不自觉去和人抢夺现有的资源,或者做别人已经成功的作品,这些都是在做修改替换,不是在做加法。
以上纯属闲扯,仅供参考。
[该贴被admin于2018-09-07 15:32修改过]