提高編程

以下文章全文:

正如每個(gè)人都知道的那樣,寫更多的代碼是提高編程能力最顯著方法擅腰。但是我所確信的另外一種可以提高編程能力的方法是與寫代碼完全相反的徙鱼。我將要盡可能清楚的陳述這種方法恶迈。

只有大量的閱讀別人的代碼才能顯著的提高你自己的編程能力啰劲。

不論你是否相信,但是我覺得你可以試一下筋现,你會(huì)覺得自己所花的時(shí)間是完全值得的庭瑰。

在這篇文章里我將會(huì)教你如何選擇閱讀的內(nèi)容以及教會(huì)你如何閱讀局装。如果你已經(jīng)知道如何閱讀代碼藕施,或許你已經(jīng)發(fā)現(xiàn)通過你的努力可以獲取更多。如果你還不知道如何很好的閱讀代碼藻茂,那么請(qǐng)一定繼續(xù)往下看驹暑。

讀什么

我們很難決定閱讀什么樣的代碼,也很難給別人建議辨赐。我不會(huì)簡(jiǎn)單的給你指出你應(yīng)該讀什么樣的代碼优俘,因?yàn)樗罱K還是取決于你喜歡讀什么。我會(huì)給你提供一些參考掀序,使得你能夠有所側(cè)重的去選擇閱讀什么代碼帆焕。

這些都是極其錯(cuò)可以作為候選的地方。如果你已經(jīng)對(duì)其公開的APIs十分的熟悉森枪,那么理解其內(nèi)在的工作原理已經(jīng)不再是一件困難的事情视搏。另外,作為一個(gè)代碼的使用者县袱,你有機(jī)會(huì)為其添加文件浑娜,實(shí)現(xiàn)一個(gè)新的功能,或者對(duì)原來的項(xiàng)目提出修改的建議式散。

閱讀那些能夠讓你眼前一亮的代碼

我還記得第一次看280 Slides的時(shí)候就心想這些代碼讓我眼前一亮筋遭。隨后我迅速發(fā)現(xiàn)這個(gè)網(wǎng)站的源代碼是Cappuccino的開源項(xiàng)目。當(dāng)這一信息在我的大腦深處徘徊的時(shí)候我猛然想起另外一個(gè)讓我印象深刻的軟件也是運(yùn)行在Cappuccino上的暴拄,這時(shí)候我知道了有一個(gè)我可以學(xué)習(xí)到很多東西的項(xiàng)目了漓滔。有什么是讓你最近印象深刻的?它是一個(gè)開源項(xiàng)目嗎乖篷?如果是的話响驴,那么它將會(huì)是一個(gè)值得你去讀的代碼,因?yàn)檫@些代碼會(huì)像最終的應(yīng)用一樣吸引你撕蔼。

讀那些你認(rèn)為是大牛所寫的代碼

如果你已經(jīng)用開源項(xiàng)目的軟件編程了一段時(shí)間豁鲤,

那么肯定有發(fā)現(xiàn)其他能夠讓你印象深刻的程序員。

我的腦海中有那么幾個(gè)能夠?qū)懗鲎屛沂至w慕的代碼的程序員鲸沮。

如果你的印象里還沒有這樣的開發(fā)者琳骡,只要你愿意的話是很容易找到一個(gè)的。他/她或許在過去已經(jīng)寫了屬于以下2個(gè)類型中的代碼讼溺。(一種是你所依賴的楣号,另一種是令你印象深刻的)

讀那些你可以意會(huì)的代碼

如果你勇于冒險(xiǎn)的話,那么有可能會(huì)考慮深入研究類似Ruby on Rails, Drupal, 或者 jQuery的大項(xiàng)目怒坯。我建議你現(xiàn)在最好不要接觸類似的項(xiàng)目炫狱,除非你在閱讀代碼方面已經(jīng)很有經(jīng)驗(yàn)了。

大的項(xiàng)目有很多可以移動(dòng)的模塊剔猿,你可能會(huì)糾結(jié)于很多概念而無法及時(shí)學(xué)到很多知識(shí)毕荐。疑惑會(huì)令人泄氣,在閱讀大的項(xiàng)目的過程中更加容易產(chǎn)生疑惑和泄氣的負(fù)面情緒艳馒。從一個(gè)小的項(xiàng)目入手的好處在于整個(gè)程序的完整邏輯可以在腦海中浮現(xiàn)憎亚。剩下的就是去探索其細(xì)節(jié)并從中學(xué)習(xí)。

如何閱讀代碼

既然你已經(jīng)選擇了一些要讀的代碼弄慰,那么什么是最好的閱讀方式呢第美?我在過去閱讀了許多的代碼,因此可以給你推薦一些可以最大化投資回報(bào)率的方法陆爽。

