憑什么編程只能用英語?
新聞鏈接:https://mp.weixin.qq.com/s/U8KvS8HlUpp_gVCTQr_xhg
今年是萬維網成立 30 周年,很多人將目光放在了“網絡的最初承諾”上,承諾之一就是你可以在任何頁面上點擊“查看源代碼”,并輕松了解每個頁面背后的代碼。
下圖是世界上誕生的第一個網頁,被編程網站 Glitch
重現。該編程網站允許用戶對程序進行修補,并指引用戶切換到源代碼視圖,去看那些標有和<body>和<p>的部分。對于一個講英語的人來說,TA
可以輕易猜到</p><p>代表“段落”——對于以英語為母語的人來說,理解一個英文代碼頁面顯然要比非英語人群容易得多。</p><p
class="vsbcontent_img"><img
src="http://cnvl.stdu.edu.cn:80/menu/kejiaoyuanqu/kejiquwen/images/kjyq/201906162_2.jpg"
_src="http://cnvl.stdu.edu.cn:80/menu/kejiaoyuanqu/kejiquwen/images/kjyq/201906162_2.jpg"/></p><p
class="vsbcontent_img"><img
src="http://cnvl.stdu.edu.cn:80/menu/kejiaoyuanqu/kejiquwen/images/kjyq/201906162_3.jpg"
_src="http://cnvl.stdu.edu.cn:80/menu/kejiaoyuanqu/kejiquwen/images/kjyq/201906162_3.jpg"/></p><p>現在想象一下,這是你見過的第一個網頁,你興沖沖地揭開它的面紗,想了解它如何工作。但是標簽上不再是那些熟悉的單詞,你看到的是我創建的版本,它與原始版本完全相同,只是因為源代碼是俄語而不是英語。我不會說俄語,假設你也不會俄語,那么你還敢去修改(title)、(title)
和(body) 以及(p)
的內容嗎?</p><p>從理論上講,你可以使用任何符號來寫代碼,電腦才不管這些。計算機一直運行的是一個我們看不見的程序(編譯器),它將你的
IF 或<body>轉換成它所能識別的 1 和 0,即使我們用馬鈴薯表情符號來代表 IF,用 15
世紀晦澀的西里爾符號——由多個 O 組成的 ? 來代表<body>,它依然能夠正常運行。實際上,通常編程語言用英語單詞 body
或者
IF,只是為了方便我們人類大腦,它們更容易記住那些用我們熟悉的單詞寫下的指令。</body></body></p><p>但并不是所有人都熟悉這些指令:只有會英語的人才熟悉。“網絡的最初承諾”只是一個對英語用戶的承諾,包括母語是英語的人,和非英語母語地區能夠將英語作為第二語言流利使用的精英人群。</p><p>確實,現在軟件程序和社交媒體平臺通常能呈現大約
30 到 100
種語言——但是那些計算機工具呢?它們可以使我們成為創造者,而不僅僅是消費者。我不是說應該用普及程度低的小語種來寫程序(盡管這很酷),我想說的是,即使是那些擁有廣泛文字記錄的、作為區域貿易通用語言的語種,比如漢語普通話,西班牙語,印地語和阿拉伯語,也并未成為被廣泛使用的編程語言。</p><p>我發現有四種編程語言可以在多語言版本中廣泛使用。不是
400。而是 4。</p><p>其中兩種專門用于教小孩子編程:Scratch 和 Blockly。Scratch
甚至還做過一項研究,表明如果編程語言是基于他們的母語,那么小孩子就會學得更快。這些孩子長大后呢?如果成年人不喜歡學習語言,他們可以選擇另外兩種編程語言:Excel
公式和 Wiki
標記,它們都得到了很好的本地化。</p><p>沒錯,無論你的制表軟件界面使用哪種語言,你都可以用公式來命令表格。比如你可以用
Excel 和谷歌表格編寫:=IF(condition,value_if_true,value_if_false),
也可以用西班牙語編寫同樣的內容:=SI(prueba_lógica,valor_si_es_verdadero,valor_si_es_falso),同理,使用其他語種也一樣。當你想到編碼時,這可能不是你想的第一件事,但在技術上,電子表格可以變成圖靈機,它確實展示了一種編程本地化版本的商業案例。</p><p>同樣,你可以使用多語言的
Wiki 標記來編輯維基百科和其他維基網站。Wiki 標記的基本功能與語言無關(例如在鏈接兩端放置方括號
[[鏈接]],但更高級的功能確實要用到單詞,而且這些單詞都是使用當地語言。例如,如果你想編寫一個關于某個人的信息框,在英語維基百科上的參數是“name=”和“birth_place=”之類,而在保加利亞語的維基百科上則是“име=”和“роден-място=”。</p><p>除了這四種被廣泛使用的編程語言之外,還有幾十種甚至上百種左右的編程語言可以使用英語以外的一兩種語言,例如Qalb(阿拉伯語),中文
Python,farsinet(波斯語),Hindawi 編程系統(孟加拉語,古吉拉特語和印地語),甚至是拉丁文版的
Perl。一些非英語編程語言甚至可以追溯到由政府贊助、如房間大小的超級計算機時代,例如幾種蘇聯時代基于俄語的編程語言,多語言 ALGOL
68(20 世紀 60 年代)和第四維度(20 世紀 80 年代)。但是許多較新的編程語言,如Python,Ruby 和
Lua,它們雖然來自非英語國家(荷蘭、日本和巴西),但仍使用基于英語的關鍵詞。對于許多人來說,萬維網的最初承諾更像是一種威脅——要么說英語,要么被排除在網絡之外。</p><p>這些編程語言之所以存在,是因為翻譯編程語言并不難。編程語言之間有很多轉換器——你可以在
JavaScript 中輸入一段代碼,然后在 Python 中輸出,或者在 Markdown 中輸入,在 HTML
輸出。這并不是特別困難。編程語言的詞匯數量有限,且定義明確,不存在含義模或文化差異,而這兩者會困擾自然語言的機器自動翻譯。只要弄清楚約一百條命令之間的相互轉換,你就能夠將任何一段代碼從一種編程語言自動映射到另一種語言上。</p><p>實際上,翻譯編程語言非常可行,人們往往從藝術角度,或者出于搞笑目的定期翻譯各種編程語言,這種造福他人的書呆子行為使用的是只有圈內人才懂的編程語言。例如,LOLCODE
是以 lolcats 為原型的,你用 HAI 開始寫程序,最后用 KTHXBAI 結尾。還有
Whitespace,它對人眼完全隱形,由不可見的字符空格,制表符和換行符組成。甚至還有一種叫皮卡丘(pikachu)的編程語言,它僅由
pi,pika 和
pikachu這幾個單詞組成,所以從理論上說皮卡丘可以脫離神奇寶貝(Pokémon)訓練師,自己成為程序員,并獲得高薪工作。</p><p>但是,一種編程語言不僅僅在于其技術應用——更重要的是它形成了人類社區。到目前為止,這四種廣泛使用的多語種編程語言比單語種的非英語編程語言更能促進社區交流,不過它仍然有自己的關鍵瓶頸。當你用谷歌搜索你的錯誤信息時,你需要找到有用的資源。也就是說,你需要弄清楚如何在你的計算機上獲取特定的語言并運行它。這就是第一代網頁瀏覽器能夠讓你編輯網頁,而不僅僅瀏覽網頁為什么如此重要的原因,也是為什么
Glitch 能夠做到讓你在瀏覽器窗口內編輯工作代碼,以便于尋求幫助的原因。但是非英語世界的 Glitch
在哪里?對那些剛開始使用它的人(或者過去十年一直使用的人),如何使網絡變得易于修改?</p><p>我為什么仍抱有希望呢?在中世紀的歐洲,如果你想要獲得寫作能力,你必須同時學會一種新的語言。寫作意味著要用拉丁文。用白話比如母語、或者用人們在說的語言去寫作,只能算一種無名之輩不入流的副業。所以你為什么要學習用英語或法語寫作呢?又沒有資料可供閱讀。但是通曉拉丁語卻向你打開了通往整個通用語書寫的傳統知識的大門。</p><p>當回顧中世紀時,我們總是好奇,既然當時人們能夠用日常講的語言來寫作,為什么還要不厭其煩地學習拉丁語。在當時,要學寫作就要學習拉丁語,與今天要學編程就要學習英語的邏輯是一樣的。即使我們現在知道如果對小孩子使用母語教學,他們能更快地學會閱讀。我在
Stack Overflow
等網站上看到的有關英語代碼的論點大致相同:為什么不學習英語呢?它能讓你獲得以英語為基礎的一整套技術傳統。</p><p>現在拉丁語一統書面語言的時代早已結束。寫作技術已經在其他語言中普及。從本質上講,編碼技術不再與英語綁定,就像寫作技術不再與拉丁語綁定一樣。我認為,既然編程語言包含人類語言,我們先調整談論它們的方式。第一個網站不是用
HTML 編寫的——它是用英文 HTML 編寫的。那么 Glitch 重現的底部代碼片段呢?它不是 JavaScript 編寫的,而是英文
JavaScript。當我們突出這些編程語言的英文默認屬性時,我們可以更加明顯地提出質疑——我們可以開始想象一個也包含俄語 HTML
或斯瓦希里語 JavaScript 的世界,而如果你的母語碰巧是英語,那你在學習編程時就沒有所謂的先天優勢。</p><p
class="vsbcontent_end">這樣的世界還不存在。也許在未來 30
年,我們會將其創造出來。</p></body>