教程

提升編程水平的靠譜方法

傑洛·桑托 (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 翻譯整理,若有不妥,歡迎指正。

轉載請註明出處,否則必究相關責任!

對這篇文章感覺如何?

太棒了
0
不錯
0
愛死了
0
不太好
0
感覺很糟
0

You may also like

Leave a reply

您的電子郵箱地址不會被公開。 必填項已用 * 標註

此站點使用Akismet來減少垃圾評論。了解我們如何處理您的評論數據

More in:教程

教程

在 Ubuntu 像22.04 LTS Linux 安裝 JUnit 5

JUnit 不僅簡單而且是一種有效的方法來編寫和執行 Java 應用程序的單元測試,因此它是開源類別中使用最廣泛的測試框架。 JUnit的最新版本5發布時帶來了許多改進。 所以,如果你使用Ubuntu […]
教程

同時運行多個 Linux 命令

了解如何在 Linux 中同時執行多個命令可以顯著提高您的效率和生產力。本文將指導您通過各種方式在單行中運行多個 Linux 命令,甚至如何自動化重複的任務。 理解基礎知識 在深入了解高級技巧之前,您 […]
教程

在 Debian 12 或 11 Linux 上安裝 Vanilla TeX Live

TeX Live 是一個全面的 TeX 排版系統發行版,最初由 Donald Knuth 開發。它提供了所有用於使用 TeX 及其變體(如 LaTeX、ConTeXt 等)排版文檔所需的基本組件和軟體包。它使用戶能夠創建專業質量的文檔,包括書籍、科學論文、文章、演示文稿等