你有个任务,需要用到某个开源项目;或者老大交代你一个事情,让你去了解某个东西。怎么下手呢?如何开始呢?我的习惯是这样:

  1. 首先,查找和阅读该项目的博客和资料,通过google你能找到某个项目大体介绍的博客,快速阅读一下就能对项目的目的、功能、基本使用有个大概的了解。

  2. 阅读项目的文档,重点关注类似Getting started、Example之类的文档,从中学习如何下载、安装、甚至 基本使用该项目所需要的知识。

  3. 如果该项目有提供现成的example工程,首先尝试按照开始文档的介绍运行example,如果运行顺利,那么恭喜你顺利开了个好头;如果遇到问题,首先尝试在项目的FAQ等文档里查找答案,再次,可以将问题(例如 异常信息)当成关键词去搜索,查找相关的解决办法,你遇到了,别人一般也会遇到,热心的朋友会记录下解决的过程;最后,可以将问题提交到项目的邮件列表,请大家帮你看看。在没有成功运行example之前,不要尝试修改example。

  4. 运行了第一个example之后,尝试根据你的理解和需要修改example,测试高级功能等。

  5. 在了解基本使用后,需要开始深入的了解该项目。例如项目的配置管理、高级功能以及最佳实践。通常一个运作良好的项目会提供一份从浅到深的用户指南,你并不 需要从头到尾阅读这份指南,根据时间和兴趣,特别是你自己任务的需要,重点阅读部分章节并做笔记。

  6. 如果时间允许,尝试从源码构建该项目。通常开源项目都会提供一份构建指南,指导你如何搭建一个用于开发、调试和构建的环境。尝试构建一个版本。

  7. 如果时间允许并且有兴趣,可以尝试阅读源码:
    (1)阅读源码之前,查看该项目是否提供架构和设计文档,阅读这些文档可以了解该项目的大体设计和结构,读源码的时候不会无从下手。
    (2)阅读源码之前,一定要能构建并运行该项目,有个直观感受
    (3)阅读源码的第一步是抓主干,尝试理清一次正常运行的代码调用路径,这可以通过debug来观察运行时的变量和行为。修改源码加入日志和打印可以帮助你更好的理解源码。
    (4)适当画图来帮助你理解源码,在理清主干后,可以将整个流程画成一张流程图或者标准的UML图,帮助记忆和下一步的阅读。
    (5)挑选感兴趣的“枝干”代码来阅读,比如你对网络通讯感兴趣,就阅读网络层的代码,深入到实现细节,如它用了什么库,采用了什么设计模式,为什么这样做等。如果可以,debug细节代码
    (6)阅读源码的时候,重视单元测试,尝试去运行单元测试,基本上一个好的单元测试会将该代码的功能和边界描述清楚。
    (7)在熟悉源码后,发现有可以改进的地方,有精力、有意愿可以向该项目的开发者提出改进的意见或者issue,甚至帮他修复和实现,参与该项目的发展。

  8. 通常在阅读文档和源码之后,你能对该项目有比较深入的了解了,但是该项目所在领域,你可能还想搜索相关的项目和资料,看看有没有其他的更好的项目或者解决方案。在广度和深度之间权衡。

以上是我个人的一些习惯,我自己也并没有完全按照这个来,但是按照这个顺序,基本上能让你比较高效地学习和使用某个开源项目。
原文链接


---- 分割线 ----


时隔两年,开源项目没阅读多少,但是我又学到更多的方法了哈哈,总的来说,有三个要点

  1. 找到自己想要了解的点,可以是自己想的,也可是社区的issue。
  2. 搭建运行环境,找到对应的单元测试,跑通它。
  3. debug、打日志等,理解测试单元所涉及的模块的逻辑,并且将自己的理解记录下来,并不断完善它,直到通顺。

