阅读源代码有许多益处. 你会发现新的架构 (construct) 和库, 与其他的代码维护者产生共鸣, 但最重要的是学会如何组织代码, 避免因内部极其复杂而变得不可维护.
但是也有一个不好的地方, 那就是阅读源代码太困难了. 每当我看到一个新的代码库 (code base) 时, 这种让人眩晕的感觉就充斥了我的大脑. 我的内心告诉我压根不想趟眼前这趟浑水.
这是 (希望是) 正常的反应. 当我们的大脑接触过多的新东西, 就会产生排斥. 造物主赋予我们的这台强大的模式匹配机器根本找不到规律. 所有的抽象 (abstraction) 都是之前没见过的, 类的名称也毫无印象. 程序又到底是从什么地方开始执行的?
对此, 我能给出的一般性建议如下: 1. 寻找并建立自己能够理解的初步基础, 通常就是主要的入口点(main entry point).2. 从这个基础开始, 逐步探索主要功能. 3. 记录下自己的见闻.
本人从事在线教育多年, 将自己的资料整合建了一个 QQ 群, 有兴趣一起交流学习 c/c++ 的小伙伴可以加群: 941636044, 里面有大神会给予解答, 也会有许多的资源可以供大家学习分享, 欢迎大家前来一起学习进步!
从头开始
窍门就是给自己一个起点. 我是这样做的. 我通过 - h 选项运行程序, 并调用 help 命令. 之后我复制其中一条 help 文档字符串, 以此为检索词搜索一遍代码库, 找到这个帮助文档所在地方. 通常情况下, 调用 help 命令之后你会发现离程序的主入口点很近了.
辨明轮廓
找到主入口点之后, 我会运行几个文档中提供的示例. 然后, 我会试着追踪主要的代码块, 大致了解下每个部分是如何连接起来的.
我会问自己, 是否存在一个管理程序, 负责调用一堆帮助函数和类(helper functions and classes)? 是不是有一些类是平级关系, 相互之间轮流交换控制权? 是不是有一个程序逐步执行的主任务队列?
了解全局有助于你理清小细节. 如果你没有理解程序的主流程就闷头读下去, 那你很可能会被细枝末节搞得焦头烂额.
勤做笔记
我习惯直接在代码中做笔记. 做笔记的时候, 我会使用特殊的注释符(例如, 使用 #=>, 而非常用的 #), 这样可以将我自己的笔记与原作者注释区分开来.
如果碰到巧妙的技巧, 不易理解的流程, 编程架构 (construct) 的漂亮使用方式或者是其他任何你想牢记的内容, 务必要做笔记. 如果你读不下去了, 你也可以做个记录, 提醒自己之后要回去再读看不懂的部分.
通过写下你的思绪, 你实际上是在把那块代码变成你自己写的. 慢慢地, 你就会开始在工作中自然地用上新掌握的那些架构(construct).
融汇贯通
学习编程, 是一个反复读代码和写代码的持续过程. 只要你愿意接触不同的风格, 代码, 最终你会形成自己的独特视角和思维. 有兴趣和笔者一起学习的可以加上群哦!
来源: http://www.jianshu.com/p/9f92f8f481c3