工作那么久,该如何提升代码质量

简介: 工作那么久,该如何提升代码质量

有这么一句名言“Talk is cheap,Show me the code."不管是新人还是老手,都特别想提高自己的代码质量,至少让别人看的舒服。以往的工作经历中并没有太重视个人编码的能力,包括正确性、美观性还有效率。工作几年的人还写出那么难看的代码,说出去会很丢人的,所以提升编码水平显得尤为迫切。


那么可以从哪些方面着手去提升自己的能力呢?


书籍推荐



《重构》


1.jpg


世界顶级、国宝级别的 Martin Fowler 的书籍,可以说是软件开发领域最经典的几本书之一。目前已经出了第二版。


这是一本值得反复阅读的书籍,配合工作上的实践进行学习。


《重构》一书已经有明确的定义,分名词和动词两种形式。

重构(名词) :对软件内部结构的一种调整,目的是在不改变软件可观察行为的前提下,提高其可理解性,降低其修改成本。 重构(动词) :使用一系列重构手法,在不改变软件可观察行为的前提下,调整其结构。

网页版学习链接:重构改善既有代码的设计


《Clean Code》


2.jpg


《Clean Code》是 Bob 大叔的一本经典著作,强烈建议小伙伴们一定要看看。

Bob 大叔将自己对整洁代码的理解浓缩在了这本书中,真可谓是对后生的一大馈赠。

网页版学习链接:Clean Code 学习记录


Bob 大叔视频版学习


《Head First 设计模式》


《大话设计模式》


3.jpg


4.jpg


设计模式用于承载复杂的业务逻辑,使写出的代码简洁、易扩展。 简单地说,你需要去了解业务中哪些是变化的,哪些是不变的。这些变化的东西就是复杂的业务逻辑,你需要思考如何用一种合适的设计模式去承载它,使得当它发生变化的时候,能具有很好的扩展性。这时候如果你学过设计模式,对每种设计模式的使用场景都谙熟于心,那你做起来会更加得心应手。


如果没时间阅读设计模式的这两本书籍,可以参考下述学习网址:设计模式学习

或者 Head First 设计模式学习记录


《Effective java 》


5.jpg6.jpg


《Effective Java》是 Java 领域的经典著作,其影响力不亚于《Java 编程思想》。

对于一个 Java 工程师而言,在新技术不断涌现和迭代的情况下,学习如何学习的能力以及如何快速学习的能力是成长的关键。学习的方法、思维和能力给一个人成长的助推是巨大的


网页版学习链接:Effective Java学习


其他



优秀源码推荐


因个人作为后台开发者,主要学习使用 Java 语言,所以此处推荐的也是 Java 相关的源码学习,不过大道至简,语言千千种,核心不会变。


虽然 Github 上有不少 star 数极高的项目,但是大部分项目功能性比较强,涉及到的技术点比较先进,为大家所推崇,这里就不列举这类项目。这里推荐的源码都是 Java 生态的框架源码。


JDK


为什么要看 JDK 源码?


一,JDK源码是其它所有源码的基础,看懂了JDK源码再看其它的源码会达到事半功倍的效果。


二,JDK源码中包含大量的数据结构知识,是学习数据结构很好的资料,比如,链表、队列、散列表、红黑树、跳表、桶、堆、双端队列等。


三、JDK源码中包含大量的设计模式,是学习设计模式很好的资料,比如,适配器模式、模板方法模式、装饰器模式、迭代器模式、代理模式、工厂模式、命令模式、状态模式等。


三,JDK源码中包含大量Java的高阶知识,比如弱引用、Unsafe、CAS、锁原理、伪共享等,不看源码是很难学会这些知识的。


JDK 源码阅读顺序


  1. java.lang 包下的基本包装类(Integer、Long、Double、Float 等),还有字符串相关类(String、StringBuffer、StringBuilder 等)、常用类(Object、Exception、Thread、ThreadLocal 等)。


  1. java.lang.ref 包下的引用类(WeakReference、SoftReference 等)


  1. java.lang.annotation 包下的注解的相关类


  1. java.lang.reflect 包下的反射的相关类


  1. java.util 包下为一些工具类,主要由各种容器和集合类(Map、Set、List 等)


  1. java.util.concurrent 为并发包,主要是原子类、锁以及并发工具类


  1. java.iojava.nio 可以结合着看


  1. java.time 主要包含时间相关的类,可以学习下 Java 8 新增的几个


  1. java.net 包下为网络通信相关的类,可以阅读下 SocketHTTPClient 相关代码


