混淆复杂性被认为是有害的

2020-11-15 00:47:45

如果你还在寻找2020年的好方案(我知道,现在有点晚了),你不会错的:今年,我将专注于让我工作的网络和产品变得真正简单。现在,在你把汤姆的气撒在我身上之前-。

三件事:第一,难题总是需要复杂的解决方案。如果你听过我谈到复杂性,你可能在某个地方看过幻灯片上的这句话-。

没有复杂的解决方案,你就无法解决难题--复杂的问题。事实上,我们在日常生活中遇到的许多复杂性都是因为我们说“这太复杂了,我要建造一些更简单的东西。”(我在这里想的是我去年读到的一篇博客文章,上面写道,当我们建造集装箱时,我们研究了路由,并意识到它是多么复杂的…。所以我们发明了更简单的…。当然,事实证明这比动态路由更复杂!)。

其次,可以正确地使用抽象来管理复杂性,也可以错误地使用抽象来混淆或掩盖复杂性。我们这个世界的复杂性和系统故障的第二大来源是,与其说我们抽象复杂性,不如说我们混淆了它。

第三,抽象不是零和游戏。如果你还没有找到折衷办法,那说明你看得还不够仔细。这是通过状态/优化/曲面三角形来表达的,此时您应该知道这一点。

回到这篇文章的顶部,重点是:使用抽象来管理复杂性是很好的。混淆复杂性并非如此。“仅仅因为我做不到”而掩盖复杂性永远解决不了问题,就像扫地毯下的污垢一样,或者在没有费心先修墙的情况下把旧油漆贴在纸上一样。

我们需要做的不仅仅是弄清楚如何让用户界面更简单、更“意图驱动”、自动化,或者其他任何东西。我们需要把网络看作一个系统,而不是我们多年来拼凑在一起的点点滴滴的集合。我们需要横向和纵向地考虑模块,考虑它们是如何交互的,了解每个部分是如何工作的,了解每个抽象是如何泄露的,并且能够提出棘手的问题。

对于每个模块,我们需要了解事情是如何工作得足够好的,以便问:这是不是划分这两个模块的正确位置?我们应该愿意重新考虑我们的抽象线、模块的位置以及事物如何组合在一起。有时,移动抽象点可以极大地简化设计,同时提高最佳行为。其他时候,减少优化以构建更简单的捕鼠器是值得的。但是,除非你问了,否则你无法知道这个问题的答案。如果你想掩盖复杂性,因为…。嗯,那就是它属于…的地方。那么你就是在做你自己和你为之工作的组织的坏事,简单明了。你在模糊的地毯下扫过的任何东西都会增长和繁殖。当它从地毯下面爬出来的时候你不会想在身边的。

对于每个模块,我们需要学习如何询问这是否是正确的抽象级别和类型?我们需要学会问一问,这个模块正在执行的一组函数是否真的“挂在一起”,或者这只是一堆没人知道该怎么做的杂乱无章的东西,所以他们把它们都塞进了一个黑匣子里,然后就把它叫停了?

最重要的是,我们需要学会将网络视为一个系统。我已经喋喋不休地说了这么久,但我仍然不认为人们理解我说的很多次。所以我想我只能一直这么说了。😊。

网络旨在解决的问题很难解决--因此,网络将变得复杂。你无法消除复杂性,但你可以学会最小化和控制它。在经过深思熟虑的系统中进行抽象是控制复杂性的有效且有用的方法,而理解如何以及在何处创建模块(抽象可以在其边缘发生)是控制复杂性的有效且有用的方法。