内容纲要
背景、动机
工作中总是需要接触到各种各样的框架、技术;尤其是在需要扛起大旗,作为一个项目主导人员的时候,为了做好技术选型,我们需要学习许许多多的技术;闭门造车不可取是共识,能力提升最快的方法之一就是阅读源码:领悟别人的精髓,化为己用。通过源码阅读,学习框架能够:
- 提高编码能力
- 锻炼架构思维
- 掌握更多的技术方向
方法
在变化万千的软件行业,死记硬背能起到的作用非常小,也很低效。所以需要一个适合自己的学习方法。
误区
我最开始学习源码的时候,总感觉无从下手。于是傻乎乎的把整个源码下载下来,从排列的第一个文件、文件夹开始一点点的读代码……结果是😭臣妾做不到啊!
,不管怎么认真,始终是坚持不到读完代码……
启发
我上学的时候,曾经学过画画,画好一副画,是有很多方法的,但其核心总是差不多的:
- 确定构图
- 画的范围(边界)在哪
- 画里面要有哪些元素
- 元素的主次是什么
- 打形
- 描出整个画面构图、物体位置关系、形状大小
- 描出整个画面构图、物体位置关系、形状大小
- 粗描
- 大致描出各个物体的具体形象
- 大致描出各个物体的具体形象
- 精描
- 精细打磨明暗面、光影效果等
- 精细打磨明暗面、光影效果等
总结
经过对学习画画的思考、总结,我得出一个目前来说还算比较适合我的学习方法:
- 查看官方文档
- 有文档
- 事先阅读文档能够有效的加速代码理解(尤其是一些配置项之类的)
- 如果需要锻炼源码阅读能力的同学,并且不是那么着急的话,可以先不看文档(要做好会代码读的很累的准备,因为很多变量你不知道意思,得读相关代码才能分析出来,这一步会比较耗时),留着最后验证学习效果
- 没文档
- 很大一部分我们接触的代码应该是没有文档,或者文档不齐全的,有能力、精力的同学希望能整理一份文档(发起一个开源文档项目),为开源事业贡献一份力量👍
- 有文档
- 确定学习目标
- 要学框架的哪些部分(功能);不是每个框架都需要从上到下完完全全的看完的(多贡献值维护的框架,即使是源码贡献者也未必会掌握全部代码)
- 确定源码结构
- 粗略查看项目的文件结构、包构成等
- 深入模块实现
- 写使用 Demo
- 跟进 Demo 代码使用到的框架源码
- 跟着主线走,不要被分散精力
- 不要抓着一个代码死肯(尤其一些算法实现,没相关知识不一定看得懂,知道干什么的就可以了,不用太深入)
- 主线之外的代码可以过一遍,不明白就先放着,主要是混个眼熟
- 理清 Demo 线路相关代码的生与死,如:
- Web 类型框架核心引擎的请求 Request 和 Response 的流程
- 事件驱动程序的启动到循环监听已经退出监听条件等
- 最好以自己的理解画出架构图
- 重复以上步骤,大致搞清目标要学的部分的基本原理
- 找(写)个完整的项目(有必要的话)
- 检测各个模块的掌握情况
- 加深记忆
- 梳理整个系统的架构(最好以自己的理解画出架构图)
PS:我的其它源码学习文章基本会按照这个套路进行学习,并且文章中的部分源码由于篇幅太长,不会直接贴在代码中,有需要参考我的文章的同学,请务必下载一份相应(版本)的源码结合着文章看。