源码量那么大,不要妄想一口气都看完。最好符合你当前的目的,比如你想搞懂多线程,你就主要看 JUC,想搞懂IO 就多去看 NIO,想看常量池就去看 ClassFileParser。看模块的时候,要注意接口大于一切,或者说函数大于一切。先不要妄想搞懂所有细节,先找几个比较关键的函数,搞懂函数的作用(比如应该仔细分析一下函数名称和参数名称)然后再往下进行。再看 Java 类库的时候要多注意类是不是 abstract 的,是不是用的模板方法,多关注函数前的修饰词,这一般说明这个函数是给谁用的。多注意这些细节而不是傻傻的过一遍逻辑,能从里面学到不少关于设计的东西。还可以注意什么地方是为了之前的设计而委曲求全的做法,毕竟一个这么多年的类库,肯定不是什么地方都是完美的。


JDK 源码一定要看 Java 并发相关的源码, Doug Lea 的并发源码比较漂亮,一行行都是精华,非常值得阅读学习。


工具


看类库首推idea,多用Structure,多自动生成UML图。先搞清楚接口和类之间的关系,在去分析函数。


最后在学习源码的过程中,不要介意看别人的博客,不要介意手抄笔记。


spring-framework


Spring Framework 是一个开源的 Java/Java EE 全功能栈(full-stack)的应用程序框架,以 Apache 许可证形式发布,也有 .NET 平台上的移植版本。该框架基于 Expert One-on-One Java EE Design and DevelopmentISBN 0-7645-4385-7)一书中的代码,最初由 Rod Johnson 和 Juergen Hoeller 等开发。Spring Framework 提供了一个简易的开发方式,这种开发方式,将避免那些可能致使底层代码变得繁杂混乱的大量的属性文件和帮助类。


网络异常,图片无法展示
|


Spring 是一个开源的设计层面框架,它解决的是业务逻辑层和其他各层的松耦合问题,因此它将面向接口的编程思想贯穿整个系统应用。包括在此基础上衍生的 Spring MVC、 Spring Boot 、Spring Cloud 等,在现在企业中的应用越来越广泛。无论是设计思想,代码规范,还是设计模式,接口设计,类加载,都是非常优秀的源码。


个人学习心得如下:先去看视频,大概熟悉一下 Spring 的使用情况,然后再去学习源码,此处可以阅读《Spring源码深度解析》,除了看书之外,记得打开 IDEA 查看对应的源码,如果能调试看看具体调用逻辑那就更好了。


Google Guava


Google Guava 是 Google 公司内部 Java 开发工具库的开源版本。Google 内部的很多 Java 项目都在使用它。它提供了一些 JDK 没有提供的功能,以及对 JDK 已有功能的增强功能。其中就包括:集合(Collections)、缓存(Caching)、原生类型支持(Primitives Support)、并发库(Concurrency Libraries)、通用注解(Common Annotation)、字符串处理(Strings Processing)、数学计算(Math)、I/O、事件总线(EventBus)等等。


7.jpg


实践


通过上述两大途径的学习,我们必须要将吸收的东西加以实践,有输入就要有输出,不然输入也就毫无意义。


这里需要着重强调 Code Review 的好处,简单整理有如下三点好处:


1、互相学习,共同成长


无论身处什么团队,团队成员的技术能力、经验都是有差异的。


通过 Code Review,对于同样的功能实现,有经验的工程师可以给经验尚浅的工程师提供合理的优化建议。经验尚浅的工程师可以通过阅读优质代码,快速学习相关技术运用的最佳实践。如果大家技术实力相当,可能就是互相刷新思想了。


2、知识共享


进行 Code Review 不仅仅是为了讲述代码如何编写,还要介绍其背后涉及的业务知识,在此过程中,根据提交者的描述阅读代码的逻辑,看代码实现是否跟描述一致。

