对于软件开发人员来说,最大的难题是:如何命名(例如:给变量,类,函数和过程命名等等)。
该结果是来自Quora问答网站和更早的Ubuntu论坛跟帖的4500个开发者的投票。如何命名一项的选票几乎是其他八项的投票结果的总和。
的确,这些基于自我筛选的群体的投票结果是完全不科学的。但是我认为这个结果还是有一定意义的,换句话说,如何命名的确是个很棘手的问题,许多非编程人员可能会意识不到。
对于这个结果,我多少有点意外,因为作为一个多年的开发人员,我不会投给这一项(我想我会投给“修改或维护别人的代码”)。但是真正让我惊讶的是,看起来好像不怎么重要的命名居然排列第一,跟期待的结果实在差太远了。
关于程序员在编程中对于命名的的痛苦和纠结如下观点:
“我确实在编程的时候花了很多时间在考虑如何命名。”
“我不得不同意命名是一门艺术。”
“如果你想要提高代码的可读性,命名的确很重要。”
我认为最后一条抓住了部分核心,解释了命名为什么会这么难,因为它太重要了。准确的命名可以提高代码的可读性,让人容易理解,方便调试,也给以后修 改和维护你的代码的人带来方便。一旦开始做了,很快你会发现要想出一个简洁又准确的名字没那么容易。
Jeff Atwood 曾说:“想出好的命名的确很难,但是有难的道理,因为好的命名需要只用一两个单词出表达你的根本意思。”
而且,许多人认为,正确的命名能帮你写出好的代码。如果不能为一个变量或者函数想出一个清晰又简洁的名字,那可能是你的代码有问题。那样的话,你就得考虑重写或者进行代码重构了。
“通常,如果你无法想出一个合适的名字,意味着你的设计可能有问题。你的一个方法里是不是实现了太多的功能?或者你的类的封装,凝聚性不够强?”
“我的经验是如果无法给你的类想出一个合适的名字,大多数情况都是你的类有问题:你可能不需要这个类,它有点多余了”
“命名难也不见得是坏事儿,它可以迫使你去认真思考你的类到底想要实现什么功能。”
长话短说:如果你想要学习编程,一定要给自己准备一本好词典。
对于开发人员来说什么是最难的?你又有什么好的观点呢?
来自:C语言源代码计划
引用来自“久永”的评论
所以我觉得,开发工具应该变革,去掉语言中的命名(先用标识符代替),避免编码前需要命名的前提,而将其推迟到编码之后再进行。引用来自“Lzz_Love”的评论
那岂不是本末倒置了,这跟写完了再做设计有什么两样?引用来自“久永”的评论
回复@Lzz_Love : 生完小孩再起名字不是再正常不过的吗?引用来自“stormgens”的评论
还嘴硬,有本事你等孩子好几十了再起名。而不是他在一开始登记户口时就起名字。引用来自“久永”的评论
谁嘴硬?你多大?你有小孩?
还有,如果一开始起的变量名都不用改,那么请问你“需求变更”是什么天方夜谭?
你做过几年编程?
等你做了20年编程回来再看你现在的发言吧!
引用来自“cc_z”的评论
大声告诉我你做了几年的编程😆引用来自“久永”的评论
回复@cc_z : 我开始搞程序的时候,你们这些小P孩有的还在量子态。引用来自“cc_z”的评论
神人呀,90年代就开始搞程序了,先让我膜拜下,然后我要质疑了,怎么看都不像个技术大师引用来自“久永”的评论
回复@cc_z : 我们开始工作用的语言,你们老师可能都没学过,请问你怎么看出来?那时候面向对象还是理论,请问你用什么思维来理解?引用来自“cc_z”的评论
理论只是被我用来降低代码不ok状态到ok状态的时间和精力消耗引用来自“久永”的评论
所以我觉得,开发工具应该变革,去掉语言中的命名(先用标识符代替),避免编码前需要命名的前提,而将其推迟到编码之后再进行。引用来自“Lzz_Love”的评论
那岂不是本末倒置了,这跟写完了再做设计有什么两样?引用来自“久永”的评论
回复@Lzz_Love : 生完小孩再起名字不是再正常不过的吗?引用来自“stormgens”的评论
还嘴硬,有本事你等孩子好几十了再起名。而不是他在一开始登记户口时就起名字。引用来自“久永”的评论
谁嘴硬?你多大?你有小孩?
还有,如果一开始起的变量名都不用改,那么请问你“需求变更”是什么天方夜谭?
你做过几年编程?
等你做了20年编程回来再看你现在的发言吧!
引用来自“cc_z”的评论
大声告诉我你做了几年的编程😆引用来自“久永”的评论
回复@cc_z : 我开始搞程序的时候,你们这些小P孩有的还在量子态。引用来自“cc_z”的评论
神人呀,90年代就开始搞程序了,先让我膜拜下,然后我要质疑了,怎么看都不像个技术大师引用来自“久永”的评论
所以我觉得,开发工具应该变革,去掉语言中的命名(先用标识符代替),避免编码前需要命名的前提,而将其推迟到编码之后再进行。引用来自“Lzz_Love”的评论
那岂不是本末倒置了,这跟写完了再做设计有什么两样?引用来自“久永”的评论
回复@Lzz_Love : 生完小孩再起名字不是再正常不过的吗?引用来自“stormgens”的评论
还嘴硬,有本事你等孩子好几十了再起名。而不是他在一开始登记户口时就起名字。引用来自“久永”的评论
谁嘴硬?你多大?你有小孩?
还有,如果一开始起的变量名都不用改,那么请问你“需求变更”是什么天方夜谭?
你做过几年编程?
等你做了20年编程回来再看你现在的发言吧!
引用来自“cc_z”的评论
大声告诉我你做了几年的编程😆引用来自“久永”的评论
回复@cc_z : 我开始搞程序的时候,你们这些小P孩有的还在量子态。引用来自“久永”的评论
所以我觉得,开发工具应该变革,去掉语言中的命名(先用标识符代替),避免编码前需要命名的前提,而将其推迟到编码之后再进行。引用来自“Lzz_Love”的评论
那岂不是本末倒置了,这跟写完了再做设计有什么两样?引用来自“久永”的评论
回复@Lzz_Love : 生完小孩再起名字不是再正常不过的吗?引用来自“stormgens”的评论
还嘴硬,有本事你等孩子好几十了再起名。而不是他在一开始登记户口时就起名字。引用来自“久永”的评论
谁嘴硬?你多大?你有小孩?
还有,如果一开始起的变量名都不用改,那么请问你“需求变更”是什么天方夜谭?
你做过几年编程?
等你做了20年编程回来再看你现在的发言吧!
引用来自“cc_z”的评论
大声告诉我你做了几年的编程😆引用来自“久永”的评论
回复@cc_z : 我开始搞程序的时候,你们这些小P孩有的还在量子态。引用来自“haitaosoft”的评论
IDE能方便地支持 随时改名(人一改 IDE自动修改所有涉及的地方) 就好了。有些语言的部分编辑器可能已经实现这样的 重构 功能了引用来自“久永”的评论
所以我觉得,开发工具应该变革,去掉语言中的命名(先用标识符代替),避免编码前需要命名的前提,而将其推迟到编码之后再进行。引用来自“Lzz_Love”的评论
那岂不是本末倒置了,这跟写完了再做设计有什么两样?引用来自“久永”的评论
回复@Lzz_Love : 生完小孩再起名字不是再正常不过的吗?引用来自“stormgens”的评论
还嘴硬,有本事你等孩子好几十了再起名。而不是他在一开始登记户口时就起名字。引用来自“久永”的评论
谁嘴硬?你多大?你有小孩?
还有,如果一开始起的变量名都不用改,那么请问你“需求变更”是什么天方夜谭?
你做过几年编程?
等你做了20年编程回来再看你现在的发言吧!
引用来自“cc_z”的评论
大声告诉我你做了几年的编程😆引用来自“久永”的评论
所以我觉得,开发工具应该变革,去掉语言中的命名(先用标识符代替),避免编码前需要命名的前提,而将其推迟到编码之后再进行。引用来自“Lzz_Love”的评论
那岂不是本末倒置了,这跟写完了再做设计有什么两样?引用来自“久永”的评论
回复@Lzz_Love : 生完小孩再起名字不是再正常不过的吗?引用来自“stormgens”的评论
还嘴硬,有本事你等孩子好几十了再起名。而不是他在一开始登记户口时就起名字。引用来自“久永”的评论
谁嘴硬?你多大?你有小孩?
还有,如果一开始起的变量名都不用改,那么请问你“需求变更”是什么天方夜谭?
你做过几年编程?
等你做了20年编程回来再看你现在的发言吧!
dragon
demon
bitch
wtf
shit
...
引用来自“开源中国-首席村长”的评论
yue=余额,jtzz=家庭住址,sfzh=身份证号。。。引用来自“primates”的评论
起名字难道不是产品经理的事情吗?精确到模块级就行了,在下一级由程序员自己起名。比如 word 的字体大小,这个变量属于模块级的,则命名为 officeWordFontSize,word所有模块都调用/使用这个统一的名称。而 字体大小设置 对话框的变量由程序员自己命名。引用来自“久永”的评论
所以我觉得,开发工具应该变革,去掉语言中的命名(先用标识符代替),避免编码前需要命名的前提,而将其推迟到编码之后再进行。引用来自“Lzz_Love”的评论
那岂不是本末倒置了,这跟写完了再做设计有什么两样?引用来自“久永”的评论
回复@Lzz_Love : 生完小孩再起名字不是再正常不过的吗?引用来自“Lzz_Love”的评论
这根本是两码是嘛,生小孩你除了播种基本没有别的贡献了,你无法决定孩子的性别,长相,甚至是健康状况,而程序设计需要你方面方面的考量。你想不出名字就说明你对你定义的变量、函数、类干什么用都还不清楚,这样状态下写出的代码到底想表达什么,只有上帝和你知道,然后再过个半年就只有上帝知道了!!!引用来自“久永”的评论
所以我觉得,开发工具应该变革,去掉语言中的命名(先用标识符代替),避免编码前需要命名的前提,而将其推迟到编码之后再进行。引用来自“Lzz_Love”的评论
那岂不是本末倒置了,这跟写完了再做设计有什么两样?引用来自“久永”的评论
回复@Lzz_Love : 生完小孩再起名字不是再正常不过的吗?引用来自“stormgens”的评论
还嘴硬,有本事你等孩子好几十了再起名。而不是他在一开始登记户口时就起名字。你有小孩?
还有,如果一开始起的变量名都不用改,那么请问你“需求变更”是什么天方夜谭?
你做过几年编程?
等你做了20年编程回来再看你现在的发言吧!
引用来自“梅开源”的评论
我就问你们,for后面为啥大家经常是用i,j,k?引用来自“梅开源”的评论
我就问你们,for后面为啥大家经常是用i,j,k?引用来自“haitaosoft”的评论
IDE能方便地支持 随时改名(人一改 IDE自动修改所有涉及的地方) 就好了。有些语言的部分编辑器可能已经实现这样的 重构 功能了引用来自“ucando”的评论
好命名只是确保你在一个月后还能看懂自己写的是什么😆引用来自“涟漪巫师”的评论
我见过英文+拼音的命名方式,比如isZhenDe引用来自“久永”的评论
所以我觉得,开发工具应该变革,去掉语言中的命名(先用标识符代替),避免编码前需要命名的前提,而将其推迟到编码之后再进行。引用来自“Lzz_Love”的评论
那岂不是本末倒置了,这跟写完了再做设计有什么两样?引用来自“久永”的评论
回复@Lzz_Love : 生完小孩再起名字不是再正常不过的吗?引用来自“久永”的评论
所以我觉得,开发工具应该变革,去掉语言中的命名(先用标识符代替),避免编码前需要命名的前提,而将其推迟到编码之后再进行。引用来自“久永”的评论
所以我觉得,开发工具应该变革,去掉语言中的命名(先用标识符代替),避免编码前需要命名的前提,而将其推迟到编码之后再进行。引用来自“Lzz_Love”的评论
那岂不是本末倒置了,这跟写完了再做设计有什么两样?引用来自“久永”的评论
回复@Lzz_Love : 生完小孩再起名字不是再正常不过的吗?引用来自“久永”的评论
所以我觉得,开发工具应该变革,去掉语言中的命名(先用标识符代替),避免编码前需要命名的前提,而将其推迟到编码之后再进行。引用来自“Lzz_Love”的评论
那岂不是本末倒置了,这跟写完了再做设计有什么两样?引用来自“久永”的评论
所以我觉得,开发工具应该变革,去掉语言中的命名(先用标识符代替),避免编码前需要命名的前提,而将其推迟到编码之后再进行。