【问题标题】:Level of Indirection solves every Problem间接级别解决了所有问题
【发布时间】:2010-09-22 06:19:45
【问题描述】:

计算机科学中“间接水平解决所有问题”这句话是什么意思?

【问题讨论】:

  • 这听起来像是家庭作业。
  • 不过,这是一个合理的问题。

标签: computer-science abstraction indirection


【解决方案1】:

通常这意味着通过提高抽象级别可以使问题更容易理解/解决。

但要小心你的抽象,至少我听到的完整引用是,“你可以用另一个间接级别解决所有问题,除了太多间接级别的问题”。

【讨论】:

  • 好建议。我经常处理高度抽象的问题,并且喜欢将抽象描述为推动小端的大杠杆:小的变化会导致大动作,但代价是你必须非常努力地推动。
  • 这不是完整的报价;这是事后其他人提出的更正版本。不过是对的。
  • 我不确定“让问题更容易理解”是正确的解释。
  • 优秀的答案。
  • 我认为重要的是要记住这不是level of abstraction,这是level of indirection。他们不鼓励abstract 实体,而是在流程中插入一个额外的步骤。就像获取指针的值一样,我们不会将原始内存抽象为类型化变量,但我们要求用户首先访问类型化对象(以实现所需的额外逻辑,如验证),然后从那里,我们让用户访问原始内存.
【解决方案2】:

这基本上意味着你应该把你的问题分解成更小的问题,直到问题很容易解决。

你把问题分成几层:

  • 解决问题的例程
  • 他们调用:理解问题空间的例程
  • 它们调用:执行小步骤的例程(加载文件、旋转一些位、写入输出)。

顶部的例程(解决问题的例程)是从解决问题的实际方法中间接/抽象出来的,使它们在以后以稍微不同的方式解决相同问题时更加灵活。

【讨论】:

    【解决方案3】:

    来自书Beautiful Code

    计算机科学中的所有问题都可以通过另一个间接层次来解决,”这是 1972 年设想现代个人计算机的科学家 Butler Lampson 的一句名言。

    虽然这是 contradicted by Wikipedia,但他将这句话归于 David Wheeler。

    【讨论】:

    • 在这一章的结尾,本书提到兰普森将这句话归于大卫·惠勒,所以维基百科并没有真正反驳它,只要你愿意的话:) .
    【解决方案4】:

    这是一个非常重要的概念,但这里的答案却很少。通常,提出的每个问题不一定通过直接代码调整来解决,而是以某种形式应用一些代理(忘记模式定义)。拦截&|事件检测被严重低估了。

    【讨论】:

    • 请问,您所说的拦截和/或事件检测是什么意思?什么活动?它是如何被低估的?谢谢。
    【解决方案5】:

    Kevlin Henney 的推论是,“...除了间接层太多的问题”。

    【讨论】:

    • 在我自己听到它之前,我用推论听到了它。与需要添加间接层的情况相比,我更频繁地遇到这个推论。
    【解决方案6】:

    这句话的含义非常广泛。理解的关键是关注“问题”这个词。问题可以是编程问题/错误,将世界实体转换为其等效的计算组件,与计算解决方案相关的成本。假设您正在尝试通过自己开发某些东西的成本来解决问题,您可能需要考虑让其他专家在时间和金钱上更便宜地为您完成这项工作。这是间接的另一种用法

    【讨论】:

      【解决方案7】:

      首先我们必须了解添加间接级别是什么意思。

      通常,添加间接级别意味着我们能够提供解决问题的替代方法,理想情况下还有一些额外的好处。其他时候,当当前没有任何工作时,间接可能是我们唯一的解决方案。

      例如,如果业务需求是“我们需要决定采购多大的 IP 块,以便为我们的所有站点提供 IP 地址。”

      问题是,如果我们选择一个太小的块,那么我们将需要一个更大的块。我们的管理员不仅必须获得另一个块,而且现在必须在我们的路由表中注入额外的前缀才能访问我的站点。这是额外的时间、成本和复杂性。有没有更好的办法?

      今天,IP 地址意味着您在登录时的身份以及您所在的位置。

      LISP 使用间接级别来解决上述路由问题。

      这样做是有代价的:

      • 现在必须存在支持 LISP 的新服务器才能将地址​​映射到站点

      • 需要两个命名空间(一个用于位置,另一个用于 ID)

      还有一些额外的好处:

      • 在添加新块时消除站点重新编号

      • 减少路由表的大小

      • ISP 可以进行更改(将网站从一台主机移动到另一台主机)

      • 节省 IPV4 地址空间(定位器地址空间未分配给主机)

      • 使用 LISP,ISP 可以为每个站点分配更少的地址

      下图显示了新的间接层:

      LISP 通过添加 indirection新层 解决了这个问题,并简化了一些事情,但并非完全简单。它与众不同,而且在很多方面都更好。

      【讨论】:

      • 这是抽象而不是间接。
      【解决方案8】:

      源自Bulter Lampson

      “计算机科学中的所有问题都可以通过另一个层次的间接性来解决”

      这显然是一个格言,并不打算按字面意思理解。这当然不是一个可证明的定理。

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2021-07-13
        • 2014-06-21
        • 2017-08-26
        相关资源
        最近更新 更多