假設(shè)你已經(jīng)在閱讀代碼方面達(dá)到了一個(gè)突出的水平了什往。如果沒有,那么建議你去查看項(xiàng)目的網(wǎng)站慌闭、使用說明書别威、文件或是任何除了代碼外幫助你理解的內(nèi)容躯舔。

那么,我首先建議的是使自己的腦海里有這個(gè)項(xiàng)目清晰的框架省古。其工作量是基于你所選取的代碼庫的大小粥庄。但是只要是大于一個(gè)文件的項(xiàng)目都會(huì)消耗一定的時(shí)間。

首先對(duì)文件的結(jié)構(gòu)加以注釋豺妓。如果一個(gè)編者的文件具有像TextMate一樣的可視化視圖結(jié)構(gòu)將會(huì)極大的幫助這一步驟的完成惜互。譬如這里有一個(gè)Twitter Ruby gem的完美概要。

這一步驟的目標(biāo)是為了讓你更加的熟悉代碼琳拭。找出那些文件包含/需要/加載其他的文件训堆,以及代碼主題的位置,是否用過命名空間白嘁,或是其他諸如此類的東西坑鱼。如果你已經(jīng)了解了大的架構(gòu),那么你就可以深入去關(guān)注其細(xì)節(jié)了絮缅。

記錄下你所發(fā)現(xiàn)的東西

閱讀代碼應(yīng)該是一個(gè)主動(dòng)的行為姑躲。我鼓勵(lì)你根據(jù)自己的想法增加一些評(píng)論,當(dāng)你理解程序的流程的時(shí)候記錄下你的假設(shè)以及自己的結(jié)論盟蚣。那么剛開始的時(shí)候你的評(píng)論可能是這樣的:

當(dāng)你的理解不斷的進(jìn)步的時(shí)候你會(huì)減少那些碎片化的評(píng)論并且能夠增加一些更加有意義或權(quán)威的評(píng)論黍析,這些評(píng)論或許能夠?qū)ν晟圃瓉淼捻?xiàng)目有所幫助。

使用測(cè)試屎开,Luke

但愿你選擇的項(xiàng)目有測(cè)試的套件阐枣,如果沒有的話你可以完全跳過這一部分(或者重新選擇一個(gè)有的項(xiàng)目)。

測(cè)試是一個(gè)很好的地方能夠讓你隨時(shí)閱讀別人的代碼因?yàn)樗鼈冇涗浟诉@些代碼需要實(shí)現(xiàn)的功能奄抽。一些測(cè)試能夠提供很多的信息蔼两,但是不論寫的有多好,你在測(cè)試?yán)锟梢员仍趫?zhí)行里更好的發(fā)現(xiàn)作者的意圖逞度。在你閱讀代碼的時(shí)候盡量讓其測(cè)試的套件成功運(yùn)行额划。這會(huì)讓你的開發(fā)環(huán)境得到合理的配置,也會(huì)讓你更加自信的去做出一些改變档泽。

執(zhí)行俊戳,調(diào)整,再執(zhí)行

誰說看代碼的時(shí)候就不能執(zhí)行代碼馆匿?只有將一切東西拆解再將其恢復(fù)原樣才能真正的理解其本質(zhì)抑胎。還記得那些你所經(jīng)歷的測(cè)試嗎?在失敗后渐北,增加一些代碼阿逃,或者在不破壞的前提下改變其執(zhí)行的情況。嘗試增加一些你覺得很酷的小屬性,或者在項(xiàng)目范圍內(nèi)增加一些記錄恃锉,這樣你就可以在編寫代碼的不同階段打印輸出搀菩。這些還僅僅是閱讀代碼嗎?

這是毫無疑問的破托,但是從這個(gè)角度看更像是一段奇妙的經(jīng)歷而不是閱讀一篇神秘的小說肪跋。這是一件非常好的事情。

沖洗和重復(fù)

一旦你閱讀完一個(gè)代碼庫炼团,立即選取另外一個(gè)并重復(fù)之前的步驟。你只有閱讀足夠多的代碼疏尿,才能提高閱讀新的代碼的效率瘟芝。你會(huì)發(fā)現(xiàn)你的投入產(chǎn)出比在不斷的上升并且發(fā)現(xiàn)這是一個(gè)十分有趣的學(xué)習(xí)過程。

從哪里開始

在我的代碼閱讀資源中褥琐,GitHub是對(duì)我影響最大的锌俱。在這個(gè)網(wǎng)站里,你能夠很快找到新項(xiàng)目以及其作者敌呈,如果你不使用這個(gè)網(wǎng)站那么對(duì)你來說是一個(gè)很大的損失贸宏。我建議先從GitHub上開始直到你能夠找到一個(gè)可以學(xué)習(xí)的項(xiàng)目。記住下面這段話并開始閱讀吧磕洪。

