給親推薦Changelog Media的主編和合夥人Jerod Santo寫的一篇文。這篇文他分享瞭如何能提高編程能力的方法,但願對你有所幫助。git
如下爲文章全文:程序員
正如每一個人都知道的那樣,寫更多的代碼是提升編程能力最顯著方法。可是我所確信的另一種能夠提升編程能力的方法是與寫代碼徹底相反的。我將要儘量清楚的陳述這種方法。github
只有大量的閱讀別人的代碼才能顯著的提升你本身的編程能力。web
不論你是否相信,可是我以爲你能夠試一下,你會以爲本身所花的時間是徹底值得的。編程
在這篇文章裏我將會教你如何選擇閱讀的內容以及教會你如何閱讀。若是你已經知道如何閱讀代碼,或許你已經發現經過你的努力能夠獲取更多。若是你還不知道如何很好的閱讀代碼,那麼請必定繼續往下看。架構
讀什麼app
咱們很難決定閱讀什麼樣的代碼,也很難給別人建議。我不會簡單的給你指出你應該讀什麼樣的代碼,由於它最終仍是取決於你喜歡讀什麼。我會給你提供一些參考,使得你可以有所側重的去選擇閱讀什麼代碼。框架
閱讀你信賴的代碼ide
你已經在使用的插件或者庫會是很好的選擇。學習
這些都是極其不錯的能夠做爲候選的地方。若是你已經對其公開的APIs十分的熟悉,那麼理解其內在的工做原理已經再也不是一件困難的事情。另外,做爲一個代碼的使用者,你有機會爲其添加文件,實現一個新的功能,或者對原來的項目提出修改的建議。
閱讀那些可以讓你眼前一亮的代碼
我還記得第一次看 280 Slides 的時候就心想這些代碼讓我眼前一亮。隨後我迅速發現這個網站的源代碼是Cappuccino的開源項目。當這一信息在個人大腦深處徘徊的時候我猛然想起另一個讓我印象深入的軟件也是運行在Cappuccino上的,這時候我知道了有一個我能夠學習到不少東西的項目了。有什麼是讓你最近印象深入的?它是一個開源項目嗎?若是是的話,那麼它將會是一個值得你去讀的代碼,由於這些代碼會像最終的應用同樣吸引你。
讀那些你認爲是大牛所寫的代碼
若是你已經用開源項目的軟件編程了一段時間,
那麼確定有發現其餘可以讓你印象深入的程序員。
個人腦海中有那麼幾個可以寫出讓我十分羨慕的代碼的程序員。
若是你的印象裏尚未這樣的開發者,只要你願意的話是很容易找到一個的。他/她或許在過去已經寫了屬於如下2個類型中的代碼。(一種是你所依賴的,另外一種是令你印象深入的)
讀那些你能夠意會的代碼
若是你敢於冒險的話,那麼有可能會考慮深刻研究相似Ruby on Rails, Drupal, 或者 jQuery的大項目。我建議你如今最好不要接觸相似的項目,除非你在閱讀代碼方面已經頗有經驗了。
大的項目有不少能夠移動的模塊,你可能會糾結於不少概念而沒法及時學到不少知識。疑惑會使人泄氣,在閱讀大的項目的過程當中更加容易產生疑惑和泄氣的負面情緒。從一個小的項目入手的好處在於整個程序的完整邏輯能夠在腦海中浮現。剩下的就是去探索其細節並從中學習。
如何閱讀代碼
既然你已經選擇了一些要讀的代碼,那麼什麼是最好的閱讀方式呢?我在過去閱讀了許多的代碼,所以能夠給你推薦一些能夠最大化投資回報率的方法。
下面請看這張大圖
假設你已經在閱讀代碼方面達到了一個突出的水平了。若是沒有,那麼建議你去查看項目的網站、使用說明書、文件或是任何除了代碼外幫助你理解的內容。
那麼,我首先建議的是使本身的腦海裏有這個項目清晰的框架。其工做量是基於你所選取的代碼庫的大小。可是隻要是大於一個文件的項目都會消耗必定的時間。
首先對文件的結構加以註釋。若是一個編者的文件具備像TextMate同樣的可視化視圖結構將會極大的幫助這一步驟的完成。譬如這裏有一個Twitter Ruby gem的完美概要。
這一步驟的目標是爲了讓你更加的熟悉代碼。找出那些文件包含/須要/加載其餘的文件,以及代碼主題的位置,是否用過命名空間,或是其餘諸如此類的東西。若是你已經瞭解了大的架構,那麼你就能夠深刻去關注其細節了。
記錄下你所發現的東西
閱讀代碼應該是一個主動的行爲。我鼓勵你根據本身的想法增長一些評論,當你理解程序的流程的時候記錄下你的假設以及本身的結論。那麼剛開始的時候你的評論多是這樣的:
當你的理解不斷的進步的時候你會減小那些碎片化的評論而且可以增長一些更加有意義或權威的評論,這些評論或許可以對完善原來的項目有所幫助。
使用測試,Luke
希望你選擇的項目有測試的套件,若是沒有的話你能夠徹底跳過這一部分(或者從新選擇一個有的項目)。
測試是一個很好的地方可以讓你隨時閱讀別人的代碼由於它們記錄了這些代碼須要實現的功能。一些測試可以提供不少的信息,可是不論寫的有多好,你在測試裏能夠比在執行裏更好的發現做者的意圖。在你閱讀代碼的時候儘可能讓其測試的套件成功運行。這會讓你的開發環境獲得合理的配置,也會讓你更加自信的去作出一些改變。
執行,調整,再執行
誰說看代碼的時候就不能執行代碼?只有將一切東西拆解再將其恢復原樣才能真正的理解其本質。還記得那些你所經歷的測試嗎?在失敗後,增長一些代碼,或者在不破壞的前提下改變其執行的狀況。嘗試增長一些你以爲很酷的小屬性,或者在項目範圍內增長一些記錄,這樣你就能夠在編寫代碼的不一樣階段打印輸出。這些還僅僅是閱讀代碼嗎?
這是毫無疑問的,可是從這個角度看更像是一段奇妙的經歷而不是閱讀一篇神祕的小說。這是一件很是好的事情。
沖洗和重複
一旦你閱讀完一個代碼庫,當即選取另一個並重復以前的步驟。你只有閱讀足夠多的代碼,才能提升閱讀新的代碼的效率。你會發現你的投入產出比在不斷的上升而且發現這是一個十分有趣的學習過程。
從哪裏開始
在個人代碼閱讀資源中,GitHub是對我影響最大的。在這個網站裏,你可以很快找到新項目以及其做者,若是你不使用這個網站那麼對你來講是一個很大的損失。我建議先從GitHub上開始直到你可以找到一個能夠學習的項目。記住下面這段話並開始閱讀吧。
你是怎麼看的?你是把閱讀代碼當成一種學習的手段嗎?你會給別人推薦哪些項目?最近是否閱讀過很好的代碼?
由於The Wayback Machine的緣故你能夠閱讀到原來的文章。
做者介紹:Jerod Santo是Changelog Media的主編和合夥人。他聯合主編了旗艦博客—The Changelog,他領導了全部使得Changelog變得更加酷炫的項目。他也經營着本身的訂製軟件公司Object Lateral。