代碼閱讀不是一件容易的工做,但倒是一件不得不作的工做,不管是工做的移交,新手的入門或者加入新的項目,都要閱讀大量由他人編寫的代碼。咱們可能不止一次地聽到過他人的抱怨,與其讀其餘人的代碼,還不如本身去寫更輕鬆。可見,代碼閱讀任務可能遠比實現一個鏈表或者樹形數據機構要複雜困難。但代碼閱讀也並不是徹底無章可循。掌握了 一些常見的技巧以及經常使用的工具以後,可以有效地下降代碼閱讀的難度,提升工做效率。算法
要養成一個習慣,常常花時間閱讀別人編寫的高品質代碼。就像閱讀高品質的散文可以豐富詞彙、激發想象力、擴展思惟同樣,分析設計良好的軟件系統的內部結構能夠學到新的框架模式、數據結構、編碼方式、算法、風格和文檔規範、應用程序編程接口甚至新的計算機語言。閱讀高品質的代碼還能夠提升編寫代碼的水準。編程
閱讀代碼的過程當中,不可避免地遇到一些在實踐中應該儘可能避免的代碼。可以快速地從壞代碼中區分出好代碼是一項有價值的技能;接觸一些編碼的反面例子有助於提升這種能力。根據:數據結構
代碼風格;結構沒必要要地複雜或者難以理解;明顯的邏輯錯誤或者疏忽;過分使用不可移植的構造;缺少維護。框架
能夠容易得識別出低品質的代碼。要選擇地閱讀代碼,同時,還要有本身的目標。要隨時準備仔細地研究那些有趣但尚不瞭解的部分;語言特性。工具
要注意並重視代碼中特殊的非功能性需求,這些需求也許會致使特定的實現風格。對可移植性、時間或者空間效率,易讀性,甚至迷惑性的需求均可能致使代碼具備很是特殊的特徵。 編碼
有時,閱讀的代碼可能來自於徹底陌生的環境。但要注意從小型的程序開始閱讀,不要當即陷入對大型系統的研究中編譯研究的程序並運行它們。這樣能夠獲得即時的回饋,瞭解代碼預想的工做方式,同時還能夠得到成就感。下一步就是主動修改代碼來檢驗對代碼的理解是否正確。注意要從小的改動作起,逐漸地增大它們的範圍。經過積極地介入現實的代碼,可以快速從中瞭解到新的環境的一些基本狀況。設計
另外一種積極地閱讀現有代碼的方式是改進它。軟件代碼是活的人工製做,它們老是被不斷地改進。若是考慮改進它,可能涉及到使用更好的設計或者算法,爲某些代碼編制文檔或者增長功能。開放源碼項目中的代碼經常沒有很好的編制文檔;將對代碼的理解應用到改進文檔上。接口