Skip to content

EWD 667 通俗版 #54

Description

@hax

EWD 667 是相当有名的文章,尤其在AI即将接管编程的当下,不管从正面还是反面意义上,都值得再读一次。但我发现自从我开始用AI帮助我读文章以来,我对比较学术味文章的阅读能力下降了,或者说更懒的动脑了,推己及人,所以我也(讽刺地)让豆包把原文改得更通俗一点,拯救你我日益退化的阅读能力。


一、为啥总有人想让电脑“听懂人话”?

从电脑刚出现那会儿起,就有人觉得编程太麻烦了——非得小心翼翼、一字不差,跟用那些死板的公式符号似的。他们抱怨电脑太“死脑筋”:就算指令里有明显错误,只要写得符合规则,电脑就会照做不误。就像诗人豪斯曼说的:“哪怕多想一秒都觉得漫长,思考本身就是件累人的事。” 这些人总盼着能有更“聪明”的电脑,就算输入时有点小失误,也能自己判断对错,不用人费心思检查。

早期的机器语言特别“精简”,一个字都不能错,很容易出问题。后来人们发明了“高级编程语言”,算是进步了不少——现在写错了,电脑常会弹出错误提示,而不是直接给出错结果(不过还有人不领情,觉得错误提示比错答案还烦人,甚至觉得“编程方便”就是“犯错了也没人发现”)。但本质上,电脑还是个“忠实的执行者”:你怎么指令,它就怎么干,哪怕指令本身毫无意义。编程依然离不开严谨的符号和规则,半点马虎不得。

二、“用母语编程”听着好,实际可行吗?

为了让编程更简单,有人提出:干脆让电脑直接听懂我们的母语(比如中文、英文),这样人就不用学那些复杂的编程符号了。他们觉得,虽然这样会让电脑的设计更复杂,但能把麻烦转移给机器,人就轻松了。

但这想法真的靠谱吗?其实不靠谱。因为人和机器的“沟通接口”不是简单的“谁多干点活”——沟通本身也需要额外付出精力。过去的经验告诉我们:换个接口很可能让双方都更累(甚至累很多)。所以现在大家反而更喜欢“简单直接的接口”(也就是“窄接口”)。用母语编程看似省了学符号的功夫,实则会带来更多麻烦。

三、数学史早就告诉我们答案

回顾一下数学的发展,就知道为啥“文字化编程”行不通了:

  • 古希腊的数学一直停留在文字描述和画图阶段,最后裹足不前;
  • 古代穆斯林的“代数学”曾经试着用符号表达,后来又变回纯文字描述,慢慢就没落了;
  • 直到韦达、笛卡尔这些人发明了严谨的数学符号,西欧才摆脱了中世纪那种“非要用文字把事情说精确”的死板做法,现代文明才得以发展。

这些符号的好处太明显了:只要遵守几条简单规则,就能避免很多文字表达里藏不住的 nonsense。比如同样是“1加2乘3”,文字说出来可能有歧义,但用数学符号“1+2×3”就清清楚楚。

四、别把“严谨”当成负担,要当成福利

很多人觉得学编程符号是种负担,但其实这是个大福利:正因为有了这些符号,现在的小学生都能做到过去只有天才才能完成的计算。反观有些人为了“显得清晰”,刻意不用标准的逻辑符号,反而让人看不懂——这其实是误解了符号的价值。

说到底,我们觉得母语“好用”,很大程度上是因为用母语说话时,哪怕内容没道理,也不容易被发现。但编程需要的是绝对的精准,这种“模糊性”恰恰是编程的大忌。

五、真用母语编程,会怎么样?

不妨大胆设想一下:如果从一开始,电脑只能接收母语指令,会发生什么?大概率是历史重演——计算机科学会变成一门“黑科技”,大家拼尽全力,也只是想从混乱的母语中提炼出一套严谨的规则体系。要想让这个“人机接口”变得好用,可能得再花上几千年时间,就像人类从结绳记事发展到现代数学符号那样。

更现实的问题是:现在很多人连自己的母语都用不好了。因为教育越来越不重视逻辑和严谨性,很多文章、报告里全是空洞无意义的废话(这被称为“新型文盲”)。连人都没法用母语精准表达,还指望电脑能“听懂”并执行复杂指令,简直是天方夜谭。

最后总结

我的直觉告诉我:用母语编程的电脑,造起来有多难,用起来就有多麻烦。与其盼着电脑适应我们的“模糊表达”,不如好好利用现有的编程符号——它们才是让编程变简单、变精准的关键。

Activity

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Metadata

Metadata

Assignees

No one assigned

    Labels

    No labels
    No labels

    Projects

    No projects

      Milestone

      No milestone

      Relationships

      None yet

      Development

      No branches or pull requests

      Issue actions