不管是日本人设计的 Ruby还是巴西人设计的 Lua,各种语法采用的全都是英语。所以,想要成为一个优秀的程序员,会用英语写代码是必要的。

但不是要求研发人员都得专业英语八级,但至少确保代码用英语表达你的意图。

违反语法规则的命名

CR一段代码:


乍看写得还不错,将一些章节信息标记为翻译完成。似乎方法名也能表达这意思,但经不起推敲。
completedTranslate 并不是一个正常的英语方法名。从这个名字你能看出,作者想表达的是“完成翻译”,因为已经翻译完了,所以用完成时的 completed,而翻译是 translate。这个函数名就成了 completedTranslate。

一般命名规则是:

  • 类名是个名词
    表示一个对象
  • 方法名是个动词或动宾短语
    表示一个动作

以此为标准判断,completedTranslate 并不是一个有效的动宾结构。如果把这个名字改成动宾结构,只要把“完成”译为 complete,“翻译”用成它的名词形式 translation 就可以了。所以,这个函数名可以改成 completeTranslation:

public void completeTranslation(final List<ChapterId> chapterIds) {...
}

这并不是个复杂的坏味道,但却随处可见。
比如,一个函数名是 retranslation,其表达的意图是重新翻译,但作为函数名,它应该是一个动词,所以,正确的命名应该是 retranslate。

只要你懂得最基本的命名要求,知道最基本的英语规则,就完全能够发现这类坏味道。

不准确的英语词汇

有一次,我们要实现一个章节审核的功能,一个同事先定义出了审核的状态:

public enum ChapterAuditStatus {PENDING,APPROVED,REJECTED;
}

有问题吗?看不出来,一点都不奇怪。如果你用审核作为关键字去字典网站上搜索,确实会得到 audit 这个词。所以,审核状态写成 AuditStatus 太正常了。

然而,看到这个词的时候,我的第一反应就是这个词好像不太对。因为之前我实现了一个作品审核的功能,不过我写的定义是这样的:

public enum BookReviewStatus {PENDING,APPROVED,REJECTED;
}

抛开前缀不看,同样是审核,一个用 audit,一个用 review。本着代码一致性,希望这两个定义采用同样词汇。

搜索引擎里查下。原来,audit 有更官方的味道,更合适的翻译应该是审计,而 review 则有更多核查的意思,二者相比,review 更适合这里的场景。于是,章节的审核状态也统一使用了 review:

public enum ChapterReviewStatus {PENDING,APPROVED,REJECTED;
}

这个坏味道就是个高级的坏味道,英语单词用得不准确。
但这个问题确实是国内程序员不得不面对的一个尴尬的问题,英语没那么好,体会不到不同单词之间差异。

很多人就是把中文扔到 Google 翻译,然后从诸多返回的结果中找一个自己看着顺眼的,而这也往往是很多问题出现的根源。这样写出来的程序看起来就像一个不熟练的外国人在说中文,虽然你知道他在说的意思,但总觉得哪里怪怪的。

最好的解决方案还是建立业务词汇表。一般情况下,我们都可以去和业务方谈,共同确定一个词汇表,包含业务术语的中英文表达。这样在写代码的时候,你就可以参考这个词汇表给变量和函数命名。

下面是一个词汇表的示例,从这个词汇表中你不难看出:

  • 词汇表给出的都是业务术语,同时也给出了在特定业务场景下的含义
  • 它也给出了相应的英文,省得你费劲心思去思考

遇到了一个词汇表中没有的术语,就找出这个术语相应的解释,然后补充到术语表。

用集体智慧,而非个体智慧。你一个人的英语可能没那么好,但一群人总会找出一个合适的说法。业务词汇表也是构建通用语言的一部分成果。

英语单词的拼写错误

我再给你看一段曾经让我迷惑不已的代码:

public class QuerySort {private final SortBy sortBy;private final SortFiled sortFiled;...
}

初看这段代码时,我还想表扬代码的作者,他知道把查询的排序做一个封装,比起那些把字符串传来传去的做法要好很多。

但仔细看,sortFiled 是啥?排序文件吗?为啥用的还是过去式?归档?
找出这段代码的作者,向他求教,果然他把单词拼错了。

偶尔的拼写错误不可避免,国内的拼写错误比例是偏高的。

像 IntelliJ IDEA 这样的 IDE 甚至可以给你提示代码里有拼写错误(typo),只要稍微注意一下,就可以修正很多这样低级错误。

总结

今天我们讲了几个英语使用不当造成的坏味道:

  • 违反语法规则的命名
  • 不准确的英语词汇
  • 英语单词的拼写错误

还有一些常见的与语言相关的坏味道:

  • 使用拼音进行命名
  • 使用不恰当的单词简写(比如,多个单词的首字母,或者写单词其中的一部分)

如何从实践层面上更好地规避这些坏味道:

  • 制定代码规范,比如,类名要用名词,函数名要用动词或动宾短语
  • 要建立团队的词汇表
  • 要经常进行CR

编写符合英语语法规则的代码。

