如何才能写出“高质量”的代码?
谢谢邀请,
作为一个已经写了十几年代码的程序员,做好软件不是全部围绕代码而展开,换句话讲一个程序员的程序员优秀不仅仅体现在代码上,更要有内在的编程思想说的层次再高深点就是框架思想。很多初学者都会存在很多疑问,觉得能够写代码就万事大吉了,在能写代码之前会有很多疑问
数学不好能学好编程不?
英语不好能不能学好编程?
这些都是还没入门的疑问,真正入门之后发现这些都不是什么问题,真正决定程序员水平也不是简单的能写多少代码,真正项目实施过程写代码的时间占据不到百分三十,大部分时间是在设计和构思上,当然占据时间最多的是调试以及客户后续提出的需求上面,现在很多人还在纠结是不是要多学习几种编程语言,编程语言本质来讲就是一种工具,主要指导思想还是编程思想。
现实中如何才能写出高质量的代码?
1.良好编程基本功。再高的大厦也得需要强大的编程基础,不一定要掌握多少种编程语言关键要非常熟悉一种编程语言,里里外外都给吃透了,达到这种程度至于掌握几种编程语言就显得不是那么重要了,到了这种程度就可以触类旁通,切换一种新的编程语言也不会费多大事,有事没事就回头看看基础书,越是编程高手越是注重基本功的学习,很多做java的程序员,java编程思想这本书看了不下十几遍,而且还在继续,基础的学习什么时候值得回味。
2.专业知识的雄厚。编程语言只是工具,工具如何才能使用好,还是要看这工具是用来做什么的,比如安全领域可能使用C语言或者C++编程,如果安全专业知识掌握的非常扎实,工具使用起来再更加熟练,才能有高质量的代码出现,要把一个事情做到极致,各个细节点就要落实到位,缺一不可。
3.好的软件框架,软件框架是写出高质量代码的土壤,假如一个能力很强的人,进入一个乱糟糟的公司基本很难发挥出最大的潜能,所以生存土壤很重要,一个优秀的产品一定是代码各个模块有机配合在一起共同做出来的,一个模块的优秀代码优秀,整个产品出问题了意义也不是很大。
4.高质量的代码从来都不是一次性搞定的,都是经过多次的打磨修改出来的,玩过开源的人应该都明白,代码模块不停的升级优化折腾不停,不仅仅是功能的增加更重要的代码质量的提炼,所以想写出高质量代码需要敢对自己下手,对自己要狠一点才能有高质量的代码出来,细心的人可以观察下身边优秀的程序员,看看是不是都是这么做的。
做到以上四点,坚持下去写出来的代码质量不会差,当然还要懂得去阅读别人写的优秀代码,开始看的时候不一定能看得懂,不能大块的看懂就切块去看去学习,以前有个linux内核爱好者,整体看linux内核代码,有一天看到他十分开心的样子,问发生了什么事情,说看懂了linux内核里面的内存是如何管理的了,然后拉着我给我讲了半天,虽然没听懂但也坚持听到最后,毕竟代码能写的前提是能看懂,所以开源社区的代码如果能看懂就是一个非常大的进步,然后一步步的掌握起来,格局放大一定做出更大的事情来。
好的代码本身就是最好的说明文档——Steve McConnell
在w3cschool以往的回答中,曾经这样形容高质量的代码:
“好的代码,就像是小说家手中的短篇小说,逻辑清晰,简单明了,却又能触动心灵,而坏代码,就像是一辆外表富丽的老旧汽车,开不动不说,随时还有散架的危险。”
如何判断程序员写出来的代码的质量的高低是一个颇具争议的话题,每个人的理解可能都不一样,所以制定一个符合自己部门要求的规范,有了依据,写出来的代码才有可能成为好代码。
好代码的判断标准
可读性
就像开头引用中所说的,好的代码本身就是最好的说明文档。
代码几千行,所有业务逻辑全部揉在一起,除了你没人看得懂,周末想续写代码,结果发现连自己也要看半天,才能接着写下去,这样的代码,能是一个好代码吗?
判断:将代码拿给其他程序员看,在读代码期间,他向你提出的问题越少,说明这些代码的可读性也就越强。
要想让部门所有人写出的代码可读性强,就必须制定一个统一的开发风格,这样不管是老程序员还是新程序员,都能快速上手,可读性也会得到一定的保障。
可维护性
曾经看过一段代码,一个method几千行代码,没有人敢维护,修改一点点就会发生不可知的错误,代码又臭又长,除了重构,完全没有办法。这样的代码,就是一个差到不行的代码。
判断:一般有三点可以做个大概的判断,一是易读,二是可拓展,三是数据灵活,四是可追踪。
简洁性
很多程序员之所以喜欢写长代码,主要是写起来没什么障碍,也不用怎么思考,跟记流水账一样。还有就是学习的时候,养成了一些不良的编程习惯,亦或是习惯成自然,已经不知道自己所写的代码,是不是够简洁了。
判断:拿出以前写过的代码,读一下,看看是不是简洁了,如果是,至少说明你现在写的代码,比以前简洁了。
模块化
好的代码,都是模块化的。假设你的项目有三个不同的层,分别为内层、中层和外层。你的内容不应该从中层和外层那里导入任何东西。中层不应该从外层导入任何东西,这样做的好处是,你可以对代码的内层进行独立测试。
我认为高质量的代码有几个特性:
实现目标(需求)
这是评价代码的前提吧,这一点要是没达标,代码肯定是不合格的。
代码规范
好的代码一定有良好的代码规范,包括代码分层、各种命名、代码风格等等。这么说吧,就算是一个不懂代码的人,看到有良好代码规范的代码,也会觉得赏心悦目;而对于专业的人来说,良好的代码规范会提高代码的可读性。
代码复用
避免代码重复,最常见的问题就是方法不复用;代码重复率也是考核代码质量的一个重要标准。
健壮性和可扩展性
提高代码的容错能力,需要在编码过程中,尽可能提前考虑到所有的情况。
易于扩展:业务在变,我们的代码在变,如果一个业务流程写在一个方法里面,那么真的会三天一小改,五天一大改。
单元测试覆盖率
估计很多人写的代码都缺少单元测试用例,有些程序员也很排斥写单元测试用例。个人认为,单元测试用例可以在很大程度上避免:修改了一个BUG,又造成十个BUG的问题。(不要影响到正常代码的运行)
代码的学习过程,就是看代码-模仿着写代码-自己写代码,要想写出高质量的代码,不外乎就是:多看、多写、多思考。
多看
买几本经典的编程书籍,按照上面的例子敲一遍,再跟自己写的代码比较比较,看看是否有差距。如果初学者的话,不建议上来就看开源框架的源码,火候还没有到那个水平,理解起来比较困难。
多写
养成良好的编程习惯,可以学习一些大厂的代码规范;尽可能减少重复的代码,可以把可重用的代码,抽象出来;适当的进行重构,好的代码不是一次就写成的;合理使用工具,善于使用工具。
多思考
对比别人优秀的代码,想想人家写这段代码时候的思路是什么样的;看到别人的“烂”代码,也想想自己是否犯过这样的错误;代码编写过程中,多想想有没有其他的情况发生,以后万一要是需要扩展,现在的代码是不是需要留下什么“口子”方便以后扩展。
编程能力的提升,是一个长久的学习过程,希望大家都能写出漂亮的代码。