当前位置: 首页 > 科技观察

如何提高代码质量

时间:2023-03-20 12:06:12 科技观察

作者|郝安康有这么一句名言“Talkischeap,Showmethecode”。不管你是新人还是老手,都想提高自己的代码质量,至少要让别人看着舒服。在之前的工作经历中,我并没有太注重个人的编码能力,包括正确性、美观性和效率性。工作几年的人写出这么丑的代码会很尴尬,所以提高自己的编码水平就显得尤为迫切。那么你可以从哪里开始提高你的能力呢?书籍推荐《重构》MartinFowler的书,世界顶级国宝,可以说是软件开发领域最经典的书籍之一。第二版现已出版。这是一本值得反复阅读、在工作中边学边学的书。《重构》这本书已经有了明确的定义,分为名词和动词两种形式。重构(名词):对软件内部结构的调整,目的是在不改变其可观察行为的情况下提高其可理解性并降低其修改成本。重构(动词):使用一系列重构技术来调整软件的结构而不改变其可观察到的行为。《Clean Code》《Clean Code》是鲍勃大叔的经典著作。强烈建议朋友们一定要阅读。Bob大叔在这本书中浓缩了他对整洁代码的理解,这对于年轻一代来说确实是一份很棒的礼物。《Head First 设计模式》《大话设计模式》设计模式用于承载复杂的业务逻辑,使编写的代码简洁易扩展。简而言之,您需要了解业务中正在发生的变化以及未发生的变化。这些变化的东西是复杂的业务逻辑。你需要思考如何用一个合适的设计模式来承载它,让它在变化的时候,能够有很好的扩展性。这时候,如果你学过设计模式,熟悉各个设计模式的使用场景,那么做起来就会得心应手。《Java 编程思想》是Java领域的经典之作,其影响力不亚于《Java 编程思想》。对于一个Java工程师来说,在新技术不断涌现和迭代的情况下,学习能力以及如何快速学习是成长的关键。学习方法、思维和能力对一个人的成长有很大的促进作用。其他阿里巴巴Java开发手册:https://github.com/alibaba/p3cGoogleJava编程风格指南:http://www.hawstein.com/posts推荐优秀源码作为后台开发,我主要学习使用Java语言,所以这里推荐的也是Java相关的源码学习,只是路途简单,语言万千,核心不变。Github上有很多star数很高的项目,大部分都是功能性比较强的,涉及到的技术点也比较高深。学习技术真的很好,但并不是所有的代码风格都值得学习。为避免踩坑,此类项目在此不一一列举。这里推荐的源码是Java生态的框架源码。JDK为什么要看JDK源码?JDK源代码是所有其他源代码的基础。了解了JDK源码后再看其他源码,会事半功倍。JDK源码包含大量数据结构知识,是学习数据结构的好资料,如链表、队列、哈希表、红黑树、跳转表、桶、堆、双端队列等.JDK源码包含大量设计模式,是学习设计模式的好资料,如适配器模式、模板方法模式、装饰器模式、迭代器模式、代理模式、工厂模式、命令模式、状态模式等.JDK源码中包含了很多Java的高阶知识,比如弱引用、Unsafe、CAS、锁原理、伪共享等,不看源码很难学习到这些知识。JDK源码阅读顺序:java.lang包下的基本封装类(Integer、Long、Double、Float等),以及字符串相关类(String、StringBuffer、StringBuilder等)、常用类(Object,Exception,Thread,ThreadLocal等等)。java.lang.ref包下的引用类(WeakReference、SoftReference等)java.lang.reflect包下的java.lang.annotation相关注解类java.util包下的反射相关类是一些工具类,主要由各种容器和集合类(Map、Set、List等)java.util.concurrent作为并发包,主要是原子类,锁和并发工具类java.io和java.nio可以结合起来看java.time主要包括时间相关的类,可以学习Java8新加入的java.net包下的网络通信相关的类,Socket和HTTPClient的相关代码可以阅读。最好能满足你现在的目的。比如想了解多线程,主要看JUC。如果你想了解IO,你应该看看NIO。如果您想查看常量池,请查看ClassFileParser。看模块要注意接口大于一切,或者说功能大于一切。不要试图了解所有的细节,先找到几个关键函数,了解函数的作用(例如,你应该仔细分析函数名和参数名),然后再进行下一步。看Java类库的时候多看类是否抽象,有没有使用模板方法,多看函数前面的修饰符,一般表示函数是给谁用的。多关注这些细节,而不是傻傻地过一遍逻辑,你可以从中学到很多设计知识。也可以关注一下什么是为了之前的设计而做出妥协的做法。毕竟一个存在了这么多年的类库,肯定不是处处都完美的。JDK源码一定要看Java并发相关的源码。DougLea的并发源码比较漂亮,每一行都是精髓,非常值得阅读和学习。工具看类库,首先推荐IDEA,Structure用的多,UML图多自动生成。先搞清楚接口和类的关系,再分析功能。最后,在学习源码的过程中,不介意看别人的博客,不介意手抄笔记。Spring-FrameworkSpringFramework是一个开源的Java/JavaEE全栈(full-stack)应用程序框架,在Apache许可下发布,在.NET平台上也有移植版本。该框架基于ExpertOne-on-OneJavaEEDesignandDevelopment(ISBN0-7645-4385-7)一书中的代码,该书最初由RodJohnson和JuergenHoeller等人开发。SpringFramework提供了一种简单的开发方式,将避免大量的属性文件和辅助类可能导致底层代码变得复杂和混乱。图片来源:Spring官方文档Spring是一个开源的设计级框架,它解决了业务逻辑层与其他层的松耦合问题,因此在整个系统应用中都采用了面向接口的编程思想。包括在此基础上衍生出的SpringMVC、SpringBoot、SpringCloud等,在如今的企业中应用越来越广泛。无论是设计思路、代码规范、设计模式、界面设计,还是类加载,都是优秀的源码。我个人的学习心得是先看视频,熟悉Spring的使用,再学习源码。你可以在这里阅读《Spring源码深度解析》。除了看书,记得打开IDEA查看对应的源码。如果能调试具体的调用逻辑就更好了。GoogleGuavaGoogleGuava是Google内部Java开发工具库的开源版本。Google中的许多Java项目都使用它。它提供了一些JDK没有提供的功能,以及对JDK已经提供的功能的增强。其中包括:集合、缓存、原语支持、并发库、通用注解、字符串处理、数学、I/O、事件总线(EventBus)等等。练习通过以上两种方式的学习,我们要将所吸收的内容进行练习。有输入就一定有输出,否则输入就没有意义。这里需要强调一下CodeReview的好处。简单的组织有以下三个好处:1.互相学习,共同成长无论在哪个团队,团队成员的技术能力和经验都是不同的。通过CodeReview,对于相同的功能实现,有经验的工程师可以为没有经验的工程师提供合理的优化建议。没有经验的工程师可以通过阅读高质量的代码快速学习相关技术使用的最佳实践。如果每个人的技术实力都差不多,可能会刷新彼此的思路。2.知识分享Codereview不仅仅是告诉大家代码是怎么写的,还要介绍背后涉及到的业务知识。过程中根据提交者的描述阅读代码的逻辑,看代码实现是否与描述一致。通过Review,团队成员不再局限于项目业务的某一部分,避免了只有一个人了解项目的尴尬局面。特殊情况下,也可以及时更换他人维护相关代码,尤其是在没有相关业务功能文档的情况下。3、统一编码风格,提高质量代码质量大致分为以下几个等级:能正常运行——能通过测试——易读——易维护。CodeReview至少应该让代码达到易读的程度。为了易于阅读,仅靠CodeReview是不够的。首先,你需要观察整个项目的风格,按照已有的规范写出风格相同的代码。当然每个人的风格不可能完全一样,但是一定要保证整体的风格差不多,这样保养起来才不会难受。总结一下,现在写代码就像我上学时写的一样。能写出好的代码就等于写了一手好字。如果过段时间不忍回头看自己的字迹,可以通过临摹、练字来提高自己,最终学会一手好字迹。练字练多了,就会变成习惯,然后写字就会变成下意识的习惯。但是编写代码并不是那么简单。写之前需要动脑思考,选择什么模式,怎么设计,写完之后怎么优化。按照上面的学习方法,慢慢提升自己的编码习惯,最终达到写神似的境界。