关于
这个网站是个人博客随笔,主要用于记录一套复杂系统的建模理论。
作为一名软件架构师,最初我研究的东西是,想要建立一个完全不同的游戏引擎。我从现代前端上汲取了很多架构思想——前端和游戏本质上都是在研究一个不断变化的视图,只是游戏的状态机强调帧驱动,多了一个时间参数。为什么不尝试用现代前端的先进设计理念去重塑游戏工程呢?
于是我写了一个 Demo。写完之后,我想找一找有没有关于这套 Demo 背后架构的研究。因为软件工程中几乎不存在真正意义上的“新设计”,也就是我们常说的造轮子:你的轮子几乎不存在完全原创的可能。
这个 Demo 也不例外。但我发现一个问题:明明一个很简单的、只有几百行代码的 Demo,却要用上 Event Sourcing、CQRS、响应式编程、DDD、事件驱动来解释;而且这是一种完全去对象化的实现。为什么它的设计思路更简单、更清晰、扩展性也更加强大,但主流工程却没有采用?
于是不断往下研究,进行深层次的抽象,最终诞生了这套理论。
一般而言,软件中的问题大致可以区分为两类。
第一类是计算问题。
给定输入,经过计算,得到输出。它关注的是一次求值过程是否正确、是否高效。
Output = F(Input)
例如编译器、排序算法、数学库、协议实现,主要都属于这一类问题。
第二类是持续存在系统。
它们要在持续的时间中与外部交互。它关注的是如何持续存在。
例如操作系统、3A 游戏、交易系统。
对这类系统来说,关键不仅在于计算过程是否正确,更为重要的是它能否长期稳定地存在下去。
这套理论研究的就是第二类问题。
它跟上世纪 50 年代诞生、具有深刻影响力的控制论几乎同根同源,但扎根于软件工程。
它属于那种“换一个坐标系看待问题”的理论,尤其是在大型游戏中,它提供了一套全新的架构设计方案。