为什么我们要写高质量的代码

为什么我们要写高质量的代码

  • 1. 为什么要写高质量的代码?
    • 1.1 熟悉的场景
    • 1.2 低质量代码的代价
  • 2. 为什么我们会写低质量的代码?
    • 2.1 追求速度 > 追求高质量
    • 2.2 开发人员不总是以读者为中心
    • 2.3 追求及时奖励的满足感 > 延时满足感
    • 2.4 代码重构的成本 > 收益
    • 2.5 知识点积累不足
  • 3. 什么是高质量的代码?
  • 4. 参考文献

当你觉得别人的代码逻辑糅杂,难以理解和维护的时候,别人在看你的代码的时候可能也是一样的感受
当你的代码以一种奇怪的方式在正常运行的时候,那么就不要去随意动它了,可能你改了一个点,会导致全局的崩盘

1. 为什么要写高质量的代码?

1.1 熟悉的场景

回想一下你是否经历这样几种场景

  1. 一年前写的代码,一年后自己去看的时候,哪哪感觉都别扭,各种想吐槽。
  2. 某一个你负责完成的项目,追求速度,忽略设计,很快开发完成,过了一段时间,其他人接手项目进行迭代开发的时候,来询问代码的问题, 你看了代码之后一脸懵,这个方法什么意思,这个模块作用是什么,然后花费大量的时候去重新梳理。
  3. 你是否遇到过只需要更改一行代码,结果却涉及到了数十上百个的模块。

1.2 低质量代码的代价

  1. 延误开发进度
  2. 开发人员在维护低质量的混乱代码的时候,需要对混乱的代码了然于心,才能继续开发,这会带来生产力的下降,但是矛盾的是,开发人员又背负提升生产力的压力,只能在混乱的前提下制造更大的混乱,随着时间累积,会造成团队生产力的持续下降,趋向于 0 。
    为什么我们要写高质量的代码_第1张图片

2. 为什么我们会写低质量的代码?

知道了很多道理,也学习了很多 code 技巧,我们却依然不能或者不愿意去写高质量代码,这里面的深层次原因是什么?

2.1 追求速度 > 追求高质量

编码对于程序员来说只是一份工作,你需要在 DeadLine 之前完成某个项目或者功能的开发与交付,对于开发人员,如何快速实现功能完成 OKR 是最为关注的问题,一些细节和整体架构上则显得没那么重要,最多是在后期的时候进行跌倒开发与重构,但很多时候,这种重构显得遥遥无期,尤其是代码结构越来越复杂后,重构的成本过大,收益显得过少,也就这么听之任之了,不出 bug 即可,虽然这样会对后续接手的人来说很难受。
按照这个流程继续下去,最后显而易见的结果是代码越来越不好维护,成为一个代码屎山,在其维护代价过于高昂的时候,丢弃就成为一种必须的选择

2.2 开发人员不总是以读者为中心

开发人员在开发的时候更多的是考虑功能的实现,而没有考虑后续维护的成本,这导致的结果是过了一段时间后同一个开发人员想加一些新的特性的时候,可能自己都不能理解之前写的代码了,这种情况很常见(笔者自己早期吃过很多苦)。
如果换成了其他的开发人员,那结果会更加难受

2.3 追求及时奖励的满足感 > 延时满足感

在早期的开发中,快速完成功能实现是有一种即时满足感,而你考虑多种方案,类的设计、抽象等等在早期并不能很快体现出它的价值,大多数时候会体现在后续的维护上,而后期维护的人可能都已经不是你了,别人也不一定会接受你的编码风格和设计。

2.4 代码重构的成本 > 收益

在代码梳理之后,时间已过去了不少,这个时候你可能会面临两个选择,是对之前的代码进行重构,修改函数类等的命名,增加注释等等,然后继续开发,还是在不改动的基础上,增加自己的内容。考核的压力下,重构引入新 bug 的风险、领导的不满意等等,导致收益大于成本,很多时候我们选择了后者。

2.5 知识点积累不足

对于设计模式等等理解和使用的盲区也是一个比较大的原因

3. 什么是高质量的代码?

有多少程序员,就有多少定义

我喜欢优雅和高效的代码。代码逻辑应当直截了当,叫缺陷难以隐藏。尽量减少依赖关系,使之便于维护。依据某种分层战略完善错误处理代码,性能调至最优,省得引诱别人做没规矩的优化,搞出一堆混乱来。整洁的代码只做好一件事。
--Bjarne Stroustrup,C++语言发明者,C++ Programming Language(中译版《C++程序设计语言》)一书作者。

整洁的代码简单直接。整洁的代码如同优美的散文。整洁的代码从不隐藏设计者的意图,充满了干净利落的抽象和直截了当的控制语句。
—Grady Booch,Object Oriented Analysis and Design with Applications(中译版《面向对象分析与设计》)一书作者。

整洁的代码应该由作者之外的开发者阅读和增补,它应当有单元测试和验收测试,它应该使用有意义的命名,它只提供一种而非多种做一件事的途径,它只有尽量少的依赖关系,而且要明确地定义和提供清晰、尽量少的API。代码应通过其字面表达含义,因为不同的语言导致并非所有必需信息均可通过代码自身清晰表达。
–老大”Dave Thomas,OTI公司创始人,Eclipse战略教父。

整洁的代码总是看起来很想某位特别在意的人写的,几乎没有改进的余地。
–Michael Feathers,Working Effectively with Legacy Code(中译版《修改代码的艺术》)一书作者。

减少重复代码,提高表达力,提早构建简单抽象。这就是我写整洁代码的方法
–Ron Jeffries,Extreme Programming Installed(中译版《极限编程实施》)以及Extreme Programming Adventures in C#(中译版《C#极限编程探险》)作者。

如果每个例程都让你感到深合己意,那就是整洁代码。如果代码让编程语言看起来像是专为解决那个问题而存在,就可以称之为漂亮的代码。
–Ward Cunningham,Wiki发明者,eXtreme Programming(极限编程)的创始人之一,Smalltalk语言和面向对象的思想领袖。所有在意代码者的教父。

综合上述观点的重要词
1、整洁的代码只做一件事,明确,简单,有力
2、代码可读性强
3、代码块行数尽可能少
4、对自己的代码在意
5、不要写重复的代码
6、让营地比你来时更加干净(在你进入和出去后,代码比之前更加整洁了,那就是高质量的代码)

4. 参考文献

  1. https://zhuanlan.zhihu.com/p/74796929
  2. https://www.infoq.cn/article/cwgicy0u099xhstbjtsl
  3. 《代码整洁之道》

你可能感兴趣的:(高质量代码,代码规范,java)