代码质量——摘自刘未鹏博客
来源:互联网 发布:winform界面设计软件 编辑:程序博客网 时间:2024/05/18 03:38
在各种长期和短期压力之下写代码,当然代码质量是重中之重,尤其是对于C++代码,否则各种积累的技术债会越压越重。对于创新项目而言,代码基处于不停的演化当中,一开始的时候什么都不是,就是一个最简单的骨架,然后逐渐出现一点prototype的样子,随着不断的加进新的feature,再不断重构,抽取公共模块,形成concept和abstraction,isolate接口,拆分模块,最终prototype演变成product。关于代码质量的书很多,有一些写得很好,例如《The Art of Readable Code》,《Clean Code》或者《Implementation Patterns》。这里没有必要去重复这些书已经讲得非常好的技术,只说说我认为最重要的一些高层的指导性原则:
- 持续重构:避免代码质量无限滑坡的办法就是持续重构。持续重构是The Boy Scout Rule的一个推论。离开一段代码的时候永远保持它比上次看到的时候更干净。关于重构的书够多的了,细节的这里就不说了,值得注意的是,虽然重构有一些通用的手法,但具体怎么重构很多时候是一个领域相关的问题,取决于你在写什么应用,有些时候,重构就是重设计。例如我们的代码基当中曾经有一个tricky的设计,因为相当tricky,导致在后来的一次代码改动中产生了一个很隐蔽的regression,这使得我们重新思考这个设计的实现,并最终决定换成另一个(很遗憾仍然还是tricky的)实现,后者虽然仍然tricky(总会有不得已必须tricky的地方),但是却有一个好处:即便以后代码改动的过程中又涉及到了这块代码并且又导致了regression,那么至少所导致的regression将不再会是隐蔽的,而是会很明显。
- KISS:KISS是个被说烂了的原则,不过由于”Simple”这个词的定义很主观,所以KISS并不是一个很具有实践指导意义的原则。我认为下面两个原则要远远有用得多: 1) YAGNI:You Ain’t Gonna Need It。不做不必要的实现,例如不做不必要的泛化,你的目的是写应用,不是写通用库。尤其是在C++里面,要想写通用库往往会触及到这门语言最黑暗的部分,是个时间黑洞,而且由于语言的不完善往往会导致不完备的实现,出现使用上的陷阱。2) 代码不应该是没有明显的bug,而应该是明显没有bug:这是一条很具有指导意义的原则,你的代码是否一眼看上去就明白什么意思,就确定没有bug?例如Haskell著名的quicksort就属于明显没有bug。为了达到这个目的,你的代码需要满足很多要求:良好的命名(传达意图),良好的抽象,良好的结构,简单的实现,等等。最后,KISS原则不仅适用于实现层面,在设计上KISS则更加重要,因为设计是决策的第一环,一个设计可能需要三四百行代码,而另一个设计可能只需要三四十行代码,我们就曾遇到过这样的情况。一个糟糕的设计不仅制造大量的代码和bug(代码当然是越少越好,代码越少bug就越少),成为后期维护的负担,侵入式的设计还会增加模块间的粘合度,导致被这个设计拖累的代码像滚雪球一样越来越多,所以code review之前更重要的还是要做design review,前面决策做错了后面会越错越离谱。
- 解耦原则:这个就不多说了,都说烂了。不过具体怎么解耦很多时候还是个领域相关的问题。虽然有些通用范式可循。
- Best Practice Principle:对于C++开发来说尤其重要,因为在C++里面,同一件事情往往有很多不同的(但同样都有缺陷的)实现,而实现的成本往往还不低,所以C++社群多年以来一直在积淀所谓的Best Practices,其中的一个子集就是Idioms(惯用法),由于C++的学习曲线较为陡峭,闷头写一堆(有缺陷)的实现的成本很高,所以在一头扎进去之前先大概了解有哪些Idioms以及各自适用的场景就变得很有必要。站在别人的肩膀上好过自己掉坑里。
- 代码质量——摘自刘未鹏博客
- 真正的程序员—摘自《高质量程序设计指南——C++/C语言》
- 代码的坏味道——摘自《重构》
- FindBugs —— 代码质量工具
- 编写高质量代码——笔记
- 剑指offer——高质量代码
- Java高质量代码之 — 字符串
- 摘自<编写高质量代码:改善Java程序的151个建议>
- 代码质量优先——《编写高质量代码:改善c程序代码的125个建议》
- 职业导向训练(必修课)——摘自米老师的博客
- 应届毕业生的Android高薪之路——摘自学员的博客
- 一个有趣的Java编译问题 ——摘自张孝祥老师的博客
- 今天学习的——摘自别人博客的,学习借鉴
- 摘自东方博客
- 代码审查——提高代码质量的终极武器
- 把质量控制工作往前推进(2)——使用Sonarqube分析代码质量
- 摘自《编写高质量代码:改善Java程序的151个建议》第十一章 开源世界
- 为Java,我们要做点什么? ——提高代码质量
- 如何使用google code(转)
- listview实现单选
- 想在facebook抱怨老板又怕被炒鱿鱼?看这里!
- 不能将参数1从“const char []”转换为“LPCTSTR
- 互斥锁pthread_mutex_t的使用(转载)
- 代码质量——摘自刘未鹏博客
- AR
- 如何设置TOMCAT的JVM虚拟机内存大小
- jQuery创建自己的插件(自定义插件)的方法
- 用PB做一个通用右键菜单
- 月总结
- 用cookie防止重复刷新计数
- Dictionary使用并获取键值
- 第4届华为编程大赛决赛试题解答(棋盘覆盖)