提升編程水平的靠譜方法
傑洛德·桑托 (Jerod Santo) 寫於 2016年12月19日
編者按:我原先曾在2010年5月,為「編程加油站」網( Fuel Your Coding )寫過這個話題。很不幸,那家網站現已關閉了,所以我重新在本網站發表這篇文章,以饗後來的讀者。我原本打算更新些許應時的內容,而今想想保持原樣也就足夠了。沒更新的那些部分也許看上去有些可笑,不過,呵呵,希望您樂在其中!
眾所周知,提高編程水平最顯著的方法是多寫代碼。不過,我敢向你保證,提高編程水平的另一種舉措,同多寫代碼完全相反。我將盡我所能,簡明扼要地闡述這個問題:
如果你想不斷提高編程技巧,你需要閱讀他人的代碼。
不管你信不信,假如你願意一試,我相信你會收穫頗豐。
在本文,我將幫你挑選應該閱讀哪些代碼,也會給你些如何閱讀的實戰建議。如果你已經是一位代碼閱讀者,你通過努力,能找到很多方法讓自己獲益良多。如果你還不是一位代碼閱讀者,你絕對必須往下看。
閱讀什麼
這是個難以給出建議的大議題。我不會簡單地指出你該閱讀哪些代碼,因為很難判斷你是歸屬哪種類型的程序員。但是,我會提供些指南,以便幫你挑選應該閱讀哪些代碼。
閱讀你所依賴的代碼
一個主要的著手點是你已經使用的插件程序和庫文件。
- 你喜歡的一個處理 WordPress 插件。
- 你找到的一款有用的 Ruby gem 。
- 你打算復用的一段 jQuery 插件。
所有這些都是用來學習的好素材。因為你已經很熟悉這些程序的公開 API 介面,所以你對其內部運行機制理解起來也會比較容易。另外,作為代碼使用者,你還可以添個技術文檔,實現一些功能,或者進行某些反向工程。
閱讀給你印象深刻的代碼
記得第一次見到 280 幻燈 ( 280 Slides )網站時,我就暗自思量,「真是令人印象深刻啊。」 我很快意識到,驅動該網站的代碼來自於開源項目卡布基諾( Cappucino )。我將這些知識深深地印入腦海。終於,當我偶遇另一個基於卡布基諾運行的應用並為止打動時,我知道我有個可以從中學到很多東西的項目了。最近讓你印象深刻的是什麼?它是開源的嗎?如果答案是肯定的,那就去讀吧,因為代碼會和應用程序一樣給你深刻印象。
閱讀你所膜拜的牛人寫的代碼
如果你已經從事開源軟體開發有些時日了,大概會有數個程序員能博得你的敬佩。我認為在我之上有幾個高水平的開發者,他們寫的代碼太令人羨慕了。假如你腦海中尚無某個值得推崇的開發者,現找一位也不是難事。他 / 她可能擁有符合先前兩種情況之一的代碼(你所依賴的,或者給你印象深刻的)。
閱讀那些你真正心領神會的代碼
如果你是那種闖勁十足的程序員,你可能會考慮深入諸如 Ruby on Rails 、rupal 或者 jQuery 這類大項目。在你成為一名有經驗的代碼閱讀者之前,我建議你避免參加這樣的項目。
大型項目有很多變動的構件,你最終可能糾纏於弄清概念而不是直接價值本身。迷茫會挫傷你的積極性,而你通常會在閱讀大型項目代碼時感到迷茫和泄氣。挑選小型項目的好處在於,你可以立刻在腦海里抓住整個程序的邏輯。如此這般便於你集中思想探究細節,並從中學到東西。
如何閱讀
現在你已經挑選了一些代碼準備閱讀,那麼閱讀的最佳途徑有哪些呢?我已經閱讀過大量代碼,所以我會提供若干最大化投資回報率的建議。
眾覽全局
我假設你至少在宏觀層面非常了解你已閱讀過的代碼。如果不是這樣,我建議你在閱讀代碼之前,先通覽項目網站,熟讀教程、文檔以及所有他人提供的資料。好,搞清楚上述問題後,我建議第一步,讓項目結構充斥你整個大腦。其工作量的多寡取決於你挑選的基礎代碼量,不過,挑選一個以上的文件,必會多耗費你些時間。首先,註解文件結構。這步需要使用具有文件夾層次結構視圖的編輯器,比如 TextMate 。這裡舉個例子,推特 Ruby gem 程序概覽。本步驟的目標就是熟悉源代碼。找出哪個文件 include/require/load 其他文件,大量的代碼在哪裡,用到的命名空間是什麼,諸如此類。一旦你有了整張藍圖,即可轉到挖掘細節的工作中去。
記錄你的發現
閱讀代碼不應該是一項被動的工作。隨著你開始理解程序流程,我鼓勵你邊閱讀邊添加註釋,記錄下你的設想和總結。你最初的注釋看上去可能如下所示:
# 我認為本函數在初始化後調用 # 該表達式用來做什麼的? # 第17行後,該變數作用域肯定失效了
隨著你對代碼的深入理解,你可以刪除那些給自己看的瑣碎淺顯的評論,進而換做有意義的、權威性的評論,興許可以回饋到項目中去。
使用測試
希望你選擇的項目擁有測試套件。如果沒有,你可以略過本節(或者你另找個帶測試套件的項目)。
當你閱讀他人代碼時,進行各種測試是個不錯的起始點。因為這些測試記錄了代碼會完成哪些程序構想。有些測試比其他測試包含更多信息。但不管代碼寫得如何棒,你會常常發覺,從測試中了解程序員的意圖,比從實現中了解容易得多。閱讀代碼時,你要儘力成功運行測試套件。這能保證你的開發環境配置正確,從而讓你在做某些變更時更有信心。
執行,變更,執行
誰說閱讀代碼時禁止動手的?你只有能夠將整個代碼化整為零,而後還能拼裝回去,你才算真正開始熟悉這堆代碼。還記得你通過的那些測試嗎?讓程序出錯,添加點東西,或者改變實現而不破壞原程序。試著加個你認為很酷的小功能,或者設置整個項目的日誌,以便在代碼運行的不同階段得到列印輸出。這還僅僅是閱讀嗎?就這點來說,你絕對選擇了遠超懸疑小說的冒險歷程。多美妙的事情啊!
待你閱讀完成一個代碼庫,再挑個新的,重複上述過程。你閱讀得越多,你理解得越透徹,進而你能花更少時間收穫更多成果。你會發現,這樣做的投資回報率增長相當迅速,這確實是一條快樂無比的學習之路。
從哪裡起步
我倚重的代碼閱讀來源是 GitHub 。在該網站里,你很容易找到新的項目和編程大牛,如果你不好好利用它,吃大虧的定是你自己。我建議一開始在 GitHub 上在線閱讀代碼,直到你發現一個你認為能學到東西的項目。把你找到的小寶貝克隆到你本地再行閱讀。
怎麼樣哥們?你是否將閱讀代碼作為一件學習工具?你會向別人推薦哪些項目?最近讀過什麼好的代碼嗎?
LinuxStory 小編溫馨提示:更多信息請訪問原文鏈接。
原文鏈接:https://changelog.com/posts/one-sure-fire-way-to-improve-your-coding
本文鏈接:https://linuxstory.org/one-sure-fire-way-to-improve-your-coding
本文由 LinuxStory 翻譯整理,若有不妥,歡迎指正。
轉載請註明出處,否則必究相關責任!