关于软件工程的真相
框架永无止境
有多少框架、库和服务的存在仅仅是为了让你编写更少的代码?几乎所有的框架都是如此。
为什么我们有这么多框架,每年还会出现一个新的?这是因为一个框架试图让系统变得简单,在这个过程中却导致了性能问题或编码上的不便。
一个沮丧的用户说:“我要写一个彻底解决这个问题的新框架。”他写了一个更快的新框架。只是时间问题,另一个沮丧的用户就会发现另一个问题,并写出一个新的框架。
这是一个无休止的恶性循环。
如果你的系统很复杂,不要试图简化它
你的系统很复杂。这既不是好事也不是坏事,有些系统本质上就是复杂的,因为它们天生如此。
如果你试图简化系统,那就是违背它的本质。洁净代码运动对你没有帮助,就像面向对象编程运动一样。
不要认为将系统分解为小部分会使它变得简单。现在你有很多团队,他们被切割成了独立的部分,以为这样就简单了。无知是工程师的敌人。系统不能通过部分来理解。它要么全部理解,要么一无所知。
这是你无法赢得的战斗。
不要将API设计得过于简单
API代表应用程序编程接口。它们与系统进行接口交互,接受系统的本真模样,包括它的美丽、丑陋、简单和复杂的部分,以及其中的错误和特性。
不要假装你的系统是简单的,通过暴露一个仅展示其美好一面的裸露API。你在向客户提供虚假的抽象,最终这种抽象会泄漏,引发问题,并对客户产生不良影响。
构建一个API来抽象复杂性,使客户端易于使用,就像打破鸡蛋壳,让小鸡容易出来一样。然而,最终小鸡将无法独立生存,调用该API的前端也将如此。
客户端最终会遇到意想不到的副作用,例如性能延迟、高CPU使用率、高内存使用率或高网络使用率。
抽象总是会泄漏。
设定默认值是一种逃避责任的行为
你可以暴露系统的真实本质,但可以设置默认值,认为这些默认值适用于大多数情况。虽然有用,但大多数客户端会选择走捷径,使用默认值而不去理解它们。
他们又回到了同样的沉船上,只不过这艘沉船上有一艘救生艇,开发人员可以依附其上。他们查看默认值并理解出了问题所在,并在必要时进行覆盖。
如果你将系统暴露出来,这个问题本不会发生。
如果你愿意,去除复杂性
你可以尝试消除系统的复杂性,而不是隐藏它。你可以用一个看起来简单的部分来替代它。这样做可能会解决一些问题,但请注意,新的复杂性可能会出现。一个新的怪兽诞生了。旧怪兽可能被杀死,但它可能仍然存在。
亲爱的客户,你可以使用一个简单的后端API,但请理解这个API可能并不真的简单。不要认为它理所当然,相反,深入了解它的复杂性,理解它是如何构建的。
通过了解API,你不仅会欣赏它,而且在API所创建的抽象泄漏到你这里时也会做好准备。你将准备好保护你的前端堡垒,也可以为修复后端做出贡献。
总结
拥抱复杂性,理解它并与之共同工作。这可能会开花结果,带来有效的性能,也可能会意外地诞生一个完全自由且真正完美的全新系统。
一个真正简单的系统。
这篇文章中的所有内容都不构成建议或行动号召。把它看作是一束在黑暗房间里首次照亮的蜡烛光。
如果你喜欢我的文章,点赞,关注,转发!