What does the quote "Level of Indirection solves every Problem" mean in Computer Science?
8 回答
通常,这意味着通过提高抽象级别可以使问题更容易理解/解决。
不过要小心你的抽象,至少我听到的完整引用是,“你可以用另一个间接级别解决每个问题,除了太多间接级别的问题”。
来自美丽的代码一书:
计算机科学中的所有问题都可以通过另一个层次的间接来解决,”这是 1972 年设想现代个人计算机的科学家 Butler Lampson 的一句名言。
尽管这与维基百科相矛盾,维基百科将这句话归因于大卫惠勒。
Kevlin Henney 的推论是,“……除了间接层太多的问题”。
这基本上意味着您应该将问题分解为较小的问题,直到问题易于解决。
您将问题分为几层:
- 解决问题的例程
- 他们称之为:理解问题空间的例程
- 他们调用: 执行小步骤的例程(加载文件,旋转一些位,写入输出)。
顶部的例程(解决问题的例程)是从解决问题的实际方法中间接/抽象出来的,使它们在以后以稍微不同的方式解决相同问题时更加灵活。
如此重要的概念,这里的答案却很少。通常,提出的每个问题不一定通过直接代码调整来解决,而是以某种形式应用一些代理(忘记模式定义)。拦截&| 事件检测被严重低估。
首先,我们必须了解添加间接级别意味着什么。
通常,添加间接级别意味着我们能够提供解决问题的替代方法,理想情况下还有一些额外的好处。其他时候,当当前没有任何工作时,间接可能是我们唯一的解决方案。
例如,如果业务需求是“我们需要决定采购多大的 IP 块,以便为我们的所有站点提供 IP 地址。”
问题是,如果我们选择一个太小的块,那么我们将需要一个更大的块。我们的管理员不仅必须获得另一个块,而且现在必须在我们的路由表中注入额外的前缀才能访问我的站点。这是额外的时间、成本和复杂性。有没有更好的办法?
今天,IP 地址意味着您登录时的身份和所在位置。
LISP使用一定程度的间接来解决上述路由问题。
这样做需要付出一些代价:
现在必须存在新的支持 LISP 的服务器才能将地址映射到站点
需要两个命名空间(一个用于位置,另一个用于 ID)
还有一些额外的好处:
添加新块时消除站点重新编号
减少路由表的大小
ISP 可以进行更改(将站点从一台主机移动到另一台主机)
节省 IPV4 地址空间(未分配给主机的定位器地址空间)
使用 LISP,ISP 可以为每个站点分配更少的地址
下图显示了新的间接层:
LISP 通过添加一个新的间接层解决了这个问题并简化了一些事情,但并不是完全简单。它是不同的,并且在许多方面更好。
它起源于布尔特兰普森:
“计算机科学中的所有问题都可以通过另一个层次的间接来解决”
这显然是一句格言,并不打算按字面意思理解。这当然不是一个可证明的定理。
这句话的含义非常广泛。理解的关键是关注“问题”这个词。问题可以是编程问题/错误,将世界实体转换为其等效的计算组件,与计算解决方案相关的成本。假设您正在尝试通过自己开发某些东西的成本来解决问题,您可能需要考虑让其他专家在时间和金钱上更便宜地为您完成这项工作。这是间接的另一种用法