讀代碼是好的學習方式麼

自我開始編程以來,我一直以爲讀別人的代碼的難度,要幾倍於本身寫代碼。一直以來我都很困惑,難道是我技藝不精,因此讀別人的代碼很困難麼。程序員

其實不是,我能看懂代碼中的每一句話,並無我不認識的語法,但連在一塊兒就不懂爲何做者要這麼安排代碼了。編程

後來我漸漸有了一些想法,代碼是程序員給計算機的命令,是做者思考事後的產物,但思考的過程卻沒有體如今代碼上,這就比如一道數學題,只有一個最終答案,全部的計算過程都被省略掉了,天然難以理解做者的意圖。一段代碼一開始寫出來,後來發現存在問題,陸陸續續地改過好幾版是很常見的事情。最終版本中可能每一個小的細節,都是做者花了不少時間試錯的結果,但這個試錯的過程並無直接地體如今代碼上。函數

另外一方面,代碼中每每存在一些「隱含前提」,例如假定函數的參數已經在傳入以前被以某種方式處理過了,這個假定極可能與另外一個文件的某行代碼有關,這種聯繫很難引發閱讀者的注意。固然,好的設計能夠緩解這個問題,但很難被完全地解決。工具

代碼的歷史會被保存在版本控制系統裏,但說實話,按個人經驗,不多真的有人去翻版本歷史,由於正確地使用版本控制工具相比起寫代碼是一項比較不受重視的技能,在這種狀況下翻歷史是很是耗時的。固然,有些人會將一些細節以註釋的形式添加到代碼中,但註釋也只能承載很小的一部分信息,由於維護註釋也是一項很高的成本,我我的一貫是反對添加註釋來解釋代碼的。學習

因此閱讀代碼實際上並無看上去那麼輕鬆,爲了完全理解一段代碼,頗有可能你須要付出和編寫這段代碼差很少的努力,來了解這段代碼的歷史和前提。設計

前面提到的是閱讀「好的代碼」的狀況,好比大多數活躍的開源項目,若是是面對質量較差的代碼狀況就更爲糟糕了。版本控制

因此個人觀點是,讀代碼絕對不是一種好的學習方式,我認爲學習一項技術應當先閱讀書籍,而後嘗試本身實踐,最後再參考代碼質量較高開源項目。code

對於大多數項目而言,可能從未把「供他人學習」看成目標,只有當你本身實踐過,積累了一些經驗而且也遇到過一些困難的時候,你才能讀懂代碼而且從中學到解決問題的技巧。而在開始實踐以前,最好的知識來源是書籍,由於書籍的內容是通過精心的安排的,最高目標就是供他人閱讀。get

https://jysperm.me/2015/02/reading-code/數學

相關文章
相關標籤/搜索