久久精品五月,日韩不卡视频在线观看,国产精品videossex久久发布 ,久久av综合

站長資訊網(wǎng)
最全最豐富的資訊網(wǎng)站

初學(xué)者閱讀源碼的方法

初學(xué)者閱讀源碼的方法

相關(guān)學(xué)習(xí)推薦:javascript

我喜歡編程,它也是我的工作,而且我很高興能夠?qū)⒋蟛糠值臅r間都花在開發(fā)軟件上。像許多程序員一樣,我既著迷但又困惑的是,我寫的代碼到底怎么樣,以及如何寫得更好。

多年來,我已經(jīng)閱讀了許多有關(guān)軟件開發(fā)的文章和書籍。其中不乏有許多墨寶(書上的或者網(wǎng)上的)告訴你如何提高編程,并成為一個像忍者一樣的受過專業(yè)訓(xùn)練的編程高手!這些建議大多有一些共性,其中之一就是閱讀源碼。然而相比于其它建議,閱讀源碼通常也就是簡單的一句話來概括:找一些很棒的開源軟件,或是任何你喜歡的軟件,打開它們(或打印出來)然后閱讀它們。雖然總的來說,這確實(shí)是個很好的建議,但紙上得來終覺淺,實(shí)際去實(shí)踐的時候才發(fā)現(xiàn)問題多多。在這篇文章中,我會嘗試給出一些閱讀源碼的實(shí)用建議,但在這之前,首先讓我們列舉一下都有哪些問題。

對閱讀源碼的誤解

別人一說閱讀源碼,給你的一般印象似乎他們就像編程大師一樣,可以單純地坐在椅子上,然后像看小說一樣讀著手上的代碼。好吧,我敢肯定,確實(shí)有一些精湛的程序員,他們可以很享受地一邊喝著咖啡、一邊看著一堆類似英語句子的神秘符號,并且還能夠在腦海里構(gòu)建整個類的層次和體系結(jié)構(gòu)。顯然這篇文章并不是給他們看的,它的受眾是像我一樣的,覺得盯著一堆源碼看就好比看一些無聊沒有意義的練習(xí)題的人。當(dāng)然,有人會爭辯說,可以從一個完整項(xiàng)目里一點(diǎn)一點(diǎn)地看單個類或者單個函數(shù)來學(xué)習(xí),但在我看來,除非是最簡單的問題,大多數(shù)軟件內(nèi)部都是相互依賴的。在不了解系統(tǒng)其余部分的情況下,通常不可能理解一個特定函數(shù)或者類背后的設(shè)計思想和原理。

下一個問題是從哪里獲得可以讀的源碼(當(dāng)然,在此之前,你得能夠鑒別哪些源碼值得一讀)。優(yōu)秀的軟件很多,既有開源軟件可以免費(fèi)獲得,也有閉源軟件需要授權(quán)。開源倉庫有譬如 Sourceforge 和 GitHub 。如果你在軟件開發(fā)公司工作,那么可以訪問源代碼庫中的專有代碼。第三種常見途徑是軟件開發(fā)書籍附帶的程序,或者作為教育資源而提供的程序( Minix 是典型的例子)。確實(shí),眾多的選項(xiàng)使我們難以抉擇,因此從茫茫代碼世界中找出適合我們閱讀的是一項(xiàng)艱巨而必不可少的任務(wù)。

另一個問題是程序所用的編程語言,讀他人的代碼已經(jīng)足夠困難了,如果同時還需要去熟悉一門夾雜著奇葩語法的新語言,它所帶來的負(fù)擔(dān),在我看來簡直就是個會帶來極大挫敗感的災(zāi)難。所以你需要找到用你熟悉的語言所編寫的代碼。但如果你要看的代碼是來自書本上或作為教育資源所提供的,那懂不懂這門新語言并無關(guān)緊要,因?yàn)橛袑?dǎo)師可以解釋上下文。倘若你明知山有虎偏向虎山行,在沒有書或者導(dǎo)師指引下,去閱讀一門并不熟悉的編程語言,那我建議你至少需要學(xué)習(xí),并達(dá)到可以寫出自己的程序的程度(Hello World 就不算了哈)。

