非常认同题主说的命名能力的重要性。关于命名,我有两点理解(一家之言,抛砖引玉):
至于如何考察应聘者的命名能力,我觉得可以从 提升代码质量 和 提升代码可读性 两个角度跟对方聊聊。如果他能自然的说到对命名的一些理解,那他可能有这个意识。
然后让他说说最近项目中好的命名和不好的命名,以及为什么好或不好,一个真心重视命名的人不可能会对自己参与的项目中的命名没有任何感受(当然这个问题对表达能力不强的人来说可能需要较长时间来组织语言)。如果他的表达中有对逻辑抽象和业务领域两个层面的思考,那他的命名能力大概率不会差。
直接出一个功能,让程序员抽象为一个方法名,比如:有一个方法用来查询CFO在职期间企业是否有成功并购重组,让他命名一下就好了。
其实也不用单独考察,看一个人说话条理是否清晰就好了。如果他对诸子百家中的“名家”有所研究就更好了
附:白马论
“白马非马,可乎?”曰:“可。”
曰:“何哉?”曰:“马者,所以命形也。白者,所以命色也。命色者,非命形也,故曰白马非马。”
曰:“有白马,不可谓无马也。不可谓无马者,非马也?有白马为有马,白之非马,何也?”
曰:“求马,黄、黑马皆可致。求白马,黄、黑马不可致。使白马乃马也,是所求一也,所求一者,白者不异马也。所求不异,如黄、黑马有可有不可,何也?可与不可其相非明。故黄、黑马一也,而可以应有马,而不可以应有白马,是白马之非马审矣。”
曰:“以马之有色为非马,天下非有无色之马也。天下无马,可乎?”
曰:“马固有色,故有白马。使马无色,有马如已耳,安取白马?故白者非马也。白马者,马与白也;马与白马也,故曰:白马非马也。”
曰:“马未与白为马,白未与马为白。合马与白,复名白马,是相与以不相与为名,未可。故曰:白马非马,未可。”
曰:“以有白马为有马,谓有白马为有黄马,可乎?”曰:“未可。”曰:“以有马为异有黄马,是异黄马于马也。异黄马于马,是以黄马为非马。以黄马为非马,而以白马为有马;此飞者入池,而棺椁异处;此天下之悖言乱辞也。”
曰:“有白马,不可谓无马者,离白之谓也。是离者有白马不可谓有马也。故所以为有马者,独以马为有马耳,非有白马为有马。故其为有马也,不可以谓马马也。”
曰:“白者不定所白,忘之而可也。白马者,言定所白也。定所白者,非白也。马者无去取于色,故黄、黑皆所以应。白马者,有去取于色,黄、黑马皆所以色去,故唯白马独可以应耳。无去者非有去也。故曰:白马非马。”
分2个阶段吧:
以 C# 为例,首先是规则。命名包括但不限于 类名,命名空间,方法名,属性,字段,局部变量这几大类。
1, 对于 class, namespace,method 等在 C# 中都是遵循帕斯卡命名法的。对于局部变量则遵循 小驼峰规则。
2,对于局部变量名开头不能为数字,不能以 C# 中的关键字来命名等。
然后是可读性:
1,对动词 介词 和 名词的准确性的利用,通常是 动词+介词+名词 或者是 单单的名词。
2,能正确使用某些名词的单复数形式。List,Database,Person,work, news
3,在方法的命名上,尽量做到细粒度的职责划分,一个方法做一件事。不要像这样:GetProductListWithConsumer()
4,局部变量的命名上也尽量要做到可读性,除了在 for 里面的,其他我觉得都需要做到 其他人第一个接触到这代码的就知道在讲啥。
个人愚见:在 命名规范 + 可读性(尽量做到细粒度的划分上)这样的 命名 产出应该不会太差。
可读性。类名、方法名、对象,看了名字就知道是做什么用的。
写个简单的项目架构,比如mvc,建包,建类,建方法,变量命名
过程考察:能快速找到未知的win api函数(查读的习惯),属性、函数命名规则词和词组的规则(个人写的习惯,如函数动名词,属性名词或介名词)。
结果考察:拿出一份n年前的代码,知道是干什么的。
直接问他,你有没有过命名不规范的时候?哪怕是偶尔。
– 小渺 5年前如果答案是肯定的,那他就是经常命名不规范。
@小渺: 有点武断吧
– 猝不及防 5年前@小渺: 不是所有命名都要规范,微软的Equals方法,参数就是a,b;还有num1,num2之类的命名;局部变量,全局变量,接口还有一些约定成俗的变量,有一个相对清晰的规范就好了
– 三人乐乐 5年前