软件系统架构更像一座城市社区?


"架构 "是软件工程中非常常用的一种方法,也是非常成功的一种方法。如此成功,以至于我们把 "架构师 "作为软件世界中的一个角色。
做一个架构师是一件很酷的事情!

有谁记得《黑客帝国》中的 "建筑师"?是的,这很酷,但是,为什么我们要用建筑学的方式来思考呢?
也许是因为两者都与 "建造 "东西有关。
有一个设计职位,也许这就是原因。

它不完全是工程,有一个 "艺术 "的部分(对某些人来说甚至是黑色艺术)。
将架构与建筑作为一个类比,其实未能发挥作用,甚至有很多地方是不可行的。

建筑学的类比失败在哪里?
说到这里,你可能明白了。我不喜欢软件架构这个词。我们 "做软件的人 "和他们 "设计建筑的人 "都画图来表达我们的想法。我认为两者的相似性基本到此为止。

以生产过程为例。建筑是一个 "瀑布 "过程。建筑师是一个在施工前创造设计和详细蓝图的人,这样工程师就会按照一毫米的标准来实施。但是,现在没有一个理智的人做这样的软件。

或者以 "企业 "和 "开发者 "之间的关系为例。它假定一个建筑师是必要的,以弥合商业和开发者之间的差距,从而将每个人压制在自己的位置上。

当我想到一个软件系统时,这些都是我脑海中出现的东西:

  • 它是由一起工作/创作的程序组成的。
  • 这些程序互相使用,有时它们是相互依赖的。
  • 不同群体的人设计、制作和运行这些程序。
  • 随着时间的推移,它不断发展。"时间 "和 "时间带来的层次 "在软件系统中有着巨大的影响。

如果说它们构成了一个 "不断发展的生态系统",而不是一个 "机制 "或一个完成的建筑。那么,我有一个更好的建议。

一个软件系统实际上,就像一个城市
这同样很俗气,但是,有些奶酪比其他的更好。

1、从村庄到巨型城市
作为一个生态系统,它的变化和成长。你从一个单一的住所开始,然后你把它发展成一个村庄。它继续下去。

住宅 > 村庄 > 镇 > 城市 > 大都市 > 国家/帝国

制造它永远不会结束。它随着时间的推移而变化,并普遍增长。

旧的和新的生活在一起

2、新旧建筑并存
随着时间的推移,系统的发展,新和旧都生活在一起。对于基础设施和上层建筑来说都是如此。当你想做出改变时,你会看到层层叠叠的不同实现、库、风格和人们过去的决定。

不言而喻,当你做事情的时候,你会沿途留下自己的印记。

3、富人与穷人
黑暗的小巷,法律不适用的粗糙街区。复杂的老式脆弱程序,你都不敢碰,更不用说看代码了。没有人愿意去那里。

当然,除非你是蝙蝠侠。


4、移民/城市化
有时,贫困的社区坐拥一座金矿,但他们无法提取这种价值。我们想升级他们,用更好的基础设施、更好的建筑、更好的道路和交通连接、更新的框架、语言、CI/CD管道等等。

城镇化和移民项目都不容易。有人力成本、文化冲突、意想不到的后果、结果没有达到承诺。然而,我们一直在做这些事情,是有原因的。我们都在学习如何做得更好。

城市和景观从来没有停止过,它们总是在进化,就像我们的软件系统。有很多人在为它们注入生命。它们服务于许多目的,有许多方法来设计和运行一个城市/软件系统。

我可以继续说下去。我看得越多,看到的相似之处就越多。然而,我确信如果我反过来看,也有许多不同之处。

我希望,在未来的某一天,我们的领域将有足够的历史和自己的故事,我们将不需要类比来思考它。在那之前,我们需要切换到一个比建筑更好的类比,让我们思考共存、时间/历史、人的因素、治理和我们软件生态系统中的许多其他东西。

这就是为什么在思考软件系统的时候,"城市 "是一个更好的比喻。


就像豪华社区一样,有一些热门项目,每个人都想在那里工作。投资是在那里进行的,最好的新技术总是在那里出现。
有一些稳定的郊区,虽然无聊,但生活在自己的节奏中流动。
此外,还有一些贫困的社区。没有人爱,贫穷,老旧,没有人喜欢住在那里。没有投资,没有新的发展。
两者都有可怕的地方。