通过 Review,让团队成员不再局限于项目的某一块业务,避免项目只有一个人了解项目的尴尬情况。特殊情况下,也可以及时代替别人来维护相关代码,尤其是在没有相关业务功能说明文档的情况下。


3、统一编码风格,提升质量


代码质量大概分为以下层级:


可以正常运行——可以测试通过——容易阅读——容易维护。


Code Review 至少要让代码达到易阅读的级别。


要想做到易阅读,可不是光靠 Code Review 就够了,首先需要观察整个项目的风格,按照已有的规范编写相同风格的代码,当然每个人的风格不可能完全相同,但是要保证整体风格相似,这样维护起来不至于难受。


总结


如今写代码就像以前上学时写字一样,能写得好代码就相当于写了一手好字。如果你隔段时间回头看自己的字都不忍直视,那么可以通过临摹练字来提升自己,最终习得一手好字。


练字多了就会成为习惯,再往后写字就变成下意识的习惯。而写代码可没有那么简单,写之前需要用大脑思考,选用什么模式,如何设计,写完后要想着如何优化。

按照上文的学习方法,慢慢改善自己的编码习惯,最终达到下笔如有神的境界。



目录
相关文章
|
5月前
|
SQL 缓存 安全
codereview开发问题之CodeReview阶段性能问题如何解决
codereview开发问题之CodeReview阶段性能问题如何解决
|
5月前
|
测试技术
codereview开发问题之CodeReview关注代码的测试覆盖率问题如何解决
codereview开发问题之CodeReview关注代码的测试覆盖率问题如何解决
|
5月前
|
测试技术 数据库 开发者
开发与运维测试问题之高代码覆盖率意味着高代码质量如何解决
开发与运维测试问题之高代码覆盖率意味着高代码质量如何解决
|
SQL 缓存 NoSQL
写代码有这16个好习惯,可以减少80%非业务的bug
每一个好习惯都是一笔财富,本文整理了写代码的16个好习惯,每个都很经典,养成这些习惯,可以规避多数非业务的bug!希望对大家有帮助哈,谢谢阅读,加油哦~1. 修改完代码,记得自测一下...
358 0
|
缓存 JavaScript 小程序
接手前同事代码,特别烂,各种BUG,看麻了。。。
接手前同事代码,特别烂,各种BUG,看麻了。。。
|
监控 测试技术 程序员
|
前端开发 JavaScript 测试技术
为了降低维护成本(早点下班),我在组件开发中所做的那些优化(偷懒)
组件开发中为了稳定性、健壮性,经常需要为组件编写测试用例,然后还要为了开发者方便使用编写文档,都是非常耗时间的差事。作为一个独立维护组件库的程序员,为了能够降低组件维护的成本(早点下班),我总结了一下自己过去几年为了让组件开发更加高效所做的那些事情(偷的那些懒)。
|
测试技术
软件测试面试题:在频繁的版本发布中,如何回归测试?
软件测试面试题:在频繁的版本发布中,如何回归测试?
262 0
|
BI 程序员
实施项目--为什么开发人员一直在抱怨需求变动
  几年前的某个时候,公司大伙都等着下班我却等着晚上加班,因为产品经理对产品的某个功能进行了调整和修改,我必须加班将其修改完善。对于这种事情我已经数不清了,产品经理的每一次变动都得让我们技术部门的同学们加班到深夜甚至到天明,如今回忆起来历历在目!今天这个文章我们不谈论是谁的责任,也不去抨击产品经理的无能,说说技术人员为什么总是在抱怨需求在变动这些事, 希望大家踊跃讨论。
1274 0
|
Java 测试技术 持续交付
能用机器完成的,千万别堆工作量|持续集成中的性能自动化测试
作者:闲鱼技术-灯阳 1.背景 当前闲鱼在精益开发模式下,整个技术团队面临了诸多的能力落地和挑战,尤其是效能方面的2-1-1的目标(2周需求交付周期,1周需求开发周期,1小时达到发布标准),具体可见 闲鱼工程师是如何构建持续集成流水线,让研发效率翻倍的 ,在这个大目标下,就必须把每个环节都做到极致。
2282 0

相关实验场景

更多