中文寫程序,何陋之有?

我近期常常放出一些用中文寫的類庫、代碼,總會招致圍觀,搞得我跟動物園裏新來的稀有動物似的。 程序員

咱們姑且笑而置之,個人確沒什麼高深的技術,但這和用中文寫代碼沒有任何聯繫,從中不難看出,有些人以爲用中文寫代碼就是不入流的、沒水準的、齷齪的、低俗的。我只想問這些人一句話:你尊重你的母語——漢語嗎?編程

正名

人無貴賤,語言更是沒有優劣之分。沒有任何人敢說英語是最優秀、最高貴的語言,其餘都是劣等語言;也沒有任何人曾說過寫程序必須用英文(也許你說過,我沒聽過)。框架

嘲笑用中文寫程序,就像是C#程序員看不起VB程序員同樣,卻不知其實語言僅僅是工具而已呀。工具

你拿着關老爺的大刀別人會心生畏懼,這個工具很威風,但你半天砍不死只鴨子,這隻會讓旁人笑得比關老爺臉還紅。測試

相比工具而言,人們更在意你能作什麼;就像武俠小說裏,大俠手中草木皆兵刃,小嘍囉的利劍弄很差還傷了本身;十八般兵器,用什麼看你本身的喜愛,能耍成什麼樣則要看你本身的本事。this

用什麼語言說話,怎可用於衡量一我的的貴賤?用什麼語言編寫代碼,又怎能用以衡量一個程序的優劣?spa

有道是「存在即合理」,在某些人唏噓以前,不妨先看看中文寫代碼有什麼切實的好處吧:code

優勢

  1. 易於理解。
    我們這些人中雖然很多人英文不錯,但總也不如母語理解起來天然、高效、準確吧?
    有些人英語通常,就經過查詞典寫出了一堆不三不四的英文命名,很多天後再看本身的代碼,又要去查詞典,這本身麻煩沒關係,權當學英語了,問題是這代碼拿去給別人看,人家一看就頭大。這時若是直截了當地使用中文命名,不就什麼問題都解決了嗎?
    而且中文命名還能夠顯著減小代碼註釋,下降代碼閱讀難度。
    試讀這段代碼(個人英文水平很爛,因此我就是隻能經過查詞典來寫出不三不四的命名):
  2.  1 /// <summary>
     2 
     3 /// 執行充值,並返回是否成功
     4 
     5 /// </summary>
     6 
     7 public bool RunSupplement(DatabaseEntities c)
     8 
     9 {
    10 
    11     if (Verify(this)==true)
    12 
    13     {
    14 
    15         this.UsedTime = DateTime.Now;
    16 
    17         this.UsedUser = Membership.GetUser().UserName;
    18 
    19         var p= UserProfile.GetUserInfo(this.UsedUser);
    20 
    21         p. SupplementPoint += this.Value;
    22 
    23         p.Save();
    24 
    25         c.SaveChanges();
    26 
    27         return true;
    28 
    29     }
    30 
    31     return false;
    32 
    33 }

    再試讀這段代碼:

    blog

     1 /// <summary>
     2 
     3 /// 執行充值,並返回是否成功
     4 
     5 /// </summary>
     6 
     7 public bool 執行充值(DatabaseEntities c)
     8 
     9 {
    10 
    11     if (檢驗有效性(this)==true)
    12 
    13     {
    14 
    15         this.使用時間 = DateTime.Now;
    16 
    17         this.使用用戶 = Membership.GetUser().UserName;
    18 
    19         var p= UserProfile.獲取用戶信息(this.使用用戶);
    20 
    21         p.充值點數 += this.面值;
    22 
    23         p.Save();
    24 
    25         c.SaveChanges();
    26 
    27         return true;
    28 
    29     }
    30 
    31     return false;
    32 
    33 }

     



    哪一個理解起來更輕鬆?
    在這裏,代碼自己其實就像是一段註釋,不是嗎?你還要堅持用英文寫程序,而在字裏行間穿插中文註釋嗎?
    另外,我不知道各位初學程序時看到代碼是什麼感受,我當時感受那堆代碼就是天書、就是密碼,尤爲是當我連關鍵字、類、屬性、方法等等的概念尚未的時候,那些簡直是不可理解的東西,這些代碼就像是程序員的「黑話」,讓外行人犯暈。而假如咱們的示例代碼都穿插中文命名的話,是否是能夠便於新手理解、下降門檻、打破神祕感呢?
    此外,出於一樣的緣由,InfoQ中也有這樣一篇文章推薦使用中文命名測試方法:
    接口

  3. 在英文代碼之間清晰可辨。
    在英文代碼中加入中文,就如同在羊羣中加入奶牛同樣,你總能一眼找出你加進去的東西。
    當咱們須要從新審視一個方法的參數的功能時,你會發現使用中文爲參數命名是絕佳的作法。
    仍是先來看看咱的爛英文寫出的方法:
     1 public static Image CutImage(Image Image, Point StartPoint, Size CutSize)
     2 
     3 {
     4 
     5     Bitmap resizedBmp = new Bitmap(CutSize.Width, CutSize.Height);
     6 
     7     Graphics g = Graphics.FromImage(resizedBmp);
     8 
     9     g.DrawImage(Image, new Rectangle(0, 0, CutSize.Width, CutSize.Height), new Rectangle(StartPoint.X, StartPoint.Y, CutSize.Width, CutSize.Height), GraphicsUnit.Pixel);
    10 
    11     return resizedBmp;
    12 
    13 }

     


    這樣一小坨代碼雖然很簡單,但你要找到參數被使用的位置仍是有點頭疼的,而若是它們變成「奶牛」的話……

     1 public static Image 剪裁圖像(Image 圖像, Point 起始座標, Size 剪裁尺寸)
     2 
     3 {
     4 
     5     Bitmap resizedBmp = new Bitmap(剪裁尺寸.Width, 剪裁尺寸.Height);
     6 
     7     Graphics g = Graphics.FromImage(resizedBmp);
     8 
     9     g.DrawImage(圖像, new Rectangle(0, 0, 剪裁尺寸.Width, 剪裁尺寸.Height), new Rectangle(起始座標.X, 起始座標.Y, 剪裁尺寸.Width, 剪裁尺寸.Height), GraphicsUnit.Pixel);
    10 
    11     return resizedBmp;
    12 
    13 }

     



    若是你還以爲找起來費勁的話就得配花鏡了。
    任何語言的字符揉在一塊兒都像一團螞蟻,而兩種語言結合起來使用就可以鮮明地區別開來,這樣咱們一眼掃過即可輕鬆明白參數的使用位置和意義。

  4. 在VisualStudio的智能感知提示中與.Net框架內容區別開來。
    漢字雖不受智能感知輸入支持,但他們都乖乖地堆在智能感知提示列表最底端,這使得咱們能夠很方便地找到咱們自定義的內容:

    而咱們若是用規範的英文命名的話,咱們自定義的內容就會散落到整個列表的各處,極易與.Net框架內建的內容混淆,尤爲是當咱們沒法確切記住其命名時,在這列表裏找想要的內容就如同是微縮版大海撈針。

