[如何學習寫程式] 為什麼不要使用中文命名?

我自己是華人,常用的語言也是中文,而且是繁體中文,日常的溝通都是用中文,所以我的英文並不好,但就算是英文不好,寫程式時我除了註解外統統用英文,我也一直在推廣寫程式或是對資料庫欄位命名時不要使用中文,並不是我歧視中文或是有什麼顏色或是抱外國人大腿什麼的 ...

我自己是華人,常用的語言也是中文,而且是繁體中文,日常的溝通都是用中文,所以我的英文並不好,但就算是英文不好,寫程式時我除了註解外統統用英文,我也一直在推廣寫程式或是對資料庫欄位命名時不要使用中文,並不是我歧視中文或是有什麼顏色或是抱外國人大腿什麼的 ...

我舉個例子,以下是一段簡單的 C# 程式碼:

using System.Data;
using MyBank.ATM.Services;
public class MySavingAccount
{
    public int Balance { get; set; }

    public void Deposit(int Amount)
    {
        this.Balnace += Amount;
    }
    public void Withdraw(int Amount)
    {
        this.Balance -= Amount;
    }
}

如果用中文來命名,會變成:

using System.Data;
using MyBank.ATM.Services;
public class 我的存款帳戶
{
   public int 餘額 { get; set; }

   public void 存款(int 金額)
   {
      this.餘額 += 金額;
   }
   public void 提款(int 金額)
   {
      this.餘額 -= 金額;
   }
}

乍看之下好像沒有什麼問題,但是如果這份程式碼是要賣給國外 (ex: 美國),或是要和國外的團隊合作時,那會發生有人看不懂中文的問題,在分工寫程式時還會發生命名衝突 (naming conflict) 的狀況,且國外團隊的成員也許無法輸入與顯示中文,那在程式碼撰寫時一定會問題百出,同樣的,如果資料庫與表格等的命名也都用中文的話,一樣會有與國外團隊或人員溝通的問題。

再者,目前鍵盤都是英文為主的,無法敲下一個鍵就得到中文字,在撰寫程式時如果用中文命名的話,在中文和英文輸入法之間的快切換會異常頻繁,以傳統的注音與倉頡輸入法來說,如果中文輸入沒到每分鐘 30 字以上的話,寫程式的生產力反而不會因為命名用中文而提升,因為光是切換與輸入中文就花了比思考和撰寫英文字的程式碼更多的時間。此外,如果養成了用中文命名的習慣,會不利於自己看國外的程式碼或沒有中文命名的程式碼的閱讀,有可能會進一步的影響學習的速度,畢竟程式語言是國外發明的,語法格式也多偏向於英文,國外第一手資料的程式範例不可能會是以中文命名,反而會翻更多的字典 ...

一般業界使用的程式碼命名慣例 (naming conventions) 有分 Pascal Naming 與 Camel Naming 的方法,但中文字並沒有大小寫,而且同義的詞彙比英文字多太多了,當發生語意衝突時,命名可能會比英文還要花更多的時間,如果老闆又是深信命名學的,那可能開發人員會更累。

所以,如果你是程式新手,看到書上的程式用中文命名的話,千萬不要跟著學,否則以後到業界時還要花時間適應全英文的命名慣例。

但是也不是完全沒有中文程式語言 (Chinese Programming Language),華人圈就有能人 (還是台灣人) 開發出一個以 Python 為主的中文程式語言,稱為 "周蟒",它的語法就真的徹底的中文化:

image

不過老實說,如果業界真的用這種寫法的話,可能會有一大堆程式員先昏倒吧 ...