我近期经常放出一些用中文写的类库、代码,总会招致围观,搞得我跟动物园里新来的稀有动物似的。

围观众人中有些朋友表示支持,有些朋友则不屑,甚至鄙夷,在这个MVP候选人公告中,更是有人这样评价我:

#46楼 61.172.247.*  2009-07-27 13:59  choudan[未注册用户]

看到第一位,我有点惊讶。
http://skyd.cnblogs.com/
看到中文类名、方法名、属性名,我有一种想砸电脑的感觉。。。。。
这样的编码也能评上MVP候选?

我们姑且笑而置之,我的确没什么高深的技术,但这和用中文写代码没有任何联系,从中不难看出,有些人觉得用中文写代码就是不入流的、没水准的、龌龊的、低俗的。我只想问这些人一句话:你尊重你的母语——汉语吗?

正名

人无贵贱,语言更是没有优劣之分。没有任何人敢说英语是最优秀、最高贵的语言,其他都是劣等语言;也没有任何人曾说过写程序必须用英文(也许你说过,我没听过)。

嘲笑用中文写程序,就像是C#程序员看不起VB程序员一样,殊不知其实语言仅仅是工具而已呀。

你拿着关老爷的大刀别人会心生畏惧,这个工具很威风,但你半天砍不死只鸭子,这只会让旁人笑得比关老爷脸还红。

相比工具而言,人们更在乎你能做什么;就像武侠小说里,大侠手中草木皆兵刃,小喽啰的利剑弄不好还伤了自己;十八般兵器,用什么看你自己的喜好,能耍成什么样则要看你自己的本事。

用什么语言说话,怎可用于衡量一个人的贵贱?用什么语言编写代码,又怎能用以衡量一个程序的优劣?

有道是“存在即合理”,在某些人唏嘘之前,不妨先看看中文写代码有什么切实的好处吧:

优点

  1. 易于理解。
    咱们这些人中虽然不少人英文不错,但总也不如母语理解起来自然、高效、准确吧?
    有些人英语一般,就通过查词典写出了一堆不伦不类的英文命名,数日后再看自己的代码,又要去查词典,这自己麻烦不要紧,权当学英语了,问题是这代码拿去给别人看,人家一看就头大。这时如果直截了当地使用中文命名,不就什么问题都解决了吗?
    并且中文命名还可以显著减少代码注释,降低代码阅读难度。
    试读这段代码(我的英文水平很烂,所以我就是只能通过查词典来写出不伦不类的命名):

    ///

    /// 执行充值,并返回是否成功

    ///

    public bool RunSupplement(DatabaseEntities c)

    {

    if (Verify(this)==true)

    {

    this.UsedTime = DateTime.Now;

    this.UsedUser = Membership.GetUser().UserName;

    var p= UserProfile.GetUserInfo(this.UsedUser);

    p. SupplementPoint += this.Value;

    p.Save();

    c.SaveChanges();

    return true;

    }

    return false;

    }

    再试读这段代码:

    ///

    /// 执行充值,并返回是否成功

    ///

    public bool 执行充值(DatabaseEntities c)

    {

    if (检验有效性(this)==true)

    {

    this.使用时间 = DateTime.Now;

    this.使用用户 = Membership.GetUser().UserName;

    var p= UserProfile.获取用户信息(this.使用用户);

    p.充值点数 += this.面值;

    p.Save();

    c.SaveChanges();

    return true;

    }

    return false;

    }

    哪个理解起来更轻松?
    在这里,代码本身其实就像是一段注释,不是吗?你还要坚持用英文写程序,而在字里行间穿插中文注释吗?
    另外,我不知道各位初学程序时看到代码是什么感觉,我当时感觉那堆代码就是天书、就是密码,尤其是当我连关键字、类、属性、方法等等的概念还没有的时候,那些简直是不可理解的东西,这些代码就像是程序员的“黑话”,让外行人犯晕。而假如我们的示例代码都穿插中文命名的话,是不是可以便于新手理解、降低门槛、打破神秘感呢?
    此外,出于同样的原因,InfoQ中也有这样一篇文章推荐使用中文命名测试方法:

  2. 在英文代码之间清晰可辨。
    在英文代码中加入中文,就如同在羊群中加入奶牛一样,你总能一眼找出你加进去的东西。
    当我们需要重新审视一个方法的参数的功能时,你会发现使用中文为参数命名是绝佳的做法。
    还是先来看看咱的烂英文写出的方法:

    public static Image CutImage(Image Image, Point StartPoint, Size CutSize)

    {

    Bitmap resizedBmp = new Bitmap(CutSize.Width, CutSize.Height);

    Graphics g = Graphics.FromImage(resizedBmp);

    g.DrawImage(Image, new Rectangle(0, 0, CutSize.Width, CutSize.Height), new Rectangle(StartPoint.X, StartPoint.Y, CutSize.Width, CutSize.Height), GraphicsUnit.Pixel);

    return resizedBmp;

    }

    这样一小坨代码虽然很简单,但你要找到参数被使用的位置还是有点头疼的,而如果它们变成“奶牛”的话……

    public static Image 剪裁图像(Image 图像, Point 起始坐标, Size 剪裁尺寸)

    {

    Bitmap resizedBmp = new Bitmap(剪裁尺寸.Width, 剪裁尺寸.Height);

    Graphics g = Graphics.FromImage(resizedBmp);

    g.DrawImage(图像, new Rectangle(0, 0, 剪裁尺寸.Width, 剪裁尺寸.Height), new Rectangle(起始坐标.X, 起始坐标.Y, 剪裁尺寸.Width, 剪裁尺寸.Height), GraphicsUnit.Pixel);

    return resizedBmp;

    }

    如果你还觉得找起来费劲的话就得配花镜了。
    任何语言的字符揉在一起都像一团蚂蚁,而两种语言结合起来使用就能够鲜明地区别开来,这样我们一眼扫过便可轻松明白参数的使用位置和意义。

  3. 在VisualStudio的智能感知提示中与.Net框架内容区别开来。
    汉字虽不受智能感知输入支持,但他们都乖乖地堆在智能感知提示列表最底端,这使得我们可以很方便地找到我们自定义的内容:
     
    而我们如果用规范的英文命名的话,我们自定义的内容就会散落到整个列表的各处,极易与.Net框架内建的内容混淆,尤其是当我们无法确切记住其命名时,在这列表里找想要的内容就如同是微缩版大海捞针。

