域名預(yù)訂/競(jìng)價(jià),好“米”不錯(cuò)過(guò)
看到「為什么我們要閱讀源碼?」文章寫的非常不錯(cuò),所以就轉(zhuǎn)載了。有些同學(xué)可能看的一臉懵逼,其實(shí)這很正常,這篇文章寫的都是理論和方法,缺少源碼閱讀的實(shí)踐。只有在你源碼閱讀達(dá)到一定的量以后,你才會(huì)真正明白這篇文章是對(duì)閱讀源碼很好的歸納和總結(jié)。
我這里把這篇文章精簡(jiǎn)一下,稍微幫助大家回顧一下重點(diǎn),然后擴(kuò)展一下思路,講解一下如何找到適合自己閱讀的源碼。
一、為什么要閱讀源碼,why?
學(xué)會(huì)基礎(chǔ)的語(yǔ)法和試驗(yàn)了若干 example 后,我們就火箭般躥到了自己寫代碼打怪贊經(jīng)驗(yàn)的階段。這樣略過(guò)大量閱讀代碼的階段有三個(gè)害處。
- 寫代碼的基礎(chǔ)是不牢靠的,打怪升級(jí)的過(guò)程也是最慢的。道理很簡(jiǎn)單 —— 前輩們踩過(guò)的坑,總結(jié)的經(jīng)驗(yàn)教訓(xùn),你都不得不親自用最慢的法子一點(diǎn)點(diǎn)試著踩一遍。
- 很容易養(yǎng)成 stackoverflow driven 的寫代碼習(xí)慣 —— 遇到不知如何寫的代碼,從網(wǎng)上找現(xiàn)成的答案,找個(gè)高票的復(fù)制粘貼改吧改吧,湊活著完成功能再說(shuō)。寫代碼的過(guò)程中遇到問(wèn)題,開(kāi)啟調(diào)試模式,要么設(shè)置無(wú)數(shù)斷點(diǎn)一步步跟蹤,要么到處打印信息試圖為滿是窟窿的代碼打上補(bǔ)丁,導(dǎo)致整個(gè)寫代碼的過(guò)程是一部調(diào)代碼的血淚史。
- 你周圍最強(qiáng)的那個(gè)工程師的開(kāi)發(fā)水平的上限就是你的上限。
二、如何閱讀源碼,how?
讀書一般分不同的場(chǎng)景:想要讓自己明智,讀史;想要讓自己靈秀,讀詩(shī);想要讓自己周密,研習(xí)數(shù)學(xué);想要讓自己深刻,攻讀哲學(xué)等;同樣的道理,代碼的閱讀也分不同的場(chǎng)景,不同場(chǎng)景下的閱讀方法自然不同。
- 為了破案而閱讀代碼;專注,集中力量攻擊且僅攻擊一點(diǎn)是這樣場(chǎng)景下閱讀代碼的主要方式。
- 為了明理而閱讀代碼;經(jīng)驗(yàn)值增長(zhǎng)太慢,要想漲快點(diǎn)怎么辦?主動(dòng)出擊啊!計(jì)算機(jī)領(lǐng)域的很多算法,基礎(chǔ)知識(shí),理論,在看過(guò)書,讀過(guò)文章后我們都似懂非懂,這時(shí),閱讀代碼就是最快地鞏固和加深理解的方式。
- 為了能級(jí)躍遷而閱讀代碼;打破平臺(tái)期,成就能級(jí)躍遷,你需要吸收合適的「光子」。這光子可以是一個(gè)開(kāi)天辟地的項(xiàng)目(比如說(shuō) Google 的 Google Map,docker 的 docker,阿里的淘寶等),可是這樣的機(jī)會(huì)并非總能被你我趕上,大多數(shù)人都是在日復(fù)一日地做些并不起眼的,只能緩緩升級(jí)的小活,這時(shí)候,與其默默沉淪,不如學(xué)莊子口中的北冥之魚那樣,沉潛浮動(dòng),積蓄能量,等待下一次摶扶搖而上九萬(wàn)里。這種積蓄能量為躍遷準(zhǔn)備的一種方式是讀代碼。讀什么?讀那些基礎(chǔ)地不能再基礎(chǔ),你認(rèn)為自己一輩子都不會(huì)去寫的那些代碼。比如 linux kernel,比如 OTP。
三、如何找到適合自己閱讀的源碼?
明白閱讀源碼的重要性以及方法后,重要的就是實(shí)踐,閱讀期間必然會(huì)遇到各種困難,尤其是沒(méi)有人一起探討時(shí),更容易放棄,開(kāi)發(fā)者圓桌會(huì)整理一系列關(guān)于閱讀源碼的實(shí)踐文章與大家一起閱讀、探討、總結(jié),堅(jiān)持源碼閱讀,堅(jiān)持更高級(jí)的進(jìn)步。
要閱讀源碼自然要獲取源代碼才行,我們?nèi)ツ睦镎业竭m合自己閱讀的源碼呢?開(kāi)源組織或平臺(tái)是一個(gè)不錯(cuò)的選擇,這些組織或平臺(tái)管理著大量的源碼資源和說(shuō)明文檔,對(duì)我們閱讀源碼是非常寶貴的資源。下面列舉幾個(gè)比較知名的源碼平臺(tái):
1. GitHub
GitHub是一個(gè)面向開(kāi)源及私有軟件項(xiàng)目的托管平臺(tái),因?yàn)橹恢С?Git 作為唯一的版本庫(kù)格式進(jìn)行托管,故名 GitHub。
GitHub 于 2008 年 4 月 10 日正式上線,除了 Git 代碼倉(cāng)庫(kù)托管及基本的 Web 管理界面以外,還提供了訂閱、討論組、文本渲染、在線文件編輯器、協(xié)作圖譜(報(bào)表)、代碼片段分享(Gist)等功能。目前,其注冊(cè)用戶已經(jīng)超過(guò)350萬(wàn),托管版本數(shù)量也是非常之多,其中不乏知名開(kāi)源項(xiàng)目 Ruby on Rails、jQuery、Python 等。訪問(wèn)地址:。
2. Apache
軟件基金會(huì)(也就是Apache Software Foundation,簡(jiǎn)稱為ASF),是專門為運(yùn)作一個(gè)開(kāi)源軟件項(xiàng)目的Apache 的團(tuán)體提供支持的非盈利性組織,這個(gè)開(kāi)源軟件的項(xiàng)目就是 Apache 項(xiàng)目。訪問(wèn)地址:。
3. 基礎(chǔ)庫(kù)
各編程語(yǔ)言的基礎(chǔ)庫(kù),比如Java語(yǔ)言的JDK就是一個(gè)非常不錯(cuò)的源碼庫(kù),可以學(xué)到很多大師級(jí)的代碼實(shí)現(xiàn)邏輯和寫法。
短時(shí)間內(nèi),可能無(wú)法確定自己應(yīng)該閱讀哪些源碼,我覺(jué)得可以從以下三個(gè)方面著手考慮:
- 工作相關(guān)的;閱讀與自己工作相關(guān)的源碼,可以在實(shí)際工作中學(xué)以致用。
- 感興趣的;興趣是最好的老師,可以推動(dòng)你探索更多的未知源碼世界。
- 職業(yè)規(guī)劃相關(guān)的;根據(jù)自身職業(yè)發(fā)展規(guī)劃閱讀相應(yīng)的源碼,比如要成為架構(gòu)師、技術(shù)總監(jiān)那么就需要閱讀與該職業(yè)相關(guān)的源碼和文檔資源。
【本文為51CTO專欄作者“朱國(guó)立”的原創(chuàng)稿件,轉(zhuǎn)載請(qǐng)通過(guò)作者微信公眾號(hào)“開(kāi)發(fā)者圓桌”獲取聯(lián)系和授權(quán)】
戳這里,看該作者更多好文
申請(qǐng)創(chuàng)業(yè)報(bào)道,分享創(chuàng)業(yè)好點(diǎn)子。點(diǎn)擊此處,共同探討創(chuàng)業(yè)新機(jī)遇!