如何有效学习开源项目代码?

新手上路,请多包涵

如题:如何有效学习开源项目代码?

阅读 4.6k
18 个回答
新手上路,请多包涵

源码这些,得自己去看,去解读,或者根据官方的一些文档去学习,我们知道了这些原理后,对于程序的整体把控力,哪里出问题的地方会更加明确,理解源码可以让程序员更加深入的了解自己所使用的工具类的原理。开发起来更加稳健。

已参与 「极客观点」 ,欢迎正在阅读的你也加入。

一般来说分两种情况,一是带着问题去看开源代码,二是完全从零开始,学习开源项目的思路(甚至是为了面试)

第一种情况,遇到问题的时候会去看源码。比如我在网上找换肤方案,有个less.js,按照官网的步骤,最后报错了,然后我很好奇为什么会报错,于是去看了它的源码。怎么看的呢?就是从报错的地方直接打断点进去,找到对应的源码。大概知道问题原因后,又会比较好奇这个方案整体是怎么实现的。于是就从入口去看整体的代码,主要功能是如何实现的。我之前回答过一个问题,当时就是遇到问题了,我临时去看了axios的源码,找到了问题。

链接:自以为理解了宏任务与微任务,结果...为什么同步代码中的alert阻止了网络请求,宏任务中的却不行?

第二种情况就是现在很多人看vue、react源码的一种方式。在实际使用框架的过程中,往往不会涉及那么深的东西,但是你不去了解更深的原理,其实你对这个框架也就只能停留在最浅显的用的阶段。对于这种框架级别的源码,其实难度会大很多,因为整体架构有时候就比较复杂了,如果你直接去看github仓库,有点无从下手的感觉,你说你先看哪部分好呢?框架级别的可以推荐先从一些大佬写的mini浓缩版开始看,了解大概的架构和原理,比如mini vue等。通过这些浓缩的项目,你可以直接看很多关键技术的具体实现,比如reactive是如何实现的,nextTick是如何实现的...然后梳理一个整体的结构图,哪些模块负责哪些功能,最终这个框架就能成功跑起来了。当你进阶了之后,再去看完整的开源代码,或许就能有自己的心得和理解了。

已参与 「极客观点」 ,欢迎正在阅读的你也加入。

我个人觉得在没有明确目标之前,所有的读源码都是无效的。

如果你不知道你为什么要读这个项目的源码,或者明确知道你想要从这个项目的源码中获得什么的时候,读源码只是在浪费人生。

虽然我不否认读源码可以提升自己的编程水平,但是硬啃源码的投入远比你会收获的多得多得多。

已参与 「极客观点」 ,欢迎正在阅读的你也加入。

个人推崇的还是做,通过模拟实现一个mini版本的框架来熟悉框架原理。例如手写一个minivue

已参与 「极客观点」 ,欢迎正在阅读的你也加入。

学习开源,在代码里找答案,而不是在代码之外找答案。

  1. 从代码管理库下载完整的源代码
  2. 示例代码与单元测试
  3. 架构文档
    image.png
    已参与 「极客观点」 ,欢迎正在阅读的你也加入。
  1. 先用起来,最起码熟悉这个库干嘛的,哪些模块,高级api还有哪些。更深一层,它解决了什么问题,类似的库有哪些,了解即可。
  2. 对于使用方面的问题、疑惑,尝试扒拉下源码看下
  3. 阅读源码:

    1. 先看有无官方的原理性文档介绍,有的话,优先去看;
    2. 社区里是否有相关设计思想解读,可选择性看;
    3. 尝试 git reset 到第一次 commit 时,一般代码量少,兼容、容错代码也少,好看懂些;
    4. 还有一种方式就是直接怼吧:先看目录结构,一个个模块看,一个个文件看。
已参与 「极客观点」 ,欢迎正在阅读的你也加入。
  1. 学习编程的最好方式是看书(包括看文档)。
  2. 其次是写实战项目演练技术。
  3. 看源码大部分时候是被迫的,比如某个功能文档里没写,某个 bug 不好解决。
  4. 不能因为有人看源码、问源码就去跟着看源码,那样效率很低,甚至是浪费时间。
  5. 必须看源码的话:

    1. 搞清楚库的目的和动机
    2. 通过其它途径了解基本原理
    3. 不要死抠某个语句的细节
    4. 配合开发者工具和 sourcemap,追踪变量
    5. 看完即走,不求甚解,将来有需要再来看

已参与 「极客观点」 ,欢迎正在阅读的你也加入。

“有效”这个很难定义,如果它跟你的目标相挂钩,如果是你是要实现某个功能,只需要了解相关API,如果你是要定制开发或者面试需求,你需要了解相关源码。不然只读源码,并不是性价比高的选择。

已参与 「极客观点」 ,欢迎正在阅读的你也加入。

如果希望高效,我觉得最应该做的是就是要明确当前自身的能力,是否能看懂这个,一定不要刻意寻找酷的项目或者说复杂的项目,从简单的项目看即可。这样也对自己的信心有提升,不至于一起步就挫折。

已参与 「极客观点」 ,欢迎正在阅读的你也加入。

个人认为看源代码并不是一种高效的学习方式.很多人因为面试会问源码,或者看到某些博主说研究源码很厉害就去学源码, 我感觉是个误区.

我建议学习源码的方式是, 基础打牢, 然后真正有需要的时候, 翻文档的时候不经意就会去看源码. 如果有需求要修改, 自然而然就会去涉及部分源码.然后根据需求重点的去看源码.就算是面试也不是让你看书一样把源码从头看到尾的.


已参与 「极客观点」 ,欢迎正在阅读的你也加入。

找到你读源码的目的,是为了借鉴框架的设计模式,还是为了学习开源项目的架构设计,又或者是学习代码的规范,再或者是针对性对源码进行定制化等等。
当你找到一个确定的需求时,往往读源码会更加的合适,也会收获更多~

已参与 「极客观点」 ,欢迎正在阅读的你也加入。

理清脉络,这东西主要是干嘛的, 然后你自己会怎么设计, 与开源的又有什么不一样, 作者有啥让你眼前一亮的想法, 基本就能看明白了

已参与 「极客观点」 ,欢迎正在阅读的你也加入。

源码太多,浩如烟海,直接看没有目的性是不行的。
最好是能找到核心代码,或者找mini实现版本,如mini-vue这样的。


已参与 「极客观点」 ,欢迎正在阅读的你也加入。

源码太多,需要找自己工作接近或者需要的,针对性的研究比较好,这样既可以在工作中使用,又可以学习源码,一举两得。

已参与 「极客观点」 ,欢迎正在阅读的你也加入。

阅读源码对于知识储备要求很高,要了解自己学习开源代码的目的,如果是想要写一个框架,那么去阅读其他框架源码去学习一下别人的思路等还是可以的

已参与 「极客观点」 ,欢迎正在阅读的你也加入。

1、官方文档~
2、脑图~ 关键部分可加 时序图、流程图 等

已参与 「极客观点」 ,欢迎正在阅读的你也加入。

最好是在自己用第三方开源插件或者组件时使用;比如前端端的element-ui,后端的海豚调度
大数据的from-create,至少或多或少都有业务创新的地方

已参与 「极客观点」 ,欢迎正在阅读的你也加入。
新手上路,请多包涵

多看源码和应用场景,争取提交bug修改,多多交流

已参与 「极客观点」 ,欢迎正在阅读的你也加入。

logo
极客观点
子站问答
访问
宣传栏