消息队列高手课
李玥
美团高级技术专家
52199 人已学习
新⼈⾸单¥59
登录后,你可以任选4讲全文学习
课程目录
已完结/共 42 讲
进阶篇 (21讲)
消息队列高手课
15
15
1.0x
00:00/00:00
登录|注册

09 | 学习开源代码该如何入手?

绘制流程图或时序图,写出重点算法和原理
用“带着问题和答案去读源码”的方法阅读源码
选择一个熟悉的开源项目
最佳方式是带着问题去阅读源码
最佳切入点是阅读官方文档
带着问题的答案去读源码
带着问题去读源码
阅读相关论文或博文
查看使用场景、功能特性和生态系统介绍
了解基本概念和名词的介绍
快速掌握软件整体结构和功能特性
看官方英文文档
思考题
小结
用以点带面的方式来阅读源码
学习项目灵魂
通过文档来了解开源项目
学习开源代码该如何入手?

该思维导图由 AI 生成,仅供参考

你好,我是李玥。对于很多开源软件来说,如果我们把它作为我们业务系统的重要组成部分之一,真正地用于生产,仅仅知道如何使用是远远不够的,你必须掌握它的实现原理和很多细节,这样才能找到最佳的使用姿势,当你的系统出现问题时,你才有可能基于它的实现原理,再根据一些现象来排查问题原因。
掌握这些开源软件的最佳方式就是去学习它的源代码。很多同学跟我说:“我也很想去看一些开源软件的代码,也尝试去看过,但是面对上千个源码文件,几十万行代码,完全不知道从哪儿入手啊。”
这节课我们就针对这个情况来聊一聊,学习开源软件的代码该如何入手。
有一点我提前说明一下,对于这节课里面涉及到的一些名词,我会直接使用英文,主要目的是方便你直接对应到那些开源软件英文官网上的标题。

通过文档来了解开源项目

学习源代码应该从哪儿入手呢?最佳的方式就是先看它的文档。
通过看文档,你可以快速地掌握这个软件整体的结构,它有哪些功能特性,它涉及到的关键技术、实现原理和它的生态系统等等。在掌握了这些之后,你对它有个整体的了解,然后再去看它的源代码,就不会再有那种盲人摸象找不到头绪的感觉了。
首先强调一点是,你必须去看这些开源软件官方网站上的文档,尽量不要去网上搜一些翻译的中文文档。为什么呢?
确认放弃笔记?
放弃后所记笔记将不保留。
新功能上线,你的历史笔记已初始化为私密笔记,是否一键批量公开?
批量公开的笔记不会为你同步至部落
公开
同步至部落
取消
完成
0/2000
荧光笔
直线
曲线
笔记
复制
AI
  • 深入了解
  • 翻译
    • 英语
    • 中文简体
    • 中文繁体
    • 法语
    • 德语
    • 日语
    • 韩语
    • 俄语
    • 西班牙语
    • 阿拉伯语
  • 解释
  • 总结

学习开源代码的关键在于深入了解其实现原理和细节,而不仅仅是使用方法。最佳的学习方式是从阅读官方文档开始,尤其是背后的论文或博文,再逐步阅读源代码。阅读源码时,建议带着问题和答案去读,这样难度低、周期短、收获快。通过这种方式,读者可以逐步了解开源项目的用途、解决的问题、适用场景、功能以及如何使用,为深入学习源代码打下基础。最后,建议读者在阅读源码的过程中,将主要的流程用流程图或时序图画出来,以及将重点的算法和原理用文字写出来。这样的学习方式能够帮助读者更全面、深入地理解项目源码。

仅可试看部分内容,如需阅读全部内容,请付费购买文章所属专栏
《消息队列高手课》
新⼈⾸单¥59
立即购买
登录 后留言