前文有關(guān)上下文的問題使我想到了下一個問題,如果你不熟悉軟件本身,弄清楚代碼在做什么就困難得多。例如,如果你不是每天都在使用 Linux 并知曉 Linux 啟動順序,那么就很難在看一邊 Linux 代碼后弄清楚運(yùn)行級別是什么。使用某個軟件獲得的經(jīng)驗(yàn)、知識能夠幫助我們更好地閱讀它的源碼,這包括常用的術(shù)語、軟件的功能和特性,甚至包括你遇到的各種錯誤本身。

理解源碼

對我而言,我意識到 “閱讀源碼” 并不能準(zhǔn)確描述我所從事的活動,用 “理解源碼” 來表述會更合適。對我來說,坐在筆記本屏幕前(或打印成紙),只是單純地讀滿屏的代碼是非常困難的。我需要代碼之外其它的東西,比如我喜歡翻一翻文檔,玩一玩這個軟件,單步運(yùn)行代碼甚至寫測試代碼去跑一跑,然后才能真正欣賞它。因?yàn)槲視榇送度敕浅4蟮臅r間和精力,所以我必須要精挑細(xì)選,尋找我要 “閱讀”(理解)的軟件。

我的第一層過濾是通過編程語言進(jìn)行篩選,對我來說,我只閱讀由 C#、VB.NET、Python 和 Javascript 編寫而成的程序的代碼(盡管我也熟悉 C++、Ruby 和 F#,但我并不認(rèn)為自己有水平來理解其他人的代碼)。接下來是尋找我使用過的軟件,這會讓我有種已經(jīng)上車的感覺,因?yàn)槲抑来a的意圖,以及它不能做的事情還有它的局限性(如果我足夠熟悉的話)。每天都在使用的開源軟件正是優(yōu)秀的候選項(xiàng)(比如,我使用用 C# 編寫的開源工具 Cruise Control.NET、NANT 和 NUnit)

碰巧我在一家軟件產(chǎn)品公司(一家微軟的公司)工作,所以我閱讀的源碼選擇項(xiàng)之一是我們公司在源代碼庫中的代碼。如果碰巧你也在一家軟件公司工作,你可以查看其他的項(xiàng)目,甚至你著手項(xiàng)目的較早期版本。這樣,除了可以獲得更深層次的代碼理解之外,你還可以很好地了解之前和之后都曾嘗試過哪些東西。不過有一些警告需要注意:

  • 首先,如果你沒有權(quán)限訪問其他項(xiàng)目,則需要征得許可,因?yàn)橐恍┕緦ζ?“知識產(chǎn)權(quán)” 非常看重。
  • 其次,這些軟件的質(zhì)量可能沒有你想像的那么高,因?yàn)橥ǔG闆r下,專有代碼沒有經(jīng)過像開源代碼那樣嚴(yán)格的代碼走查。需要注意的是,如果缺乏常規(guī)的代碼審查,那么代碼的質(zhì)量可能不佳。
  • 第三(這一點(diǎn)是從我的朋友提供的反饋中得到啟發(fā)的),如果你的公司開發(fā)的是商業(yè)軟件(HR、財務(wù)、ERP 等),則需要首先理解很多業(yè)務(wù)關(guān)系。而且,由于大多數(shù)代碼受業(yè)務(wù)功能因素的影響,因此通常模塊化程度不如應(yīng)用程序或 API 高。

尋找文檔齊全的項(xiàng)目(這適用于開源以及專有代碼)。我的意思是說,這樣的文檔應(yīng)該突出總體設(shè)計,并說明代碼背后的原理。如果只是簡單地自動生成的 Java Doc 類型文檔,則不能視之為我所描述的文檔 :-)。其中一種尋找途徑是利用為教育而創(chuàng)造的軟件(例如 Minix)。由于它們的目的是通過軟件進(jìn)行教學(xué),因此通常會有非常清晰的文檔記錄下來,并且有大量資料解釋代碼背后的設(shè)計原理。

總結(jié)