你是怎么看的吭练?你是把閱讀代碼當(dāng)成一種學(xué)習(xí)的手段嗎?你會(huì)給別人推薦哪些項(xiàng)目析显?最近是否閱讀過很好的代碼鲫咽?

?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
  • 序言:七十年代末,一起剝皮案震驚了整個(gè)濱河市谷异,隨后出現(xiàn)的幾起案子分尸,更是在濱河造成了極大的恐慌,老刑警劉巖歹嘹,帶你破解...
    沈念sama閱讀 211,743評(píng)論 6 492
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件箩绍,死亡現(xiàn)場(chǎng)離奇詭異,居然都是意外死亡尺上,警方通過查閱死者的電腦和手機(jī)材蛛,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 90,296評(píng)論 3 385
  • 文/潘曉璐 我一進(jìn)店門,熙熙樓的掌柜王于貴愁眉苦臉地迎上來怎抛,“玉大人仰税,你說我怎么就攤上這事〕樗撸” “怎么了陨簇?”我有些...
    開封第一講書人閱讀 157,285評(píng)論 0 348
  • 文/不壞的土叔 我叫張陵,是天一觀的道長。 經(jīng)常有香客問我河绽,道長己单,這世上最難降的妖魔是什么? 我笑而不...
    開封第一講書人閱讀 56,485評(píng)論 1 283
  • 正文 為了忘掉前任耙饰,我火速辦了婚禮纹笼,結(jié)果婚禮上,老公的妹妹穿的比我還像新娘苟跪。我一直安慰自己廷痘,他們只是感情好,可當(dāng)我...
    茶點(diǎn)故事閱讀 65,581評(píng)論 6 386
  • 文/花漫 我一把揭開白布件已。 她就那樣靜靜地躺著笋额,像睡著了一般。 火紅的嫁衣襯著肌膚如雪篷扩。 梳的紋絲不亂的頭發(fā)上兄猩,一...
    開封第一講書人閱讀 49,821評(píng)論 1 290
  • 那天,我揣著相機(jī)與錄音鉴未,去河邊找鬼枢冤。 笑死,一個(gè)胖子當(dāng)著我的面吹牛铜秆,可吹牛的內(nèi)容都是我干的淹真。 我是一名探鬼主播,決...
    沈念sama閱讀 38,960評(píng)論 3 408
  • 文/蒼蘭香墨 我猛地睜開眼连茧,長吁一口氣:“原來是場(chǎng)噩夢(mèng)啊……” “哼趟咆!你這毒婦竟也來了?” 一聲冷哼從身側(cè)響起梅屉,我...
    開封第一講書人閱讀 37,719評(píng)論 0 266
  • 序言:老撾萬榮一對(duì)情侶失蹤值纱,失蹤者是張志新(化名)和其女友劉穎,沒想到半個(gè)月后坯汤,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體虐唠,經(jīng)...
    沈念sama閱讀 44,186評(píng)論 1 303
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 36,516評(píng)論 2 327
  • 正文 我和宋清朗相戀三年惰聂,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了疆偿。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片。...
    茶點(diǎn)故事閱讀 38,650評(píng)論 1 340
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡搓幌,死狀恐怖杆故,靈堂內(nèi)的尸體忽然破棺而出,到底是詐尸還是另有隱情溉愁,我是刑警寧澤处铛,帶...
    沈念sama閱讀 34,329評(píng)論 4 330
  • 正文 年R本政府宣布,位于F島的核電站,受9級(jí)特大地震影響撤蟆,放射性物質(zhì)發(fā)生泄漏奕塑。R本人自食惡果不足惜,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 39,936評(píng)論 3 313
  • 文/蒙蒙 一家肯、第九天 我趴在偏房一處隱蔽的房頂上張望龄砰。 院中可真熱鬧,春花似錦讨衣、人聲如沸换棚。這莊子的主人今日做“春日...
    開封第一講書人閱讀 30,757評(píng)論 0 21
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽固蚤。三九已至,卻和暖如春愿险,著一層夾襖步出監(jiān)牢的瞬間颇蜡,已是汗流浹背价说。 一陣腳步聲響...
    開封第一講書人閱讀 31,991評(píng)論 1 266
  • 我被黑心中介騙來泰國打工辆亏, 沒想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留,地道東北人鳖目。 一個(gè)月前我還...
    沈念sama閱讀 46,370評(píng)論 2 360
  • 正文 我出身青樓扮叨,卻偏偏與公主長得像,于是被迫代替她去往敵國和親领迈。 傳聞我的和親對(duì)象是個(gè)殘疾皇子彻磁,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 43,527評(píng)論 2 349

推薦閱讀更多精彩內(nèi)容