如何閱讀他人的程式碼
怎麼讀? 怎麼看別人的 Source code, 然後再去修改, 通常的回答, 大概是看 天份
.
- 我的做法通常是 先搞清楚此程式的 輸入、輸出
, 再從 main()
等開始位置開始追, 經過追蹤、測試
來找到要改的地方.
這一系列文章是作者(王建興)將他閱讀程式碼的心得 與 優點寫出來, 建議有空可以看看(文章下面內容, 是我覺得的重點摘錄). :)
-
閱讀他人的程式碼(1)─讀懂程式碼,使心法皆為我所用
- 先了解系統架構與行為模式,再細讀
- 接觸他人的程式碼,大致上可以分為三種程度:
- 了解
- 修改、擴充
- 抽取、提煉。
- 了解別人的程式碼是最基礎的工作,倘若不能了解自己要處理的程式碼,就甭論修改或擴充,更不可能去蕪存菁,從中萃取出自己所需,回收再利用別人所撰寫的程式碼。
- 閱讀程式碼的重點,不在於讀完每一行程式碼,而是在於有效率地透過探索及閱讀,從而了解系統的架構及行為模式。以便在你需要了解任何片段的細節實作時,能夠很快在腦上對映到具體的程式碼位置,直到那一刻,才是細讀的時機。
-
閱讀他人的程式碼(2) 摸清架構,便可輕鬆掌握全貌
- 先試著捕捉系統架構性的觀念,不要過早鑽進細節,因為那通常對於你了解全貌,沒有多大的幫助。閱讀程式碼不需要從第一行讀起,我們的目的並不是在於讀遍每一段程式碼。
- 探索架構的第一件事:找出系統如何初始化
- 不論某個系統所採用的架構是否為大部分人所熟知的,在試著探索一個系統的長相時,我們應該找出來幾個答案,了解在它所用的架構下,下列這件事是如何被完成的:
- 系統如何初始化
- 與這個系統相接的其他系統(或使用者)有那些,而相接的介面又是什麼
- 系統如何反應各種事件
- 系統如何處理各種異常及錯誤。
-
閱讀他人的程式碼 (3) 優質工具在手,讀懂程式非難事
-
gtags是GNU GLOBAL source code tag system,它不只搜尋文字層次,而且因為具備了各種語言的語法剖析器,所以在搜尋時,可以只針對和語言有關的元素,例如類別名稱、函式名稱等。
- 而且,它能針對原始碼的內容進行索引,這意謂一旦建好索引之後,每次搜尋的動作,都毋需重新讀取所有原始碼的內容並逐一搜尋。只需要以現成的索引結構為基礎,即可有效率的尋找關鍵段落。
-
閱讀他人的程式碼 (4)望文生義,進而推敲組件的作用
- 我
喜歡將系統的運作情境,比擬成系統會上演的故事情節。在閱讀細節性質的程式碼前,先知道系統究竟會發生那些故事,是必備的基本功課。你可以利用熟悉或者自
己發明的表示工具,描述你所找到的情境。甚至可以只利用簡單的列表,直接將它們列出。只要能夠達到記錄的目的,對程式碼閱讀來說,都能夠提供幫助。或者,
你也可以利用UML中的類別圖、合作圖、循序圖之類的表示方法,做出更詳細的描述。
- 探索架構的第一步──找到程式的入口
- 系統多會採用相同的架構處理Plug-In程式
-
閱讀他人的程式碼(5)找到程式入口,再由上而下抽絲剝繭
- 展開的同時,隨手記錄樹狀結構
- 當我們從一個入口點找到三個分支後,可以順著每個分支再展開一層,所以分別繼續閱讀init、quit、以及PluginMessageProc的內容,並試著再展開一層。閱讀的同時,你可以在文件中試著記錄展開的樹狀結構。
- 範例:
- init():初始化動作
- itunesdb_init_cc():建立存取iTunes database的同步物件
- 初始化資料結構
- 初始化GUI元素
- 載入設定
- 建立log檔
- autoDetectIpod():偵測iPod插入的執行緒
- quit():終止化動作
- itunesdb_del_cc():終止存取iTunes database的同步物件
- 關閉log檔
- 終止化GUI元素
- PluginMessageProc():以訊息的方式處理程式所必須面臨的各種事件
- 執行所連接之iPod的MessageProc()
- 這部分必須要留意幾個重點。首先,應該一邊閱讀,一邊記錄文件。因為人的記憶力通常有限,對於陌生的事物更是容易遺忘,因此邊閱讀邊記錄,是很好的輔助。
-
閱讀他人的程式碼(6)閱讀的樂趣:透過程式碼認識作者
- 轉換立場,理解作者的思考方式
- 當你在閱讀一段程式碼時,或許可以試著轉換自己的立場,從旁觀者的角度轉換成為寫作者的心態,揣摩原作者的心理及處境。當你試著設身處地站在他的立場,透過他的思考方式來閱讀、追蹤他所寫下的程式碼,將會感覺更加流暢。
分享到:
相关推荐
对大多数的程式人来说,撰写程式码或许是令人开心的一件事情,但我相信,有更多人视阅读他人所写成的程式码为畏途。许多 人宁可自己重新写过一遍程式码,也不愿意接收别人的程式码,进而修正错误,维护它们,甚至...
你现在是一个 Clean Code 专家,我有以下的程式码,请用更干净简洁的方式改写,让我的同事们可以更容易维护程式码。另外,也解释为什么你要这样重构,让我能把重构的方式的说明加到 Pull Request 当中。附上程式码
可以修改一卡通数据库中会员部分。用于网吧老板内部添加员工卡等操作。设有密码 防备他人使用。程序复制到一卡通安装目录即可运行。附带源码
學習條碼制作的最好資料,內容簡易,不需請教他人,要自學成才!!!哈哈
对于每一个所保护的程式,这些所产生的虚拟指令以及虚拟机器本身都是独特的,以防止他人对 Code Virtualizer 采用广泛的攻击。 Code Virtualizer 可以在任何 x32 或 x64 原生 PE 文档中(例如可执行文档(EXEs),...
WinLock 能够针对不同的使用者进行限制,例如拒绝特定使用者存取特定档案、应用程式或是 Windows 档案总管(控制台、我的电脑等),限制 USB 装置与硬碟的使用,过滤网际网路内容与禁止对于特定网站的存取。...
使用说明: ... ... ... 程式说明: ...主要程式:vqqq.net 界面修改美化及部分代码优化:emuch .../*本程式完全免费 ,唯一要求是,请保留vqqq.net版权,及vqqq.net的连接,如果你不同意,请不要使用本程序*/
你可以先选择程式现有的Texture Type(材质形式)或自己的图档,然後套用它内建的132种Preset (模板),再依自己喜好调整色盘及细部选项,轻轻松松就能制作出独一无二的背景图片(GIF、JPG)。注意事项:安装后程序会要求...
1013-硬体驱动程式 1014-检查 Windows XP 是否登记 1015-将〔修复控制台〕安装在硬碟内 1016-辨认真假中文版XP的方法 1017-XP减肥方法 1018-WINDOWS 错误代码 1019-Windows XP 家用版及商业版功能对比 ...
用家无法通过关闭程式来关闭MyUSBOnly,移除程式亦要输入密码 五大好处 杜绝经由USB装置盗窃资料 保障企业内部资料安全 禁止病毒进入企业内部 完整报表,记录USB在电脑上的所有行为 简易安装,无需伺服器,安装后...
这个应用程式可让使用者选择我为Andrea Bizzotto的Udemy课程-《初学者及以后的完整Dart语言指南》中设定的课程部分编写的程式码解决方案。 有关更多信息,请参考该课程。设计通常,我将为该课程中的每个代码解决...
+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ ...感谢大家使用本人设计的程式,请尊重我的劳动成果,不要删除我的版权信息! 有什么问题加我QQ279999471提出,谢谢。 本程序无后台属于前台型
语言:中文 (繁體) 这个插件可以帮助你在问题页面长出...另外很重要的一点,安装这个套件不会窃取你的任何资料,详细的程式码可以在这边参阅:https://github.com/yuh926323/peing如果使用上有任何问题,欢迎与我联系!
.NET Reflector 工具软件虽非Open Source(开放源代码),但早期释出的版本连他自己的exe档都能反转回原始程式,但后期版本则使用混淆器进行保护,并加上免费使用的天数限制 使用此一工具软件者,需注意到反编译出来...
程式码片段 Snippet代码共享网站。类似Gist,但加入了多文件在线编译运行,Web代码在线预览的功能。 :sparkles:功能 :smiling_face_with_sunglasses:分享发布代码片段。 :laptop:支持十多种语言在线编译运行。 :...
下载应用程式 该应用程序从未上传到Play商店。 如果要下载,请在此处下载 要求: Android手机必须至少在Lollipop以上。 您必须授予SMS权限。 这个怎么运作 阿格斯将为您生成一个秘密代码,以及您的电话号码和QR码...
Linux 操作系统基础教程 清华大学信息学院计算机系 目 录 前言..........................................................................................................................................
5.10 状况题 检视特定档案的 Commit 纪录 5.11 状况题 等等,这行程式谁写的? 5.12 状况题 啊!不小心把档案或目录删掉了⋯ 5.13 状况题 刚才的 Commit 后悔了,想要 拆掉重做⋯ 5.14 状况题 不小心使用 hard 模式...
其次,在避免重码的前提下,加入了大量词目,诸如网友、网站、程式、菜鸟、声卡、网卡等,不一而足;对于一些词序的排列也依据常用频率作出了相应调整,如“问题”之于“总是”即是一例,而一些“的确良”之类的历史...
EXCEL集成工具箱V8.0 多国语言版(2003-2010通用)增强版! * 软件大小: 22.90MB ...【锁定屏幕】 快捷一键式登出当前用户并锁定电脑,类似于CTRL+ALT+DEL功能。 【系统待机】 使用此功能可以达到节能及锁定...