爲什麼要學習源碼?學習源碼對我們有用嗎?

爲什麼要學習源碼?

1 前言

由於現在微服務很流行,越來越多企業採用了SpringCloud微服務架構,而SpringBoot則是快速構建微服務項目的利器。於是筆者以此爲切入點,將SpringBoot作爲我們源碼分析的第一個開源項目,之後還會對更多開源項目進行源碼分析。要進行源碼分析,筆者結合自身經歷來跟大家聊聊我們爲什麼要學習源碼這個話題,大家一起探討學習。

我們程序員在開發代碼時每天都在使用別人寫好的框架,無論你是在使用Spring生態的Spring核心,SpringMVC,SpringBoot和SpringCloud等框架,還是在使用阿里系的Dubbo,RocketMQ,Seata,Druid等中間件框架,亦或你是搞大數據的,在使用Apache組織的Zookeeper,Hadoop,Hive,Spark等大數據組件框架,這些開源框架都給我們的項目編碼帶來了極大的方便,促進了我們的開發效率。是的,這些都是開源大神們幫我們造好的輪子,我們直接使用即可,而且用起來很少出bug,因爲這些框架一般都是經過考驗的才能流行起來。

可能大部分人會認爲,這些輪子都已經造好了,我們直接用即可。是的,這些開源框架對我們使用來說是透明的,它們就像一個個黑盒子。至於這些黑盒裏面裝的是什麼東西,裏面是怎樣構造的,如果沒有去探究這些黑盒的話,我們無從得知。但是,我們做開發的天天跟這些黑盒打交道,難道你就沒有一種強烈的慾望想知道這些黑盒裏面裝的是什麼東西,黑盒裏面是怎樣構造的麼?難道你就不想知道我們天天使用的黑盒子裏面的原理麼?

那麼今天就跟小夥伴們聊聊“我們爲什麼要學習開源框架源碼?學習開源框架源碼對我們有用嗎?”這個話題。

2 我們爲什麼要學習源碼?花那麼多時間去學習源碼值得麼?
可能有些同學會問:我們爲什麼要去學習源碼?花那麼多時間去學習源碼值得麼?

對於這個問題,應該很多小夥伴在沒讀源碼前深有感觸。當時應該就是這種觀念,反正開源框架一些外面的大牛幫我們封裝好了,自己開箱即用即可,管它裏面黑盒機制是啥。應該很多小夥伴也是這種觀念,導致自己在開發項目時若遇到bug時一籌莫展,百度了很多解決方案都無效,故而浪費了很多時間。於是纔會決心鑽研一些常用框架的源碼。可見,沒必要學習源碼的觀念可能是最錯誤的觀念吧,個人觀點(僅供參考)。

我們學習源碼無非有以下幾個原因:

1)開發項目需求需要

一方面,通常我們在開發項目的時候,遇到Bug是再正常不過的事情。比如某個工作項目採用了Spring生態系列的框架比如SpringBoot,SpringCloud等,當出現問題時自己要會解決,如果我們不懂框架裏面的黑盒機制,當出現問題我們肯定會一頭霧水,不知如何着手解決開源框架出現的問題,此時我們肯定會去百度,但百度的文章質量參差不齊,最壞的結果可能就是我們根據百度的解決方案,一個一個去試了,但仍然沒有解決問題。這就是對框架黑盒機制不熟悉的原因導致的。

另一方面,我們在開發項目的時候,有時候開源框架不能完全符合我們的業務需求,此時我們需要對開源框架進行擴展甚至是改造,比如我們正在使用dubbo框架,若dubbo自帶負載均衡策略不能滿足我們的業務需求,此時我們是不是得要對dubbo的負載均衡策略進行替換或擴展。幸好,dubbo提供了SPI接口給我們即插即用,此時我們不用研究dubbo裏面的黑盒也可以做到替換現有的負載均衡策略。那假如有一天,我們要對某個開源項目進行改造呢?此時是不是也需要我們知道開源框架的黑盒機制,若不懂框架黑盒原理,此時我們是無法下手的。

由於項目開發需要的以上原因,所以我們平時有空時就要多學習源碼,多探究裏面的黑盒機制,磨刀不誤砍柴工。

