复杂系统的必然崩溃
“任何在科技行业工作足够长的人,尤其是在大公司工作的人,都曾见过下面的场景。
有一个遗留系统,很大很复杂,没有人完全理解它是如何工作的。
架构师被要求“修复”系统,他们找来一块大的白板,把这个大系统分解成很多方框和箭头。对于遇到的问题,他们的解决方案就是……添加更多方框和箭头。没有任何一个可以从系统中消去,每个人都只是加上自己的那部分。
"EKS在本月底将被Omega Star淘汰,但Omega Star仍然不支持ISO时间戳。" 我们都经历过这种情况。
尽管对于我们这些渴望写出永恒和持久的软件的人来说,这可能是令人失望的,但你不得不承认,这个系统是有效的。就其所有的浪费、低效和纯粹的欺骗("旧的代码工作得很好!""不,等等,旧的代码很糟糕!")而言,这就是在过去几十年里支撑了很多软件公司的模式。
不过,这种循环会一直持续下去吗?我不太确定。现在,软件业已经处于近二十年的经济繁荣期,但经济学中一个确定的事情是,繁荣最终会变成萧条。在繁荣时期,软件公司可以不断雇佣新的人员来管理他们现有的软件(即更多的工程师来理解更多的盒子和箭头),但如果他们的劳动力被迫收缩,那么同样的系统可能变得无法维护。迅速和永久地减少复杂性可能是唯一的长期解决方案。
不过,有一件事对复杂性有利,那就是工程师喜欢复杂性。承认吧:就像我们抱怨别人的复杂性一样,我们喜欢自己的复杂性。我们喜欢围坐在一起,梦想着新的架构图,可以舒适地坐在我们自己的脑袋里--只有当这些图离开我们的脑袋,在现实世界中成形,并且超出了任何一个人的脑袋大小时,问题才开始。
要抵制复杂性,对新的方框和箭头说 "不",这需要大量的纪律。说:"不,我们不会解决这个问题,因为这只会带来10个我们还没有想到的新问题"。或者说,"让我们用一个更简单的设计,即使它看起来很业余,因为至少我们可以理解它"。或者只是说,"让我们做得更少而不是更多"。
简单的设计在理论上听起来很好,但它可能不会为你赢得很多同行的赞誉。复杂的设计意味着有更多的团队来管理系统的更多部分,工程师要做更多的工作,更多的会议和计划会议,也许还要申请更多的专利。一个简单的设计可能会让人觉得你没有真正做好你的工作。"就这样了?我们完成了吗?我们可以打卡下班了?" 而当促销季节到来时,用一个令人眼花缭乱的新设计来为自己辩护可能比用一个无聊的、被人理解的解决方案更容易。
最终,我认为软件是遵循繁荣和萧条的模式,还是更可持续的模式,将取决于生产软件的机构的经济压力。一个不惜一切代价追求增长的软件公司,就像罗马人急切地吞噬越来越多的高卢地区一样,很可能会陷入 "增加-完成-崩溃 "的循环。一家目标更为适中的软件公司,拥有稳定的客户群,不会随着时间的推移而发生太大的变化(这种东西存在吗?(这样的公司是否会像无能的高卢人一样,被凯撒和他的军队所征服,是另一个问题)。
就我个人而言,我试图对这种情况保持良好的幽默感,并避免向愤世嫉俗或绝望屈服。编写软件很有趣,但在目前的行业中,它也是非常不稳定的。如果你10年前写的代码仍在使用,那么你就有很多值得称道的地方。如果不是,那么嘿,至少你和我们其他人在一起是个好伙伴,我们可能占了软件开发者的大多数。只要你继续尽力而为,当一些野心勃勃的架构师拿出一张有许多方框和箭头的大图时,你要尽量保持健康的怀疑态度。
最后,赠送出一张 20元优惠券,邀您加入中国最大 IoT 物联网开发者社区,获取1000+行业资料。
往期推荐
原文始发于微信公众号(IoT物联网技术):小米米家App两个月内再现故障,4亿 IoT 设备失联,智能变智障。--论复杂系统的必然崩溃
- 左青龙
- 微信扫一扫
-
- 右白虎
- 微信扫一扫
-
评论