阅读源代码是一种非常有效的学习方式,我们可以从高手的代码中学习到很多 最佳实践 ,对于 emacs-lisp
这类文字资料较少的技术更是如此,但是不得不说读代码的效率相对较低,各位有什么 高效的阅读方式或者建议 么。
例如试图在原有的代码上加一些功能?(这样可以较快的在改动中了解原来的代码结构等)
阅读源代码是一种非常有效的学习方式,我们可以从高手的代码中学习到很多 最佳实践 ,对于 emacs-lisp
这类文字资料较少的技术更是如此,但是不得不说读代码的效率相对较低,各位有什么 高效的阅读方式或者建议 么。
例如试图在原有的代码上加一些功能?(这样可以较快的在改动中了解原来的代码结构等)
阅读源码,我感觉最重要的是理解源码背后的意图,源码的执行流程。至于每一句话的意图,可以在理解了大体结构之后再细究。
对于 js, c++等源码的阅读,我一般是打一些断点,然后研究 call stack,这样可以很方便地知道程序大体上的执行路径。
等对程序大体流程有了一些了解一后,我会尝试修改已有的一些函数。然后验证自己对于这些内部 api 的使用是否正确。
我会仔细阅读每一个功能的相关类的 API 文档,主要是一些 public API 的文档,当然如果作者没写文档这一步也不可错过。通过阅读 API,可以知道这些封装大概是干什么用的
我会使用这些 API 去组装出一些新的玩意。
我会阅读一些高阶的文档,比如如何扩展一个模块,如何写一个插件。然后通过写一些扩展来增强我对代码库的理解。
最后,我会重新发明一个最小能够工作的轮子,这样对于核心工作原理和算法会理解地更加深入。如果我的轮子不行,就加入一个好的开源轮子里面。
以上就是我关于如何高效阅读源码的一些体会。
thx,这里更多是针对全局的掌控。如果是一小部分比较绕的代码呢,例如 emacs-lisp
和写的比较 lisp
的 JavaScript,有时候会出现读起来比较费解的高阶函数。
读《The little schemer》, 《SICP》,学习 Haskell,Clojure, F#,转换思维成函数式的 (BTW:我也是函数式菜鸟)
Little Schemer 吧?
很少读源码,根本找不到一个好的方式去读它,学习啦
打错,已修正,感谢提醒。
有一个工具叫understand 感觉可以一用,静态分析代码还是很方便的