关于代码质量的一些思考

关于代码质量的一些思考

今天刚好看到同事写一段代码,跟同事聊到一个代码风格的问题,讨论了一会,也没得出什么结果。回来想了想,之所以大家观点不一样,其实是一开始代码追求的目的就不一样。

1. 可读性

我是一直认为代码的可读性是最重要的目标。太多的书都讲到一个观点:“代码是写给人阅读的,只不过刚好能被计算机执行”。

大部分做自己产品的团队,一个项目的维护时间可能是开发时间的5倍以上,而维护的常见内容都是一些小功能以及已有bug的修复。可读性带来的好处就是,非常容易弄清一段功能逻辑,从而定位问题。遇到团队人员变动,新人也能很快的熟悉。我在公司换过很多组,也接手过很多的项目(大多数的可读性并不好),就这一点来说,真是切肤之痛。

什么样的代码,算是可读性好?我跟别人提过一个标准:“你写的代码,过了几个月、半年、一年,跟你说道一个功能,即使你不记得这个功能怎么做,你也能说清楚这个功能写在哪个地方”。这个标准我自己认为还是很有效的。

那用什么方法可以增加可读性呢?合理的拆分和抽象会增加可读性。另外,我其实一直崇尚“用最常用的方法写程序,直到它发展到你已经理解困难的时候,再去重构”。

2. 代码美学与合理性

经历过跟很多人的合作,我发现,很多非常优秀的开发者,会从直觉上把一个代码片段“是否优美”作为第一考虑的目标。他们会追求一些高级编程技巧的合理运用,或者开发一些公共组件,来达到行数足够少,或是表达足够清晰的目标。这个好像教材里也不曾提到的,我把它叫做“合理的代码美学”。

对于Java代码来说,有人就喜欢把一些常见功能,用自定义注解,然后用AOP来完成注解的解释。例如,一个功能需要随时可以打开或关闭,我可以通过一个注解来完成它而不是在业务处理中写一些if-else-check。

@NewFeatureEnabled
public void doSomething(){
}

实际上,完成一个“优美的”小功能,也就是用自己心中认为最好的方法去完成一件事,这样的满足感,也是让人持续编程的动力。严格的说,这样的代码有没有给代码质量带来提升呢?肯定有。第一很多时候这样的代码会经过更多的考虑,必然有更高的质量;第二很多更好的开发技巧,都是来自这些“不一样”的追求。

但是我认为,软件开发与艺术最大的不同是,它是一个多人合作劳动,一个人觉得合理的,其他人未必会感同身受,甚至会恰恰相反。这样的代码是蛋糕上华丽的三层奶油,有时会给人眼前一亮的感觉,但是也可能会让人找不到蛋糕本身。所以我的建议是:“如果你要用一个新技巧,最好积极宣传,和团队达成共识”。

比如这个@NewFeatureEnabled的功能,我会想:“如果别人接手这个项目,他是不是知道NewFeatureEnabled是什么意思?即使知道,他怎么知道这个功能的开关,是由其他地方一个AOP来完成的呢?”但是如果大家都接受这个方式,知道AOP是在哪里配置,如何工作的,那么也就是一个还不错的尝试了。

3. 可复用性

追求复用性是开发者的一个本能。大家都希望少写代码,最好要用的时候,一切都准备好了。我见过太多的代码为了复用而设计,但是基本上所有以复用为第一目标的代码,都没有什么好质量。不是说可复用性不重要,而是它容易让人走上歪路。

比较好的复用方式,应该是零件式的复用,每一块都有各自的规范和存在,但是这样的复用是一个严肃的过程,往往也达不到最大化的“代码复用”。为了复用的抽象,常见的就是把一段公用的代码块独立出来成为函数或者类,而这部分的逻辑甚至都是无法独立存在,也单独无法被人理解的。这种拼接式的复用,类似于为了表示一只猫和一只狗,把猫的身体和狗的身体复用成一块,然后写一堆判断代码来告诉别人什么时候这个身体是猫,什么时候这个身体是狗,最后再跟各自的脑袋组合起来。当然了,没有人知道这个“既是猫又是狗的身体”是什么。如果你想知道猫长什么样,估计得先给它做个缝合手术才行。

如果一个项目以这样的思路开发久了,你会发现代码逻辑散落在各处,各种业务场景互相交织,任何改动都会牵一发动全身。

如果要为可读性排个名的话,我认为大概是:

毫无头绪的抽象<只为复用的抽象<不做抽象<简单的抽象<局部优美的代码<整体优美的代码<清晰的层次结构并抽象<整体优美并且被大家接受的代码

最后一个层级,这样的代码实际上已经是更高的生产力了,就像Spring之于满地new对象就是个进步。可能代码进化到最后,真的就是跟自然语言那么简单,到时候我们就需要研究怎么在代码里写诗了!

时间: 2024-10-10 02:16:50

关于代码质量的一些思考的相关文章

【转载】三年0故障总结,提升代码质量的秘诀

该文章来自于阿里巴巴技术协会(ATA)精选文章. 个人经历 对我代码质量影响最大的是在一家外资企业,在这家公司我觉得有以下几个方面做的很不错. 团队编码风格统一 统一到什么程度? 不看代码作者,你很难区分代码是谁写的(在目前公司一些团队也能达到这个标准). 个人观点: 这样做有什么好处?团队中每个人阅读代码都很容易,减少很多沟通,维护成本( 代码阅读的次数远远大于变更的次数),并且心情非常愉悦.有人肯定觉得愉悦有点夸张,举个栗子: 有一些代码,如果不是由于与工作内容有关联,你是否有种这辈子都不情

