写作源代码是每一杰出合作开发技师的必经之地,所以这首诗就来传授下为何要写作源代码和怎样写作源代码。
首先来说下为何要学源代码,有自学源代码的必要性吗?
为何要写作源代码?
关于为何写作和自学源代码,我对个人认为可能将有几点:
(一)Axat辩手,应付复试
为了找出更快的工作,应付复试,因为在复试中的确会问及源代码等级的难题,比如说:为何 HashMap 是缓存不安全可靠的?
假如你没写作过源代码,辩手可能将会对提问的结论不令人满意,从而导致复试结论不太平庸,但假如你对源代码略有研究,并能较好地概要辩手的难题,这可能将是你的加春分点,能形成自己独有的竞争优势,Axat辩手,升官减薪不是梦。
(二)解决难题(bug)
在合作开发过程中,他们多多少少会碰到 bug,比如说:在 foreach 循环式里展开原素的 remove/add 操作方式,咋有可能将会报 ConcurrentModificationException 极度?
他们能先在 Google、Stack Overflow 和相关联工程项目的 Issues 里看是不是类似于难题和解决之道,假如没的话,他们只能透过写作源代码的方式去解决了。假如他们对相关源代码略有兼及,就能加速功能定位到难题所在。
(三)提高程式结构设计能力
读两本开卷,是和很多正直的人访谈。 -海涅
和写作两本开卷一样,写作源代码是和程式结构设计大牛零距离沟通交流的机会,在很多杰出的开放源码工程项目中,它们的代码规范化和体系结构都是很酷的,另外在设计上也使用了大量的程序语言,透过写作和自学源代码,能加速提高他们的代码水平,和对程序语言有更进一步的认知。
同时,在他们写作完一个源代码后,能Monestier,能加速地对其他架构的源代码展开写作和自学,减少时间成本。
除了上述提及的原因以外,可能将还有很多,在这里就不逐一约勒了,所以在确定了要写作源代码之后,瞧瞧他们看下怎样写作源代码吧!
怎样写作源代码?
怎样写作源代码取决于你为何要学源代码,比如说:
假如为了应付复试,那就可以围绕常考的基础类、集合类、队列、缓存、锁等内容展开写作和自学;假如是为了解决 bug,所以就能只围绕出现难题的相关类展开写作分析,随着解决 bug 的增多,我相信写作的源代码也会越多,从而更容易去阅读和自学源代码;下面大概说下写作源代码的几点建议:
在写作之前,能先从开放源码工程项目的官网上看它的体系结构和功能文档,了解这个工程项目的整体架构、模块组成和各个模块之间的联系。
假如没相关联的工程项目文档,能根据代码的模块展开梳理,以形成对工程项目的初步了解,或者查看已有的源代码解析文章或者书籍,在写作源代码之前,了解工程项目的架构和思路会使写作源代码事半功倍。
在了解一个类的时候,能使用 ctrl+F12 来查看类中的成员变量和方法。
能透过 IDEA 的 Diagrams 功能去了解一个类的继承关系。
多打断点调试,断点追踪源代码是较好的写作源代码的方式,能先透过 debug 了解下调用逻辑,都和哪些类有关联,有大致了解后再透过 debug 了解整体代码的功能实现,各个类都起到了什么作用,是不是涉及到程序语言等。
另外,杰出的开放源码工程项目中的确会有很多地方应用到了程序语言,建议在写作源代码之前,需要对常用的程序语言有大致的了解,不然写作源代码的效率会大大降低。
假如碰到读不懂某部分源代码的时候,能先跳过,之后再回来看,假如属于搞不懂这部分就茶不思饭不想的人,能在网上找是否有该部分源代码的解析或者文档,也能自己透过源代码注释和测试用例去写作自学。
一般杰出的开放源码工程项目都会有单元测试,能透过相关联类的单元测试去了解方法的含义和用法,加深对源代码逻辑的认知。
在写作源代码的时候,能在代码上加上注释和总结,同时还能画出时序图和类图,这样对写作源代码有很大的帮助,能很清楚地知道类之间的调用关系和依赖关系,也方便以后回顾,重新写作。
在这里推荐大家一个 IDEA 插件 SequenceDiagram,能根据源代码生成调用时序图,便于写作源码。
刚开始写作源代码,不建议直接看架构源代码,能先从 jdk 源代码看起:
jdk 源代码也是非常庞大的,能分模块来写作,下面是建议的写作顺序:
java.lang 包下的基本包装类(Integer、Long、Double、Float 等),还有字符串相关类(String、StringBuffer、StringBuilder 等)、常用类(Object、Exception、Thread、ThreadLocal 等)。java.lang.ref 包下的引用类(WeakReference、SoftReference 等)java.lang.annotation 包下的注解的相关类java.lang.reflect 包下的反射的相关类java.util 包下为一些工具类,主要由各种容器和集合类(Map、Set、List 等)java.util.concurrent 为并发包,主要是原子类、锁和并发工具类java.io 和 java.nio 能结合着看java.time 主要包含时间相关的类,能自学下 Java 8 新增的几个java.net 包下为网络通信相关的类,能写作下 Socket 和 HTTPClient 相关代码其他包下的代码也能做下了解,JDK源代码写作笔记:https://github.com/wupeixuan/JDKSourceCode1.8
再有了一定的源代码写作经验后,能再去自学 Spring、Spring Boot、Dubbo、Spring Cloud 等架构的源代码。
总结
本文主要介绍了为何读源代码和怎样读源代码,供大家参考,每一人都有适合自己的写作源代码的方式,希望能在自学中去摸索出一套属于自己的方式。
写作源代码不是一蹴而就的,这是持久战,只要你能坚持下来,的确受益匪浅。写作源代码的过程比较枯燥,能在社群里一起讨论自学,这样可能将效率更高些。
写得不好的或者大家有什么更快的建议,也欢迎留言讨论。
最好的关系是互相成就,大家的在看、转发、留言三连是我创作的最大动力。
参考
《Java并发程式结构设计之美》
《程序员修炼之道:程序结构设计入门30讲》
辩手系统精讲Java源代码及大厂真题
解锁大厂思维:剖析《阿里巴巴Java合作开发手册》