如何学习一个开源项目源码相关推荐

  1. java web开源项目源码_超赞!推荐一个专注于Java后端源码分析的Github项目!

    大家好,最近有小伙伴们建议我把源码分析文章及源码分析项目(带注释版)放到github上,这样小伙伴们就可以把带中文注释的源码项目下载到自己本地电脑,结合源码分析文章自己本地调试,总之对于学习开源项目源 ...

  2. GitHub上最火的22个Android开源项目源码(最少的一个也超过10k star)

    GitHub上最火的22个Android开源项目源码均超万星 chat图表 最全android工具类库 29.6k start Android智能下拉刷新框架-SmartRefreshLayout 2 ...

  3. 分析开源项目源码,我们该如何入手分析?(授人以渔)

    点击上方 好好学java ,选择 星标 公众号 重磅资讯.干货,第一时间送达 今日推荐:牛人 20000 字的 Spring Cloud 总结,太硬核了~ 1 前言 本文接上篇文章跟大家聊聊我们为什么 ...

  4. 开源项目源码分析(Kickstarter-iOS )(一)

    开源项目源码分析(Kickstarter-iOS )(一) 1.Kickstarter开源项目简介 2. Kickstarter项目结构 2.1 Makefile 文件 2.2 Git submodu ...

  5. java英语单词学习网站 Vue项目源码介绍

    本软件是一款高智能化的英语学习软件,具备查阅复习内容,复习进度,以及复习提醒等功能:还需具有复习汇总等功能.用户可无限扩充自己的词库,能随心所欲地制作出适合自己的词库,达到快速记单词,读音,词义的效果 ...

  6. 如何学习一个开源项目

    如何学习开源项目 google大法好 如果google大法有现成的实践,集成的技术帖子,跟着技术帖子学无疑是最好的.(注意点:要和技术贴处于同环境去学(依赖同版本,环境同环境).it行业很有意思,凡是 ...

  7. git bash here创建项目无法选择m_由GitLab用户切换引发的某程序员“暴动”,怒而开源项目源码...

    疯狂吐槽,咱也不知道为什么,原来GitHub用的好好的,我自己的项目也会上传到自己的码云,但是,谁想到,今天老大跟我说,让我把一个项目代码传到gitlab上,哎,又要切换账户了,所以,今天分享两部分内 ...

  8. halo 开源项目源码学习

    目的 看开源项目的目的无非就两个,看别人的代码组织结构.看别人的用到得到技术,还有就是看别人踩过的坑. 感受 就我看halo项目的感觉而言.感觉就是注释几乎就没有用.我看似乎这个项目国人挺多的怎么一句 ...

  9. Android开源项目源码下载(不断更新中)

    原文地址:http://www.cnblogs.com/salam/archive/2010/10/26/1861779.html 最近我搜集了一些提供源码的开源项目,在这里发布出来供大家学习使用. ...

最新文章

  1. Jupyter 在线python编辑器
  2. ReadDirectoryChangesW监控目录文件操作
  3. 存储器的保护(三)——《x86汇编语言:从实模式到保护模式》读书笔记20
  4. sip.conf配置详情
  5. CCIE-LAB-第十篇-BGP-VPNV4+VNPN6+MPLS+关闭TTL
  6. html里面textfield属性,StyleableTextField的CSS属性htmlText
  7. 牛年2021新年海报该有的样子!
  8. PAT乙级.1013.数素数
  9. App Store 4.3 大礼包被拒解决方案-本地差异化
  10. Java链表的常用算法原理
  11. 书评《鸟哥的Linux私房菜 基础学习篇》第四版
  12. 神经网络入门-感知器算法
  13. Python量化基础:时间序列的平稳性检验
  14. 抖音上显示内部服务器错误,抖音被限流了怎么办?这里分析了原因和解决方法...
  15. 50以内的质数顺口溜_100以内质数表顺口溜
  16. 视频图像的I帧、P帧、B帧详解
  17. 自动驾驶芯片之——FPGA和ASIC介绍
  18. Comparator.comparing排序报空指针异常
  19. win7台式计算机怎么连热点,怎么用台式电脑开热点,电脑怎么开热点win7
  20. 生物特征识别的种族偏见,肤色偏见,性别偏见

热门文章

  1. 程序员歌.一剂心灵的良药(共勉)
  2. 照片分色滤镜处理软件
  3. 发布Sensor_msgs::JointState关节位置或速度实现Barrett Hand机械手控制
  4. Duplicate Music Cleaner for Mac(重复音频查找清理工具)
  5. [转载]ffmpeg的使用
  6. TeraTerm SSH 登陆(出现连接被拒绝的解决办法)
  7. 基于eclipse的android项目实战—博学谷(五)“我”的模块
  8. 三天的时间,如何学会C++,原来只要四个步骤
  9. 继在中国开设AI中心两个月后 Google这次又将一个重大研究项目转向法国
  10. 解决win7无法默认选择的Everdit程序打开文件