為什麼程序都要用英文寫,中文不行嗎?
我們的編程語言既不是英語也不是中文。
因為編程語言不是自然語言。
大部分編程語言都是2型或3型文法。即所謂的上下文無關文法、正規文法。
自然語言肯定不是2型或3型文法。因為自然語言一定是上下文有關的。
生活里你是不會按照上下文無關文法那麼說話的。
下面簡單說一下什麼是文法:
好了,簡單說下文法,文法是有一組產生式來構成的,裡面包括了終結符號與非終結符號。
這裡我用大寫字母表示非終結符哈,小寫字母表示終結符號。
舉個最簡單的例子:
比如一個文法S:
S->sbA
A->aA
A->a
這表達了一個什麼樣的語言呢?
所謂終結符號就是到這裡就不能把它替換了。
非終結符號就是到這裡你可以用其他產生式把它換掉
顯然對於文法S你可以有:
sba,sbaa, sbaaaaa...
然後對於編程語言,就是這麼寫個產生式的集合。
所以我們只是把終結符號換成了英文字母而已,我樂意我換成任意語言的任意字母都行。
還是拿文法s舉例子,比如:
S->傻xA
A->啊A
A->啊
我把所有的終結符號都換成了中文字元,所以合法的語句就成了
傻x啊,傻x啊啊啊,傻x啊啊啊啊啊。。。
那麼我問你,S 經過了終結符號的替換,本質有變化嗎?
沒有,無論你怎麼換終結符號,它還是那個語言S,既不是英文也不是中文。
沒有隻能說sbaaa的英文,也沒有隻能說傻x啊的中文。
至於為啥終結符號一定要是英文的,這是誰欽定的。這就是個歷史問題了。
不過也有中文的語言:易語言,但是你用過就會發現它跟直接把英文語言里的關鍵詞翻譯成中文沒啥區別,寫出來的形式依然是關鍵詞+空格+變數名的形式。正如你在題目描述中所說,把「color:red」變成「顏色:紅色」,這就是簡單的單詞翻譯而已,並沒有什麼本質區別,而且還多敲了幾次鍵盤。
當然,如果你希望有一種語言能夠這樣寫:
「如果A大於B,就讓A加1」
這就體現了英文作為編程語言的優勢:利於編譯器分詞。英文寫的時候是每個單詞之間都有一個空格,所以編譯器在分詞(找出關鍵詞、變數名等存在符號表裡)的時候直接按空格分就可以了。中文的分詞一直都很困難,搜索引擎處理中文搜索的時候也要做很多工作,因為它更多的是依據語義來分。舉個牽強點的例子,假如有這樣一個句子:「猶如果實一般」,對機器而言,是要分成「猶」、「如果」、「實」呢,還是分成「猶如」、「果實」?所以英文還是比較方便的。
另外,計算機存儲英文也比存儲中文要簡單的多,英文一共26個字母,連上大小寫也只有52個,單詞只是字母的排列組合而已;而中文有幾萬個字,光存這些字就已經很佔地方了。
上面是我們編譯原理課上老師講的,但主要的原因還是:編程起源於外國,而大多數大牛也是以英語為母語,所以這些制定規則的人就制定了這樣的標準,而其他人就遵循大牛腳步嘛。
最後,就我個人而言,我在編程的時候總會感覺到一些情況下用英文能更準確的表達意思。中文的一個詞語,在英文里往往對應了多個單詞,而這些單詞有著獨特的語境。比如英文的push,shift,insert,它們都代表往一個數組裡加入元素,但是分別代表在最後壓入、在最後加入一個、在任意某個位置插入一個。這裡只是舉個例子,我經常能感覺到,如果這些專業的單詞用得準確的話,往往一眼就能知道這段程序在幹什麼,不需要再去看細節。所以我覺得最後一個原因是,雖然英文的編程語言各有不同,但是大家已經形成了一種約定,什麼樣的詞該表達什麼樣的意思。這種閱讀與寫程序時的易讀、易用與準確性也是吸引程序員的一個原因吧。
補充:不管什麼語言,英文也好中文也好,最後都要轉化成計算機指令,這些指令就像阿拉伯數字一樣,不管用中文還是用英文,它的形式都一樣。所以就像其他答主所說的,只要你能為中文編程語言寫一個編譯器,那照樣用。

