作者丨Jerod Santo 翻譯丨Vincent
將時間撥回到2010年5月,,我最初寫這篇文章就是在這個時間,,當時發(fā)布在了Fuel Your Coding網(wǎng)站上面,。不幸的是,,這個站點現(xiàn)在已經(jīng)不存在了,,所以考慮到以后如果有人想查閱的原因,我在這里重新發(fā)布了這篇文章,。我考慮過對文章內(nèi)容進行一些修改,,但它對我而言已經(jīng)足夠好了。 如果你想提高編碼的能力,,最容易想到的一個方法就是編寫更多的代碼,。每個人都知道這點。然而,,另外一種我認為絕對也能提高的方法,可以說完全是這種方法的反面,。我將盡可能清楚地說明這一點: 閱讀別人的代碼能讓你的編碼能力得到明顯的提升,。 這句話有人信,也有人不信,。我覺得你應該相信。如果你愿意嘗試一次,我覺得你得到的回報將會是巨大的,。 本文我將會告訴你應該閱讀什么樣的代碼,,并且提出一些實際的建議,以幫助你怎么樣進行閱讀,。如果你已經(jīng)很擅長閱讀別人的代碼了,,那讀完此篇文章,你可能會發(fā)現(xiàn)新的方法,。 應該閱讀什么代碼 這是一個很重要的決定,,也是一個很難給出建議的決定。我不能只是簡單地告訴你應該閱讀這個代碼還是那個代碼,,因為它真的歸結于你要做什么事情,。但是,我將提供一些指導方針,,幫助你去選擇應該閱讀什么內(nèi)容,。 閱讀那些你用得著的代碼 這一步最好從閱讀那些你已經(jīng)在使用的插件或者庫文件開始。
這些都是你可以學習的非常好的例子,。你已熟悉了它們的公共API,,了解它們內(nèi)部工作原理的障礙是較低的。此外,,作為代碼的用戶,,你有機會添加文檔、實現(xiàn)新的功能,,或者通常以某種方式給項目做貢獻,。 閱讀那些你印象深刻的代碼 我記得第一次看到280 Slides幻燈片網(wǎng)站時,我心里想:“這太讓人印象深刻了,?!蔽液芸炝私獾剑摼W(wǎng)站的代碼就是基于的Cappuccino開源項目,。我把這些知識塞進了大腦的深處,,當我最終遇到另一個令人印象深刻但同樣是基于Cappuccino 的應用程序時,我知道我有一個項目,,我可以從中學到很多東西,。你最近對什么項目印象深刻?是開源的嗎?如果是這樣的話,這是一個很好的閱讀選擇,,因為代碼很可能會給你留下深刻的印象,。 閱讀那些讓你尊敬的大師寫出來的代碼 如果你已經(jīng)用開源軟件編碼了一段時間,可能已經(jīng)有其他程序員贏得了你的尊重,。在我的腦海中我能想到一些開發(fā)人員,,他們寫的代碼簡直令人羨慕,。 如果目前你腦海里面沒有一個受人尊敬的開發(fā)者,想找到一個并不是什么難事,。他/她可能已經(jīng)在前兩部分(你能用到的代碼,,或者給你印象深刻的代碼)中授權了一些代碼。 閱讀那些能給你帶來靈感的代碼 如果你屬于冒險型,,那么可以考慮投身于一些大型項目,,如Ruby on Rails框架,Drupal或jQuery,。但是我建議暫時別接觸這樣的項目,,除非你是一個有經(jīng)驗的而且已經(jīng)很會閱讀別人代碼的開發(fā)者了。 大型項目有更多的活動部件,,你可能最終會因為這些概念而陷入困境,,無法學到任何有價值的東西。困惑會導致沮喪,,而更大的項目更有可能讓你在閱讀中感到困惑和氣餒,。選擇一個小項目閱讀的好處是可以一次將整個程序邏輯放在腦子里。這樣你就可以關注細節(jié),,從而學習到很多知識,。 如何閱讀 既然你已經(jīng)選擇了一些代碼來閱讀,那么最好的閱讀方式是什么呢?下面提供一些方法來最大化你的投資回報率,,也就是讀的少,,但是收獲多。 先看大框架 假設你至少在宏觀層面上知道你所讀的代碼是如何實現(xiàn)的,。如果沒有,,我建議先閱讀項目的網(wǎng)站、教程,、文檔,,以及除了代碼之外你可以掌握的其他任何東西。 好了,,如果上面的步驟完成了,,那我建議你第一步就是先大致瀏覽一下項目的架構。這個階段的工作量根據(jù)你選擇的代碼庫大小的不同也不一樣,,但是還是需要一點時間的,。 首先,注意文件結構,。這一步可以使用一些具有文件夾層次結構視圖的編輯器提供幫助,,比如TextMate。例如,,這里有一個關于Twitter Ruby gem的很好的概述,。 這一步的目標是熟悉源代碼。找出哪些文件包含/請求/加載其他文件,,其中大部分代碼在哪里,,如果有的話,使用的命名空間是什么,,以及這些性質(zhì),。一旦你掌握了大局,你就可以深入挖掘細節(jié)了,。 記錄閱讀心得 閱讀代碼不應該是一種被動的行為,。當你開始理解程序流時,我鼓勵你在開始時添加注釋,,記錄你的假設和結論,。當你第一次開始的時候,你的記錄大概會是這樣的: 隨著你的理解進展,,你可以刪除你當時留下的無關緊要的一些評論,,也許還可以寫一些有意義的、權威的評論,,這些評論可能會被提交給你的項目,。 邊閱讀邊測試,例如Luke 希望你所選擇的項目有一個測試套件,。如果沒有,,您可以完全跳過這部分(或者找到一個)。 當你閱讀別人的代碼時,,測試是一個很好的起點,,因為他們記錄了代碼應該完成的任務。有些測試比其他測試更有意義,,但是不管編寫得多么好,,你經(jīng)常會發(fā)現(xiàn)程序員在測試中的意圖比在實現(xiàn)中發(fā)現(xiàn)的要容易得多。在閱讀時,,試著讓測試套件成功運行,。這將確保您的開發(fā)環(huán)境得到適當?shù)呐渲茫⑹鼓谶M行更改時更加自信,。 親自動手做 誰說閱讀代碼時雙手就得閑著?只有當你把所有的東西都打亂了,,然后自己試著重新拼裝好時,才能在這個過程中真正理解,。還記得那些通過的測試嗎?想辦法讓它們失敗,,添加更多,或者嘗試更改實現(xiàn)的邏輯而不破壞它們,。嘗試添加一個你認為很酷的小功能,,或者設置項目范圍的日志記錄,,這樣就可以在代碼的不同階段打印輸出。這還是在閱讀嗎?當然,,但在這一點上,,就得取決于自己的選擇了,看你是把它當作冒險來看,,還是把他當作一本神秘的小說來看了,。這是一件好事! 清除再重復 一旦讀完了一個代碼庫,,再選一個,,然后重新開始這個過程。代碼讀的越多,,你就能從閱讀中獲取更好的信息,,你花的時間就越少。我認為你會發(fā)現(xiàn)投資回報增長很快,,而且這是一種非常有趣的學習方式,。 從哪里入手呢 在我閱讀代碼的過程中,帶給我影響力最大的因素就是GitHub,。這個網(wǎng)站讓你很容易找到新的項目和優(yōu)秀的程序員,,如果你還沒有利用它,我覺得你就是在傷害自己,。我建議先從GitHub開始,,然后直到找到一個你認為可以從中學習的項目,再轉移到其它網(wǎng)站閱讀,。接下來可以先從git clone入手開始閱讀,! |
|
來自: silence_33 > 《Python》