目錄
對閱讀原始碼的誤解
理解原始碼
總結
首頁 web前端 前端問答 初學者閱讀原始碼的方法

初學者閱讀原始碼的方法

Sep 17, 2020 pm 05:38 PM
原始碼

初學者閱讀原始碼的方法

相關學習推薦:javascript

#我喜歡編程,它也是我的工作,而且我很高興能夠將大部分的時間都花在開發軟體上。像許多程式設計師一樣,我既著迷但又困惑的是,我寫的程式碼到底怎麼樣,以及如何寫得更好。

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

對閱讀原始碼的誤解

別人一說閱讀原始碼,給你的一般印像似乎他們就像程式大師一樣,可以單純地坐在椅子上,然後像看小說一樣讀著手上的程式碼。好吧,我敢肯定,確實有一些精湛的程式設計師,他們可以很享受地一邊喝著咖啡、一邊看著一堆類似英語句子的神秘符號,並且還能夠在腦海裡構建整個類的層次和體系結構。顯然這篇文章並不是給他們看的,它的受眾是像我一樣的,覺得盯著一堆源碼看就好比看一些無聊沒有意義的練習題的人。當然,有人會爭辯說,可以從一個完整專案裡一點一點地看單一類別或單一函數來學習,但在我看來,除非是最簡單的問題,大多數軟體內部都是相互依賴的。在不了解系統其餘部分的情況下,通常不可能理解一個特定函數或類別背後的設計想法和原則。

下一個問題是要從哪裡取得可以讀取的原始碼(當然,在此之前,你得能夠辨識哪些原始碼值得一讀)。優秀的軟體很多,既有開源軟體可以免費取得,也有閉源軟體需要授權。開源倉庫有譬如 Sourceforge 和 GitHub 。如果你在軟體開發公司工作,那麼你可以存取原始碼庫中的專有程式碼。第三種常見途徑是軟體開發書籍附帶的程序,或作為教育資源而提供的程序( Minix 是典型的例子)。確實,眾多的選項使我們難以抉擇,因此從茫茫程式碼世界中找出適合我們閱讀的是一項艱鉅而必不可少的任務。

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

前文有關上下文的問題使我想到了下一個問題,如果你不熟悉軟體本身,弄清楚程式碼在做什麼就困難得多。例如,如果你不是每天都在使用 Linux 並知曉 Linux 啟動順序,那麼就很難在看一邊 Linux 程式碼後弄清楚運行等級是什麼。使用某個軟體所獲得的經驗、知識能夠幫助我們更好地閱讀它的原始碼,這包括常用的術語、軟體的功能和特性,甚至包括你遇到的各種錯誤本身。

理解原始碼

對我而言,我意識到 「閱讀原始碼」 並不能準確描述我所從事的活動,用 「理解原始碼」 來表述會更適合。對我來說,坐在筆記本螢幕前(或印成紙),只是單純地讀滿螢幕的程式碼是非常困難的。我需要程式碼之外其它的東西,例如我喜歡翻一翻文檔,玩一玩這個軟體,單步運行程式碼甚至寫測試程式碼去跑一跑,然後才能真正欣賞它。因為我會為此投入非常大的時間和精力,所以我必須精挑細選,尋找我要 「閱讀」(理解)的軟體。

我的第一層過濾是透過程式語言進行篩選,對我來說,我只閱讀由C#、VB.NET、Python 和Javascript 編寫而成的程式的程式碼(儘管我也熟悉C 、Ruby 和F#,但我並不認為自己有水平來理解其他人的程式碼)。接下來是尋找我使用過的軟體,這會讓我有種已經上車的感覺,因為我知道程式碼的意圖,以及它不能做的事情還有它的限制(如果我夠熟悉的話)。每天都在使用的開源軟體正是優秀的候選項(例如,我使用用C# 編寫的開源工具Cruise Control.NET、NANT 和NUnit)

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

  • 首先,如果你沒有權限訪問其他項目,則需要徵得許可,因為一些公司對其 “知識產權” 非常看重。
  • 其次,這些軟體的品質可能沒有你想像的那麼高,因為通常情況下,專有程式碼沒有經過像開源程式碼那樣嚴格的程式碼走查。需要注意的是,如果缺乏常規的程式碼審查,那麼程式碼的品質可能不佳。
  • 第三(這一點是從我的朋友提供的回饋中得到啟發的),如果你的公司開發的是商業軟體(HR、財務、ERP 等),則需要先理解許多業務關係。而且,由於大多數程式碼受業務功能因素的影響,因此通常模組化程度不如應用程式或 API 高。

