13年后的共鸣-在代码中用中文命名的优势和问题

简介: 与13年前的博文有同感, 分析在代码中用中文命名的优势和问题. Echoing a blog article 13 years ago, with the topic of pro and cons of Chinese naming in code.

早在2004年的《关于中文编程》 - 张玮的专栏 一文中非常有前瞻性地阐述了用中文编写代码对改善可读性的意义, 今日代码可读性已经越来越被业界重视而成为代码审核的一部分.

文中提到的几个论点尤其有共鸣:

我经常见到为取变量名和类名查字典的情况,这还算是好的。有时候遇到不好查字典或者理解不准确甚至是心情不好,乱起一个名字,就会搞得后来读程序头痛。“道可道,非常道;名可名,非常名”。《道德经》把名放在开篇中,可见一个好的名字的重要性。我觉得名字就代表对事物本质的认识,再加上软件这样一个东西,其中的大部分事物几乎都是创造出来的,如果没有一个好的名字,就会让人很难以理解。我觉得名字差有三方面的原因:

1、名字代表程序员对事物本质的认识,一个坏的名字可能意味着概念的模糊。有可能是程序员对事物的划分不准确,这些东西在一起只是偶然的,从而取不出好的名字,因为这个事物的边界是模糊的;也有可能开始的时候是准确的,但后来随着事物的发展,这个东西的性质已经改变,原来的名字已经反映不出它的本质了。这个时候就需要改一个更准确的名字,但由于没有方法论和工具的保证,这种变动往往不太容易,因此很多人不会愿意做这种变化。...

2、认为名字不重要,这个上面我已经谈到。

3、认识也是准确的,也想取一个好名字,但是因为语言的限制,取不了好名字。

这个正是我想说的问题。因此我们就要在源代码中使用中文。那有的人说,现在的语言大多支持中文的注释,用中文注释不就OK了吗?关于这个观点,请参见Refactoring中的论述,总之,结论是,做为向高级语言进化的第一步,汇编语言中出现的关于变量名,方法名等等,正是自然的表达人的思想的地方,从这个角度上来看,注释倒反是副产品,也就是说,在用变量名,方法名,类名等等不能表达的时候,在用Refactoring不能解决问题的时候,才用注释来解决。

文中提到的问题在13年后的今天也还没有完全的解决:

最现实的一个问题是:环境的支持。最基本的是运行环境和编译环境,我大部分时间都生活在Java环境中,很少数情况会有不支持的情况,我记得遇到过的不支持的情况好象是WebLogic不支持有中文方法名的EJB。总之,这方面的不支持是比较少的。IDE的支持一般也是可以的,但是对输入的支持一般都不好。比如有一个中文方法名,如果要想在弹出的选单中选中文方法名,都是很痛苦的。我能想到的比较好的方法应该是象E语言一样:象输入"中文",只需要输入"zhongwen"或"zw",或"zhw"即可。但现在几乎所有的开发工具都不支持,我想有一天这种输入方法应该是会被支持的。

两个问题都是生态环境对中文(或者说非英文)的支持, 这需要更多在源码/文件名中使用中文来推动解决.

关于中文输入法, 理想的解决方式是支持多种输入法(不仅是拼音), 而且与IDE原有的代码自动补全功能无缝集成. 通过插件在主流IDE中实现这一功能。 最近发现了一个开源实现,在TypeScript+VSCode中实现了根据拼音首字母或者拼音的部分来匹配中文标识符。虽然随着VSCode的新版本发布而失效,反映了IDE插件对IDE的依赖性问题,但仍证实了可行性,有不少借鉴意义。

2017-10-26

相关文章
|
存储 算法 C++
标准模版库 知识点总结 C++程序设计与算法笔记总结(八) 北京大学 郭炜(上)
标准模版库 知识点总结 C++程序设计与算法笔记总结(八) 北京大学 郭炜(上)
57 0
|
存储 算法 搜索推荐
标准模版库 知识点总结 C++程序设计与算法笔记总结(八) 北京大学 郭炜(下)
标准模版库 知识点总结 C++程序设计与算法笔记总结(八) 北京大学 郭炜(下)
74 0
|
设计模式 人工智能 自然语言处理
用了这款函数AI生成器,领导都夸我代码写得好!
最近,有小伙伴向我推荐了一款函数AI生成器,说是因为用了它生成的代码被领导夸了,感慨科技的力量,让我一定要试试。本着试用的原则,实际感受了一波,简直太好用了~
QT QTranslator 中英文翻译linguist语言家 翻译过程
QT QTranslator 中英文翻译linguist语言家 翻译过程
QT QTranslator 中英文翻译linguist语言家 翻译过程
|
IDE 搜索推荐 程序员
中国程序员视角下的英文命名
不管是日本人设计的 Ruby还是巴西人设计的 Lua,各种语法采用的全都是英语。所以,想要成为一个优秀的程序员,会用英语写代码是必要的。 但不是要求研发人员都得专业英语八级,但至少确保代码用英语表达你的意图。
351 0
中国程序员视角下的英文命名
|
机器学习/深度学习 自然语言处理 文字识别
英语学习利器:一款词典笔的模型创新与工程实践
机器学习怎样帮助英语学习?查词、翻译、标准发音都少不了:OCR(光学字符识别)实时识别单词与句子,NMT(神经网络翻译)自动翻译语句,TTS(语音合成)合成最真实的标准读音。那么这些是不是能集成到一个硬件中,成为智能的英语学习利器,这就是网易有道词典笔 2.0。
386 0
英语学习利器:一款词典笔的模型创新与工程实践
|
前端开发 算法 小程序
280字编程挑战:把一条推特长度的代码玩出花
云栖号资讯:【点击查看更多行业资讯】在这里您可以找到不同行业的第一手的上云资讯,还在等什么,快来! 推特与计算机能擦出什么样的火花呢?大多数人可能就想到在计算机上发推特呗。但是,有人就不这么想。酷爱计算机演进史和推特的 Dominic Pajak 创建了 BBC Micro Bot,它能够将一条 280 字符的推特经过模拟处理进而创建 3 秒时长的视频。
280字编程挑战:把一条推特长度的代码玩出花
|
安全 算法 Java
阿里巴巴开源Java编码规范背后的故事
《阿里巴巴Java开发手册》(下称《手册》)凝聚了阿里集团很多同学的知识智慧和经验,这些经验甚至是用血淋淋的故障换来的,希望前车之鉴,后车之师,能够帮助更多的开发者少踩坑,杜绝踩重复的坑。
7957 0
|
JavaScript 编译器 API
国人创造中文编程语言的优势
对比创造英文编程语言, 国人在创造中文编程语言时具备的优势, 以及开源的中文编程语言项目. Compared to creating English programming language, some advantages the Chinese have when creating Chinese programming languages.
1167 0

热门文章

最新文章