好久不写 CSDN 博客了。几年了。
曾记得,写 CSDN 博客最耗神儿的,是排版……
现在我主要写公众号去了,还是一样的名字,如下图,欢迎关注。可以微信扫码或者搜索“光宇广贞”。想预览的话,百度“光宇广贞”连好几页尽请观看。这并非技术类公众号……当然,本来我也从来没把 CSDN 博客当成技术类文库……
小故事
人:大夫,我视力越来越差了,颈、肩、腰都不好,而且总也治不好了,生怕自己哪天猝死了!
医:别干程序员了,换个活法。
人:那怎么行,我得活着。
医:……
状态编程
程序员,上没上过学,都知道『有限状态自动机』这玩意儿——当然,不知道也没事儿,这说明你天天都不知道自己在干嘛,也是心大,或者说连自己在干嘛都不知道就能赚着大钱了,也是伟大——今天的信息产业的一切都是构建其上的,也似乎应该是构建其上的,所以一切的讨论无论是服务与数据,从架构容量到语言属性,都从来没有刨根问底的势力。
所谓的计算机就是状态计算机,所谓的程序就是驱动计算机一遍又一遍地计算状态,从寄存器到变量,从变量到对像,从对像到聚合根,从聚合根到数据仓库,从数据仓库到数据库,从单点到集群,从内存到外存,从实到虚,从小到大,从简到繁,说到底就是在围着状态计算工作。
分布式,会有『CAP 三角测不准原理』。引入『事务』这个概念,然后搞一个『ACID 约束』。『聚合根』这个概念是个伟大的发明,既而自然而然地强调『有界上下文』这个认识,生怕用户恍惚,一时激动太过失了措。对,边界,边界,所以有 OOP,然后再讨论是 OOP 还是 AOP。无论是边界还是一致性约束,终归一点,就是你须明确你的状态,或者一组状态集,我以此来认识你,管理你。
体系降低了性能,而后再想办法做性能提升,从架构搭建到过程编写,名曰『优化』,这成了一项值钱的知识范畴,很值钱,据说有猎头报价,『1000W 以内可谈』。
区块链走向了另一种追求——要什么性能?区块链只对『一致性』做事。『CAP』是个什么东西。
最根到底,我们必须明白,我们是在状态编程。
过程编程
『面向过程编程』,一个被公认为古老的范式。
有些人可能觉得难以启齿,毕竟宣传这东西,观念这东西,成见这东西,你想和成见讲道理?
于是换种说法。
『函数式编程』,一个被公认为很新潮的范式。
让程序员的思维重回过程。状态变化的整个过程,或叫流程,或叫过程链。
说回就回呐,不好回。匹夫下棋看一步,国手下棋看十步。多数人是匹夫,或恐怕只比匹夫好一些,比国手差点了——因为,这首先考你记性好不好。别说算棋,我让你算数,13579 乘以 24680 乘以 12345 乘以 67890,不计时,不求快,算准就行。『CAP』什么的,和区块链一样,我不要 A,爱 P 不 P,你站得 C 位出结果就行。
所以,过程编程,只是说说。理解难,实践难,维护难——函数式编程,三步之外,太绕。
高手毕竟少数。
重新理解数据库
数据库是结构化的状态集合。
关系数据库还是非关系数据库,争论的只是结构化强度。所以,有人认为 MongoDB 是一个趋近关系数据库的非关系数据库,我的看法是,太绕,它就是结构化状态集合仓库,和关系数据库如 Mysql 等没区别——说得好像,你的关系数据库结构是按着数据库范式约束设计的一样。
换种说法看看。
数据库是状态集合在时空链上的切面快照——软件系统遭遇了『二向箔降维打击』,就成了数据库。
这就是为什么,数据库永远是二维表……
因为它永远只是一个切面。
无论过去,不知未来,只管现在。
再谈二向箔
二向箔打击之下,三维降为二维,比如『CAP』,我们是要『CP』还是要『AP』,自然其实在 C 和 A 之间,还应有半 C 半 A 的状态存在。不考虑量子叠加态,高维降到低维,会有很多种侧面供选择,它有多少组非空真子集,它就有多少个侧面可选。若考虑量子叠加态,比如半 C 半 A 这种,那侧面量更海了去了。
——专利或学术论文都是可以从海里冒出来的。
再谈区块链
区块链就是个数据库。
而且是个分布式数据库。
若将之直接应用到一线场景,就是状态编程领域。比如, 它通过共识算法,强制网络上各结点的数据一致性约束。
它实际上正是脱胎于状态编程领域。但怎么样应用到过程编程领域呢?本来区块链就很像一条时空链,区块就是时空链上的一个个切面。
区块链是个工具,也可以是个范式。
一种范式,将被二向箔拍扁的软件系统时空复原。
尾言
你遇到很多问题,其实根本上可能是因为你囿在那个空间里。
人的领地意识源于人的空间感知。匹夫感知得到空间的边界,但无法感知空间的运动,也即,他感知不到时间。
国手应是可以的,因为国手会算棋,他需要感知时间,即空间将如何运动。
国手,不是依靠脑力,而是明确一种范式,将时空运动记录,这不仅是史实根据,更可以既而推演。
这不就是人工智能了么……
或者,这才是真正的人工智能。
到那时,才是过程编程取代状态编程的时日。
请关注我公众号