真实的国产乱ⅩXXX66竹夫人,五月香六月婷婷激情综合,亚洲日本VA一区二区三区,亚洲精品一区二区三区麻豆

成都創(chuàng)新互聯(lián)網(wǎng)站制作重慶分公司

如何看待看源代碼-創(chuàng)新互聯(lián)

本篇文章給大家分享的是有關(guān)如何看待看源代碼,小編覺得挺實(shí)用的,因此分享給大家學(xué)習(xí),希望大家閱讀完這篇文章后可以有所收獲,話不多說,跟著小編一起來看看吧。

成都創(chuàng)新互聯(lián)公司主要從事做網(wǎng)站、成都網(wǎng)站建設(shè)、網(wǎng)頁設(shè)計(jì)、企業(yè)做網(wǎng)站、公司建網(wǎng)站等業(yè)務(wù)。立足成都服務(wù)和平,十載網(wǎng)站建設(shè)經(jīng)驗(yàn),價格優(yōu)惠、服務(wù)專業(yè),歡迎來電咨詢建站服務(wù):18980820575

1. 前言

    很多人問我如何看源代碼?是不是我在看源代碼這方面特別有天賦?

    其實(shí)不是的,我也只是個普通人,跟大伙沒啥分別,

    只不過我沒有別的特別愛好,一有空時,不是寫自己的代碼就是看別人的代碼,

    我在看源代碼時比較有耐心,純粹就是興趣驅(qū)動,或者說是一種好奇心。

    當(dāng)然,我不會隨隨便便拿起一個開源項(xiàng)目就看,而是經(jīng)過一定了解后才決定看它的源代碼的,

    一旦決定要看了,我至少要把這個開源項(xiàng)目80%以上的代碼看完,并不是那種膚淺的看,

    而是仔細(xì)研究每一行代碼。

    2. 我看過這些開源項(xiàng)目

    按時間先后順序:

    2007:

    OpenJDK Javac1.7

    2008:

    Erlang編譯器 (看得最少的一個,只看了一半源代碼)

    2009:

    Tomcat6

    Junit4

    Ibatis2.3

    OSCache2.4

    Ehcache1.6

    Mongodb-mongo-java-driver1.2

    Velocity1.6

    2010:

    MySQL JDBC Driver (mysql-connector-java-5.1.13)

    PostgreSQL JDBC Driver (postgresql-jdbc-8.4-701)

    Netty3.2

    Tomcat7

    2011:

    Jetty8

    目前主要關(guān)注這4個:

    OpenJDK Javac1.7

    Netty4.0

    Tomcat7

    Jetty8

    我現(xiàn)在每隔1到7天就會看這4個開源項(xiàng)目的源代碼庫中有沒有更新,

    我裝了TortoiseHg, TortoiseGit, TortoiseSVN,

    因?yàn)榭碕avac1.7的源代碼更新用TortoiseHg比較方便,

    而看Netty4.0要用TortoiseGit,最后兩者用TortoiseSVN。

    3. 我對看源代碼的人進(jìn)行了分類

    分5種人:

    1) 解決問題型

    這種類型的人通常是在工作學(xué)習(xí)中碰到了一個很費(fèi)解或很棘手的問題,

    文檔也看了,google也找了,同事、同學(xué)也問過了,

    但是問題還是無法解決,于是不得不把源代碼下下來,然后一邊看一邊debug,直到問題解決。

    2) 三分鐘熱度型

    可能是看到別人也在看或者在論壇上看到某些人說XXX設(shè)計(jì)得很好,性能也不錯,或者看到某些人在論壇上發(fā)了些分析源代碼的文章,

    再加上自己一開始也興趣滿滿,然后也跟風(fēng)了,看了10來個類的代碼,啊,發(fā)現(xiàn)太痛苦,方法之間調(diào)來調(diào)去的,太繞了,頭快炸了,

    給自己找個理由,這代碼寫得太垃圾了,媽的,不看了。

    3) 一知半解型

    網(wǎng)上經(jīng)??吹接腥嗽趯懛治鲈创a的文章,一上來就是一陀陀的源代碼,然后告訴你這做了什么,那做了什么,

    就加了點(diǎn)中文注釋,有時這中文注釋還不如源代碼中的英文注釋好理解,然后過了一段時間,發(fā)現(xiàn)文章不更新了,也沒有后續(xù)了。

    4) 真才實(shí)學(xué)型

    像原作者一樣思考,能輕松說出此開源項(xiàng)目的核心架構(gòu),精確理解80%以上的源代碼,能找出bug并能提交相應(yīng)patch,

    5) 創(chuàng)新型

    對此開源項(xiàng)目的優(yōu)缺點(diǎn)了然于心,能夠提取其精華為我所用,想出更好的方案解決現(xiàn)有問題,超越原作者。

    4. 我看源代碼的經(jīng)驗(yàn)

    僅供參考,不要隨意模仿,每個人都應(yīng)該找到適合自己的方式

    重要的是以下3點(diǎn):

    1) 時間

    好能有一大段時間集中精力去看,比如你要看Tomcat7,要有3個月的時間每天花3到8小時去不停的看,

    時間拖拉得越久,會看了前面忘了后面。

    2) 興趣

    看代碼不要有任何功利性,你要對它有興趣,充滿好奇心,去理解它做了什么,怎么做的。

    3) 耐心

    這一點(diǎn)說起來容易,真正要做到是極其困難的,比如當(dāng)你某些類連看了三次時還看不懂,不要先想別人寫的代碼是否垃圾,

    先想想你在這方面的背景知識是否足夠,比如在看Tomcat實(shí)現(xiàn)http協(xié)議相關(guān)的代碼時,一邊看代碼一邊看http協(xié)議是最有效的方式,

    再比如你想看編譯器相關(guān)的代碼,最起碼在看之前,你要對<<編譯原理>>這門課中的內(nèi)容有基本的了解。

    如果背景知識有了還看不懂怎么辦,看不懂的代碼先放下,有些if分支只有你把整個項(xiàng)目都大致了解了一下后才能理解的,

    要反復(fù)的看,看三次僅僅是個入門級別。

    先簡單說一下我的經(jīng)歷:

    小學(xué)到初中我還算是個好學(xué)生,在班里經(jīng)常拿第一,

    但是從小學(xué)6年級到初三這4年比較特殊,遇到了一個很垃圾很垃圾很垃圾的數(shù)學(xué)老師,

    所以這4年我的數(shù)學(xué)基本上就是自學(xué)的了,我的自學(xué)能力從小到現(xiàn)在都是非常的強(qiáng)。

    當(dāng)然,這不能歸功于這位垃圾老師,我自小就很叛逆,不喜歡這禽獸的教學(xué)方式,沒有此垃圾,也許我的生活會是另一番景色。

    我不像正常人那樣上完初中上高中,然后再上大學(xué),

    而是上完初中后就直接到一所師范大學(xué)上中專+自考大專,2001年就畢業(yè)了。

    中專是學(xué)會計(jì)統(tǒng)計(jì)類的,自考大專是計(jì)算機(jī)應(yīng)用,大專一共才12門課,沒有英語,數(shù)學(xué)方面只有高數(shù),而且還是第一冊,

    核心專業(yè)課方面只有pascal、c、8086匯編語言、FoxPro、模擬電路、數(shù)據(jù)結(jié)構(gòu)、操作系統(tǒng)、軟件工程、計(jì)算機(jī)接口與技術(shù)。

    只要不是硬件類的專業(yè)課程我就學(xué)得非常好,硬件類課程就只是聽老師講,當(dāng)時連硬盤長什么樣都不知道。

    我2001年畢業(yè)時才19歲,然后就出來找工作了,說這些只是想說我從學(xué)校得到的教育并不多,

    現(xiàn)在回想起來從學(xué)校學(xué)的C語言、匯編語言、數(shù)據(jù)結(jié)構(gòu)、操作系統(tǒng)為我以后的自學(xué)提供了一些幫助。

    直到2006年,我辭職了,之前我己經(jīng)工作了4年,都只是做應(yīng)用軟件項(xiàng)目,

    所以數(shù)學(xué)基本上沒用過,英語也用得少之又少,英語其實(shí)比現(xiàn)在的高中生水平還差,

    所以要看英文的技術(shù)文章也是看不懂的。

    2006年我本來是要復(fù)習(xí)考研究生的,我從3月份開始連背了三個月的英語,每天花4到8小時背新概念英語的課文,

    一、二冊全部背完,第三冊背了前42課,第四冊背了前10課,我以為這樣的水平足夠應(yīng)付考研英語了,結(jié)果拿試卷一做,

    閱讀理解至少有2/5的單詞認(rèn)不得,不得不去背考研英語的單詞。

    數(shù)學(xué)基本上忘光了,到網(wǎng)上下初中和高中的新課標(biāo)課本下來看,

    高數(shù)、線性代數(shù)、概論全都自學(xué),還買了相關(guān)的數(shù)學(xué)書來看(像幾何、離散數(shù)學(xué)等等)。

    天天做那些垃圾數(shù)學(xué)題,還要背馬哲、毛概,專業(yè)課倒是小兒科。

    一直到10月份,各校出來招生簡章了,想報(bào)10大高校,結(jié)果別人不鳥你??粕?,你??粕鷽]有報(bào)名資格,

    好吧,換二線的可以了吧,結(jié)果還是差不多,不是要本科,就是要發(fā)表啥論文才能報(bào),

    最后,很不情愿的報(bào)了個很平庸的所謂211大學(xué)。

    此后越發(fā)覺得天天做題背單詞背書實(shí)在是件極其無聊的事,再加上報(bào)考這件事,嚴(yán)重打擊積極性,一直想放棄考研但是又一直堅(jiān)持著,

    直到11月23日,那天去書店看書,翻到一本講編譯器實(shí)現(xiàn)的書,

    也就是所謂的"虎書",當(dāng)時并不知道編譯器是什么,因?yàn)槲以趯W(xué)校時沒學(xué)過編譯原理,在書店連看了一小時,覺得很有趣,

    就買了回來,接著就把考研的書全丟到一個角落里了。

    接下來你應(yīng)該懂的,我瘋狂的買書,"龍書","鯨書"啥的我都買了,只要是有關(guān)編譯器的,不管是國內(nèi)還是國外我都買,

    因?yàn)槲也⒉皇且豢淳腿?,也是因?yàn)?虎書"剛開始一兩章還好理解,后面的我當(dāng)時就看不懂了,

    我有個習(xí)慣,就是實(shí)在看不懂的書,我就會換一本,確認(rèn)一下是我自己的原因還是書本身的問題,

    現(xiàn)在我只會說"虎書"翻譯得并不好,"龍書"更好理解,當(dāng)然一開始就看"龍書"也并不是那么好理解,

    所以我當(dāng)時甚至連形式語言和自動機(jī)相關(guān)的書我都買來看了。

    我連看了3個多月,當(dāng)時覺得看書不過癮,就想找個實(shí)際的編譯器來玩,

    我下了GCC和LCC,當(dāng)時剛好sun公司又把javac開源了。

    因?yàn)楣ぷ髦兄挥玫絧hp和java,c語言已經(jīng)4年沒用過了,加上javac比前兩者要小很多,

    所以從2007年二月份開始第一次看javac的源代碼,也是第一次看別人的源代碼。

    javac的源代碼不多,8萬行都不到,花了我3個月的時間,平均每天至少花7小時看代碼。

    因?yàn)槲耶?dāng)時只會java1.4,java1.5之后出來的很多東西都不懂,所以也是一邊看javac的源代碼一邊學(xué)新語法。

    2007年5月份時我還在JavaEye上發(fā)了第一篇有關(guān)javac的文章,得了個精華,引起了一點(diǎn)小轟動,

    這里有證據(jù): http://www.iteye.com/topic/84833

    內(nèi)容貌似當(dāng)年被我刪除了,想不起來是什么原因了,zhh3007就是我本人以前的id。

    當(dāng)時看代碼的方法是非常原始的,但是直到現(xiàn)在我還在用這種方法,只不過現(xiàn)在有時會用eclipse來看,

    我是這么做的:

    看原代碼用 EditPlus,

    找到第一個入口類: com\\sun\\tools\\javac\\Main

    自己再寫一個Debug類,按執(zhí)行流程看到一個方法時,就加入類似下面的代碼塊:

public static int compile(String[] args) {
		try {//我加上的
		DEBUG.P(Main.class,"compile(1)");
		DEBUG.PA("args", args);

		com.sun.tools.javac.main.Main compiler =
			new com.sun.tools.javac.main.Main("javac");
		return compiler.compile(args);
	
		}finally{//我加上的
		DEBUG.P(0,Main.class,"compile(1)");
		}
	}

    然后一定要重編譯源代碼,再運(yùn)行,保證自己加的代碼被執(zhí)行到了,我會把輸出的debug結(jié)果重定向到一個文件中,

    然后一邊看源代碼一邊看輸出結(jié)果,一些變量或表達(dá)式自己想看結(jié)果也會加DEBUG.P(...),

    碰到一些代碼行數(shù)很多的類,我甚至?xí)衙總€方法copy出來放到一個新的java文件中,

    然后打開多個EditPlus,每個EditPlus看一個方法,而且是按照方法的調(diào)用順序打開EditPlus看的。

    可能看到這很多人會覺得這種方式好土,我也不能說好不好,從今年開始,因?yàn)槲业碾娔X裝了Eclipse了,

    所以Jetty8的源代碼我是用Eclipse看的,也不再打DEBUG輸出,也不再copy方法,而是直接用eclipse的debug跟蹤功能,

    但是我現(xiàn)在提出質(zhì)疑了,Jetty8的代碼量只是Tomcat6的1/3,我用Eclipse這種方式來研究源代碼并不能節(jié)省我的總時間,

    我用最原始的方式研究Tomcat6也只花了3個月,現(xiàn)在研究Jetty8已經(jīng)用了我兩個月的時間,而且看Tomcat6和Jetty8是兩個類似的東西,

    按理說先看Tomcat6后看Jetty8應(yīng)該花的時間更少才對。

    我總結(jié)了一下,為什么最初的方式好,那是因?yàn)槲夷菢硬粩嗾垓v源代碼的過程中已經(jīng)間接讓我記住了代碼的布局,

    我在敲那些重復(fù)的DEBUG.P代碼時我把局部變量、表達(dá)式、字段都輸出了一次,這有助于我的記憶。

    而Eclipse的debug功能只是在不停的按F5-F6-F7-F8,打斷點(diǎn),方法調(diào)用太深時很難理清前后關(guān)系,

    有時看了一星期,連哪個類在哪個目錄都不知道,因?yàn)閐ebug時,跟到相關(guān)的類eclipse會自動打開那個類,不用你從目錄中找。

    Eclipse的代碼折疊粒度又不能折疊到塊級別,不能折疊if、while,一旦方法的行數(shù)很多,看起來會很累,分不清這個方法的層次結(jié)構(gòu),

    而EditPlus在看方法時就看得很舒服,因?yàn)樗苷郫Bif、while,看完了一個while我可以把他折疊起來,

    有多個if-else時只要折疊一下就不會超過一屏。

    你能打開20個EditPlus,但是你不能同時打開10個Eclipse,除非你電腦的內(nèi)存牛X到不行。

    有一點(diǎn)很重要,不管是哪一種方式,一定要把環(huán)境搭建好,你自已要能夠編譯源代碼,并且多寫些例子去驗(yàn)證源代碼中的執(zhí)行流程,

    我一般不會去看源有代碼中的例子或測試用例的,只有想不出時才去看(特別是看編譯器時,一些用例你很難想到)。

    我為什么要看這么多源代碼?

    除了個人興趣之外,現(xiàn)在想起來其實(shí)還有個很好笑的原因:

    2007下半年和2008一整年,這段時間很多人說Java快死了,Ruby/Rails、Erlang很火,

    我經(jīng)常上JavaEye,免不了也受影響,所以在2008年時還學(xué)習(xí)了Ruby/Rails、Erlang,連Erlang的編譯器都玩了一下,

    之后發(fā)現(xiàn)并不是那樣滴,只不過是一些大佬在鼓吹而已,再加上2008年家里出了點(diǎn)事,所以過得很郁悶,

    一有閑情就跟JavaEye的大佬們"打架",想來也是種樂趣,算是種排解壓力的方式。

    當(dāng)然,與此同時,也會從技術(shù)的角度思考Java出了什么問題,所以從2009年開始就專心研究技術(shù)了,還把douyu的原型鼓搗出來了。

    2009年研究的那些開源項(xiàng)目其實(shí)都是很順其自然的事,我要做一個http服務(wù)器,Tomcat已經(jīng)做好了,我想知道他怎么做的,

    我就去看,看這些項(xiàng)目就是為了想知道他們做了什么,怎么做的,哪里做得不好,我能不能比他們做得更好。

    現(xiàn)在,看代碼已經(jīng)是我的一種習(xí)慣了,從畢業(yè)那年到2008年我買了幾萬塊錢的書,以至于我來杭州后都沒有把桂林的房子退了,

    因?yàn)闀?,桂林那房子除了回去能住個幾天外,現(xiàn)在是租給書住的了。

    從2009年到現(xiàn)在,兩年多時間我沒有再買書,都是看源代碼學(xué)新東西,

    如果是一個全新的領(lǐng)域,最多也就是在網(wǎng)上找點(diǎn)入門資料,然后再看源代碼,

    包括下半年我準(zhǔn)備研究HotSpot,已經(jīng)是C/C++的領(lǐng)域了,我沒有任何學(xué)習(xí)壓力,只是一個時間問題。

    一個人的自我學(xué)習(xí)能力非常的重要,Java相關(guān)的和Java之外的所有東西我都是自學(xué)的,

    我沒有特別問過什么人,也沒參加過培訓(xùn),實(shí)在不懂的地方就查資料買書看。

    如果看代碼看不懂,這幾點(diǎn)一定要明白:

    1) 相關(guān)背景知識是否具備

    2) 要有耐心,多看幾遍

    3) 不要指望別人告訴你答案,別人沒跟你說也不要說別人高高在上不理你,因?yàn)檫@不是別人的義務(wù)

    4) 經(jīng)過對比之后再說別人的代碼爛

以上就是如何看待看源代碼,小編相信有部分知識點(diǎn)可能是我們?nèi)粘9ぷ鲿姷交蛴玫降?。希望你能通過這篇文章學(xué)到更多知識。更多詳情敬請關(guān)注創(chuàng)新互聯(lián)行業(yè)資訊頻道。


本文標(biāo)題:如何看待看源代碼-創(chuàng)新互聯(lián)
網(wǎng)站地址:http://weahome.cn/article/pccig.html

其他資訊

在線咨詢

微信咨詢

電話咨詢

028-86922220(工作日)

18980820575(7×24)

提交需求

返回頂部