全部留言(59)

  • 最新
  • 精选
  • 南山
    读源码的习惯是喜欢按照一条主线来看,经常会被一些细节绕晕。多谢老师指路。 后续就按照:灵魂->官方文档->问题&答案找答案->核心类结构图+流程图->原理细节文字步骤说明->点成线->线成网->实际应用(可遇不可求)->官方文档->灵魂 多写总结,多思考知识点之间多关联,多动手,一切都是水到渠成的事儿~~~

    作者回复: 👍👍👍

    2019-08-11
    2
    38
  • linqw
    学习完这篇写下自己的理解,老师有空帮忙看下哦 1、在还没阅读开源项目代码之前,会先把Java的一些常用的源代码先看完,感觉所有的源代码都是这些基础的砖块叠加上去的,最近也在撸rocketmq源码,也是先把用到的一些其他框架先熟悉如netty、logger,然后看其官方文档,对整体的框架和基本的概念有比较感性的认知,再者写一些demo。然后先把rocketmq中的公共的模块的源代码先看,比如logger、loggappend、namesrv,如namesrv内部维护broker、cluster、topic、queue的路由信息,producer再发送消息前,需先将namesrv其broker的路由信息缓存到本地,为此需和namesrv维护长连接,定时的从namesrv获取新的路由信息,broker端需和namesrv为此常连接,broker定时的发送配置信息到namesrv,namesrv需开启定时任务将其超过时间没有收到心跳包的broker连接关闭。为了namesrv中的配置参数可以更改,可以从System中的properties中获取,也为了这些配置持久化也会在接收到配置参数时保存到文件中,namesrv需维护配置参数的设置获取,如发送消息前选择topic等,为了区分不同的命令,维护RequestProcessor,对接收到不同的RemotingCommand做不同的处理序列化和反序列化,参数检验等。很多开源框架都会做一个admin,便以实时的更改配置参数,实时的监控项目中的配置参数。 2、打算先把并发包先分析完,然后开始分析下rocketmq,这个是自己分析的一些知识点https://juejin.im/user/5bd8718051882528382d8728/posts

    作者回复: 👍👍👍

    2019-08-10
    2
    28
  • 纯齐
    请教下,有什么好办法找出开源项目的“灵魂”?

    作者回复: 建议去从文档中找。 如果这个项目是基于某个Paper的,一般文档中的显著位置都会标注。

    2019-08-12
    14
  • innocent
    您好,请问一下作为一个对Scala不是非常熟悉的Java程序员如何阅读Kafka的源码。

    作者回复: 花点儿时间学一下基础语法,特别是lambda,至少读懂源码就没什么问题了。

    2019-08-10
    2
    7
  • xfan
    我照着例子试了一下,有一个问题 为什么kafka的不同的topic 的Leader可以不一样,这个Leader等同于分布式系统中的master节点吗

    作者回复: 你可以理解master和leader的含义是一样的。 对于“为什么kafka的不同的topic 的Leader可以不一样”这个问题,我在《22 | Kafka和RocketMQ的消息复制实现的差异点在哪?》这节课中有专门讲到,你可以参考一下。

    2019-10-30
    1
  • 汤小高
    带着问题阅读源代码,但是怎么快速定位每个问题对应的源代码入口?

    作者回复: 一般通过文档或者测试用例结合文件名去找。

    2019-12-19
  • 陈珙
    老师在后续课程是否可以再开放一些”程序员史诗般必读文章”给我们学习下
    2019-08-12
    1
    82
  • hhhh
    这篇文章,解决我很大的疑惑啊!自己看代码就是先找main,真尴尬。。
    2019-08-10
    3
    19
  • 这节直指痛点,之前阅读源码就是这样半途而废的。 再启程,参考老师的建议 1:先整体,再局部 2:先英文,再中文 3:先灵魂,再原理 4:先文档,再源码 5:阅读前先思考,带上问题和答案去验证,阅读完了,记得总结——流程图、时序图、文字描述 6:我觉得还需要加上些基础,比如:数据结构、操作系统原理、计算机网络原理、设计模式等 7:最重要的在于坚持,遇到困难还能继续前进
    2019-08-21
    15
  • 编程界的小学生
    带着问题和答案读源码的确是最有效,收获最快的一种阅读源码方式,那么问题来源于哪?可以来源于你开发中真实遇到的问题也可以去网上搜面试题,网上答案几乎都给你原理,你知道这个问题的原理后,带着她去看源码,香。
    2020-07-07
    6
收起评论
显示
设置
留言
59
收藏
沉浸
阅读
分享
手机端
快捷键
回顶部