這個就是典型的項目開發需求驅動我們不得不去研究開源框架的源碼機制的原因吧。

2)對技術飽含熱愛,不斷深入學習黑盒機制

是的,除了項目需求開發需要去研究源碼外,應該很多小夥伴都是出於對技術的追求去研究開源框架源碼。他們爲了不斷提高自己的編碼能力,去不斷學習外面大牛們的優秀作品。是的,大家都知道,閉門造車可以說是造不出名車的,此時,我們必須去學習大牛們優秀的開源作品,學習他們是怎麼面向對象編程的,學習他們是如何熟練運用設計模式的,學習他們是怎樣設計接口的等等,真的有太多需要我們學習了。如果我們走的是技術路線,對技術還有更高的追求,學習源碼可以說是我們繞不過去的路。因此,行動起來吧,源碼搞起來,我們只有不斷學習源碼,以後再閱讀其他項目的源碼時纔會遊刃有餘。

3)有些人學習源碼,可能是爲了面試

當然,有些人學習源碼,可能是爲了面試。因爲現在很多面試若面試官稍微問難一點的問題都會涉及源碼,往往很多人就是對源碼不熟悉而掛掉。因爲一部分小夥伴往往就是爲了面試纔去學習源碼,但是往往這種爲了面試纔去學習源碼的方式效果沒有前面的項目驅動方式和技術追求方式的效果那麼好(個人觀點,不喜勿噴)。因爲,有些同學爲了面試,通常都是短期突擊源碼,爲了某個面試問題而背誦一些答案,因爲死記硬背的居多,所以這種方式往往深入不了源碼的精髓。當然,不管出於什麼目的學習源碼都理應鼓勵,因爲畢竟去學習源碼了肯定就會有提高,就踏出了與衆不同的一步。

3 學習源碼,我們能得到什麼?

是的,既然我們花費了那麼多時間去學習源碼,去研究源碼?我們的收益有多少,我們究竟能得到多少回到回報呢?可以先肯定的回答,當然有很大的回報。前面也說過,學習開源框架源碼能幫助我們解決項目遇到的bug,擴展我們的項目需求;通過學習源碼,學習開源大牛們是如何運用設計模式的,然後運用到我們開發的項目中,使我們的項目的模塊更易於擴展;通過學習源碼,我們能編碼更高效。爲什麼呢?如果我們對某個開源項目源碼很熟悉,那麼我們就可以對這個項目的源碼信手拈來應用到自己項目中,不是麼?總之學習源碼好處多多,這也是成爲大牛們的必經之路吧,只有學習和借鑑別人優秀的作品,自己才能造出更優秀的作品。說到這點,不得不說下RocketMQ,RocketMQ是阿里的一款優秀的開源中間件,RocketMQ之所以性能高吞吐,抗得住阿里雙十一的考驗,其正是很多方面借鑑了Kafka的設計;此外,記得Dubbo的一個緩衝類也是借鑑了Netty的ByteBuf類。

是吧,要造出一些優秀的作品,必須去學習借鑑別人的優秀作品。

4 要想不被淘汰,必須學習源碼

最後要說的是,要想不被淘汰,我們必須學習源碼。

現在程序員越來越多,可以說競爭尤其激烈。如果我們想不被淘汰,則我們時刻要保持競爭力,那麼必然要時刻學習,終生學習,生而有涯而學無涯。因爲CRUD大家都會,要提高自己的技術能力,此時學習開源項目的源碼就尤爲關鍵了。如果我們不想成爲CRUD工程師,還有更高的技術追求,那麼我們就要有更高的要求。當然,學習開源項目源碼的目的是借鑑大牛們的優秀作品,最終要學以致用。另外,個人觀點:學習源碼是提高自己編碼能力的最好方式。

如果我們走的是技術路線而非管理路線,若還有更高的技術追求,那麼學習源碼是我們繞不過去的砍。真的,學習源碼實在是太重要了。

只要我們還有更高的技術追求,或許你想成爲技術大牛,但是學習源碼是成爲大牛的必經之路。不是每個人都能成爲大牛,但不學源碼就肯定成爲不了大牛,因爲學習源碼是提高自己的最好方式,不論何時,學習源碼都不會晚,共勉!

Are u ready?

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章