别小看命名这件小事:为什么开发者必须重视这个问题
当你的 Schema 装不下数据的时候
说真的,大多数开发者都遇到过这种噩梦:数据库 Schema 死活塞不下新需求。
巧了,古人类学家们现在也在经历同样的噩梦——而且他们已经扛了一百多年了。
莫纳什大学最近的一项研究指出了一个问题,能让任何软件架构师坐立不安:我们给人类祖先起名字、做分类的那套系统,是给一个数据少得多的世界设计的。现在新化石像潮水一样涌进来,那棵老旧的分类树已经快要撑不住了。
没人聊的分类困境
说起人类演化,很多人脑子里都是一幅规整的线性图景。能人变成直立人,直立人变成智人。简单。清晰。错了。
现实情况要乱得多——是一堆互相有关联的物种,很多在时间和地域上都有重叠,有的还杂交,有的直接灭绝了。听着耳熟?
把“物种”换成“微服务”,把“地域”换成“云区域”,这不就是分布式系统的日常吗?
我们从二十世纪初的古生物学家那里继承下来的命名规则,默认演化是沿着干净的分叉走的。但每一次新发现——每一个新数据点——都在告诉我们:我们的祖先一直在分叉、汇聚、有时候还往回走。这哪是什么二叉树,分明就是图数据库。
开发者能从古代分类学里学到什么
这才是有意思的地方。演化分类学家遇到的难题,跟我们搭建现代系统时遇到的几乎一模一样:
版本地狱:就像“直立人”这个词,问不同的专家会得到不同的答案,你的 REST API /v1/users 接口,可能六个月后对不同团队来说意思完全不一样。
Schema 漂移:新化石挑战现有分类的时候,研究者得回过头来决定:是扩大定义、搞子分类,还是承认当初的分类本身就站不住脚。听起来是不是像你手里那个祖传代码库?
“是一个”问题:纳莱迪人是现代人的直系祖先,还是旁支,还是别的什么?答案可能是“以上皆是”。这跟我们用对象继承模型来描述复杂关系时遇到的问题,简直一模一样。
造系统就要拥抱模糊
莫纳什的研究认为,演化科学家需要新的框架——一套能承认不确定性,而不是硬把数据塞进死板分类的框架。这跟我们在软件架构里学到的教训惊人地一致:造灵活、适应性强的系统。
想想看:与其用严格的分类树,不如用置信区间和概率分布怎么样?“直立人”不是一个二元分类,而是一个模糊集合,不同成员有不同的隶属度?
这其实就是科技行业发现的事情:从死板的瀑布开发到敏捷,从单体架构到微服务,从同步调用到事件驱动架构。我们不再逼着现实去适应我们的分类了——我们在造能容纳现实本来面目的系统。
总结
这里有个让人不舒服的事实,演化生物学和软件开发都在面对:我们的分类是人类构造出来的东西,永远都是临时的。化石记录才不在乎我们的命名规则,用户也不在乎我们的数据库 Schema。
那些呼吁更新分类系统的研究者,不是在较真——他们认识到框架塑造了我们看到的东西,也决定了我们能问什么问题。更新的分类不只是为了更准确,更是为了能发现新东西。
对开发者来说,道理是一样的。每当我们锁定一个数据模型,其实就是在赌我们现在的理解能站得住脚。有时候赌对了。有时候,就变成了直立人问题。
也许最好的系统——不管是演化分类系统还是软件架构——都是那些从一开始就为优雅演进而设计的。因为两个领域的唯一常量,就是变化。
化石还在挖。代码还在发。分类系统永远需要更新。
你现在的项目里在为什么框架难题头疼?有时候最有意思的解决方案,恰恰来自于看其他学科怎么应对类似的问题。