中国程序员视角下的英文命名相关推荐

  1. 为什么中国程序员非要用英文编程,而不用汉字编程

    为什么中国程序员非要用英文编程,而不用汉字编程? 看完下面这个视频 你就知道啦 编程是编写程序的中文简称,在21世纪的互联网时代,计算机使用越来越广泛,编程也是一大热门.而大家都知道现在的编程软件都是 ...

  2. 程序员视角下对ChatGPT热潮的思考

    OpenAi 最近开放的ChatGPT大火了,从各大网站对它的介绍,到ChatGPT不到一月全球用户注册数突破一百万.大家都玩起了ChatGPT,有测试聊天的,有辅助写程序的,有让写小说的.感觉Cha ...

  3. 王楠——海外华人程序员视角:解密移动游戏开发与Unity 4引擎特性

    海外华人程序员视角:解密移动游戏开发与Unity 4引擎特性 发表于2012-09-07 17:24| 12534次阅读| 来源CSDN整理| 0 条评论| 作者杨依帆 游戏开发Unity游戏引擎王楠 ...

  4. 程序员的认知-中国程序员为什么跳槽

    2019独角兽企业重金招聘Python工程师标准>>> 一些人总是发出一些错误的声音,形成了劣胜优汰可怕的现象.他们在误导着中国,把我们的后继军训练成软件蓝领?D?D?D?D胸无大志 ...

  5. FaceBook中国程序员之死,38岁跳楼轻生,压力让他生不如死!

    事件经过 本月19日,Facebook硅谷总部的园区,一名中国员工从4楼跳下轻生,年仅38岁! 随后警方认定这位中国员工当场死亡,没有涉嫌谋杀嫌疑,属于自杀!这名死者的英文名字叫Qin Chen,中文 ...

  6. 中国程序员VS美国程序员,差距在哪里?

    心态差距 近年来由于互联网的迅速发展,全国各地,IT人才的需求量都出现了飞跃式的增长,程序员的薪资也明显高于其他行业. 但在国内,真正因为热爱编程而从事这份工作的人其实并不多,很多人学习程序想得都是这 ...

  7. Apipost,更懂中国程序员的接口调试神器

    Hello,大家好,我是灰小猿!一个超会写bug的程序猿! 作为一名Java后端程序猿,对接口调试简直是家常便饭,尤其是在进行接口联调的时候,往往因为和前端对接口的理解程度不同,于是乎就出现了.... ...

  8. 微软,您的.net为中国程序员带来了什么?

    往事如烟:2003年,那时我还在念大三,像中国大多数学生一样,为到底是投诚Java还是效忠.net日夜争论,上下求索,迷茫中特别渴望有一盏明灯照亮我辈学子的前程,当时,各大媒体的报道是市场中.net和 ...

  9. 中国程序员开发的远程桌面火了!Mac 可用,只有 9MB,支持自建中继器

    点击上方"视学算法",选择加"星标"或"置顶" 重磅干货,第一时间送达 月石一 发自 凹非寺 量子位 报道 | 公众号 QbitAI 对很多 ...

最新文章

  1. android 请求方式有哪些,Android中的几种网络请求方式详解
  2. Stream Processing:滑动窗口的聚集(aggregation)操作的优化算法讲解
  3. python【蓝桥杯vip练习题库】ALGO-50 数组查找及替换
  4. eq linux_在线试用 200 多种 Linux 和 Unix 操作系统 | Linux 中国
  5. excel概率密度函数公式_干货|利用excel公式,快速对定量的化学检测方法进行测量不确定度的评定...
  6. Python | 基于参数和返回值的功能分类
  7. Scala学习之字符串篇(六):使用正则表达式
  8. printf打印结构体_工程师:这道题80%初学者都没做对!你确定搞懂结构体内存对齐了?...
  9. 支付:在线支付功能的概述
  10. 数据查询网站汇总——自用
  11. linux安全工具(RKHunter)
  12. 【 unity3d 】NGUI playTween与Tween动画 脚本的使用
  13. 云原生不可变基础设施
  14. win10 任务栏打开直接显示【此电脑】的设置方法
  15. “黑产“识别算法(社区检测,相似度,关联关系)
  16. Linux查看DNS地址以及端口,nslookup命令以及更强大的dig命令
  17. vi 从第几行到第几行 替换_vi全局替换方法:
  18. 华东师范大学数据学院2020夏令营机试题解
  19. 帕金森病会引起哪些并发症
  20. 成功或成仁:HP捡了芝麻丢了西瓜

热门文章

  1. android 宏 文本编辑,宏韵编辑器(安卓支持宏的文本编辑器)-东方应用频道
  2. 简约版【HPV疫苗实时在线检测】
  3. 区块链技术对金融行业有什么冲击?
  4. 录ppt的时候录光标_使用 PowerPoint 轻松搞定 Windows 电脑录屏丨一日一技
  5. Redis安装的快速指南
  6. asp.net831社区医院网站门诊挂号系统
  7. cartographer算法(一)——概述及框架
  8. 质谱高级数据分析工具
  9. 判断淘宝评论是好评还是坏评
  10. T100开发全新双档程序详细步骤