程序员最头疼的事:命名

伯乐在线导读:基于 Quora 网站上的一个关于“程序员职业生涯中最难的事”的讨论帖,国外开发者 Phil Johnson 10 月中旬在 ITworld 发了一个投票,其结果有点让他意外。感谢@JingerJoe 倾心翻译。另外,我们在@程序员的那些事 微博发起一个相似投票:《程序员,你最头疼的问题是?》。

许多程序员认为编程时,如何命名不仅是他们面临的老大难问题,也是最重要的事情之一。

上周,我发起了一个《程序员编程中的老大难问题》的投票,主要是基于最近Quora上的跟帖讨论,根据大家的反响和投票结果,有一项投票遥遥领先,稳居第一。对于软件开发人员来说,最大的难题是:如何命名(例如:给变量,类,函数和过程命名等等)。

对于这个结果,我多少有点意外,因为作为一个多年的开发人员,我不会投给这一项(我想我会投给“修改或维护别人的代码”)。但是真正让我惊讶的是,看起来好像不怎么重要的命名居然排列第一,跟期待的结果实在差太远了。下面是投票结果的分布图。

programmers_hardest_tasks-600x700

该结果是来自Quora问答网站和更早的Ubuntu论坛跟帖的4500个开发者的投票。如何命名一项的选票几乎是其它八项的投票结果的总和,哇!

的确,这些基于自我筛选的群体的投票结果是完全不科学的。但是我认为这个结果还是有一定意义的,换句话说,如何命名的确是个很棘手的问题,许多非编程人员可能会意识不到。

几年前在StackExchange社区里对于这个话题刚好有个跟帖,为了强调这一点,我引用了一些内容是关于程序员在编程中对于命名的的痛苦和纠结。

“我确实在编程的时候花了很多时间在考虑如何命名。” 

“我不得不同意命名是一门艺术。” 

“如果你想要提高代码的可读性,命名的确很重要。” 

我认为最后一条抓住了部分核心,解释了命名为什么会这么难,因为它太重要了。准确的命名可以提高代码的可读性,让人容易理解,方便调试,也给以后修改和维护你的代码的人带来方便。一旦开始做了,很快你会发现要想出一个简洁又准确的名字没那么容易。就像Jeff Atwood 所写的:

“想出好的命名的确很难,但是有难的道理,因为好的命名需要只用一两个单词出表达你的根本意思。” 

而且,许多人认为,正确的命名能帮你写出好的代码。如果不能为一个变量或者函数想出一个清晰又简洁的名字,那可能是你的代码有问题。那样的话,你就得考虑重写或者进行代码重构了。

“通常,如果你无法想出一个合适的名字,意味着你的设计可能有问题。你的一个方法里是不是实现了太多的功能?或者你的类的封装,凝聚性不够强?” 

“我的经验是如果无法给你的类想出一个合适的名字,大多数情况都是你的类有问题:你可能不需要这个类,它有点多余了” 

“命名难也不见得是坏事儿,它可以迫使你去认真思考你的类到底想要实现什么功能。”

长话短说:如果你想要学习编程,一定要给自己准备一本好词典。 

 

伯乐在线补充:我们在@程序员的那些事 微博发起一个相似投票:《程序员,你最头疼的问题是?》,预知国内程序员的情况,请移步查看。(记得先投票,然后再看结果)

 

1 收藏 19 评论

关于作者:JingerJoe

一枚 C++ 程序媛……(新浪微博:@Aiyaiyaa) 个人主页 · 我的文章 · 13

相关文章

可能感兴趣的话题



直接登录
最新评论
  • waveacme   2013/11/01

    很有道理,取名字难,真的跟设计有关。

  • 确实,看到那些用拼音缩写命名的,更无语了。。

    • lazyPHP   2013/11/05

      我是拒绝用拼音命名的,发现一次直接砍手了。最可恨这种做法了

      • 别装好么?使用拼音(甚至直接使用汉字)唯一的弊端是代码不方便国际化。
        除此之外,没别的什么问题。
        在我看来,使用拼音命名,和使用英文命名但是写上一句中文注释,这两者没什么区别,甚至还可以说某些情况后者不如前者,因为需要额外的再阅读一次注释。

        这篇文,也没有从语法角度去说命名的问题,命名体现出来的设计结构才是关键。

    • 用拼音比用不通的英文要好上许多倍。

      当然用拼音的话同音字太多也是个问题,不过还是比用不通的英文单词要好上许多倍。

  • 好的命名可以代替大坨的注释

  • Cloud   2013/11/05

    光有字典还不行,必须由熟悉业务的人来提供名词,而不是让程序员自己去翻字典。那查出来的不知道是什么东西了。最好能达到让最了解业务,但是不熟悉开发的人也能明白这些名词(变量、类)是什么东西,而这些方法都是做什么的。

  • kkk   2013/11/18

    当你的工程有几千个类的时候,各种继承关系的时候,你就知道命名有多难了,因为语言的细化程度达不到程序功能的细化程度,同义词的使用也会令人产生歧义,用数字后标更是没办法的办法。

  • 200cc   2013/11/29

    长话短说:如果你想要学习编程,一定要给自己准备一本好词典。

  • 我估计跟ITworld区别的原因是因为国内大部分程序猿对英文不明确而导致对命名的不重视。。。比如我,就是用中文简短表达然后随便去翻译一下

  • cccc   2014/06/17

    完美主义者表示中枪,曾经花了1上午查各种翻译工具,读别的项目源码,左右斟酌,就是为了给几个类和几个包命名

    • 激动的涕流满面啊!!曾经为找到合适的类名足足在网上查了1周的资料,也有为找不到合适的类名而把项目停下来的情况。当然了,都是自己的业余项目。

      好的命名不光是英文的问题,更和对业务的深入理解以及专业词汇的掌握相关。不然的话,就不会有那么多英语国家的程序员也有命名很难的问题了。

  • 起名确实很蛋疼,你问头儿,这个名字行吧?头儿说,你看着办,你写好了函数了,特么,头儿一看,不行,重新起个,杯具了

  • Code_Ten   2015/07/02

    基础通用的使用英文命名。与中文文化特性的,使用拼音。举个例子,假设让你为“倚天剑”命名,你跟我说取一个蹩脚的英文名好认,还是直接拼音“YiTianJian”好认。这年头还担心多音字?搜狗一敲就能推测出来了。最后,那些誓死要坚守英文的,告诉我,当你看到“The Journey of Flower”时,你能想到什么?

  • pqiao 程序猿 2015/07/02

    想起来,很久以前,一个别的项目组的萌新,把机房命名成Chicken house。只能说,还好不是我组的。

  • 我想我是那百分之一,命名的思考时间不会超过2分钟

  • Panblack 运维 06/26

    只有词典不够,还需要至少了解点儿语法,比如动词原型、ing和ed (^_-)

  • 的确,命名难不是什么坏事,它可以迫使你去认真思考你到底想要实现什么功能。

跳到底部
返回顶部