一種肯定能提高開發者編程能力的黃金方法,即使你不寫大量的代碼
作者丨Jerod Santo
翻譯丨Vincent
作為一名開發人員,怎樣才能提高自己的開發能力?本文作者以自己的親身體驗為例,即使不寫大量的代碼,也可以提升自己的能力,那這個方法是什麼呢?以下為譯文。
將時間撥回到2010年5月,我最初寫這篇文章就是在這個時間,當時發布在了Fuel Your Coding網站上面。不幸的是,這個站點現在已經不存在了,所以考慮到以後如果有人想查閱的原因,我在這裡重新發布了這篇文章。我考慮過對文章內容進行一些修改,但它對我而言已經足夠好了。
如果你想提高編碼的能力,最容易想到的一個方法就是編寫更多的代碼。每個人都知道這點。然而,另外一種我認為絕對也能提高的方法,可以說完全是這種方法的反面。我將儘可能清楚地說明這一點:
閱讀別人的代碼能讓你的編碼能力得到明顯的提升。
這句話有人信,也有人不信。我覺得你應該相信。如果你願意嘗試一次,我覺得你得到的回報將會是巨大的。
本文我將會告訴你應該閱讀什麼樣的代碼,並且提出一些實際的建議,以幫助你怎麼樣進行閱讀。如果你已經很擅長閱讀別人的代碼了,那讀完此篇文章,你可能會發現新的方法。
應該閱讀什麼代碼
這是一個很重要的決定,也是一個很難給出建議的決定。我不能只是簡單地告訴你應該閱讀這個代碼還是那個代碼,因為它真的歸結於你要做什麼事情。但是,我將提供一些指導方針,幫助你去選擇應該閱讀什麼內容。
閱讀那些你用得著的代碼
這一步最好從閱讀那些你已經在使用的插件或者庫文件開始。
你非常喜歡的WordPress插件
你覺得很有用的Ruby gem工具包
你可能還會使用到的jQuery 插件
這些都是你可以學習的非常好的例子。你已熟悉了它們的公共API,了解它們內部工作原理的障礙是較低的。此外,作為代碼的用戶,你有機會添加文檔、實現新的功能,或者通常以某種方式給項目做貢獻。
閱讀那些你印象深刻的代碼
我記得第一次看到280 Slides幻燈片網站時,我心裡想:「這太讓人印象深刻了。」我很快了解到,該網站的代碼就是基於的Cappuccino開源項目。我把這些知識塞進了大腦的深處,當我最終遇到另一個令人印象深刻但同樣是基於Cappuccino 的應用程序時,我知道我有一個項目,我可以從中學到很多東西。你最近對什麼項目印象深刻?是開源的嗎?如果是這樣的話,這是一個很好的閱讀選擇,因為代碼很可能會給你留下深刻的印象。
閱讀那些讓你尊敬的大師寫出來的代碼
如果你已經用開源軟體編碼了一段時間,可能已經有其他程序員贏得了你的尊重。在我的腦海中我能想到一些開發人員,他們寫的代碼簡直令人羨慕。
如果目前你腦海裡面沒有一個受人尊敬的開發者,想找到一個並不是什麼難事。他/她可能已經在前兩部分(你能用到的代碼,或者給你印象深刻的代碼)中授權了一些代碼。
閱讀那些能給你帶來靈感的代碼
如果你屬於冒險型,那麼可以考慮投身於一些大型項目,如Ruby on Rails框架,Drupal或jQuery。但是我建議暫時別接觸這樣的項目,除非你是一個有經驗的而且已經很會閱讀別人代碼的開發者了。
大型項目有更多的活動部件,你可能最終會因為這些概念而陷入困境,無法學到任何有價值的東西。困惑會導致沮喪,而更大的項目更有可能讓你在閱讀中感到困惑和氣餒。選擇一個小項目閱讀的好處是可以一次將整個程序邏輯放在腦子裡。這樣你就可以關注細節,從而學習到很多知識。
如何閱讀
既然你已經選擇了一些代碼來閱讀,那麼最好的閱讀方式是什麼呢?下面提供一些方法來最大化你的投資回報率,也就是讀的少,但是收穫多。
先看大框架
假設你至少在宏觀層面上知道你所讀的代碼是如何實現的。如果沒有,我建議先閱讀項目的網站、教程、文檔,以及除了代碼之外你可以掌握的其他任何東西。
好了,如果上面的步驟完成了,那我建議你第一步就是先大致瀏覽一下項目的架構。這個階段的工作量根據你選擇的代碼庫大小的不同也不一樣,但是還是需要一點時間的。
首先,注意文件結構。這一步可以使用一些具有文件夾層次結構視圖的編輯器提供幫助,比如TextMate。例如,這裡有一個關於Twitter Ruby gem的很好的概述。
這一步的目標是熟悉源代碼。找出哪些文件包含/請求/載入其他文件,其中大部分代碼在哪裡,如果有的話,使用的命名空間是什麼,以及這些性質。一旦你掌握了大局,你就可以深入挖掘細節了。
記錄閱讀心得
閱讀代碼不應該是一種被動的行為。當你開始理解程序流時,我鼓勵你在開始時添加註釋,記錄你的假設和結論。當你第一次開始的時候,你的記錄大概會是這樣的:
隨著你的理解進展,你可以刪除你當時留下的無關緊要的一些評論,也許還可以寫一些有意義的、權威的評論,這些評論可能會被提交給你的項目。
邊閱讀邊測試,例如Luke
希望你所選擇的項目有一個測試套件。如果沒有,您可以完全跳過這部分(或者找到一個)。
當你閱讀別人的代碼時,測試是一個很好的起點,因為他們記錄了代碼應該完成的任務。有些測試比其他測試更有意義,但是不管編寫得多麼好,你經常會發現程序員在測試中的意圖比在實現中發現的要容易得多。在閱讀時,試著讓測試套件成功運行。這將確保您的開發環境得到適當的配置,並使您在進行更改時更加自信。
親自動手做
誰說閱讀代碼時雙手就得閑著?只有當你把所有的東西都打亂了,然後自己試著重新拼裝好時,才能在這個過程中真正理解。還記得那些通過的測試嗎?想辦法讓它們失敗,添加更多,或者嘗試更改實現的邏輯而不破壞它們。嘗試添加一個你認為很酷的小功能,或者設置項目範圍的日誌記錄,這樣就可以在代碼的不同階段列印輸出。這還是在閱讀嗎?當然,但在這一點上,就得取決於自己的選擇了,看你是把它當作冒險來看,還是把他當作一本神秘的小說來看了。這是一件好事!
清除再重複
一旦讀完了一個代碼庫,再選一個,然後重新開始這個過程。代碼讀的越多,你就能從閱讀中獲取更好的信息,你花的時間就越少。我認為你會發現投資回報增長很快,而且這是一種非常有趣的學習方式。
從哪裡入手呢
在我閱讀代碼的過程中,帶給我影響力最大的因素就是GitHub。這個網站讓你很容易找到新的項目和優秀的程序員,如果你還沒有利用它,我覺得你就是在傷害自己。我建議先從GitHub開始,然後直到找到一個你認為可以從中學習的項目,再轉移到其它網站閱讀。接下來可以先從git clone入手開始閱讀!
點擊展開全文
※看Github上的開發者是如何更換編程語言的?
※如何在17天之內收穫70份工作面試
※人工智慧衝擊下的十大高危行業,你中了嗎?
※ES8都有哪些新特性,你還在用ES6嗎?
※學習DevOps的熱門原則
TAG:CSDN |
※分數只能說明某一方面的能力,並不能決定你的人生
※情緒穩定也是一種能力,這樣做會讓你更強大
※沒有「能隨時離開的能力」,就別看不上體制內的穩定
※有三種能力可以決定你的未來
※孩子和夥伴在一起玩,不但能養好習慣還能提高能力
※連特種兵都佩服的兵種,他們的能力不容小覷,說出來你可能不信
※跑步獨處是一種能力,不是誰都能具備!
※在職場中,不論面對任何問題,一定先確認有足夠能力做的積極想法
※決定你的不是能力,而是格局
※不卑不亢是一種能力
※這樣做能有效提高孩子的社交能力
※如何提高身體的自我修復能力,可以這樣訓練出來,精品閱讀
※控制情緒的能力,決定了你婚姻的質量
※蘋果這場一點都不硬的發布會,卻讓軟體有了硬體賺錢的能力
※態度,比能力更能衡量你
※大腦能力不是固定不變的,大腦終身具有神經可塑性
※擁有這幾款拍照能力強勁的智能手機,您也能有成為攝影達人的可能
※你的能力和心智,決定了你能走多遠
※手機發展這麼迅速,拍照能力會取代相機?可能是你想多了吧!
※印度大叔奇特的超能力,不僅自己不怕電,還能把電當做食物!