所谓的缺陷

解释一些易产生的质疑:

  1. 中文输入慢。
    很早以前五笔就已超越英文输入速度了,而现今拼音输入法的速度也大幅提升,中文输入的速度应该是比英文更快才对,至少我是这样认为的。
  2. 无法享受VisualStudio智能感知输入支持。
    如果你痛恨鼠标流,硬要通过键盘输入在智能感知列表中迅速定位中文代码的话,也是可以的,不过就得用这个权宜之策了:在中文命名前追加拼音首字母。比如将“帮助”改为“b帮助”,或“全局配置”改为“qj全局配置”。
    期待微软在智能感知列表中加入拼音支持……尽管很渺茫……
  3. 中文命名过长导致文件增大、调用迟缓。
    这个嘛,姑且不谈中文、英文哪个更精简。其间的差异无论是从文件尺寸还是调用速度上来说,都是微乎其微的;并且你完全可以在项目编译后对其实施混淆,把命名全改为a b c d e嘛,这样还会有什么问题吗?

真正的缺陷

一些不可否认和忽视真正缺陷:

  1. 输入法开闭状态不易把持。
    虽然输入法的英汉切换很方便,但最大的问题是用户往往无法记住自己当前的状态,从而经常导致因弄错状态而输入错误内容,这是用中文写代码时非常头痛的问题。
  2. 不适合国际化交流。
    如果你们的开发团队中有外籍人员,或你想将自己的代码在全世界开源分享,那么使用中文显然是不合适的。

结语

还是那句话,语言就是工具而已,不同的人喜欢不同的工具,适合自己的就是最好的。

来自 “ ITPUB博客 ” ,链接:http://blog.itpub.net/10474909/viewspace-612539/,如需转载,请注明出处,否则将追究法律责任。

转载于:http://blog.itpub.net/10474909/viewspace-612539/

