代码之丑
郑晔
开源项目 Moco 作者
19833 人已学习
新⼈⾸单¥59
登录后,你可以任选2讲全文学习
课程目录
已完结/共 24 讲
代码之丑
15
15
1.0x
00:00/00:00
登录|注册

02 | 乱用英语:站在中国人的视角来看英文命名

你好,我是郑晔。
上一讲,我们讲了两种常见的命名的坏味道,这一讲的话题还是命名,只不过,这个主题是国外那些经典编程书籍所不曾涵盖的话题:英语命名。
现在主流的程序设计语言都是以英语为基础的,且不说欧美人设计的各种语言,就连日本人设计的 Ruby、巴西人设计的 Lua,各种语法采用的也全都是英语。所以,想要成为一个优秀的程序员,会用英语写代码是必要的。
这里并不是说,程序员的英语一定要多好,但最低限度的要求是写出来的代码要像是在用英语表达
或许你听说过,甚至接触过国内的一些程序员用汉语拼音写代码,这就是一种典型的坏味道。鉴于现在的一些程序设计语言已经支持了 UTF-8 的编码格式,用汉语拼音写代码,还不如用汉字直接写代码。
当然,这个坏味道实在是太低级了,我就不在这里深入讨论了。让我们来看看还有哪些可能会不经意间忽略的坏味道。

违反语法规则的命名

我们来看一段代码:
public void completedTranslate(final List<ChapterId> chapterIds) {
List<Chapter> chapters = repository.findByChapterIdIn(chapterIds);
chapters.forEach(Chapter::completedTranslate);
repository.saveAll(chapters);
}
初看之下,这段代码写得还不错,它要做的是将一些章节的信息标记为翻译完成。似乎函数名也能反映这个意思,但仔细一看你就会发现问题。
因为 completedTranslate 并不是一个正常的英语函数名。从这个名字你能看出,作者想表达的是“完成翻译”,因为是已经翻译完了,所以,他用了完成时的 completed,而翻译是 translate。这个函数名就成了 completedTranslate。由此,你可以看到,作者已经很用心了,但遗憾的是,这个名字还是起错了。
确认放弃笔记?
放弃后所记笔记将不保留。
新功能上线,你的历史笔记已初始化为私密笔记,是否一键批量公开?
批量公开的笔记不会为你同步至部落
公开
同步至部落
取消
完成
0/2000
荧光笔
直线
曲线
笔记
复制
AI
  • 深入了解
  • 翻译
    • 英语
    • 中文简体
    • 中文繁体
    • 法语
    • 德语
    • 日语
    • 韩语
    • 俄语
    • 西班牙语
    • 阿拉伯语
  • 解释
  • 总结

本文从中国程序员的视角出发,探讨了在英文命名中常见的坏味道,并提出了相应的改进方法。文章指出了违反语法规则的命名、不准确的英语词汇和英语单词的拼写错误等问题,并建议程序员应遵循基本的命名要求和英语规则,建立业务词汇表,以提升代码质量和可读性。作者强调了英文命名的重要性,并指出英语是软件开发行业的通用语言,程序员需要对程序中用到的英语有基本的感觉,能够发现代码中的坏味道。此外,文章还提到了一些常见的与语言相关的坏味道,并讨论了如何从实践层面上更好地规避这些问题。总的来说,本文通过具体案例和建议,引导程序员在英文命名方面提升自己的技能,以确保代码质量和可读性。

仅可试看部分内容,如需阅读全部内容,请付费购买文章所属专栏
《代码之丑》
新⼈⾸单¥59
立即购买
登录 后留言