所謂的缺陷

解釋一些易產生的質疑:

  1. 中文輸入慢。
    很早之前五筆就已超越英文輸入速度了,而現今拼音輸入法的速度也大幅提高,中文輸入的速度應該是比英文更快纔對,至少我是這樣認爲的。
  2. 沒法享受VisualStudio智能感知輸入支持。
    若是你痛恨鼠標流,硬要經過鍵盤輸入在智能感知列表中迅速定位中文代碼的話,也是能夠的,不過就得用這個權宜之策了:在中文命名前追加拼音首字母。好比將「幫助」改成「b幫助」,或「全局配置」改成「qj全局配置」。
    期待微軟在智能感知列表中加入拼音支持……儘管很渺茫……
  3. 中文命名過長致使文件增大、調用遲緩。
    這個嘛,姑且不談中文、英文哪一個更精簡。其間的差別不管是從文件尺寸仍是調用速度上來講,都是微乎其微的;而且你徹底能夠在項目編譯後對其實施混淆,把命名全改成a b c d e嘛,這樣還會有什麼問題嗎?

真正的缺陷

 一些不能否認和忽視真正缺陷:

  1. 輸入法開閉狀態不易把持。
    雖然輸入法的英漢切換很方便,但最大的問題是用戶每每沒法記住本身當前的狀態,從而常常致使因弄錯狀態而輸入錯誤內容,這是用中文寫代碼時很是頭痛的問題。
  2. 不適合國際化交流。
    若是大家的開發團隊中有外籍人員,或你想將本身的代碼在全世界開源分享,那麼使用中文顯然是不合適的。

結語

仍是那句話,語言就是工具而已,不一樣的人喜歡不一樣的工具,適合本身的就是最好的。


————————————————————————————————————————————

 

給全部人的回覆:


有些人會錯個人意思了,我沒有佔據什麼道德制高點,我說的是歧視用中文編程的人不尊重漢語,而不是說不同意用中文編程的人,這是有區別的。


文中我也說了,語言就是工具而已,適合本身的就是最好的,每一個人的習慣、工做環境不一樣,需求也就不一樣,強求是沒有意義的,因此你用英文、拼音、中文、混合使用都無所謂。能夠互不相讓,能夠交流探討各自優劣點,但不應歧視、攻擊。

有人說穿插中文命名的示例代碼會誤導初學者,讓他們覺得學英文不必,我以爲還沒那麼容易就誤導了誰,該學的總會學,不肯學的仍是不學,我的有我的的需求了。


並且,反過來講,你們想一想印度爲什麼軟件發展如此迅猛呢?由於他們官方語言爲英語,普通民衆以爲編程就像說話那麼簡單,從而產生興趣,繼而成爲職業。咱們以母語來作示例,打破高牆,也許也會讓更多國人今後跨入編程之門,這不是更好地達成分享知識的目的嗎?(有人列舉了日本Ruby使用英文的例子,這個很好理解,日本基本人人英文都很好,而日語和英語都沒什麼使用障礙的話,確定是選英語更爲通用些。日本人不會爲了民族情感而犧牲實用性,咱們也不應爲了中文而中文,凡事有度,適用爲上)


還有人指責中文的接口在國際上不通用的問題,這個我在文中早就說了中文寫代碼不適合國際化應用,而且接口自己就應該是個通用的東西,你徹底能夠中文寫類,英文寫接口呀,這更能體現接口的原本意義吧。就像USB接口同樣,別管美國產的、中國產的東西,符合接口就能夠插,仿製個長信宮燈插上都沒問題,因此中國廠商即便全部材料、工藝都是中國的,也會使用這個接口來保證設備通用性,而不是自定義一個有中國特點的社會主義USB接口。

相關文章
相關標籤/搜索