跟你們聊聊咱們爲何要學習源碼?學習源碼對咱們有用嗎?(源碼感悟)

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等,當出現問題時本身要會解決,若是咱們不懂框架裏面的黑盒機制,當出現問題咱們確定會一頭霧水,不知如何着手解決開源框架出現的問題,此時咱們確定會去百度,但百度的文章質量良莠不齊,最壞的結果可能就是咱們根據百度的解決方案,一個一個去試了,但仍然沒有解決問題。這就是對框架黑盒機制不熟悉的緣由致使的。oop

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

因爲項目開發須要的以上緣由,因此咱們平時有空時就要多學習源碼,多探究裏面的黑盒機制,磨刀不誤砍柴工

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

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

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

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

固然,有些人學習源碼,多是爲了面試。由於如今不少面試若面試官稍微問難一點的問題都會涉及源碼,每每不少人就是對源碼不熟悉而掛掉。由於一部分小夥伴每每就是爲了面試纔去學習源碼,可是每每這種爲了面試纔去學習源碼的方式效果沒有前面的項目驅動方式和技術追求方式的效果那麼好(我的觀點,不喜勿噴)。由於,有些同窗爲了面試,一般都是短時間突擊源碼,爲了某個面試問題而背誦一些答案,由於死記硬背的居多,因此這種方式每每深刻不了源碼的精髓。固然,無論出於什麼目的學習源碼都理應鼓勵,由於畢竟去學習源碼了確定就會有提升,就踏出了不同凡響的一步。

3 學習源碼,咱們能獲得什麼?

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

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

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

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

如今程序員愈來愈多,能夠說競爭尤爲激烈。若是咱們想不被淘汰,則咱們時刻要保持競爭力,那麼必然要時刻學習,終生學習,生而有涯而學無涯。由於CRUD你們都會,要提升本身的技術能力,此時學習開源項目的源碼就尤其關鍵了。若是咱們不想成爲CRUD工程師,還有更高的技術追求,那麼咱們就要有更高的要求。固然,學習開源項目源碼的目的是借鑑大牛們的優秀做品,最終要學以至用。另外,我的觀點:學習源碼是提升本身編碼能力的最好方式

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

只要咱們還有更高的技術追求,或許你想成爲技術大牛,可是學習源碼是成爲大牛的必經之路。不是每一個人都能成爲大牛,但不學源碼就確定成爲不了大牛,由於學習源碼是提升本身的最好方式,不論什麼時候,學習源碼都不會晚,共勉!

Are u ready?

若以爲不錯,幫忙點個讚唄。

-------------------------我是分隔線----------------------------

你們好,我是愛編碼的碼農,能夠說是一枚源碼愛好者。上週開始寫源碼分析文章,跟你們一塊兒分享本身的學習心得體會,歡迎關注我,一塊兒學習交流。

有興趣的小夥伴們能夠關注下SpringBoot源碼分析這個初始大綱,一塊兒從零開始學習源碼,一塊兒加油,共勉!

相關文章
相關標籤/搜索