全部留言(35)

  • 最新
  • 精选
  • Jxin
    1.我的英语不行,所以我想反驳... :) 2.我就是一个将中文词丢字典网,然后挑顺眼的惯犯。但英语水平的不足,我也很绝望呀。有些时候没有选择是幸福的,我很希望一个中文单词丢进去只返回一个英文单词,这样就不用挑战我的英语水平了。 3.达成共识高于英语描述准确。如果团队的英语水平普遍都不高,写得标准真的不见得比中文拼音的认知成本低。在有一定业务背景知识的前提下,如果命名用标准的英语,我需要百度下其中各字段的单词意思,然后才能理解该命名对应的业务含义,不是人家命名不好而是我个人英语水平不行,不认识的单词连猜都没法猜;而如果命名采用中文缩写,甚至中文首字母缩写,这命名水准有些低端,但我能猜出来其对应的业务含义,基于业务背景的认知能为我提供这层觉察心。两者之间还是能有一定效益差异的,遗憾的是bad命名效益还更高... 4.只可意会不可言传,中国人在意会这个事上是真的有先天优势。如果所有人的意会都准确无误,那还有必要追求言语的准确吗?

    作者回复: 首先,作为程序员,提升英语水平是应该做的一项努力,这是通向高手的必经之路。否则,就只能在低水平徘徊了,毕竟,写程序的高手外国人居多。不要指望和低水平的下棋能下成高手,没有可能的。 其次,英语这种东西没有什么困难,习惯而已。虽然有些单词不那么直观,但用多了,你就习惯了,所有的单词都一样。有很多单词,我习惯了英文,有时会一下子想不起中文是什么来。 最后,意会不可能准确无误,否则,就不会有女孩的心思男孩你别猜了。基于这个假设的讨论,就不必了。

    2020-12-29
    7
    22
  • CityAnimal
    在不知道要用什么词的情况下: 1. 词汇网站:如dict.cn 2. 把第一步搜到的词在github上搜一下,看下别人怎么用的

    作者回复: 非常好的补充。

    2021-01-11
    2
    18
  • adang
    刚开始写代码的时候,虽然没有用汉语拼音去命名,但英文用的也是乱七八糟。当时的TeamLeader每次Code Review在命名上都会花很大的力气帮忙纠正。在Code Review的时候除了记录他说的问题,也观察他的方法,每当他发现有问题的地方,都是先去"词典网站"上搜索,然后细研究下面的事例句子,最后从中找到最符合场景的单词。同时他还建议去看一些好的开源项目,看里面的设计、命名和实现等等。慢慢的自己也继承了他的方法,而且,自己整理了一份表格类似于课程里讲提到的"术语表",每次看到好的命名就会把它记下来,方便以后使用。这份"术语表"后来中断了,学习完今天的课程,后面要继续维护起来。 另外,推荐一个命名的插件CODELF,它的github地址是:https://github.com/unbug/codelf

    作者回复: 很好的补充,这个网站确实要比很多程序员自己的选择好。

    2021-01-03
    4
    13
  • 刘大明
    乱用英语这个对英语要求比较高了,这方面如果处理好了,能超过大多数程序员了。

    作者回复: 你说得对。

    2020-12-28
    9
  • FM微言送
    刚毕业的时候在一家游戏公司工作过,一个同事代码里方法命名和字段命名都是中文,“张飞大招”,“刘备属性”诸如此类的看着代码很出戏。还听说个一个印度同事变量名非常的长100多个字符

    作者回复: 中文命名如果能统一,其实也不错。

    2021-01-05
    8
  • 赵智慧
    如果再查单词的时候,能捎带看一下例子、语境,会更好。 好处1、对一个单词的理解不仅仅是词典里面的翻译,根据语境能更清晰的理解含义。 好处2、这对英语的提升也有很大的帮助,学习一门语言都是通过语境来学习的。 费事儿的是需要稍微花费点儿时间去查。 改进 我也需要这么做, 不能只查单词和意思。

    作者回复: 进一分,有一分的欢喜。

    2021-01-03
    6
  • DK
    见过一个系统里面一个属性有三种命名,看的头大

    作者回复: 这个叫不一致。

    2020-12-29
    6
  • 泡泡龙
    我的英语是在搭建gentoo和arch时候发现翻译版本太落后,或者翻译不完整,然后就索性直接看官方英文版了,把认不得的单词就记背单词软件里。 然后就这样一直加一直背,大概不到一年时间,看技术文档80%的词都看得懂了。现在基本有问题先用英语Google搜索,看不懂的新概念才会看一些中文文章。所有问题,第一时间查的是官方最新英文文档

    作者回复: 在实际的场景中学习,这才是学习的正道。

    2020-12-29
    5
  • 3.141516
    虽然老师文中提到:使用不恰当的单词简写(比如,多个单词的首字母,或者写单词其中的一部分)。 即不要使用不完整的英文字母,但是平常开发时经常碰到如 message-msg、button-btn 等简写方式,这个也是不允许的吗?必须在任何场景都写完整的英文单词吗? 谢谢老师!

    作者回复: 有一些行业通用的缩写可以用,最好不要自己创造,前提是约定好。

    2021-01-08
    3
  • 桃源小盼
    推荐大家订另一个程序员英语的专栏。

    作者回复: 也许是个办法。

    2020-12-30
    3
收起评论
显示
设置
留言
35
收藏
沉浸
阅读
分享
手机端
快捷键
回顶部