首页   注册   登录
V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
V2EX  ›  程序员

怎么理解“计算机科学中的每个问题都可以用一间接层解决”这句话?

  •  
  •   zaima · 28 天前 · 1930 次点击
    第 1 条附言  ·  28 天前
    此句话是我在看《游戏引擎架构》这本书中所看到,书作者说是滑铁卢大学教授 Jay Black 的一句名言,译者 miloyip 在备注中指明此句应沿自 David John Wheeler。英文原句是“ All problems in computer science can be solved by another level of indirection.”。
    27 回复  |  直到 2019-06-27 07:02:02 +08:00
        1
    yangzhezjgs   28 天前
    个人理解就是出现了旧软件无法解决的新问题,就造一个新的轮子。
    裸机无法解决多道并发问题和易用性问题————操作系统。
    操作系统的文件系统无法解决数据持久化问题 ————关系数据库。
    关系数据库不够灵活—————— nosql。
    c 语言不支持面向对象—————— c++。
    c++太复杂了—————— java。
    要隔离应用但是又不想用虚拟机———— docker。
        2
    saluton   28 天前
    请证明 P = NP
        3
    Raisu   28 天前
    谁说的?
        4
    undeflife   28 天前   ♥ 6
    每个 css 样式问题都可以通过套一个 div 来解决 🐶
        5
    huangzhe8263   28 天前
    成功的在毕设答辩时用上了,效果不错
    其实可以参见计算机网络的七层,五层
        6
    u823tg   28 天前
    分层思想在计算机里面很常见。
        7
    jydeng   28 天前
    “这个 api 太难用了,我们再封装一层把。”
    “嗯,好用多了。”
        8
    Vinty   28 天前
    计算机科学和软件工程并不是一回事,计算机科学的主要领域 密码学、信息论、数据结构、算法这些好像没一个能通过中间层解决的
        9
    kcirtap   28 天前 via iPhone
    把科学换成工程,还能讨论
        10
    ai277014717   28 天前
    没有什么问题不是封一层解决不了的,如果有那就再封一层
        11
    TomatoYuyuko   28 天前
    @undeflife #4 如果解决不了就套 2 层
        12
    zaima   28 天前
    @Raisu 此句话是我在看《游戏引擎架构》这本书中所看到,书作者说是滑铁卢大学教授 Jay Black 的一句名言,译者 miloyip 在备注中指明此句应沿自 David John Wheeler。英文原句是“ All problems in computer science can be solved by another level of indirection.”。
        13
    mcfog   28 天前
    ---- 除了间接层数量过多的问题之外
        14
    pi1ot   28 天前
    指针,接口,索引,缓存,队列,助理,秘书
        15
    libook   28 天前
    所有计算机问题都可以用两个思想来解决:分层和解耦。
    分层可以将整体复杂度分解到每个层中,使得每个层的复杂度相比以前的整体复杂度要低。
    解耦可以将问题和风险封锁在一个模块内,提升解决问题的效率,降低风险的影响范围。

    不过也要辩证去看,因为很多问题的解决方案都只是权衡之计,解决了一方面问题又出现了另一方面问题,最合理的方式是从实际出发,平衡各方面,选取最适合当前情况的方案。
        16
    liuzhiyong   28 天前 via Android
    我来说个最通俗易懂的:就是“圆环套圆环娱乐城”。一层套一层,大事化小,小事化了,就这么简单。
        17
    Aruforce   28 天前 via Android
    不断向高层抽象吧……
        18
    russian   28 天前
    编译器就是你的 c++/java/python 和机器之间的中间层,没问题
        19
    SuperMild   28 天前
    这是一句正确的废话,相当于说一切问题都可以通过另一家外包公司来解决。

    一层套一层,到了最后,总要有一个 间接层 /公司 /人 来兜底啊,底层的东西总得有人做。
        20
    gavindexu   28 天前 via iPhone
    一个 SQL 写不出来的需求,
    可以再套一层👻
        21
    deming   28 天前
    netty in action 中也提到了这句话。Java 原生的网络编程太难整了,所以,我们搞出了 netty。
        22
    hoyixi   28 天前
    我感觉不仅计算机科学,现实中也是,如果可以来一层,难度会降低。只不过现实中很多情景不允许加一“层”


    单说计算机科学,本质原则是:简单地做最专业的事

    函数、类、指令等等,一些功能单元,越简单越好,然后该单元工作起来容错性、稳定性达到极致

    然后用这些单元的时候,根据情况包“层”~,

    怎么包,包完怎么组织这些“层”等等, 这学问归纳起来可以称之为: 面向对象技术,设计模式
        23
    wr410   28 天前
    因为你没有看到本质

    这个宇宙的工作模式,其实就和计算机系统一样,所以它们解决问题的方式都是互通的,只是你没有找到接口而已。
        24
    Takamine   28 天前 via Android
    适配器转换器足够,我能键盘发电上网。:doge:
        25
    halokings   27 天前
    一件事我搞不定,那怎么解决?我可以找一个可以搞定的人
        26
    troywinter   27 天前
    @Raisu 丹尼斯 - 里奇
        27
    joyee   22 天前
    我听说过的版本是,所有兼容问题都可以通过加一层抽象解决,所有性能问题都可以通过去掉一层抽象解决……
    关于   ·   FAQ   ·   API   ·   我们的愿景   ·   广告投放   ·   感谢   ·   实用小工具   ·   1625 人在线   最高记录 5043   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.3 · 20ms · UTC 00:19 · PVG 08:19 · LAX 17:19 · JFK 20:19
    ♥ Do have faith in what you're doing.