尋找文件齊全的專案(這適用於開源以及專有程式碼)。我的意思是說,這樣的文件應該突出整體設計,並說明程式碼背後的原理。如果只是簡單地自動生成的 Java Doc 類型文檔,則不能視之為我所描述的文檔 :-)。其中一種尋找途徑是利用為教育而創造的軟體(例如 Minix)。由於它們的目的是透過軟體進行教學,因此通常會有非常清晰的文件記錄下來,並且有大量資料解釋程式碼背後的設計原則。

總結

那麼,現在你已經確定了要閱讀源碼的軟體並下載了它的源代碼和文檔,讓我們一步步閱讀並理解它:

  • 瀏覽設計文檔,並嘗試了解程式碼的建構方式。好的軟體專案遵循某些架構模式,這些決定了程式碼的組織。一旦掌握了這一點,理解程式碼就變得容易了很多。如果你還能畫出類別圖,就能更了解整體佈局。
  • 接下來要做的是編譯並執行它。根據專案及其文件循序漸進,這可能很簡單也可能很困難。
  • 現在是時候打開你喜歡的 IDE 並開始探索了。一個好的探索起點是,試著一步步瀏覽你熟悉的功能的程式碼。這樣一來,你可以遍歷各個層和子系統,並了解它們之間的關聯。例如,當我探索 NUnit 時,我首先編寫了一個測試案例,然後查看涉及的類別。
  • 嘗試確定程式碼中使用的設計模式。如果你還不知道什麼是設計模式,那麼立刻馬上停止看本文,轉去閱讀設計模式的經典書籍。熟悉設計模式,它們是識別和理解優秀程式碼中所包含的設計的好方法。熟悉之後就可以更輕鬆地在閱讀程式碼時將其牢記在心。它還可以幫助你更輕鬆地識別程式碼作者在原有設計模式上所做的細微調整和魔改。
  • 嘗試為程式碼編寫測試案例以完全理解它,這是理解程式碼不同部分之間的依賴關係的一種非常有用的方法。在寫測試用例之前,首先需要滿足所有的依賴。接下來,了解程式碼的可能的入口點和傳回值。這可以增進你對程式碼的理解,幫助你更上一層樓。
  • 最後,嘗試重構程式碼。在這一步,你已經從單純地理解程式碼邁向足夠熟悉以能夠對其進行修改。隨著重構複雜程度的提高,你的理解也會隨之增加。此時,如果需要,你可以為專案貢獻自己的程式碼。

「原始碼閱讀」在我看來,不僅僅是閱讀,它是一組獨特的活動,共同幫助人們理解程式碼。這似乎比簡單的 “閱讀程式碼” 更令人生畏,但它值得付出努力。

現在,你可以更輕鬆,快樂地「閱讀原始碼」了嗎?

想了解更多程式設計學習,請關注php培訓欄位!

#

以上是初學者閱讀原始碼的方法的詳細內容。更多資訊請關注PHP中文網其他相關文章!

本網站聲明
本文內容由網友自願投稿,版權歸原作者所有。本站不承擔相應的法律責任。如發現涉嫌抄襲或侵權的內容,請聯絡admin@php.cn

熱AI工具

Undresser.AI Undress

Undresser.AI Undress

人工智慧驅動的應用程序,用於創建逼真的裸體照片

AI Clothes Remover

AI Clothes Remover

用於從照片中去除衣服的線上人工智慧工具。

Undress AI Tool

Undress AI Tool

免費脫衣圖片

Clothoff.io

Clothoff.io

AI脫衣器

Video Face Swap

Video Face Swap

使用我們完全免費的人工智慧換臉工具,輕鬆在任何影片中換臉!

熱工具

記事本++7.3.1

記事本++7.3.1

好用且免費的程式碼編輯器

SublimeText3漢化版

SublimeText3漢化版

中文版,非常好用

禪工作室 13.0.1

禪工作室 13.0.1

強大的PHP整合開發環境

Dreamweaver CS6

Dreamweaver CS6

視覺化網頁開發工具

SublimeText3 Mac版

SublimeText3 Mac版

神級程式碼編輯軟體(SublimeText3)

Python在軟體原始碼保護的應用實踐 Python在軟體原始碼保護的應用實踐 Jun 29, 2023 am 11:20 AM