那么,現(xiàn)在你已經(jīng)確定了要閱讀源碼的軟件并下載了它的源代碼和文檔,讓我們一步步閱讀并理解它:

  • 瀏覽設(shè)計文檔,并嘗試了解代碼的構(gòu)建方式。好的軟件項(xiàng)目遵循某些架構(gòu)模式,這些決定了代碼的組織。一旦掌握了這一點(diǎn),理解代碼就變得容易了很多。如果你還能畫出類圖,就能更好地了解整體布局。
  • 接下來要做的是編譯并運(yùn)行它。根據(jù)項(xiàng)目及其文檔循序漸進(jìn),這可能很簡單也可能很困難。
  • 現(xiàn)在是時候打開你喜歡的 IDE 并開始探索了。一個好的探索起點(diǎn)是,嘗試一步步瀏覽你熟悉的功能的代碼。這樣一來,你可以遍歷各個層和子系統(tǒng),并了解它們之間的關(guān)聯(lián)。例如,當(dāng)我探索 NUnit 時,我首先編寫了一個測試用例,然后查看涉及到的類。
  • 嘗試確定代碼中使用的設(shè)計模式。如果你還不知道什么是設(shè)計模式,那么立刻馬上停止看本文,轉(zhuǎn)去閱讀設(shè)計模式的經(jīng)典書籍。熟悉設(shè)計模式,它們是識別和理解優(yōu)秀代碼中所包含的設(shè)計的好方法。熟悉之后就可以更輕松地在閱讀代碼時將其牢記在心。它還可以幫助你更輕松地識別代碼作者在原有設(shè)計模式上所做的細(xì)微調(diào)整和魔改。
  • 嘗試為代碼編寫測試用例以完全理解它,這是理解代碼不同部分之間的依賴關(guān)系的一種非常有用的方法。寫測試用例之前,首先需要滿足所有的依賴。接下來,了解代碼的可能的入口點(diǎn)和返回值。這可以增進(jìn)你對代碼的理解,助你更上一層樓。
  • 最后,嘗試重構(gòu)代碼。在這一步,你已經(jīng)從單純地理解代碼邁向足夠熟悉以能夠?qū)ζ溥M(jìn)行修改。隨著重構(gòu)復(fù)雜程度的提高,你的理解也將隨之增加。此時,如果需要,你可以為項(xiàng)目貢獻(xiàn)自己的代碼。

“源碼閱讀”在我看來,不僅僅是閱讀,它是一組獨(dú)特的活動,共同幫助人們理解代碼。這似乎比簡單的 “閱讀代碼” 更令人生畏,但它值得付出努力。

現(xiàn)在,你可以更加輕松,快樂地“閱讀源碼”了嗎?

想了解

