1. XenForo 1.5.14 中文版——支持中文搜索!现已发布!查看详情
  2. Xenforo 爱好者讨论群:215909318 XenForo专区

编程到底难在哪里?

本帖由 漂亮的石头2020-02-14 发布。版面名称:知乎日报

  1. 漂亮的石头

    漂亮的石头 版主 管理成员

    注册:
    2012-02-10
    帖子:
    487,766
    赞:
    47
    [​IMG] 知乎用户,随便 阅读原文

    随手改的一个段子骗了这么多赞,很不好意思,所以决定更新一点稍微正经的内容。

    正确答案在下面 @丁树凯 这里。弗雷德里克·布鲁克斯博士在 33 年前(1986 年)写下《没有银弹》这篇论文,尽管编程的技术更了好几代,但文中的论断用来描述三十年后的今天,仍然分毫不差。

    软件的根本问题在于软件本身,也就是计算机本身。更一般地说,在于计算理论本身。

    想像一下,物理学家们致力于找到大统一模型,这个模型用一个数学公式就描述了整个宇宙的运行规律。在此规律下,从普朗克的空间和时间开始,到整个宇宙的宏观物事,全部都按这个规律各自行事,从而形成了丰富多彩的现实世界。换成软件会怎样?

    [​IMG]

    可以说,在目前的计算理论下,会非常^100 的苦逼。软件的本质是计算,而目前的计算理论决定了,这个软件的世界中,每一个基本粒子的运行状态都必须经计算才能得到状态--如何产生、如何碰撞、如何变换、如何运行,等等这些。我们已知这个宇宙共有 10^80 个原子。假如这个宇宙是运行在计算机当中的话,这 10^80 个原子的状态和运行轨迹都必须经过计算才能确定,而屏幕前面的你————一个被上帝安排来干这活的苦逼程序员,不得不拼着把头发掉光,也要把 10^80 个原子的运行算法安排得清清楚楚,明明白白。如果有其中一个原子没考虑周全,那么你的宇宙--对不起,应该是上帝的宇宙--就会在你手里爆掉。

    上帝说要有光,于是便有了光。而作为苦逼的程序员,为了让世界有光,你还不得不去折腾 RGB、CMYK、LAB,导入一个 OpenGL 库,把每一个光源、每一条光线都计算清楚,然后用少得可怜的显存渲染出你想要的光。

    这个就是布鲁克斯博士论文中的”根本困难“(essence)。而用什么语言、什么样的数据结构去描述这个世界,那仅仅是次要困难(accident)。

    换句话说,怎么理解布鲁克斯博士论文中的复杂性。不是软件太复杂,而是”软件“这个工具(包括现有的计算机体系结构、计算理论和模型)太过简单和原始,天生无法胜任”构建现实“这样宏大的任务。

    从 How to do 的角度来看,大部份软件的问题都是需求问题,而需求问题本质上是一个沟通问题。人与人之间的沟通天生就是不精确的。让人们对一个复杂易变的实体(即软件)保持一致的理解,不谛于建一个巴别塔。

    [​IMG]

    所以总的来说,“编程”这件事根本不难,难的是要弄明白编些什么。

    -------------------- 原答案 --------------------

    某日,老师在课堂上想考考学生们的智商,就问一个男孩: “树上有十只鸟,开枪打死一只,还剩几只?”

    男孩反问:“是无声手枪,还是其他没有声音的枪么?”

    “不是。”

    “枪声有多大?”

    “80~100 分贝。”

    “那就是说会震的耳朵疼?”

    “是。”

    “在这个城市里打鸟犯不犯法?”

    ‘不犯。”

    “您确定那只鸟真的被打死啦?”

    “确定。”老师已经不耐烦了,”拜托,你告诉我还剩几只就行了,OK?”

    “OK。鸟里有没有聋子?”

    “没有。”

    “有没有鸟智力有问题,呆傻到听到枪响不知道飞的?”

    “没有,智商都在 200 以上!”

    “有没有关在笼子里的?”

    “没有。”

    “边上还有没有其他的树,树上还有没有其他鸟?”

    “没有。” “方圆十里呢?” “就这么一棵树!”

    “有没有残疾或饿的飞不动的鸟?”

    “没有,都身体倍棒。”

    “算不算怀孕肚子里的小鸟?”

    “都是公的。”

    “都不可能怀孕?”

    “………,决不可能。”

    “打鸟的人眼里有没有花?保证是十只?”

    “没有花,就十只。” 老师脑门上的汗已经流下来了,

    下课铃响起,但男孩仍继续问:“有没有傻的不怕死的?”

    “都怕死。”

    “有没有因为情侣被打中,自己留下来的?”

    “笨蛋,之前不是说都是公的嘛!”

    “同性恋可不可以啊?”

    “…………。,性取向都很正常!”

    “会不会一枪打死两只?”

    “不会。”

    “一枪打死三只呢?”

    “不会。”

    “四只呢?”

    “更不会!”

    “五只呢?”

    “绝对不会!”

    “那六只总有可能吧?”

    “除非你他妈的是猪生的才有可能!一枪只能打死一只!”

    “…好吧,那么所有的鸟都可以自由活动么?”

    “完全可以。”

    “它们受到惊吓起飞时会不会惊慌失措而互相撞上?”

    “不会,每只鸟都装有卫星导航系统,而且可以自动飞行。”

    “恩,如果您的回答没有骗人,”学生满怀信心的回答,“打死的鸟要是挂在树上没掉下来,那么就剩一只,如果掉下来,就一只不剩。”

    老师推推眼镜,强忍着要昏倒的感觉,颤抖地说道:“你可以去当程序员了……”

    阅读原文
     
正在加载...