Python是一種高階程式語言,具有簡單易學、易讀易寫等特點,在軟體開發領域中得到了廣泛的應用。然而,由於Python的開源特性,原始碼很容易被他人輕易獲取,這就為軟體原始碼保護帶來了一些挑戰。因此,在實際應用中,我們常常需要採取一些方法來保護Python原始碼,確保其安全性。在軟體原始碼保護中,有多種針對Python的應用實務可供選擇。以下將介紹幾種常見

PHP程式碼在瀏覽器中如何顯示原始碼而不被解釋執行? PHP程式碼在瀏覽器中如何顯示原始碼而不被解釋執行? Mar 11, 2024 am 10:54 AM

PHP程式碼在瀏覽器中如何顯示原始碼而不被解釋執行? PHP是一種伺服器端腳本語言,通常用於開發動態網頁。當PHP檔案在伺服器上被要求時,伺服器會解釋執行其中的PHP程式碼,並將最終的HTML內容傳送到瀏覽器以供顯示。然而,有時我們希望在瀏覽器中直接展示PHP檔案的原始碼,而不是被執行。本文將介紹如何在瀏覽器中顯示PHP程式碼的源碼,而不被解釋執行。在PHP中,可以使

網站線上看原始碼 網站線上看原始碼 Jan 10, 2024 pm 03:31 PM

可以使用瀏覽器的開發者工具來查看網站的源代碼,在Google Chrome瀏覽器中:1、開啟Chrome 瀏覽器,造訪要查看原始碼的網站;2、右鍵點選網頁上的任何位置,然後選擇「檢查」或按下快速鍵Ctrl + Shift + I開啟開發者工具;3、在開發者工具的頂部功能表列中,選擇「Elements」標籤;4、看到網站的HTML 和CSS 程式碼即可。

vue能顯示原始碼嗎 vue能顯示原始碼嗎 Jan 05, 2023 pm 03:17 PM

vue能顯示原始碼,vue查看看原始碼的方法是:1、透過「git clone https://github.com/vuejs/vue.git」取得vue;2、透過「npm i」安裝依賴;3、透過「 npm i -g rollup」安裝rollup;4、修改dev腳本;5、偵錯原始碼即可。

golang框架原始碼學習與應用全面指南 golang框架原始碼學習與應用全面指南 Jun 01, 2024 pm 10:31 PM

透過理解Golang框架原始碼,開發者可以掌握語言精髓和擴展框架功能。首先,取得原始碼並熟悉其目錄結構。其次,閱讀程式碼、追蹤執行流程和理解依賴關係。實戰案例展示如何應用這些知識:建立自訂中間件並擴展路由系統。最佳實踐包括逐步學習、避免盲目複製貼上、利用工具和參考線上資源。

idea如何查看tomcat的源碼 idea如何查看tomcat的源碼 Jan 25, 2024 pm 02:01 PM

idea檢視tomcat原始碼的步驟:1、下載Tomcat原始碼;2、在IDEA中匯入Tomcat原始碼;3、檢視Tomcat原始碼;4、理解Tomcat的工作原理;5、注意事項;6、持續學習和更新;7、使用工具和插件;8、參與社區和貢獻。詳細介紹:1、下載Tomcat原始碼,可以從Apache Tomcat的官方網站上下載原始碼包,通常這些原始碼包是以ZIP或TAR格式等等。

golang框架原始碼解析與最佳化 golang框架原始碼解析與最佳化 Jun 02, 2024 pm 04:54 PM

本文探讨了Go框架的源码解析和优化。源码结构包括四个主要包,涉及核心框架逻辑、请求上下文、数据绑定和响应渲染。优化技巧包括:1.使用路由树优化路由处理,以显著提高路由查找速度。2.使用中间件进行缓存和压缩,以减少服务器负载和响应时间。3.避免在回调中执行耗时操作,以保持高响应性。4.启用日志记录和分析慢请求,以便识别性能瓶颈。5.定期更新框架版本,以利用最新的性能改进。

PHP原始碼錯誤:解決index報錯問題 PHP原始碼錯誤:解決index報錯問題 Mar 10, 2024 am 11:12 AM

PHP原始碼錯誤:解決index報錯問題,需要具體程式碼範例隨著互聯網的快速發展,開發人員在編寫網站和應用程式時經常會遇到各種各樣的問題。其中,PHP作為一種流行的伺服器端腳本語言,其原始碼錯誤是開發者經常遇到的一個問題之一。有時候,當我們嘗試開啟網站的index頁面時,會出現各種不同的錯誤訊息,例如"InternalServerError"、"Unde

See all articles