Skip to main content

《计算机祖师爷的警告:不要被“自然语言编程”给骗了!》From 码农翻身———来自 Dijkstra(没错,就是那个名字中带 [ijk] 的男人)48 年前的短文 EWD667

  1. 《计算机祖师爷的警告:不要被“自然语言编程”给骗了!》

    From 码农翻身

    ———

    来自 Dijkstra()48 年前的短文 EWD667

    自然语言充满不确定性,而编程说到底就是给计算机的 SOP,本身就得消除不确定性。这二者从根本上就是矛盾的。所以在前 LLM 时代,想掌握古法编程,就得靠程序员自身的逻辑推理能力,把需求的不确定性消除,变成一份可以执行的 SOP。

    这种把不确定性消除,构建出一份易读且高效的 SOP 的能力,就依赖于一个程序员的品味和工程能力。毕竟有句老话说的好

    Thus, programs must be written for people to read, and only incidentally for machines to execute.


    而 LLM 和 Agent 的出现,就像DND 里的魔网和魔偶一样,把控制计算机这种类似于「点石成金」的能力赋予了更多的人。但是它并不能瞬间提高个人品味和工程能力。

    诚如索绪尔提出的「能指」和「所指」,自然语言本身的二义性就决定了 LLM 的产出结果极度依赖于模型的理解能力,以及它的工程能力。但我们都知道,这极其不稳定。

    毕竟就像维特根斯坦说过的「语言即世界」,LLM 所认知的世界远远大于你所认知的,大的部分对于你来说就是「Unknown unknowns」。所以你就得基于你的认知,用语言来限定 LLM,让它产出你所能掌握的内容。换句话说就是你的世界和它的世界的交集。

    我从去年九月份开始就很少写代码了,大部分都是 Claude code 来输出。特别是 Opus 4.6 出现以来,一版直出的概率更高了。我从一开始就一直使用 cc 的 plan mode。在实现前期跟 cc 把方案敲定,能极大地提高一版出的概率。

    而把方案敲定的过程往往要和 cc 来回好几趟,有时还会把上下文撑爆,触发自动压缩。但是这样的前期投入可以确保它的产出不会完全偏离你自身的品味和工程实践,不至于完全失控。

    我想这种概率性是 LLM 与生俱来的。作为人类程序员(),不应该放弃自身的品味去追求老虎机的 777 大奖。

    你可以理解为老法师的尊严也好,执着也罢。在我看来,LLM 只是降低施法门槛,给予更多人接触魔网机会的廉价魔杖,还称不上自动施法机器。

    #AI