转
程序员如何提升自己的代码质量?
2015年01月21日 22:42:07 阅读数:6128更多
个人分类: 编程
本文转载至:http://www.zhoudev.com/?p=19
文章只针对有一定语言基础的人。
写本文的原因,其实很简单:团队的代码质量实在是太差了,而我又是一个在代码方面有很强洁癖的人,所以经常免不了大动肝火的去喷人。而喷人是很不好的,所以就有了这篇文章。
团队的代码质量差,主要表现在以下几点:
可读性:函数命名随意,实现逻辑混乱,代码格式不统一。。。
可靠性:程序运行很难稳定,bug百出。。。
维护性:代码逻辑没有层次,混成一团,很难维护改进
移植性、重用性:许多人写的代码,只能各自使用,很少有能共享的功能性代码
高效性:很少从算法、资源占用、执行效率等角度去考虑,经常导致服务器负载过重
那么我们改进时,就可以从以上几点出发。
总结了一下自己以前的经验,主要有以下几点:
提高自己的程序语言基础。对于许多新手程序员来说,只是简单的学会了该语言,知道一些简单的用法。但是实际编程的时候,许多写法、用法不标准。举一个很常见的例子:许多人刚刚学c++,java等面向对象编程的语言时,虽然知道了类、知道了类一般都有“多态”的特性,但是他们还是经常会用“类型判断”去判断某个对象是属于哪个类的实例、然后强制转换、再调用方法。却完全忽略可以用多态来避免这种丑陋的实现!
熟悉语言规范。如果不知道自己所学的语言还有规范,那么建议你现在去查找。说个简单的规范,Java的类名要取得有意义、首字母要大写。再比如:一个函数只实现一个功能。再比如一个复杂的:连续的if else条件判断最好不要超过10个。
培养自己严谨的逻辑思维能力。我们写程序,至少都会在脑海里走一遍程序的流程。如果流程走通最后却出现bug,那么就是流程的某个细节我们没有考虑到!有的时候,我们总是自认为自己已经考虑的非常全面了,其实不然。同样举一个例子:对一个集合,写个for循环按照一定的条件删除里面的元素。其实这里面隐藏了一个“集合在动态变化”的陷阱。比如说,将第一个元素删除了,如果集合的数据结构是将第二个元素移动到第一个元素上,那么,第二个元素就遍历不到了。所以,有时候,我们看似很简单,觉得逻辑非常正确的代码,可能就潜伏着陷阱。
熟悉所用语言的API。学一门语言,其实不只是学语法,学语义。更重要的是学基本的API类库。因为你实际编程的时候,自己所写的代码其实很少,大部分都是用的别人的API,将许多API的功能穿起来,才是自己实现的功能。用好的API,能增加代码质量、提高代码可读性、减少代码bug、减少工作量。就比如说堆栈这个数据结构,程序员基本都知道,但是大部分人可能都不能实现一个正确的堆栈API。
熟悉了解一些数据结构、算法。平常写程序时,或多或少都要接触一些常用的数据结构,比如说链表、map等,了解它们的原理对于那些没学过数据结构的人来说很重要。很多时候,一个简单的功能被实现的超级复杂的原因就是没有使用简单清晰的数据结构。
掌握一些编程思想、设计模式,这会让你的代码更加具有结构性、条理更加清晰!比如说,面向接口的编程思想,能让你的代码易于修改、易于扩展。如果更进一步,站在架构的角度去考虑。
多看高手代码,读一些优秀的开源代码,看一些经典的书籍。比如说《Effective C++》、《Effective Java》、lucene的源码。这些会让你提升巨大,只有了解到高手眼中的世界,才能有成为高手的可能!
代码重构。多回顾之前写的代码,进行一个系统性的整理。因为我们起初开发,不是面面都能想到,许多新东西是不可避免的,这就意味着可能会导致一些逻辑混乱。在开发完成后,多回顾回顾,寻找能改进之处,这也是一种进步。
即时缺少高屋建瓴的能力,我们也应该多从全局的角度去考虑整个工程的代码的层次、模块、架构等问题点。可以尝试着进行功能点拆分、接口交互设计等工作。
为自己的代码添加测试用例。可能因为懒惰,许多程序员基本都不会为自己的代码添加测试用例,这其实是一个不好的习惯。即时是有测试人员的团队,添加测试用例对你的好处也是显而易见的。
至于从团队的角度,可以考虑建立以下几点:完整的规范、执行流程、review机制和辅助工具。由于本篇文章主要针对的是个人,就不展开。工具方面,可以考虑开源的ReviewBoard。
个人的代码质量提上来,团队的水平才能提上来,公司的效率才能提升。其实最主要的是,个人的层次、境界才能提升!