學(xué)會閱讀源碼后,我覺得自己better了

我有一個大學(xué)同學(xué),名叫石磊,我在之前的文章里提到過幾次,我們倆合作過很多項目。只要有他在,我就特別放心,因為幾乎所有難搞的問題,到他這,都能夠巧妙地化解。他給我印象最深刻的一句話就是,“有啥解決不了的?只要你肯閱讀源碼?!?/p>

說起來源碼,我是不太建議新手去閱讀,容易勸退。不信,你讓一個小學(xué)生去讀一下《百年孤獨》,我保證他會從此對閱讀失去興趣。去年,我忍著頭皮讀了這本書的前十頁,然后就沒有然后了——讀不下去。我覺得自己還是嫩了點,生活閱歷沒到那個層次,感悟、內(nèi)化、思考的能力也沒到那個份上。

我建議程序員至少在有一到兩年編程經(jīng)驗后,再去閱讀源碼,這個時間段會比較合適。我是大三出去實習(xí)的,那會的水平真不敢恭維。不過,公司對我們的耐心還是有的。二十多名新人,分兩組,一組做個計算器,一組做畫圖工具,要求兩個月內(nèi)完成。

說白了,就是考核我們的,不合格就請退。我做的是計算器,成品后來放到了 CSDN 的資源庫上,騙了不少 C 幣。坦白說吧,有一部分代碼我是從網(wǎng)上復(fù)制粘貼的。

就這部分代碼,我研究了一個多月時間,硬是沒有吃透,只是說把其中的一些小 bug 修復(fù)了——靠著這種能力,我謀得了一份可以掙錢養(yǎng)活自己的差事。

接下來一年半的工作時間里,我沒有強(qiáng)逼自己去閱讀源碼,而是跟著項目組的進(jìn)度,不斷地積攢編程的經(jīng)驗。就像小孩子一樣,在會跑之前,總得先學(xué)會走路啊。

時間來到了 2012 年,我通過某些契機(jī)了解到公司以后的發(fā)展重心會是 Flex(結(jié)合了 B/S 與 C/S 技術(shù)優(yōu)點的新一代富客戶端技術(shù)),我就開始在項目間隙研究起了 Flex 的源碼。這時候,我覺得自己“復(fù)制粘貼”(或者說面向搜索引擎)的能力已經(jīng)爐火純青了,平常的工作任務(wù)都能夠應(yīng)付,但總覺得自己還很菜。

Flex 的整體框架是日方人員設(shè)計的,在原生的技術(shù)上做了一層封裝,組件更豐富了,有點類似于現(xiàn)在前端非?;馃岬?Vue.js 或者 React。

我當(dāng)時還沒有參與到 Flex 的項目當(dāng)中,但因為和公司的一個前輩關(guān)系比較要好,就找他要了一個小項目的源碼,在本地搭了一個調(diào)試環(huán)境,開始“打怪升級”了。

不得不承認(rèn),日方開發(fā)人員寫的代碼還是非常嚴(yán)謹(jǐn)?shù)?,注釋比代碼多得多。我的日語水平雖然不咋滴,但在翻譯軟件的幫助下,再加上對代碼的感知能力,還是能夠鉆研下去的。

這里順帶透露一點。有兩個源碼的作者來過蘇州的分公司,我見過他們,年紀(jì)至少在四十歲以上,據(jù)同事說,有一個都五十多歲了,看來保養(yǎng)的不錯啊。他們?yōu)槿朔浅Vt和(學(xué)到了我們民族的精髓),完完全全是一副純粹的技術(shù)人的模樣——那些大齡程序員都去哪了?答案就在這里,只要你技術(shù)夠牛,公司就需要你。

經(jīng)過四個多月不懈的努力,我覺得自己的編程能力得到了飛速的提升,不僅會用框架已有的組件,在必要的時候還能夠擴(kuò)展一些自定義的組件——因為我已經(jīng)讀懂了大部分的源碼,敢在上面動手動腳了。

在這期間,我用 Flex 做了一款聊天工具,我在很早之前的文章里提到過。公司內(nèi)部使用的 spark 聊天工具是有檔案記錄的,不能在上面談一些工作之外的話題,比如說有幾個同事喜歡分享魔獸世界的心得體會,我這個工具恰好為他們提供了便利,服務(wù)器就在我本地電腦上。

就是憑借這款聊天工具,我被一個領(lǐng)導(dǎo)看中了,直接挖我過去做了小組長,負(fù)責(zé)項目的編碼部分。更重要的是,加薪了!

所以說,我一直覺得,閱讀源碼是一項重要的能力——它能夠讓你從一名代碼的搬磚工人蛻變成為一名會造輪子的工程師。

我現(xiàn)在八年工作經(jīng)驗了,但前幾年出來的時候沒注重基礎(chǔ),沒研究過源碼,現(xiàn)在三十了,感覺壓力上來了。投了很多簡歷,也沒啥面試的消息。

上面這段話是前天一名讀者安少給我發(fā)的信息,看完后,真的蠻為他感到惋惜的。閱讀源碼雖然不是萬能的,但對一個程序員的能力提升,真的是非常重要,大概就相當(dāng)于內(nèi)功心法吧。

如果安少在程序生涯的早期(三五年的時候)就能夠靜下心去源碼里“潛水”或者“暢游”一段時間,他就不至于在 30 歲的時候擔(dān)心自己的前途。

參加過 Java 崗位面試的讀者應(yīng)該清楚,面試官喜歡問一些關(guān)于源碼方面的知識點,比如說,“HashMap 的底層原理是什么?大小超過了負(fù)載因子定義的容量該怎么辦?”如果平??先サ跪v源碼的話,這些問題你肯定能夠答得行云流水,否則真的是一臉懵逼啊。

總結(jié)一下,閱讀源碼不僅能夠提升你的編程能力,還能夠讓你從容面對面試官的提問。對了,我差點忘記一點,閱讀源碼還是解決 bug 的銀彈。

這也是為什么 GitHub 這么流行的原因之一啊,因為它上面的源碼都是開源的。這就意味著,如果程序出現(xiàn)了故障,而故障的原因是由這些源碼引起的,你就不必苦苦等待源碼的作者去修復(fù)它,“自己動手豐衣足食”啊。畢竟源碼的作者還有很多其他重要的事情要做,他不可能在線等你 issue 啊。

還記得我在文章開頭提到的石磊吧,他遇到問題的第一反應(yīng)就是去把源碼的底褲扒個精光。在他眼里,問題發(fā)生的根源要么是他自己,要么就是源碼,所以我一直覺得他蠻有極客精神的。

而我,通常是,先檢查自己的代碼,如果找不出,去求助一下搜索引擎,如果還找不出,才會去閱讀源碼。

不要怕,一開始閱讀源碼真的會有點難度,但如果你想要成長,就不能一直待在自己的舒適區(qū),你得硬著頭皮上。等你頭硬(禿)了之后,就真的變強(qiáng)了!

如果覺得文章對你有點幫助,請微信搜索「 沉默王二 」第一時間閱讀。

本文已收錄 GitHub,傳送門~ ,里面更有大廠面試完整考點,歡迎 Star。

我是沉默王二,一枚有顏值卻靠才華茍且的程序員。關(guān)注即可提升學(xué)習(xí)效率,別忘了三連啊,點贊、收藏、留言,我不挑,嘻嘻。

?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時請結(jié)合常識與多方信息審慎甄別。
平臺聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點,簡書系信息發(fā)布平臺,僅提供信息存儲服務(wù)。

友情鏈接更多精彩內(nèi)容