学海无涯,何以为舟?
最近在研究 Chromium 的源码,由此产生一点感想:现实世界的工程其实都是非常庞大的。即使像 Chromium 这样一个非常高质量的项目,哪怕它的每一个模块、每一行代码都有学习的价值,我们也是很难去完全学习清楚的。
我觉得一个比较有效的方法是结合自己遇到的问题,再去深入地分析研究。总的来说,带着问题,带着目的,带着实践的反馈去研究一个模块,效果是最好的。
当然这里还要注意三个问题。
第一个问题是,很多东西是超越代码的。比如说,这个地方为什么要这么设计?它是为了什么样的场景、解决什么样的现实问题?这些东西不一定在代码里面有完整的体现。
第二个问题是时效性。你对一个模块今时今日研究懂了,但是这个模块是会不断更新迭代的,可能你以后不做这个方向了,你的知识又过期了。所以,更重要的是你要从这里面沉淀出一些更有价值的东西,补充到你的知识体系里面,而不是跟着这个项目走。
第三个问题是:研究透一个模块固然重要,但是实际上很多模块和问题都是交叉关联的。绝对不能把自己拘囿在一个具体的问题上,要时刻用联系的眼光去看待整个模块。即使我们没有精力去把其他的模块搞清楚,还是要有意识地去建立一张知识的网络图谱,而不是孤立、局部地看待问题。
当然,这里涉及到一个问题:我们选择自己工作方向的时候,一定要选择一个有足够上限,或者说生命力足够持久的领域,比如浏览器。我觉得像操作系统、安全还有编译器,这些可能都是比较底层,不可能被完全替代的领域。但是像安卓的一些框架或技术栈反而很容易被替代,所以选择方向也很重要:选择一个能做 20 年的方向,或者选择一个能够让自己投入毕生精力的方向。
最近我就在研究chromium的渲染管线和窗口抽象设计。首先,可以以这个为切入点来研究 Chromium 的某些模块。
其次,可以与之前自己对于 WebKit 和 Flutter 的一些研究关联起来,形成对比。






