读Java源码
平常使用Java的时候,那些集合类使用起来很顺手,但是有没有想过这些集合内部的实现原理是怎样的,它的添加移除都有哪些操作? 有了一些工作经验之后,必须要读一读Java包中的源码,需要知道那些平常使用的类的原理。有一点,不要被这些类的行数给吓到,点击一些集合类,一个类的代码行数都一千多行,很多时候回被这个数字给吓到,除去注释空格,其实也没有多少了,并且只要理解了一点,该类的其他代码就相对简单了。 看源码的第一个步骤,先简单的调用该类的一些方法,让其运行起来,然后点击进入方法,可以在方法里面设置断点,让其一步一步的走,知道止到走到最后。这样对该方法有了一个大概的映像。 第二步进入到该类中,折叠代码块,把所有的方法都看一遍,在Java源码中的类,都可以通过方法名推测出该方法的完成了一个什么任务。这样心里对这个类有了一个整体的看法。 第三步从核心代码开始,就是从自己代码中的第一个调用方法开始读,如果可以断点进行调试,然后一步一步的跟着走。 最开始读的时候,需要在网上找别人解析的例子进行看,跟着别人的思路走,最后了再自己向上面的方法走,为什么需要找别人的例子,因为其他人已经踩过坑了,有了一定的思路了。
通过这样不断的看代码,然后总结自己的心得,以后再看其他人的代码的时候,会很快速的理解,就能够在很短的时间内上手。 我推荐的是从Java源码开始,而一些框架的源码例如Spring这种框架的源码,太晦涩难懂了,各种继承,各种封装,还有各种模式结合,如果没有懂这些东西,也没有一定的功底的时候,很容易就陷进去,时间花费了,还没有一点收获,反而打击了自信心,而源码中的各个方法都有注释,代码都比较简单,有一些包下的内容有点绕,例如concurrent包下的关于线程锁的类,这些内容刚开始理解比较困难,但是有了一定看源码的心得,加上网上搜索的资料,一定能够看懂这些代码,读这些代码,体会上古大神他们的思维,就会心生感叹。我读完这些代码之后,对那些上古大神佩服的五体投地,我估计这辈子都不可能写出这么厉害的代码的。 这些源码的之后,平常也经常用到,如果出现了问题,也能够快速定位问题。Java包的源码的重要性就不言而喻了,也不是所有的代码都需要读一遍,但至少把util包下面的内容都看一遍。
也是最近看完了concurrent包下面的内容,有了一些体会,并且通过看了这些类之后,再读一些其他代码的时候,不会心生害怕,并且还有一定的诀窍去弄懂代码的意思,在调试代码,解决BUG时,能够快速的找到问题的所在。
编辑文档
程序员一般需要写接口文档,但是很多时候,就没有了,不喜欢写文档,详细文档,架构文档等等。觉得写这些很麻烦,也没有这个意思,也就离职的时候写一份交接文档,而交接的文档的内容都相对简单。
但是你看厉害的人一般很少写代码,大部分是写文档,是写ptt,写架构文档,画时序图,画流程图,画架构图,这些都是架构师需要做的。这些算是他们基本的技能,并且优秀的程序员,文档写得很完备,能够知道其他程序员快速上手。看一些开源框架,他们的文档就写的非常好,架构师他们也都会将程序的前期文档交付出来,而对于我们这些初级程序员怎样提升这些能力,这种就一点一点去积累。 我在做完接口后,都会话一个时序图,描述该这个接口的内容,如果有复杂的内容会添加一个流程图,描述各个判断条件,如果其他程序员接手这个项目,看完这些信息,应该能够快速上手。
在文档里面,会记录这个项目立项的要点,会议讨论的重点,将一些点为什么要这样做描述清楚,很多代码只有在当时那个语境下才能理解,没有一份文档记录,等过了之后,就容易忘记了,而交给其他人的时候,其他程序员一脸懵圈,如果要改动该地方的时候,也不知道是下手改动,还是不改动。我以前就经常遇到离职之后,接手我项目的程序员,还经常问一个代码块,这个添加在程序里,有什么意思,为什么要添加。幸亏还能记得,然后跟别人解释这当初加上是为了实现怎样的功能。
将简单的事情复杂化
复制粘贴最轻松,最简单,但是也是最不能学到东西的事情。工作中,轻松简单的事情,往往是体力活,写了1000多行代码,但是真正有用的就两三百多行代码,不过不去思考的去优化代码,不思考这个而是否有简单的方法,那么就永远都不能进步。
如上司要求插入一些数据,这个时候,写好一条sql语句,其他的都复制粘贴。轻松完成任务,是否可以考虑做些sql代码,存储过程,来完成这些操作,到下一次又被安排做同样的事情时,可以直接执行。
就是将简单的事情复杂化,这里并不是将代码写的很花哨,各种模式加在一起,代码肯定是越简单越好,能够将复杂的逻辑弄简单,这本身就是将简单的事情复杂化。公式很简单,但是推导出该公式的逻辑就复杂了。
当有了这样的意识之后,学到的东西就会很多,自己的进步就能很大。