中文写程序,何陋之有?相关推荐

  1. 谈谈写程序与学英语(转载)

    注: 本文的作者是宋劲杉,原文链接. 俗话说,没有金刚钻,就别揽瓷器活儿.套用到IT业,英语不行,就别做程序员.网上关于程序员学英语的文章不少,但我想谈谈我自己的看法.首先详细讨论一下为什么程序员离了 ...

  2. 马化腾亲自写腾讯网站,雷军靠写程序赚到第一个100万...那些码农出身的互联网大佬们...

    本文经授权转载自公众号创业邦,ID:ichuangyebang,作者:夏弢 一提到程序员,很多人脑海里马上会出现这些刻板标签: 可事实上,有一个词似乎更能概括:   改变世界 程序改变世界,已经有几十 ...

  3. 谈谈写程序与学英语 --宋劲杉

    俗话说,没有金刚钻,就别揽瓷器活儿.套用到IT业,英语不行,就别做程序员.网上关于程序员学英语的文章不少,但我想谈谈我自己的看法.首先详细讨论一下为什么程序员离了英语不行,然后针对程序员应该怎么学英语 ...

  4. python123程序设计题说句心里话_电脑怎么写程序

    1. 怎么编辑电脑程序```` 我顶你! 呀呀个呸的,你怎么说得这么简单呀-- 编程序,你要想想是在哪个平台上用的,Linux上的,你先安装个系统看看,它上面支持很多种语言,C.Pacsal等. Wi ...

  5. PIC烧写程序的烧录器-MPLAB IDE v8.70

    PIC烧写程序用的是官方提供的环境-MPLAB IDE v8.70: 步骤: 1,打开MPLAB IDE v8.70,导入HEX文件固件,如下图: 2.选择对应的芯片型号,如下图所示: 3.选择芯片的 ...

  6. 为什么中国人没有发明计算机,假如计算机是中国人发明的,代码是不是该用中文写了?...

    假如计算机是中国人发明的,那代码是不是该用中文写了? 导语:你有没有想过,如果是中国人发明了计算机,代码会怎么写呢? 没有专业的注释了,因为代码就是注释,注释就是代码 计算机的进制也会发生改变 二进制 ...

  7. 生信人写程序2. Editplus添加Perl, Shell, R模板和语法高亮

    https://www.editplus.com/ 前言 "工欲善其事必先利其器",生信工程师每天写代码.搭流程,而且要使用至少三门编程语言,没有个好集成开发环境(IDE,Inte ...

  8. stm32使用flymcu烧写程序

    文章目录 一.使用flymcu烧写程序 一.使用flymcu烧写程序 烧写程序之前要使ASP指示灯保持强亮状态,同时要保证使flashIsp模式下也就是灯闪一下模式 如果长按asp按钮指示灯闪烁两次进 ...

  9. 51单片机usb烧录电路_51单片机怎么用usb烧写程序 - 全文

    单片机怎样用usb烧写程序 首先,需要安装keil软件和STC_ISP程序下载软件. 先对你想要实现对单片机的功能用keil编程,然后用STC_ISP下载软件下载到单片机上,最后打开给单片机提供电源就 ...

最新文章

  1. 字节跳动AI Lab社招以及实习生内推
  2. 「反向传播非你原创」,Jürgen发文直指Hinton不应获2019本田奖
  3. 程序员在很多人心里的作用...
  4. tableau必知必会之用蝴蝶图(旋风图)实现数据之间对比
  5. python read函数菜鸟_关于python的菜鸟问题
  6. 自己动手从0开始实现一个分布式RPC框架
  7. 毕设日志——特征融合修改vgg16.py
  8. 第五章:逻辑回归(Logistic 回归)
  9. Catch That Cow poj3278
  10. 2008 r2安装总是跳出 server sql_Microsoft SQL Server 2008 R2 安装遇到的问题
  11. 什么是Power Apps?
  12. openstreetmap website部署
  13. 代码随想录怎么样?我是这样刷的
  14. 如何手机访问电脑服务器上的网页?
  15. 我的世界服务器怎么用系统说话,我的世界语音聊天Mod安装使用教程_我的世界语音聊天Mod怎么安装使用_玩游戏网...
  16. 美国造出最大电视 4K电视262英寸超大屏
  17. Latex表示随机变量相互独立,不独立
  18. 云南财经大学龙泉校区 计算机学院,云南财经大学有几个校区
  19. 计算机专业领域和英语,专业、领域和职业的英语表达法
  20. 2020-2021阿里巴巴Java面试真题解析,面试真题解析

热门文章

  1. Mac电脑技巧:如何将Sublime Text设置成中文版
  2. AVA时空检测数据集下载—AVA_ActionsAVA_Kinetics
  3. Markdown 中设置文本字体为红色(改变字体颜色)的方法
  4. MCE公司:新突破——癌症治疗耐药性问题有望彻底解决
  5. 2023哈尔滨工程大学计算机考研信息汇总
  6. 07-07-Exchange Server 2019-配置-脱机地址簿
  7. 动态规划-(基本知识总结)
  8. 安卓插件化学习 - 类的加载
  9. Android手机不同频率的听力测试功能实现
  10. 2019牛客暑期多校训练营(第七场)D Number——实系数多项式因式分解定理