如何衡量代码质量?

在日常项目研发种,总是在讨论如何控制和衡量代码质量,项目做了一个又一个,今天静下心来做思考并做下总结,希望以后也能在项目质量管控中进一步去规范和提升自己. 个人观点: 软件质量=外部质量+内部质量 主要总结为两个方面: 1.外部质量:从用户.使用者角度去衡量: 2.内部质量:从员工.开发者角度去衡量: 一.衡量外部质量 1.正确性 2.易用性 3.高效率 4.适应性 5.精确性 6.完整性 二.衡量内部质量 1.可维护性 2.灵活性 3.可移植性 4.可读性 5.可测试性 如果以这两方面严格要求

团队代码中Bug太多怎么办?怎样稳步提高团队的代码质量

最近负责的Android APP项目,由于团队成员变动.界面改版导致代码大幅修改等原因,产品发布后屡屡出现BUG导致的程序崩溃. 经过对异常统计和代码走读,BUG主要集中在空指针引起的NullPointerException和RuntimeException异常,这也是Android项目中最容易导致崩溃的根源. 导致这些BUG的原因主要是: 1.对项目架构不熟悉,缺乏整体思考: 2.写代码逻辑不周密,思考不全面: 3.对代码的BUG和程序的稳定性重视不足: 4.项目较为复杂,多界面跳转.数据结构

(转)提高代码质量---one

1. 摘要 这是烂代码系列的第二篇,在文章中我会跟大家讨论一下如何尽可能高效和客观的评价代码的优劣. 在发布了关于烂代码的那些事(上)之后,发现这篇文章竟然意外的很受欢迎,很多人也描(tu)述(cao)了各自代码中这样或者那样的问题. 最近部门在组织bootcamp,正好我负责培训代码质量部分,在培训课程中让大家花了不少时间去讨论.改进.完善自己的代码.虽然刚毕业的同 学对于代码质量都很用心,但最终呈现出来的质量仍然没能达到“十分优秀”的程度. 究其原因,主要是不了解好的代码“应该”是什么样的.

如何保障Go语言基础代码质量?

为什么要谈这个topic? 实践中,质量保障体系的建设,主要针对两个目标: 一是不断提高目标业务测试覆盖率,保障面向客户的产品质量:二就是尽可能的提高人效,增强迭代效率.而构建全链路质量卡点就是整个体系建设的核心手段.笔者用下图来描述这整个链路: 可以看到,虽然保障业务迭代的方向性正确排在最前面,但在具体操作上,这一步需要的是强化流程规范和构建企业文化,同时对各负责人技能培训,可以说多数是软技能.而保障基础代码质量环节发力于自动化建设链路之始,是可以通过技术手段来消灭潜在的质量问题,所以构建好的

前端代码质量-圈复杂度原理和实践

写程序时时刻记着,这个将来要维护你写的程序的人是一个有严重倾向,并且知道你住在哪里的精神变态者. 导读你们是否也有过下面的想法? 重构一个项目还不如新开发一个项目...这代码是谁写的,我真想...你们的项目中是否也存在下面的问题? 单个项目也越来越庞大,团队成员代码风格不一致,无法对整体的代码质量做全面的掌控没有一个准确的标准去衡量代码结构复杂的程度,无法量化一个项目的代码质量重构代码后无法立即量化重构后代码质量是否提升针对上面的问题,本文的主角 圈复杂度 重磅登场,本文将从圈复杂度原理出发,介

《设计模式之美》 &lt;02&gt;评判代码质量好坏的维度

如何评价代码质量的高低? 实际上,咱们平时嘴中常说的“好”和“烂”,是对代码质量的一种描述.“好”笼统地表示代码质量高,“烂”笼统地表示代码质量低.对于代码质量的描述,除了“好”“烂”这样比较简单粗暴的描述方式之外,我们也经常会听到很多其他的描述方式.这些描述方法语义更丰富.更专业.更细化.我搜集整理了一下,罗列在了下面.这些几乎涵盖我们所能听到的描述代码质量的所有常用词汇,你可以看一看. 灵活性(flexibility).可扩展性(extensibility).可维护性(maintainabi

可能外包的代码质量更好。

在程序员的鄙视链里,大概外包是最最底端的一环.如果你找一个程序员咨询做出一个IT项目的方法,哪怕他毫无办法,他也会加一句说,千万别找外包. 他的理由大概是外包的代码质量很差. 在以前,可能真的是这样.我也见识过拿DedeCMS强撸电商和OpenCart强撸门户的代码--醉得我不要不要的. 感谢移动开发时代的到来,毕竟是全新的平台,之前的随便拿套开源的PHP代码强行二次开发的时代基本上过去了.在我创业开展外包业务这一年来,还没有见到拿套"熟悉的代码"强撸新业务的高人,同行们都兢兢业业地根

代码质量优先——《编写高质量代码:改善c程序代码的125个建议》

高质量的代码不但可以促进团队合作.减少bug处理.降低维护成本,对程序员自身的成长也是至关重要的.很难想象一个参考<如何编写无法维护的代码>写代码的程序员技术成长的上限有多么低.为了写出高质量的代码,我们需要听取过来人的改善代码质量的经验,<编写高质量代码:改善c程序代码的125个建议>就是一本能让人写出高质量代码的好书. 本书的第三章<程序控制语句应该保持简洁高效>首先用简练的语言介绍了流程控制结构的概念,然后提供了对if.else.for.do-while.swit