我近期常常放出一些用中文寫的類庫、代碼,總會招致圍觀,搞得我跟動物園裏新來的稀有動物似的。 程序員
咱們姑且笑而置之,個人確沒什麼高深的技術,但這和用中文寫代碼沒有任何聯繫,從中不難看出,有些人以爲用中文寫代碼就是不入流的、沒水準的、齷齪的、低俗的。我只想問這些人一句話:你尊重你的母語——漢語嗎?編程
人無貴賤,語言更是沒有優劣之分。沒有任何人敢說英語是最優秀、最高貴的語言,其餘都是劣等語言;也沒有任何人曾說過寫程序必須用英文(也許你說過,我沒聽過)。框架
嘲笑用中文寫程序,就像是C#程序員看不起VB程序員同樣,卻不知其實語言僅僅是工具而已呀。工具
你拿着關老爺的大刀別人會心生畏懼,這個工具很威風,但你半天砍不死只鴨子,這隻會讓旁人笑得比關老爺臉還紅。測試
相比工具而言,人們更在意你能作什麼;就像武俠小說裏,大俠手中草木皆兵刃,小嘍囉的利劍弄很差還傷了本身;十八般兵器,用什麼看你本身的喜愛,能耍成什麼樣則要看你本身的本事。this
用什麼語言說話,怎可用於衡量一我的的貴賤?用什麼語言編寫代碼,又怎能用以衡量一個程序的優劣?spa
有道是「存在即合理」,在某些人唏噓以前,不妨先看看中文寫代碼有什麼切實的好處吧:code
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中也有這樣一篇文章推薦使用中文命名測試方法:
接口
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 }
若是你還以爲找起來費勁的話就得配花鏡了。
任何語言的字符揉在一塊兒都像一團螞蟻,而兩種語言結合起來使用就可以鮮明地區別開來,這樣咱們一眼掃過即可輕鬆明白參數的使用位置和意義。
解釋一些易產生的質疑:
一些不能否認和忽視真正缺陷:
仍是那句話,語言就是工具而已,不一樣的人喜歡不一樣的工具,適合本身的就是最好的。
————————————————————————————————————————————
給全部人的回覆:
有些人會錯個人意思了,我沒有佔據什麼道德制高點,我說的是歧視用中文編程的人不尊重漢語,而不是說不同意用中文編程的人,這是有區別的。
文中我也說了,語言就是工具而已,適合本身的就是最好的,每一個人的習慣、工做環境不一樣,需求也就不一樣,強求是沒有意義的,因此你用英文、拼音、中文、混合使用都無所謂。能夠互不相讓,能夠交流探討各自優劣點,但不應歧視、攻擊。
有人說穿插中文命名的示例代碼會誤導初學者,讓他們覺得學英文不必,我以爲還沒那麼容易就誤導了誰,該學的總會學,不肯學的仍是不學,我的有我的的需求了。
並且,反過來講,你們想一想印度爲什麼軟件發展如此迅猛呢?由於他們官方語言爲英語,普通民衆以爲編程就像說話那麼簡單,從而產生興趣,繼而成爲職業。咱們以母語來作示例,打破高牆,也許也會讓更多國人今後跨入編程之門,這不是更好地達成分享知識的目的嗎?(有人列舉了日本Ruby使用英文的例子,這個很好理解,日本基本人人英文都很好,而日語和英語都沒什麼使用障礙的話,確定是選英語更爲通用些。日本人不會爲了民族情感而犧牲實用性,咱們也不應爲了中文而中文,凡事有度,適用爲上)
還有人指責中文的接口在國際上不通用的問題,這個我在文中早就說了中文寫代碼不適合國際化應用,而且接口自己就應該是個通用的東西,你徹底能夠中文寫類,英文寫接口呀,這更能體現接口的原本意義吧。就像USB接口同樣,別管美國產的、中國產的東西,符合接口就能夠插,仿製個長信宮燈插上都沒問題,因此中國廠商即便全部材料、工藝都是中國的,也會使用這個接口來保證設備通用性,而不是自定義一個有中國特點的社會主義USB接口。