Free browsing:如何閱讀源代碼/項目:Editor.md

項目發現

Editor.md

一個可內嵌的實現Markdown編輯器的。。。東西??
原來CSDN的就是用這個做的。。。

好奇的點

如何實現雙屏同步滾動?
-拋錨?

Quid:如何閱讀源代碼

Summary

follow開發者給出的:
手冊(Getting Started等);例子(Example)
寫註釋,理解函數作用的對象和效果。
使用IDE軟件,幫助理解函數之間的嵌套調用。
善用工具:ctags

Ans:流程圖

  1. 畫出整個程序的流程圖,…  
  2. 對流程各節點(函數或過程)的理解。流程的每一節點是構成整個流程的不可缺少的部份。   
  3. 再把流程和流程各節點串起來理解整個程序,可能的話最好寫出讀書筆記。  
  4. 如果想深刻的學習到源代碼的精髓所在,請寫一個相近的程序進行操練。當你理解了這個程序並不表明你掌握了這個程序,只有在你操練一個相近的程序時,你才知道你到底理解了多少,掌握了多少。
    作者:夏夢竹
    鏈接:https://www.zhihu.com/question/19637879/answer/13542394
    來源:知乎
    著作權歸作者所有。商業轉載請聯繫作者獲得授權,非商業轉載請註明出處。

-

Ans: Overview of projects worth reading

江疆

(前面有人提到了 Redis、Lua 和 nginx,這些我也推薦)

讀代碼可能有兩種原因,一是對這個東西某處不滿意想改,二是想學習其中的設計實現思路,前者動力更直接一些,如 @陸亦斌 所說,後者則不好選,因爲純粹泛泛地看跟你實際環境關係不大的代碼,其實不太容易學到東西。而且現代軟件設計其實也充滿了許多妥協和折衷,大家最常用的軟件,往往不是代碼最乾淨的,而是做了許多妥協折衷的。

比如最明顯的有 Linux Kernel,有很多風格不一致的代碼 (但這並不減弱它的學習價值);mplayer 的代碼是我見過的最醜陋但又非常實用的,在這樣的代碼基礎上爲啥能夠活躍發展到今天,也很值得研究;vim 代碼打滿了各種 #ifdef,你看了也會很驚訝爲啥一個人能維護如此錯綜複雜的代碼這麼多年。我們有句老話,叫做水至清則無魚,軟件設計其實很多時候是在受限的條件下解決問題的本事。 Beautiful Code [1] 介紹了很多精彩的代碼,Beautiful Architecture [2] 介紹了很多值得學習的架構。下面還可以補充一些:

git
FreeType
fontconfig
cairo
NetBSD 的用戶空間代碼
DTrace
WebKit
Mac OS X 的 launchd

從擴展思路的角度來說,一個程序員應該好好讀過這樣一些代碼:

一個操作系統內核
一個編譯器
一個解釋器
一個數據庫
一個 Web 服務器
一個 Web 瀏覽器
一個編輯器

因爲這些都是幾十年來被頻繁地反覆實現的代碼,無數天才的程序員在這些領域發揮智慧,所以在它們各自領域“state of the art”的代碼,可想而知質量是很高的。

[1] http://oreilly.com/catalog/9780596510046
[2] http://oreilly.com/catalog/9780596517984

https://www.zhihu.com/people/jjgod/answers

作爲編譯器方面的我建議看 Larceny 項目,這是一個高效的 Scheme 編譯器,生成 x86 和 SPARC 機器代碼、C 代碼或者 CIL 用於 .net。作者是 William D. Clinger,Scheme 標準組成員。

Ans: 單元測試&示例代碼&架構文檔

姜寧
專職參與Apache旗下多個開源項目 Camel, CXF, ServiceMix, ActiveMQ 開發的攻城師一枚。

我很認同莊表偉總結的 “學習開源,就儘可能在代碼裏找答案,而不是在代碼之外找答案,那些都是二手的,而且很可能是不準確的。” 但是如何讀好,讀懂代碼,我這邊還是有不同的認識。

  1. 需要從代碼管理庫下載完整的源代碼,而不是簡單的源代碼文件包或者source.jar.
    這樣做有很多好處,一個是你可以獲取代碼的修改記錄,還有你可以獲取到完整的測試代碼,當你要提交patch的時候,你可以藉助版本管理工具生成針對不同版本的patch。

  2. 示例代碼與單元測試
    示例代碼可以幫助你學會使用相關開源項目的API。很多朋友在使用開源項目的時候遇到一個小問題就發信給開發者要這樣或者那樣的示例代碼,其實他們沒有發現大部分的開源項目在開發的過程中,爲了驗證其實現的功能,都會寫很多單元測試代碼。這些代碼其實是非常好的示例代碼。可能下源碼,建工程會花費你幾個小時的時間,但是如果你想深入瞭解開源項目的話,這點投資還是很有價值的。
    其實讀單元測試的好處太多了,這裏簡單給大家列一下:

    • 由於一個單元測試一般也就是幾個小時的開發工作量,你很容易就能讀懂相關的代碼。
    • 每個單元測試都是可以獨立運行的,這樣節省你跟蹤調試的時間。
    • 單元測試在很大程度定義了軟件的功能,可以幫助你快速掌握項目的相關API。
    • 如果你修改的開源項目的代碼,你可以通過修改單元測試來驗證你的修改是否正確。
    • 單元測試裏面也蘊含架構的技巧,如果被測試對象沒有很好解耦你是很難寫出精簡的測試代碼的。
  3. 架構文檔
    其實大部分的開源項目都會對其架構有一定的描述,這些描述可能會有點過時,但是通讀一下會讓你項目有一個比較深入的認識。這樣做好比是讓你對北京的二環,三環,四環,五環有個大體的認識。這樣在你要對代碼的某塊內容進行詳細研究的時候(例如找中關村的位置的時候,知道西北四環)就能很快定位了。

Quid:什麼是Git

http://blog.a0z.me/2014/05/21/GitBeginning/

臥了個大槽

我才發現學校有這麼個好東西啊!!!!!
尼瑪一年半學白上了啊!!!真他媽白上了啊!!!
(雖然這學期開學以來我已經有過很多次我白白荒廢了一年半大學生涯的挫敗感了/(ㄒoㄒ)/

“知識庫”

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章