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?
若覺得不錯,幫忙點個贊唄。
-------------------------我是分隔線----------------------------
大家好,我是愛編碼的碼農,可以說是一枚源碼愛好者。上周開始寫源碼分析文章,跟大家一起分享自己的學習心得體會,歡迎關注我,一起學習交流。
有興趣的小伙伴們可以關注下SpringBoot源碼分析這個初始大綱,一起從零開始學習源碼,一起加油,共勉!