阅读源码策略之我见
2016-01-09 18:52
211 查看
Read The Fucking Code
谁都知道阅读源码的好处,但是数次尝试进入源码的海洋,而数度又无功折返的惨痛经历,比如android框架的源码,linux内核的源码…..等等。就好像当年那帮出海寻找宝藏的水手们,在汪洋大海里历尽千辛万苦却徒劳无获。
另一种方式 就是提出一大堆问题,去寻找问题的答案,
反正最后的最后就是绝对不能不去思考就去开始源码的征程。
最好是带着一种验证猜想的好奇心?
这样就不会在代码的海洋中迷失。
当然当你扬帆的次数多了,渐渐的也就每个角度都熟知了,你就成为这个方面的专家。
谁都知道阅读源码的好处,但是数次尝试进入源码的海洋,而数度又无功折返的惨痛经历,比如android框架的源码,linux内核的源码…..等等。就好像当年那帮出海寻找宝藏的水手们,在汪洋大海里历尽千辛万苦却徒劳无获。
1.先把他看成一个黑盒,用用看
首先得从使用者的角度去了解这个框架或者库是用来干啥的,作为上层的开发者去使用把玩他,了解它存在的意义。2.猜
只是单纯看别人写的教程资料是不动脑筋的过程,而且无法得到深刻的理解和贯通。而前期“猜它的原理”则是一个很重要的过程,但如果你对于猜也一点头绪没有,那么不要急着去看源码了,而是应该返回第一步或者再补充一些相关的基础知识。另一种方式 就是提出一大堆问题,去寻找问题的答案,
反正最后的最后就是绝对不能不去思考就去开始源码的征程。
3.底层出击
根据猜测搜索关键实现。比如在看RoboGuice的源码,它最终的实现肯定跑不开findViewById,这么一搜,一下子就找到最核心的那一层了。3.1.这么做有什么好处呢?
3.1.1.树立方向感
如果从上层API正向深入的话,比较大的源代码框架它的实现层级会非常深,看着看着就被带晕掉了,但是如果一下子找到了这个最核心最关心的那一层,在源码的海洋里就像竖起了一台灯塔,让人有了方向感。3.1.2.验证自己的猜测
如果我们带着自己错误的猜测去看代码,也许比没有猜测还差,通过这种方式快速的验证自己的猜测是否正确,如果有错误,那么是否应该再考虑考虑。4.正向深入
从暴露的API接口开始深入源码 阅读。借助时序图工具,保证自己的思路清晰。5.将正面深入和底层出击进行对接
第3步 底层出击 已然建立了一个灯塔,那么正面深入就需要寻找到通往这座灯塔的一条路径,一旦这条路径变得清晰,那么源码探索的征程才算完成一大半。其他要点
看源码要有明确的目的
最好是带着一些问题?最好是带着一种验证猜想的好奇心?
这样就不会在代码的海洋中迷失。
不要为细节所困
把握大框架,以自己看源码的初衷为主线,不要因为周边的细节而偏离,跳跃式阅读关键实现。不要求全
每次扬帆出航,只为一个明确的目的,不要试图一次将每个角落都搞个明白。当然当你扬帆的次数多了,渐渐的也就每个角度都熟知了,你就成为这个方面的专家。
设置断点来查找到使用的是哪个子类
一个父类有好几个子类,而外面使用的是父类的类名,程序庞大,不能很快知道其到底对应的是哪个子类,那么在每个子类的方法中设置断点,看看最后是停在哪个子类方法中便可知。相关文章推荐
- servlet的使用
- Android 改变屏幕亮度时需添加权限
- 实例讲解js验证表单项是否为空的方法
- ubuntu下安装phpstudy环境记录
- Linux错误代码含义/Linux return Error Code
- 如何通过java代码解析xml文件
- WEB前端知识在乱花渐欲迷人眼的当下,如何分清主次和学习优先级呢?
- css3 的content 属性
- Play FrameWork javax.persistence.OptimisticLockException: Data has changed.
- POJ-2353 Ministry(动态规划)
- - #import、#include和@class有什么区别
- POJ-2353 Ministry(动态规划)
- 一个java程序员自学IOS开发之路(十四)
- Thankpad T450功能键(F1-F12)设置
- nodejs+express 4.x笔记
- DirectUI的初步分析
- 游戏世界坐标转化为UGUI屏幕坐标
- Linux printk and log level
- 倾听雨的声音
- 获取java项目根目录的几种方法汇总