《这些年编程的一些反思》 001. 起一个好名字

我们生了两个小宝宝,如果你要说生完小孩最难的事情是什么,栋哥可以告诉你,是给小孩起个好听好记又有好意义的名字。当时我的脑袋都要想破了,我给两个宝宝起的名字都是以天上的星星来取的,我希望他俩能够在一生中,仰望一下星空,也希望N年以后,他俩可以看到我写的这段话。

给小孩取名字,是非常难的;同样,对写软件的程序员,给变量和项目起名字也是非常难的。

如果你已经为人父母,你应该能够认同我。如果你是程序员,不认同我说的,认为给项目起个名字,或者给变量起个名字,是最简单不过的事情了,也许,你对编程爱的不够深 :)

我已经无从考证编程中名字的由来,反正从古老的Fortran语言开始,变量就有了自己的名字。随后的所有语言,不止变量,还有所有的函数,常量等等…都有自己的名字,甚至语言本身,也有自己的名字,为什么有的语言叫Python,有的语言叫Java,有的语言叫Scheme,有的语言叫Go,甚至,Go语言和很早以前的另一个也叫Go的语言重命了。

好好的想想如何起名字这件事

现在随便拿起一本书,或者看一个编程的视频,都是随意的给一个变量起一个类似a,b,c这样的名字,我觉得这是要尽量避免的事情。这不是小事,不管以后是自己写项目,还是和别人合作,多花几秒钟时间考虑一下起名字这个事,绝对是一件回报巨大的事情。

什么样的名字是好名字?

一个好名字要反映出问题。我再以中国人起名字举例,中国的名字大部分是3个字或者2个字,4个字的相对来说要少一些。如是是2个,第一字是姓,这个没法让人发挥,老爸姓啥你就姓啥。如果是3个字的,很可能第2个字是辈份,也没法自由发挥,只有第3个字才能让我们发挥。

一个好名字要能描述一个问题,或者能表达自己的某种愿望。所以,如果中国的父母相信五行八卦的话,如果这个孩子五行缺木,可能会取一个森字;如果这个孩子五行缺水的话,可能取个淼字;当然,这也是我随便用五行来解释的,这并不能解释为什么有人取个名字叫晶。

和给中国人取名一样,一个好的变量名应该是个名词,而不能是动词。这个名词最好能让人望文生意。比如,first_name,last_name这样的名字就比a,b,name要好。

这个我也没有什么神奇的办法,有给变量起好名字的算法,给人起名字有起名字的软件,目前可能还没有给变量起名字的软件。

变量名多长比较好

这个分情况,有个(我认为是玄学的)报告说,把变量名限制在8-15个字符,会比较好。其实不同的编程语言,所遵守的规则有点不同,如果你是Objective-C程序员,可能见到这么长的变量名也不奇怪:

INGetAvailableRestaurantReservationBookingDefaultsIntentResponse

但是,如果这么长的变量名被一个Python程序员或者C程序员看到,可能会吓一跳。

所以,这个看情况的。但是,我觉得一个好名字,无论长短,最好能没有歧义,不要一看名字,可以有许多的解释。比如,date就不是个好名字,currentDate就是个相对比较好的名字,如果把currentDate简化成cd,就是个更差的名字了。大家可以体会一下。

只要是能足够清晰的表示出变量的意义,就是好名字,长点短点,没什么关系的。

重名了怎么办

在现实中,我们总是能听说过几个叫李鹏,刘鹏,王鹏的人,这是非常非常正常的事情。在编写程序的时候,几个同事想到一起,给不同的变量起相同的名字,这也是非常正常的事情。

在软件中,有一整套解决方案来处理这个事情,比如说名字空间(namespace)。这个留在以后再详细说。

一个故事

先看一个照片,这个人叫Michael。

Michael

如果你不知道他,我觉得你肯定知道他有个产品叫MySQL。是的,你也许会说,你看,他的名字也不好,叫MySQL。其实,他有3个孩子,两个女儿,一个儿子。其中一个女儿叫My,在他把MySQL卖给Oracle以后,他出来做了一个新的数据库叫MariaDB,是因为他另一个女儿叫Maria。他还做过一个数据库叫MaxDB,是因为他有个儿子叫Max。

下一次,不要再给自己的变量定义为myInput,myCount… 除非你也有个女儿叫My。

好好想想,给自己的孩子起个好听的名字,这是为人父母的第一步;给自己的项目和变量起个好点的名字,这是学习编程的第一步。


形成本文的草稿

01-draft-01

01-draft-02

刘延栋 wechat
欢迎扫一下关注我的公众号:软件那些事儿
欢迎收听我的电台,你的支持将鼓励我继续前进