在《喜剧之王》中,周星驰扮演的尹天仇,一直梦想成为一名演员,而他无论是在扮演跑龙套,或者在街坊中开设演员训练班,亦或成为主角时,他对待演员的态度,始终是认真,热爱而又投入的。而那一本他随身携带的书--《演员的自我修养》,尽管不知道里面具体写的是什么,但我猜,他对待演员的态度和行为,就是书中内容显示的。java
因而,不由问了问本身,做为一名程序员,一个“程序员的自我修养”是什么?程序员
尽管咱们不必定要像尹天仇那么的认真对待本身的事业,但,一些基本的修养,做为一名新时代的码农,总应该是要具有的吧。不过真要说修养,方面仍是挺多的,技术自我提示自没必要说。但我并不打算从这个你们都以为理所固然的技术方面入手,而是谈谈,可读性代码,这个容易被你们忽视的基本素养。编程
一、听从所在团队的代码规范。框架
一个高效、成熟的团队,一定有一个属于本身的代码规范,这个规范是团队的宝贵的财富,它是整个团队从各类坑中爬起来后积累的经验教训。什么是规范,它是人们从无数经验中总结出来的规则,标准。而代码规范,指导团队成员如何以最短的时间写成最高效,可读性强的代码。试想,若是成员不听从规范,你用驼峰命名,他用下划线,这对程序的可读,将形成多大的影响。我想,应该没有一我的愿意去阅读一段,各类变量命名形式都能见获得,private, public 方法随意排序,甚至常量类都散落在各个角落的代码吧。学习
代码,一个做用是让机器阅读,另外一个重要的做用是让人阅读!!!编码
二、听从行业内通用的规范spa
在团队的代码规范未涉及到的,那请按照行业内的规范来编写代码。规范的一个好处是,能够明显减小学习和交流成本。在java中,当咱们看到全大写的变量名时,咱们就知道这是常量,而不须要去看注释,不须要去看代码逻辑。为何这么迅速,由于行业里你们都习惯把常量用大写命名。但假如你用其余命名方式命名常量,好比team_nums命名常量,不只不能让人迅速知道这是个常量,并且可能让人误会这是个变量,增长了团队成员学习和沟通成本,甚至可能误导他们。就见过一位仁兄,明明用的是工厂模式,恰恰按模版模式的命名方式来命名,问他,他说他知道这是工厂模式,但他以为,更应该叫模版模式。。。个人天,,你这么任性,之后还能作朋友么?代码规范
举个例子,咱们须要根据支付类型,来生产多个支付产品,因而,咱们写了个工厂类,命名为FactoryPay。当其余人看到一个类叫FactoryPay,他们会猜想,这应该是个工厂类,负责生产各类支付产品的工厂,而后按照这个猜想去阅读代码,就能比较快速的理解整个类的做用。可是,假如我取名PowerPay,别人还不知道是啥,看了半天,才明白,这是个工厂的做用。这就明显增长了他人的学习成本和维护代码的成本。
code
无论你是新手仍是老鸟,务必了解施行行业规范,切勿为了标新立异而违反规范。这么低端的装逼,就不必采用了,要装也写个高端的框架来提高逼格呗。排序
三、变量、方法命名要能表达变量做用
在程序员这个圈子好久了,就发现,程序员这货,都喜欢这套,“这个接口干吗用的,有文档么”,“本身看代码去”。不少时候都是一脸黑。
尽管程序员阅读别人代码技术都是一流,无论你是有没有注释,无论你是怎么循环嵌套,也无论你是怎么命名,他们都能耐心的,把代码分析个因此然来。但,对于程序员这个视时间宝贵如生命,分分钟都能创造几百万价值的群体来讲,您行行好,给咱们省点时间吧,把变量是干啥用的,说清楚呗,没准节省的这几分钟,多赚个几万,还能请你们出去嗨呢。
往往看到部门的某大神,用一个神通常的变量名“flag”,我就有吐血的冲动,他还这个flag一直雪藏,不用,只是传递到第n个方法才使用,顿时心力交瘁,个人天,这个flag都是是干吗用的啊,后来才明白,是isPay的意思,用来标识用户是否支付成功了。当时一口老血吐屏幕上,内心狂吐槽,老兄,你命名个isPay会死么,个人脑细胞这么不值钱么。到后来看到,去魔法数字,用int NUM_7 = 7,而不是MAX_MEMBERS来表示最大成员、用x y z来命名变量名,各类只有做者,或者做者后来都忘了的独特命名方式,都见怪不怪了。更有甚者,一个变量命名为passed,做用竟然是“未经过”的意思,当时就石化了,做者还真是用心良苦,这都要考我细心不细心。
一个好的变量名,能帮助阅读者了解变量的做用,也辅助了对整段代码的理解。
四、不要show英语,乡下的孩子伤不起唉
LZ所在的团队,英语一直都是团队的硬伤,但老是能看到,某位仁兄,加上大把大把的英文注释,有些变量名也取些高大上的复杂的英语单词。敢问,你这么高的逼格,之后咱们怎么和你玩啊。(那位仁兄其实就是LZ,年轻时唉,罪过罪过)
代码是用来沟通的,传递做者意图的,都看不懂,怎么沟通交流。建议英语好的童鞋,英语能力能够放到阅读英文书籍中展现,在代码中,若是团队英语能力很弱,避免使用英文,变量命名也尽可能按照团队英语水平来命名
五、添加必要的注释
正如上面LZ说的,常常遭遇“你仔细看看代码,就知道干吗用的”这样的神回复。尽管阅读代码是每一个程序员的强项,但必要的注释,好比逻辑比较复杂的地方,添加必要的注释,对提高团队成员阅读熟悉代码的效率是有很大帮助的。试想,一个类,几百行,没有一行注释,对于阅读者来讲,阅读它将是一个多么恐怖的事。
六、注释保持简洁,避免没有必要的注释
即看过一行注释都没有的代码,也看过注释比代码还要多的程序。一个是让人生不如死,一个是让人痛不欲生。(唉,有时不只感叹,在程序员界混,真的是难)。
LZ就常常看过,一大段注释,啰嗦了半天,要不就是没表达清楚重点,要不就是只为说明它是个循环的做用!!!譬如i++这样的代码,有必要加个“每一个计数增长1”这样的注释么,这彻底是把读者定位为非程序员啊,或者就是严重鄙视读者的编程水平。
注释是帮助阅读的人更好的理解程序的逻辑,只是辅助,若是不重视经过命名等方式来传递代码的做用,而是依赖于注释,这就是本末倒置了。并且,冗长啰嗦的注释,这究竟是帮助人理解,仍是阻碍人理解啊,是读程序仍是读小说啊。
七、拥有本身的编码规范
规范是为了让团队更快的理解、熟悉代码的,同理,拥有本身的一套规范,就能帮助其余人更快的理解咱们所写的功能,减小学习和沟通成本。
八、代码清晰简洁的表达出做者的意思
在咱们每次写完一段代码时,必定要问问本身,代码是否表达清楚了个人意思,是否须要添加些注释,名字取得是否恰当了,别人在阅读时是否吃力。。往往看到别人一团糟的费解的代码,就时刻提醒本身,必定要把代码写好咯,我也确实是这么作的,一遍又一编的检查,看变量名、方法名是否代表了它的用途,是否有些没必要要的、只是为了提高逼格的代码,别人是否能在短期内看懂。全部的这些,只是为了写出一段更优美的代码。
九、坚持并捍卫上面的准则
常常能听到,有些公司是代码行数来定义绩效的,但做为一个有操守,并秉承基本自我修养的程序员,咱们毫不能为了各类诱惑或者胁迫,甚至是本身的惰性、个性,而放弃写出简洁清晰,可读的代码。
以上的几点,并非严格的意见或者建议,只是提醒广大程序员同胞们,在痴心与高端的技术时,千万不要忘了,代码不只机器要阅读,人也须要阅读。就算你写出再复杂的代码,但它让人彻底没法阅读,这有什么用呢。这就如同,你很牛逼很牛逼,但别人听不懂你说的话,还不是没用。若是你真的写出了可读性强的代码,但你也不该该鸣鸣得意,我以为,写出一段优美,健壮,可读性高的代码,是一个程序员最基本的自我修养。若是这个追求都没有,那和咸鱼有啥区别呢。虽然常被外人看来邋里邋遢,不善交流,但咱们的的代码优美,每段代码都清晰简洁的表达了心中的想法,这不也很好么。代码做为程序员间交流沟通的媒介,必定要保持它的高效沟通的属性,切不要为了本身的个性,而牺牲它的可读性。在此,建议你们业余时间阅读些好比《clean code》、《how to be a better programmer》等相关书籍