当前位置: 首页 > news >正文

如何快速学习一个开源项目源码?

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

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

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

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

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

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

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

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

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

 


本文转自BloodyAngel博客园博客,原文链接:http://www.cnblogs.com/zgynhqf/p/6956766.html,如需转载请自行联系原作者

相关文章:

  • 表格花式效果
  • VSCode Vue文件格式化
  • 访问量统计
  • centos6.8 yum安装mysql 5.6
  • sqldatasource控件处理image类型数据
  • 快速构建Windows 8风格应用9-竖直视图
  • c++ 检查工具
  • 网管3.0时代的全面来临——Mocha BSM 先锋引领
  • 让KVM虚拟机支持console功能
  • Oracle的where条件in/not in中包含NULL时的处理
  • R710有数据下如何重装2003
  • awk学习
  • 如何搭建一个Ghost平台博客
  • Exchange2003-2010迁移系列之十一,Exchange2010 OWA配置
  • xfce文本方式修改快捷键
  • 时间复杂度分析经典问题——最大子序列和
  • [译]如何构建服务器端web组件,为何要构建?
  • 77. Combinations
  • Apache Pulsar 2.1 重磅发布
  • Create React App 使用
  • Eureka 2.0 开源流产,真的对你影响很大吗?
  • gf框架之分页模块(五) - 自定义分页
  • golang 发送GET和POST示例
  • Java比较器对数组,集合排序
  • JS创建对象模式及其对象原型链探究(一):Object模式
  • Linux CTF 逆向入门
  • mongo索引构建
  • yii2权限控制rbac之rule详细讲解
  • 不发不行!Netty集成文字图片聊天室外加TCP/IP软硬件通信
  • 从输入URL到页面加载发生了什么
  • 大快搜索数据爬虫技术实例安装教学篇
  • 软件开发学习的5大技巧,你知道吗?
  • 深入体验bash on windows,在windows上搭建原生的linux开发环境,酷!
  • 微信小程序设置上一页数据
  • 阿里云移动端播放器高级功能介绍
  • ​学习一下,什么是预包装食品?​
  • #中的引用型是什么意识_Java中四种引用有什么区别以及应用场景
  • ( )的作用是将计算机中的信息传送给用户,计算机应用基础 吉大15春学期《计算机应用基础》在线作业二及答案...
  • (1)Nginx简介和安装教程
  • (2)(2.10) LTM telemetry
  • (3)nginx 配置(nginx.conf)
  • (4)Elastix图像配准:3D图像
  • (SpringBoot)第七章:SpringBoot日志文件
  • (附源码)ssm失物招领系统 毕业设计 182317
  • (简单有案例)前端实现主题切换、动态换肤的两种简单方式
  • (区间dp) (经典例题) 石子合并
  • (一)Spring Cloud 直击微服务作用、架构应用、hystrix降级
  • (一)Thymeleaf用法——Thymeleaf简介
  • (一)搭建springboot+vue前后端分离项目--前端vue搭建
  • (转)C语言家族扩展收藏 (转)C语言家族扩展
  • (转)Linux NTP配置详解 (Network Time Protocol)
  • (转)MVC3 类型“System.Web.Mvc.ModelClientValidationRule”同时存在
  • .360、.halo勒索病毒的最新威胁:如何恢复您的数据?
  • .htaccess 强制https 单独排除某个目录
  • .net 托管代码与非托管代码