開源項目的那點事

jopen 9年前發布 | 6K 次閱讀 開源

上周受到一位CppJieba使用者的郵件咨詢所啟發(我也很好奇為什么那么多人還是偏向于郵件咨詢,而不是通過issue發問。),重構了CppJieba的代碼,高度集成了一下各個api,對于用戶來說使用起來更加簡單,更容易上手了。然后趁機把 CppJieba v3.0.0 和 NodeJieba 1.0.0 都發布了。

這兩者是我在GitHub上面star數最多的兩個項目,維護到現在也快兩年的時間了,除了能讓自己的GitHub更好看之外,收獲還是非常大的。 GitHub是整個IT界的知識寶藏,這幾年讓我學到最多知識的,幾乎都是在GitHub上面的開源項目。

經常會有同學問我如何去學習開源項目,所以剛好寫篇博文來談談學習開源項目的一些方法。

【最開始都是非常簡陋的】

那天我發了一個微博關于Node.js代碼考古

軟件考古真的很有意思,checkout到很舊以前的版本,看到node最開始時候的Makefile,突然感覺好像打開了游戲的簡單模式。

</blockquote>

當時有股很賤的興奮感,因為我發現Node.js的一開始也是非常的簡陋。但是簡陋往往代表著簡單,就比如說,一開始的Node.js是使用Makefile管理。所有可編譯文件都一清二楚。而不是現在的node-gyp,一大坨一大坨的源碼,光看明白這些文件相互之間的關系就要看很久。

這些和我剛開始寫CppJieba的時候一樣,因為C++這門語言標準庫的缺陷,C++11普及的不咋地,然后很多常見功能的庫,大家都是使用boost之類的庫。不知道有沒有很多人和我有同樣的感受,就是每次使用一個C++的代碼,最惡心的就是需要安裝各種依賴代碼,而且還經常因為依賴的代碼的版本問題,導致安裝失敗。這種情況在Linux上面特別嚴重,以至于vczh還諷刺過在linux安裝軟件:“看的不是使用說明,而是使用攻略。”

所以我一開始就決定不依賴任何第三方庫,遇到需要用的函數都自己寫,所以因此也誕生了我自己常用的一個C++庫limonp。雖然一開始代碼寫的很簡陋,但是起碼,我的程序可以直接在不需要安裝任何依賴庫的情況下運行,超輕量。當然單元測試依賴了gtest,不過是將gtest的源碼歸并進自己的項目代碼中。

事實證明,這個非常重要。還是那句話:沒有依賴,就沒有傷害。而且后來我看到的ideawu的SSDB也是如此。這樣的開源項目,才是重視用戶體驗的開源項目。

【善于積累自己的代碼片段】

我有一個項目叫practice,用來積累自己的代碼片段,當我在接觸一些新的技術的時候,我需要寫一些小練習代碼,我就會將練習代碼放入這個倉庫。其實有時候,這些小片段就是大項目的種子,就好像Node.js代碼考古中其實就可以看出來,剛開始的Node.js也是作者的實驗性的代碼,就是一種使用JavaScript編寫異步IO服務的實驗性代碼。(剛開始代碼只實現了當服務接收到請求的時候,就讀取js源碼文件,然后將執行結果返回,這樣而已。)

比如我自己寫的一個簡單HTTP服務器,也是從一些小實驗性代碼拼湊起來,比如socket的收發, HTTP包頭的解析,使用BlockingQueue構造線程池等。這些都是常見代碼,但是組裝起來,就是一個項目。而且寫這些代碼片段,對自己學習新技術,非常有幫助。事后還可以回頭翻看,現在有GitHub這個好社區真的比以前學習編程的時候方便太多了。

【善于站在前人的肩膀上】

這個很好理解,就是善于借助別人的分析文檔。就好比如果要深入閱讀Redis源碼的話,不妨先看一遍《Redis設計與實現》再去看源碼。就好像在走迷宮的時候,別人給了你一幅地圖,就輕松多了,還能沿途欣賞風景。

但是不理解的是不太明白為什么很多人喜歡硬啃,我除非遇到很新的開源項目,搜不到相關前人的文檔,才不得不硬啃。但是現在其實開源項目的作者都很重視文檔了,一般都很自覺寫了一些源碼文檔。

【從學習的角度來說,開源項目不是star數越多越好】

開源項目不是star數越多越好,而是對你來說越容易讀懂越好。一般和你當前所做工作越相近的就越容易讀懂。和你所做工作相近的時候,閱讀源碼能帶來一些開發或者是重構的靈感。甚至光看看一些文件名、類名、源碼注釋,就可以知道使用了什么技術,然后去搜相關技術的文章論文等來詳細研究。這些都是非常有幫助的。

如果閱讀的源碼和自己工作內容牛頭不對馬嘴,理解的也不透徹,然后沒幾天就忘了。基本上只剩下裝逼時候吹牛用了。

一味追求看高性能的代碼其實并不好, “代碼是寫給人看的,順便能在機器上運行而已。” 但是很多明星開源項目因為性能太重要了,有時候不得不略微犧牲一點可讀性來實現高性能。而且star數量大的明星項目,考慮的東西多,兼容性,易運維性等都是不小的代碼量。而這些其實并不是項目的核心。閱讀源碼,應該是越容易讀懂核心越好。

【一點感想】

感覺最近開源項目作者越來越受熱捧,讓開源項目變得越來越功利了。

希望不要忘了開源項目的初衷,是為了知識更好的分享和傳播。

</div>
來自:http://yanyiwu.com/work/2015/06/22/things-of-open-source.html

 本文由用戶 jopen 自行上傳分享,僅供網友學習交流。所有權歸原作者,若您的權利被侵害,請聯系管理員。
 轉載本站原創文章,請注明出處,并保留原始鏈接、圖片水印。
 本站是一個以用戶分享為主的開源技術平臺,歡迎各類分享!