EWD 667 是相当有名的文章,尤其在AI即将接管编程的当下,不管从正面还是反面意义上,都值得再读一次。但我发现自从我开始用AI帮助我读文章以来,我对比较学术味文章的阅读能力下降了,或者说更懒的动脑了,推己及人,所以我也(讽刺地)让豆包把原文改得更通俗一点,拯救你我日益退化的阅读能力。
一、为啥总有人想让电脑“听懂人话”?
从电脑刚出现那会儿起,就有人觉得编程太麻烦了——非得小心翼翼、一字不差,跟用那些死板的公式符号似的。他们抱怨电脑太“死脑筋”:就算指令里有明显错误,只要写得符合规则,电脑就会照做不误。就像诗人豪斯曼说的:“哪怕多想一秒都觉得漫长,思考本身就是件累人的事。” 这些人总盼着能有更“聪明”的电脑,就算输入时有点小失误,也能自己判断对错,不用人费心思检查。
早期的机器语言特别“精简”,一个字都不能错,很容易出问题。后来人们发明了“高级编程语言”,算是进步了不少——现在写错了,电脑常会弹出错误提示,而不是直接给出错结果(不过还有人不领情,觉得错误提示比错答案还烦人,甚至觉得“编程方便”就是“犯错了也没人发现”)。但本质上,电脑还是个“忠实的执行者”:你怎么指令,它就怎么干,哪怕指令本身毫无意义。编程依然离不开严谨的符号和规则,半点马虎不得。
二、“用母语编程”听着好,实际可行吗?
为了让编程更简单,有人提出:干脆让电脑直接听懂我们的母语(比如中文、英文),这样人就不用学那些复杂的编程符号了。他们觉得,虽然这样会让电脑的设计更复杂,但能把麻烦转移给机器,人就轻松了。
但这想法真的靠谱吗?其实不靠谱。因为人和机器的“沟通接口”不是简单的“谁多干点活”——沟通本身也需要额外付出精力。过去的经验告诉我们:换个接口很可能让双方都更累(甚至累很多)。所以现在大家反而更喜欢“简单直接的接口”(也就是“窄接口”)。用母语编程看似省了学符号的功夫,实则会带来更多麻烦。
三、数学史早就告诉我们答案
回顾一下数学的发展,就知道为啥“文字化编程”行不通了:
- 古希腊的数学一直停留在文字描述和画图阶段,最后裹足不前;
- 古代穆斯林的“代数学”曾经试着用符号表达,后来又变回纯文字描述,慢慢就没落了;
- 直到韦达、笛卡尔这些人发明了严谨的数学符号,西欧才摆脱了中世纪那种“非要用文字把事情说精确”的死板做法,现代文明才得以发展。
这些符号的好处太明显了:只要遵守几条简单规则,就能避免很多文字表达里藏不住的 nonsense。比如同样是“1加2乘3”,文字说出来可能有歧义,但用数学符号“1+2×3”就清清楚楚。
四、别把“严谨”当成负担,要当成福利
很多人觉得学编程符号是种负担,但其实这是个大福利:正因为有了这些符号,现在的小学生都能做到过去只有天才才能完成的计算。反观有些人为了“显得清晰”,刻意不用标准的逻辑符号,反而让人看不懂——这其实是误解了符号的价值。
说到底,我们觉得母语“好用”,很大程度上是因为用母语说话时,哪怕内容没道理,也不容易被发现。但编程需要的是绝对的精准,这种“模糊性”恰恰是编程的大忌。
五、真用母语编程,会怎么样?
不妨大胆设想一下:如果从一开始,电脑只能接收母语指令,会发生什么?大概率是历史重演——计算机科学会变成一门“黑科技”,大家拼尽全力,也只是想从混乱的母语中提炼出一套严谨的规则体系。要想让这个“人机接口”变得好用,可能得再花上几千年时间,就像人类从结绳记事发展到现代数学符号那样。
更现实的问题是:现在很多人连自己的母语都用不好了。因为教育越来越不重视逻辑和严谨性,很多文章、报告里全是空洞无意义的废话(这被称为“新型文盲”)。连人都没法用母语精准表达,还指望电脑能“听懂”并执行复杂指令,简直是天方夜谭。
最后总结
我的直觉告诉我:用母语编程的电脑,造起来有多难,用起来就有多麻烦。与其盼着电脑适应我们的“模糊表达”,不如好好利用现有的编程符号——它们才是让编程变简单、变精准的关键。
EWD 667 是相当有名的文章,尤其在AI即将接管编程的当下,不管从正面还是反面意义上,都值得再读一次。但我发现自从我开始用AI帮助我读文章以来,我对比较学术味文章的阅读能力下降了,或者说更懒的动脑了,推己及人,所以我也(讽刺地)让豆包把原文改得更通俗一点,拯救你我日益退化的阅读能力。
一、为啥总有人想让电脑“听懂人话”?
从电脑刚出现那会儿起,就有人觉得编程太麻烦了——非得小心翼翼、一字不差,跟用那些死板的公式符号似的。他们抱怨电脑太“死脑筋”:就算指令里有明显错误,只要写得符合规则,电脑就会照做不误。就像诗人豪斯曼说的:“哪怕多想一秒都觉得漫长,思考本身就是件累人的事。” 这些人总盼着能有更“聪明”的电脑,就算输入时有点小失误,也能自己判断对错,不用人费心思检查。
早期的机器语言特别“精简”,一个字都不能错,很容易出问题。后来人们发明了“高级编程语言”,算是进步了不少——现在写错了,电脑常会弹出错误提示,而不是直接给出错结果(不过还有人不领情,觉得错误提示比错答案还烦人,甚至觉得“编程方便”就是“犯错了也没人发现”)。但本质上,电脑还是个“忠实的执行者”:你怎么指令,它就怎么干,哪怕指令本身毫无意义。编程依然离不开严谨的符号和规则,半点马虎不得。
二、“用母语编程”听着好,实际可行吗?
为了让编程更简单,有人提出:干脆让电脑直接听懂我们的母语(比如中文、英文),这样人就不用学那些复杂的编程符号了。他们觉得,虽然这样会让电脑的设计更复杂,但能把麻烦转移给机器,人就轻松了。
但这想法真的靠谱吗?其实不靠谱。因为人和机器的“沟通接口”不是简单的“谁多干点活”——沟通本身也需要额外付出精力。过去的经验告诉我们:换个接口很可能让双方都更累(甚至累很多)。所以现在大家反而更喜欢“简单直接的接口”(也就是“窄接口”)。用母语编程看似省了学符号的功夫,实则会带来更多麻烦。
三、数学史早就告诉我们答案
回顾一下数学的发展,就知道为啥“文字化编程”行不通了:
这些符号的好处太明显了:只要遵守几条简单规则,就能避免很多文字表达里藏不住的 nonsense。比如同样是“1加2乘3”,文字说出来可能有歧义,但用数学符号“1+2×3”就清清楚楚。
四、别把“严谨”当成负担,要当成福利
很多人觉得学编程符号是种负担,但其实这是个大福利:正因为有了这些符号,现在的小学生都能做到过去只有天才才能完成的计算。反观有些人为了“显得清晰”,刻意不用标准的逻辑符号,反而让人看不懂——这其实是误解了符号的价值。
说到底,我们觉得母语“好用”,很大程度上是因为用母语说话时,哪怕内容没道理,也不容易被发现。但编程需要的是绝对的精准,这种“模糊性”恰恰是编程的大忌。
五、真用母语编程,会怎么样?
不妨大胆设想一下:如果从一开始,电脑只能接收母语指令,会发生什么?大概率是历史重演——计算机科学会变成一门“黑科技”,大家拼尽全力,也只是想从混乱的母语中提炼出一套严谨的规则体系。要想让这个“人机接口”变得好用,可能得再花上几千年时间,就像人类从结绳记事发展到现代数学符号那样。
更现实的问题是:现在很多人连自己的母语都用不好了。因为教育越来越不重视逻辑和严谨性,很多文章、报告里全是空洞无意义的废话(这被称为“新型文盲”)。连人都没法用母语精准表达,还指望电脑能“听懂”并执行复杂指令,简直是天方夜谭。
最后总结
我的直觉告诉我:用母语编程的电脑,造起来有多难,用起来就有多麻烦。与其盼着电脑适应我们的“模糊表达”,不如好好利用现有的编程符号——它们才是让编程变简单、变精准的关键。