隨想錄(開原始碼的學習方法)

來源:互聯網
上載者:User

 

【 聲明:著作權,歡迎轉載,請勿用於商業用途。  聯絡信箱:feixiaoxing @163.com】

 

一、曆史

 

    開原始碼作為一種特色的產物,隨著物聯網的進步得到了前所未有的發展。一開始,很多代碼其實不是開源工程,後來軟體的開發商發現根本沒法用這些代碼來掙錢,所以索性把這些代碼發布到網上,讓更多的人來進行維護和開發,比如說IBM的eclipse就是這樣。當然,在網路上還是存在很多志趣相同的人,因為網路讓他們走在了一起,一起討論方案,一起討論軟體架構,慢慢社區的影響力也會越來越大,這方面做的最好的就是linux、kde、gnome等軟體。後來,在社區發展起來後,很多的大公司為了讓這些開源軟體在自己的硬體裝置上跑起來,紛紛對這些開源工程投入資源、建立相應的基金會、貢獻代碼等,比如說hp、富士通等。等到後期,一些公司主動開發開源軟體,根本不指望他們能給公司帶來什麼收益,而是希望藉此帶來廣闊的人氣,比如說android軟體。

 

    關於開原始碼,其實要說的內容很多,每個人也有自己的體會。今天我拋磚引玉,就開原始碼談談自己的一些經曆,當然談及的項目基本上都是以C語言項目為主,對於其他的搜尋項目、架構項目、平台項目沒什麼經驗、也談不好,希望大家多多諒解。

 

 

二、特點

 

    相比較私人軟體,開原始碼有很多的自己的特點,我們不妨聊聊看看,

(1)開原始碼品質差別迥異;

(2)開原始碼形態各異,有的是完整的軟體,有的只是外掛程式;

(3)開原始碼熱度不一樣,很多軟體其實已經沒有人維護了;

(4)開原始碼一般沒有專門的技術服務人員,很多事情需要自己解決;

(5)開原始碼的編譯環境迥異,要努力尋找合適自己的。

 

 

三、閱讀代碼

 

    要閱讀代碼,需要很多的前期條件。首先,你得把軟體編譯出來吧;其次你需要基本的軟體知識吧,常用的調試方法也必須掌握;最後,對於軟體本身需要的內容你得明白吧,搞視頻播放的得知道視頻編解碼的相關知識,搞壓縮軟體的要知道壓縮的相關演算法,搞搜尋引擎需要知道爬行、分詞和索引尋找的相關知識吧,當然這些都是一些基礎條件。那麼,如果我們已經做到了上面幾點,接下來應該怎麼做呢?

(1)下載代碼,本地編譯通過,產生版本;

(2)熟練使用該軟體,明白軟體的準系統和操作方法;

(3)根據軟體功能分析軟體的模組結構;

(4)尋找到某一個軟體最被可能斷住的地方設定斷點,查看上下文;

(5)圍繞上下文判斷代碼的來龍去脈,逐步展開;

(6)嘗試修改代碼,重新編譯驗證自己的想法,迴圈之;

(7)不斷拓展代碼的閱讀範圍,注意記錄筆記和與網友分享;

(8)分析代碼的時候,忌快,一目十行不如看懂一行。

 

 

四、編譯環境

 

    對於C語言和C++與來說,使用的比較多的還是windows環境和linux環境。其實C語言的編譯其實挺簡單的,windows上面有visual studio幫忙,linux上面有autoconf和automake這個強大工具,編譯看上去是件容易的事情,其實不然,

(1)不同的編譯器對C語言的支援標準是不一樣的;

(2)編譯器的不同版本也會出現編譯不一致的情況;

(3)很多軟體常常需要進行修改,這就是對大家基本功的考驗;

(4)某些軟體需要依賴第三方庫,需要自己動手編譯;

(5)部分軟體只支援高版本的編譯器,移植到低版本的編譯器要靠自己;

(6)部分軟體使用linux可以編譯通過,但是在windows的cygwin就是編譯不過;

(7)部分軟體編譯時間長,而且記憶體佔用大,一旦編譯失敗,前功盡棄;

(8)標頭檔失敗、連結失敗、資料類型轉變失敗,很多情況需要自己處理解決。

 

 

五、選擇代碼

 

    網上的代碼很多,但是要選擇真正對自己有用的代碼。否則,對於那些低品質的代碼,即使你下載下來也沒有什麼用。

(1)下載高品質的代碼;

(2)下載的代碼要結構清晰、編寫規範;

(3)下載的代碼要可編譯;

(4)下載的代碼最好一直在演化中;

(5)下載的代碼最好經過了很長時間的驗證;

(6)下載可以獨立使用的一段代碼,好閱讀、好總結;

(7)使用業內廣泛使用的開原始碼,降低成本,盡量不要一個人戰鬥。

 

 

六、下載工具

 

    目前關於代碼下載的辦法還是很多的,當然最簡單、最方便的還是直接從伺服器上面進行下載使用,不過現在也有很多的下載軟體了,比如說,

(1)svn工具;

(2)Git工具;

(3)ftp工具等等。

 

 

七、尋找代碼

 

    我平時看代碼主要是C和C++代碼為主,Java代碼也會偶爾看一下。平時除了自己積累一些代碼之外,也會主動去尋找一些代碼,比如說,

(1)到sourceforge上尋找相關代碼;

(2)到google code上面尋找具體的代碼;

(3)到apache網站上尋找java的相關代碼;

(4)直接到開源專案網站上面尋找代碼;

(5)到csdn等網站下載代碼,偶爾會有意外的收穫;

(6)到圖書出版社下載圖書附錄的代碼;

(7)直接和軟體作者聯絡,看看能不能擷取相關的開原始碼。

 

 

八、學習項目:

 

(01)CoolPlayer:一個完整的mp3播放器

 

            

    http://coolplayer.sourceforge.net/

 

 

(02)Lua:一個完整的指令碼虛擬機器

                  

    http://www.lua.org

 

 

(03)FTK:一個簡單GUI解決方案,windows和linux都可以使用

       

    http://code.google.com/p/ftk/downloads/list

 

 

(04)Ucos:實用的即時嵌入式作業系統代碼

 

      

    http://micrium.com/page/home

 

 

(05)eMule:好用的p2p代碼

 

                

  http://www.emule.org.cn/download/

 

 

(06)Irrlicht:開源3d引擎

 

           

    http://irrlicht.sourceforge.net/

 

 

(07)TightVNC:遠端控制代碼,client和server皆有

 

         

    http://www.tightvnc.com/

 

 

(08)ToDoList:強大的任務管理軟體

 

                    

 

 http://www.abstractspoon.com/

 

(09)Notepad++:實用的文本編輯工具

 

               

 

    http://notepad-plus-plus.org/

 

 

(10)Pnglib、jpeglib:圖片庫檔案

 

  http://libpng.sourceforge.net/

    http://sourceforge.net/projects/libjpeg/

 

 

(11)CUnit: 單元測試庫檔案

 

    http://cunit.sourceforge.net/   

 

 

(12)Libsvm: 好用的資料採礦庫

    http://www.csie.ntu.edu.tw/~cjlin/libsvm/

 

 

 

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.