如何阅读php的源代码,如何阅读源代码?你有读过哪些源代码?晒晒你读源代码的经历……...
python 的读过 tornado、requests,其他的用到什么读什么,C++ 的读过 xpdf,不开源的就更多了。。第零步 —— 准备好你本次的阅读目的一个项目,特别是上万行的代码,你是不可能一次读完的。带着目的读代码,而不是翻代码。如果你是要修改一个功能,这样明确的目的就非常好。如果不是,也请列一个提纲,比如今天读懂代码组织方式,明天读懂架构,后天读懂功能A 等等。你可以用剥洋葱的方式一
python 的读过 tornado、requests,其他的用到什么读什么,C++ 的读过 xpdf,不开源的就更多了。。
第零步 —— 准备好你本次的阅读目的
一个项目,特别是上万行的代码,你是不可能一次读完的。带着目的读代码,而不是翻代码。
如果你是要修改一个功能,这样明确的目的就非常好。
如果不是,也请列一个提纲,比如今天读懂代码组织方式,明天读懂架构,后天读懂功能A 等等。
你可以用剥洋葱的方式一层层往里读,也可以直接切一刀。但是请不要翻代码,这样永远都读不懂。
第一步 —— 把代码运行起来
读代码之前请一定要让代码能运行起来,读 usage,读 API 文档,把握代码的主要功能和功能入口。如果你连程序是干嘛的都不知道,怎么读代码?
第二步 —— 找入口点
根据上一步你了解到的功能,选一个最简单的(比如 xpdf 有 GUI,有 pdftopng, pdftohtml, pdftotext,显然难度是下降的)程序,或者 API。找到它的源码位置,从它开始读。而像 tornado 的文档直接就有 API 到代码的链接,就简直太完美了!
不过,像 tornado 这样的异步架构,你可能找不到它的主循环,这时候找一个主事件处理 callback 就可以。
第三步 —— 观察数据流
好,假设你在第二步选好了要读的 main 函数或者主循环。不要着急读代码,首先看看 argv 在 main 函数中是怎么解析的,传递给了谁,谁输出了结果。主函数是怎么拿到请求的,谁处理了请求,最后输出的是哪个变量。
第四步 —— 只看函数,不看逻辑
跟着数据流,看它经过的函数,不要看逻辑,只看函数。猜,它是干嘛的。如果猜不出,跳到函数定义,看函数头注释,看接受的参数。但是记住只跳一层,不要看代码逻辑。
如果你是在剥洋葱,找个小本本记下每个函数的功能,明天请从最主要的那个函数开始看。如果你有着明确的目的,猜哪个函数和你需求相关的,进入那个函数继续看。
GOTO 3
因为很重要,再说一次,在认识所有的函数之前,不要读代码逻辑!除非:一、你已经找到你需要修改的地方;二、它是这个程序的最主要的功能算法。而这样的代码,整个程序往往只会有一处。
更多推荐



所有评论(0)