凭什么编程只能用英语?

时间:2019-07-02 17:19 作者:财富坊cff

  今年是万维网成立 30 周年,很多人将目光放在了“网络的最初承诺”上,承诺之一就是你可以在任何页面上点击“查看源代码”,并轻松了解每个页面背后的代码。

  下图是世界上诞生的第一个网页,被编程网站 Glitch 重现。该编程网站允许用户对程序进行修补,并指引用户切换到源代码视图,去看那些标有 title 和 body 和 p的部分。对于一个讲英语的人来说,TA 可以轻易猜到 p 代表“段落”——对于以英语为母语的人来说,理解一个英文代码页面显然要比非英语人群容易得多。

  现在想象一下,这是你见过的第一个网页,你兴冲冲地揭开它的面纱,想了解它如何工作。但是标签上不再是那些熟悉的单词,你看到的是我创建的版本,它与原始版本完全相同,只是因为源代码是俄语而不是英语。我不会说俄语,假设你也不会俄语,那么你还敢去修改 заголовок(title)、заглавие(title) 和 тело(body) 以及 п(p) 的内容吗?

  从理论上讲,你可以使用任何符号来写代码,电脑才不管这些。计算机一直运行的是一个我们看不见的程序(编译器),它将你的 IF 或 body 转换成它所能识别的 1 和 0,即使我们用马铃薯表情符号 🥔 来代表 IF,用 15 世纪晦涩的西里尔符号——由多个 O 组成的 ꙮ 来代表 body,它依然能够正常运行。实际上,通常编程语言用英语单词 body 或者 IF,只是为了方便我们人类大脑,它们更容易记住那些用我们熟悉的单词写下的指令。

  但并不是所有人都熟悉这些指令:只有会英语的人才熟悉。“网络的最初承诺”只是一个对英语用户的承诺,包括母语是英语的人,和非英语母语地区能够将英语作为第二语言流利使用的精英人群。

  确实,现在软件程序和社交媒体平台通常能呈现大约 30 到 100 种语言——但是那些计算机工具呢?它们可以使我们成为创造者,而不仅仅是消费者。我不是说应该用普及程度低的小语种来写程序(尽管这很酷),我想说的是,即使是那些拥有广泛文字记录的、作为区域贸易通用语言的语种,比如汉语普通话,西班牙语,印地语和阿拉伯语,也并未成为被广泛使用的编程语言。

  其中两种专门用于教小孩子编程:Scratch和Blockly。Scratch 甚至还做过一项研究,表明如果编程语言是基于他们的母语,那么小孩子就会学得更快。这些孩子长大后呢?如果成年人不喜欢学习语言,他们可以选择另外两种编程语言:Excel 公式和Wiki 标记,它们都得到了很好的本地化。

  没错,无论你的制表软件界面使用哪种语言,你都可以用公式来命令表格。比如你可以用 Excel 和谷歌表格编写:=IF(condition,value_if_true,value_if_false), 也可以用西班牙语编写同样的内容:=SI(prueba_lógica,valor_si_es_verdadero,valor_si_es_falso),同理,使用其他语种也一样。当你想到编码时,这可能不是你想的第一件事,但在技术上,电子表格可以变成图灵机,它确实展示了一种编程本地化版本的商业案例。

  同样,你可以使用多语言的 Wiki 标记来编辑维基百科和其他维基网站。Wiki 标记的基本功能与语言无关(例如在链接两端放置方括号 [[链接]],但更高级的功能确实要用到单词,而且这些单词都是使用当地语言。例如,如果你想编写一个关于某个人的信息框,在英语维基百科上的参数是“name=”和“birth_place=”之类,而在保加利亚语的维基百科上则是“име=”和“роден-място=”。

  除了这四种被广泛使用的编程语言之外,还有几十种甚至上百种左右的编程语言可以使用英语以外的一两种语言,例如Qalb(阿拉伯语),中文 Python,farsinet(波斯语),Hindawi 编程系统(孟加拉语,古吉拉特语和印地语),甚至是拉丁文版的 Perl。一些非英语编程语言甚至可以追溯到由政府赞助、如房间大小的超级计算机时代,例如几种苏联时代基于俄语的编程语言,多语言 ALGOL 68(20 世纪 60 年代)和第四维度(20 世纪 80 年代)。但是许多较新的编程语言,如Python,Ruby 和 Lua,它们虽然来自非英语国家(荷兰、日本和巴西),但仍使用基于英语的关键词。对于许多人来说,万维网的最初承诺更像是一种威胁——要么说英语,要么被排除在网络之外。

  这些编程语言之所以存在,是因为翻译编程语言并不难。编程语言之间有很多转换器——你可以在 Java 中输入一段代码,然后在 Python 中输出,或者在 Markdown 中输入,在 HTML 输出。这并不是特别困难。编程语言的词汇数量有限,且定义明确,不存在含义模或文化差异,而这两者会困扰自然语言的机器自动翻译。只要弄清楚约一百条命令之间的相互转换,你就能够将任何一段代码从一种编程语言自动映射到另一种语言上。

  实际上,翻译编程语言非常可行,人们往往从艺术角度,或者出于搞笑目的定期翻译各种编程语言,这种造福他人的书呆子行为使用的是只有圈内人才懂的编程语言。例如,LOLCODE 是以 lolcats 为原型的,你用 HAI 开始写程序,最后用 KTHXBAI 结尾。还有 Whitespace,它对人眼完全隐形,由不可见的字符空格,制表符和换行符组成。甚至还有一种叫皮卡丘(pikachu)的编程语言,它仅由 pi,pika 和 pikachu这几个单词组成,所以从理论上说皮卡丘可以脱离神奇宝贝(Pokémon)训练师,自己成为程序员,并获得高薪工作。

  但是,一种编程语言不仅仅在于其技术应用——更重要的是它形成了人类社区。到目前为止,这四种广泛使用的多语种编程语言比单语种的非英语编程语言更能促进社区交流,不过它仍然有自己的关键瓶颈。当你用谷歌搜索你的错误信息时,你需要找到有用的资源。也就是说,你需要弄清楚如何在你的计算机上获取特定的语言并运行它。这就是第一代网页浏览器能够让你编辑网页,而不仅仅浏览网页为什么如此重要的原因,也是为什么 Glitch 能够做到让你在浏览器窗口内编辑工作代码,以便于寻求帮助的原因。但是非英语世界的 Glitch 在哪里?对那些刚开始使用它的人(或者过去十年一直使用的人),如何使网络变得易于修改?

  我为什么仍抱有希望呢?在中世纪的欧洲,如果你想要获得写作能力,你必须同时学会一种新的语言。写作意味着要用拉丁文。财富坊cff用白话比如母语、或者用人们在说的语言去写作,只能算一种无名之辈不入流的副业。所以你为什么要学习用英语或法语写作呢?又没有资料可供阅读。但是通晓拉丁语却向你打开了通往整个通用语书写的传统知识的大门。

  当回顾中世纪时,我们总是好奇,既然当时人们能够用日常讲的语言来写作,为什么还要不厌其烦地学习拉丁语。在当时,要学写作就要学习拉丁语,与今天要学编程就要学习英语的逻辑是一样的。即使我们现在知道如果对小孩子使用母语教学,他们能更快地学会阅读。我在 Stack Overflow 等网站上看到的有关英语代码的论点大致相同:为什么不学习英语呢?它能让你获得以英语为基础的一整套技术传统。

  现在拉丁语一统书面语言的时代早已结束。写作技术已经在其他语言中普及。从本质上讲,编码技术不再与英语绑定,就像写作技术不再与拉丁语绑定一样。我认为,既然编程语言包含人类语言,我们先调整谈论它们的方式。第一个网站不是用 HTML 编写的——它是用英文 HTML 编写的。那么 Glitch 重现的底部代码片段呢?它不是 Java 编写的,而是英文 Java。当我们突出这些编程语言的英文默认属性时,我们可以更加明显地提出质疑——我们可以开始想象一个也包含俄语 HTML 或斯瓦希里语 Java 的世界,而如果你的母语碰巧是英语,那你在学习编程时就没有所谓的先天优势。