我Java學習時的模樣(三)
讀Java原始碼
平常使用Java的時候,那些集合類使用起來很順手,但是有沒有想過這些集合內部的實現原理是怎樣的,它的新增移除都有哪些操作? 有了一些工作經驗之後,必須要讀一讀Java包中的原始碼,需要知道那些平常使用的類的原理。有一點,不要被這些類的行數給嚇到,點選一些集合類,一個類的程式碼行數都一千多行,很多時候回被這個數字給嚇到,除去註釋空格,其實也沒有多少了,並且只要理解了一點,該類的其他程式碼就相對簡單了。 看原始碼的第一個步驟,先簡單的呼叫該類的一些方法,讓其執行起來,然後點選進入方法,可以在方法裡面設定斷點,讓其一步一步的走,知道止到走到最後。這樣對該方法有了一個大概的映像。 第二步進入到該類中,摺疊程式碼塊,把所有的方法都看一遍,在Java原始碼中的類,都可以通過方法名推測出該方法的完成了一個什麼任務。這樣心裡對這個類有了一個整體的看法。 第三步從核心程式碼開始,就是從自己程式碼中的第一個呼叫方法開始讀,如果可以斷點進行除錯,然後一步一步的跟著走。 最開始讀的時候,需要在網上找別人解析的例子進行看,跟著別人的思路走,最後了再自己向上面的方法走,為什麼需要找別人的例子,因為其他人已經踩過坑了,有了一定的思路了。
通過這樣不斷的看程式碼,然後總結自己的心得,以後再看其他人的程式碼的時候,會很快速的理解,就能夠在很短的時間內上手。 我推薦的是從Java原始碼開始,而一些框架的原始碼例如Spring這種框架的原始碼,太晦澀難懂了,各種繼承,各種封裝,還有各種模式結合,如果沒有懂這些東西,也沒有一定的功底的時候,很容易就陷進去,時間花費了,還沒有一點收穫,反而打擊了自信心,而原始碼中的各個方法都有註釋,程式碼都比較簡單,有一些包下的內容有點繞,例如concurrent包下的關於執行緒鎖的類,這些內容剛開始理解比較困難,但是有了一定看原始碼的心得,加上網上搜索的資料,一定能夠看懂這些程式碼,讀這些程式碼,體會上古大神他們的思維,就會心生感嘆。我讀完這些程式碼之後,對那些上古大神佩服的五體投地,我估計這輩子都不可能寫出這麼厲害的程式碼的。 這些原始碼的之後,平常也經常用到,如果出現了問題,也能夠快速定位問題。Java包的原始碼的重要性就不言而喻了,也不是所有的程式碼都需要讀一遍,但至少把util包下面的內容都看一遍。
也是最近看完了concurrent包下面的內容,有了一些體會,並且通過看了這些類之後,再讀一些其他程式碼的時候,不會心生害怕,並且還有一定的訣竅去弄懂程式碼的意思,在除錯程式碼,解決BUG時,能夠快速的找到問題的所在。
編輯文件
程式設計師一般需要寫介面文件,但是很多時候,就沒有了,不喜歡寫文件,詳細文件,架構文件等等。覺得寫這些很麻煩,也沒有這個意思,也就離職的時候寫一份交接文件,而交接的文件的內容都相對簡單。
但是你看厲害的人一般很少寫程式碼,大部分是寫文件,是寫ptt,寫架構文件,畫時序圖,畫流程圖,畫架構圖,這些都是架構師需要做的。這些算是他們基本的技能,並且優秀的程式設計師,文件寫得很完備,能夠知道其他程式設計師快速上手。看一些開源框架,他們的文件就寫的非常好,架構師他們也都會將程式的前期文件交付出來,而對於我們這些初級程式設計師怎樣提升這些能力,這種就一點一點去積累。 我在做完介面後,都會話一個時序圖,描述該這個介面的內容,如果有複雜的內容會新增一個流程圖,描述各個判斷條件,如果其他程式設計師接手這個專案,看完這些資訊,應該能夠快速上手。
在文件裡面,會記錄這個專案立項的要點,會議討論的重點,將一些點為什麼要這樣做描述清楚,很多程式碼只有在當時那個語境下才能理解,沒有一份文件記錄,等過了之後,就容易忘記了,而交給其他人的時候,其他程式設計師一臉懵圈,如果要改動該地方的時候,也不知道是下手改動,還是不改動。我以前就經常遇到離職之後,接手我專案的程式設計師,還經常問一個程式碼塊,這個新增在程式裡,有什麼意思,為什麼要新增。幸虧還能記得,然後跟別人解釋這當初加上是為了實現怎樣的功能。
將簡單的事情複雜化
複製貼上最輕鬆,最簡單,但是也是最不能學到東西的事情。工作中,輕鬆簡單的事情,往往是體力活,寫了1000多行程式碼,但是真正有用的就兩三百多行程式碼,不過不去思考的去優化程式碼,不思考這個而是否有簡單的方法,那麼就永遠都不能進步。
如上司要求插入一些資料,這個時候,寫好一條sql語句,其他的都複製貼上。輕鬆完成任務,是否可以考慮做些sql程式碼,儲存過程,來完成這些操作,到下一次又被安排做同樣的事情時,可以直接執行。
就是將簡單的事情複雜化,這裡並不是將程式碼寫的很花哨,各種模式加在一起,程式碼肯定是越簡單越好,能夠將複雜的邏輯弄簡單,這本身就是將簡單的事情複雜化。公式很簡單,但是推匯出該公式的邏輯就複雜了。
當有了這樣的意識之後,學到的東西就會很多,自己的進步就能很大。