贊(0)
分享到: 更多 (0)
?
網(wǎng)站地圖   滬ICP備18035694號-2    滬公網(wǎng)安備31011702889846號
久久精品五月,日韩不卡视频在线观看,国产精品videossex久久发布 ,久久av综合
岛国av免费在线观看| 欧美日韩激情| 91大神在线观看线路一区| 99国产精品免费视频观看| 日韩精品成人| 午夜电影一区| 欧美日本不卡| 久久99国产精品视频| 亚洲一二av| 欧美成人基地| 欧美在线91| 国产极品模特精品一二| 久久精品国产精品亚洲毛片| 91亚洲国产高清| 久久国产成人午夜av影院宅| 国产精品91一区二区三区| 日韩中文字幕一区二区高清99| 日韩精彩视频在线观看| 久久要要av| 国产精品qvod| 日本一区福利在线| 国产精品2区| 99热免费精品| 国产私拍福利精品视频二区| 亚洲二区精品| 免费观看在线综合| 蜜桃精品视频| 国产日韩欧美一区二区三区在线观看| 在线亚洲激情| 亚洲一级黄色| 日韩中文字幕亚洲一区二区va在线| 免费在线亚洲| 丝袜诱惑制服诱惑色一区在线观看| 亚洲人成在线网站| 久久爱www.| 精精国产xxxx视频在线野外| 成人午夜精品| 欧美日韩国产高清| 国产美女亚洲精品7777| 欧美日韩免费观看视频| 国产午夜久久| 国产精品成人一区二区网站软件| 日本亚州欧洲精品不卡| 成人看片网站| 欧美sss在线视频| 欧美成人久久| 五月天久久网站| 国产精品xvideos88| 欧美在线资源| 樱桃视频成人在线观看| 婷婷成人在线| 久久免费精品| 国产欧美一区二区三区国产幕精品| 亚洲精品自拍| 欧美天堂一区二区| 国产欧美一区二区色老头| 色综合狠狠操| 成人片免费看| 欧美福利专区| 国产视频一区二区在线播放| 激情久久一区二区| 国产精品成久久久久| 国产精品99久久精品| 国产精品尤物| 午夜欧美精品久久久久久久| 欧美一区二区三区高清视频| 国产精品大片免费观看| 日韩高清成人| 91亚洲精品在看在线观看高清| 亚洲女同av| 欧美在线精品一区| 欧美日韩第一| 国产在视频一区二区三区吞精| 日本大胆欧美人术艺术动态| 四虎4545www国产精品| 日韩国产成人精品| 国模大尺度视频一区二区| 影音国产精品| 成人影视亚洲图片在线| 欧美日韩在线二区| 亚洲色图综合| 国产精品白浆| 国产精品欧美大片| 久久久夜夜夜| 国产精品一级在线观看| 日日夜夜免费精品视频| 精品72久久久久中文字幕| 视频一区日韩精品| 超碰成人av| 青青草91视频| 日本大胆欧美人术艺术动态| 成人久久久久| 国产成人精品一区二区免费看京 | 欧美日韩精品一区二区视频| 一区视频在线| 成人精品动漫一区二区三区| 亚洲精选91| 国产色99精品9i| 欧美成人aaa| 欧美亚洲福利| 午夜亚洲福利| 亚洲人妖在线| 久久国产88| 亚洲免费婷婷| 久久成人精品| 久久精品av| 亚洲va中文在线播放免费| 91免费精品国偷自产在线在线| 日韩精品影视| 在线日韩一区| 午夜精品影视国产一区在线麻豆| 久久激情一区| 亚洲伦乱视频| 中文字幕在线看片| 乱一区二区av| 国产精品亚洲欧美| 日本特黄久久久高潮| 久久国产精品久久w女人spa| 亚洲精品在线影院| 欧美高清一区| 国产激情精品一区二区三区| 欧美日韩亚洲一区二区三区在线| 日本va欧美va瓶| 日本不卡一二三区黄网| 欧美天堂一区二区| 欧美伊人影院| 99热精品久久| 亚洲最大av| 国产亚洲永久域名| 精品国产一区二区三区av片| 欧美日韩一区自拍| 美女国产精品久久久| 久久精品凹凸全集| 欧洲毛片在线视频免费观看| 国产精品久久乐| 亚洲制服欧美另类| 日韩综合一区二区| 蜜臀久久精品| 国产欧美日韩影院| 日韩国产网站| 99精品美女| 蜜桃av在线播放| 99精品在线观看| 黄色aa久久| 欧美久久精品| 九九综合九九| 久久一区二区三区喷水| 日韩国产欧美在线视频| 久久国产精品免费一区二区三区| 国产福利亚洲| 丝瓜av网站精品一区二区 | 日韩国产欧美| 91九色精品| 视频一区日韩精品| 国产va免费精品观看精品视频| 亚洲欧美网站在线观看| 国产精品精品国产一区二区| 欧美视频久久| 麻豆视频观看网址久久| 久久久精品久久久久久96| 国产精品欧美三级在线观看| 在线日韩电影| 亚洲欧美综合| 精品免费av一区二区三区| 久久久久九九精品影院| 国产成人精品福利| 亚洲毛片在线| 午夜日韩福利| 日韩三区免费| 国产一区日韩| 午夜av成人| 色爱综合网欧美| 91精品国产调教在线观看| 蜜桃国内精品久久久久软件9| 水蜜桃精品av一区二区| 欧美亚洲国产日韩| 999久久久91| 美女毛片一区二区三区四区| 国产极品嫩模在线观看91精品| 国产亚洲字幕| 久久国产三级| 日韩一区电影| 综合激情一区| 粉嫩av一区二区三区四区五区 | 野花国产精品入口| 国产高清不卡| 欧美日韩在线二区| 午夜av不卡| 成人综合一区| 中文字幕人成乱码在线观看| 午夜一级在线看亚洲| 日本在线高清| 久久国产成人| 精品国产一区二区三区av片| 一区在线免费观看| 麻豆精品网站| 欧美国产亚洲精品| 天堂а√在线最新版中文在线| 一区二区三区网站| 亚洲天堂资源|