文档章节

快速熟悉开源项目

 白驹鸣鹿
发布于 2017/02/09 17:45
字数 1518
阅读 17
收藏 2
点赞 0
评论 0

查阅文档

查阅文档包括查阅文档与博客,最好是带着问题去阅读。

查阅文档与博客

一个好的开源项目未必会火,但是一个火的开源项目一定有其可取之处,而从众心理又会让跟多人去研究它。所以,要熟悉你想研究的开源项目,第一步就是在搜索引擎中查找该项目的博客和资料。通过快速阅读介绍开源项目架构,使用方法等这类文章,你就能大体了解该项目的意义,功能和基本使用方法。

通过搜索到的资料,如果你觉得该项目就是你想要的,那么便可以很耐心的阅读项目提供的官方文档,从中学习一些具体的下载,安装和使用方法,以便了解项目全貌。

带着问题去阅读

阅读文档过程中不能盲目,需要带着如下问题去阅读。

  • 这个项目解决了什麽问题?
  • 这个项目涉及了哪些成熟的技术
  • 这个项目是否符合我的要求(用户规模,使用场景,性能,安全性等)?
  • 当阅读完文档后,能否尝试画出大致的架构图?

动手实践

实践是最好的老师,在阅读文档过程中,按照文档的操作指南亲手实践,不但有助于加深理解,同时还会注意到很多细节,可以更清楚的感受到项目是否符合自己的需求。

搭建项目

实践过程一般都遵循项目的README文件,进行部署安装和尝试。如果有现成使用项目的事例代码,那么也可以按照示例代码进行尝试。此时若是运行顺利,则可以尝试着根据自己的理解对事例代码进行修改。若是出现问题也无需慌张,只需要将问题的异常信息当作关键词在搜索引擎中查找即可。如果实在找不到解决方案,那么就可以提交到开源项目的邮件列表中,开源社区的人们一般都比较热心,相信很快就可以解决问题。

基本尝试过后,我们可以使用项目的一些高级功能,如一些高级配置项,较为复杂的API等。相信一个运作良好的开源项目,为了方便社区的贡献者们可以快速加入,必然会提供一份较为详尽的指南,你只需挑选你感兴趣的部分阅读即可。

基本尝试过后,我们可以使用项目的一些高级功能,如一些高级配置项,较为复杂的API等。相信一个运作良好的开源项目,为了方便社区的贡献者们可以快速加入,必然会提供一份较为详尽的指南,你只需挑选你感兴趣的部分阅读即可。

下面推荐几个解觉疑惑的好网站

  • Google搜索引擎: google.com
  • Stackoverflow: stackoverflow.com
  • 项目相关的Google讨论组: groups.google.com
  • 对GitHub的项目提Issues: github.com

深层次改动

有趣的是,很多开源项目一般都会为了方便用户使用,提供release的版本。如果基本的部署和使用已经成功的话,强烈建议你从源码构建和部署该项目。这样你就能从开发,调试到发布整个一体化的全部过程,由此全方位的感受项目的优缺点。

基本尝试过后,我们可以使用项目的一些高级功能,如一些高级配置项,较为复杂的API等。相信一个运作良好的开源项目,为了方便社区的贡献者们可以快速加入,必然会提供一份较为详尽的指南,你只需挑选你感兴趣的部分阅读即可。

阅读源码

经过以上两步之后,你必然对项目的大致情况了然于胸,想更深入的了解自然非阅读源码莫属了。

一般阅读源码有两种习惯方式,一是根据命令行的代码调用过程阅读;二是根据架构分模块阅读。

  1. 跟着运行过程阅读 刚上手的过程可以使用的一种方式。通过实践过程中对对某个命令或参数的理解,从主干开始,一步一步理清这个命令在运行过程中代码调用的路径。通过debug工具观察变量和函数,修改源码打印日志,可以更好的帮你理解源码。 当理清这个过程后可以将这个过程用流程图的形式记录下来,从而加深印象,方便下次阅读的时候快速会议和对比。
  2. 分模块阅读 在理清了程序运行的基本流程后,可以根据架构上各个模块的作用,挑选你有兴趣的部分阅读,如网络,存储,通信,用户接口,界面等,选择一个模块深入到实现细节中。

此时也可以带着如下几个问题帮助自己理解。

  • 调用了什麽底层库?
  • 采用了什麽设计模式?
  • 这麽写有什麽好处?

如果在阅读源码的过程中出现瓶颈,你一时无法理解代码的用意,不妨去阅读一下相关的单元测试。一个好的单元测试通常都描述了要测试代码的主要功能和数据边界,通过运行和理解单元测试,可以有效的帮助理解源码。

相信经过以上三步,你必然已经对这个开源项目非常熟悉了。此时如果你感兴趣,也可以加入其中为开源社区做出一定贡献。

摘抄自《Docker 容器与容器云》

© 著作权归作者所有

共有 人打赏支持
粉丝 2
博文 18
码字总数 11156
作品 0
丰台
Android学习规划

1,多看思想层面的书,比如:Java编程思想,数据结构,算法设计。而技术类的书上手很快,不需要花很多时间。 2,熟悉JNI,优化软件性能。 3,精通一门技术,但要知识面宽广,可以了解IOS开发...

nerozhao ⋅ 2015/05/28 ⋅ 4

欢迎jeecg技术爱好者加入开源团队

欢迎技术爱好者,加入JEECG开源团队!!! ================================================================= JEECG开源团队招募新成员 截止日期:2016-08-08 JEECG快速开发平台,是开源主...

Jeecg ⋅ 2016/04/11 ⋅ 0

如何迎接新的 .NET 时代

看完.NET 基金会、 Roslyn 编译器 ,应该已经能慢慢了解,现在所谓的“.NET 开源”、“.NET Open Source”并不是完全把现有的 .NET Framework 整个打开(虽然这里有个子集的参考版【https:/...

⋅ 2017/09/23 ⋅ 0

Jack.arain/avplayer

一直以来, 在多媒体播放器这块, 即使目前有许多开源的播放器项目, 但要写一个播放器仍然是件非常困难的事, 如果在windows上你有可能需要熟悉DShow, 另外的话, 你需要学习一堆开源项目(比如F...

Jack.arain ⋅ 2014/07/19 ⋅ 0

如何提高阅读源代码的效率

如何提高阅读源代码的效率 记得在开源流行之前,我看过的代码紧限于所参与的项目,能有个几万行就不错哩。后来很多优秀开源项目都相继蹦出来了,阅读的代码量那叫一个大呀!不得不看。我现在...

长平狐 ⋅ 2013/06/03 ⋅ 0

我要找一个开源项目,项目主要涉及分布式集群数据的存储和管理!

最近老板安排一个事情,就是要找一个开源项目,并深入研究之,但是给出的信息比较少,就说这个开源项目的logo貌似是个大章鱼(不确定),需要做分布式集群的大数据量的存储,我对这个不是太熟...

长江北 ⋅ 2009/07/01 ⋅ 5

PHP程序员都爱用的开发工具推荐

众所周知,软件行业是一个相对苦逼的行业,特别是遇到赶项目,很多程序猿就只有累成狗了。为了提高开发效率,让开发任务更简便、快捷,开源工具的使用是少不了的。今天小编整理了10款最受欢迎...

小懒人23 ⋅ 2016/05/19 ⋅ 0

基于ffmpeg并支持p2p(bt), http, rtsp的播放器 avplayer

一直以来, 在多媒体播放器这块, 即使目前有许多开源的播放器项目, 但要写一个播放器仍然是件非常困难的事, 如果在windows上你有可能需要熟悉DShow, 另外的话, 你需要学习一堆开源项目(比如F...

Jackarain ⋅ 2012/04/06 ⋅ 6

带掌握技能

Scrapy爬虫框架、Tornado框架 socket编程 appscan OpenCL Hadoop RabbitMQ zmq bt5,sqlmap,zap,burpsuite,WVS9.0,nmap 反编译原理,熟悉dalvik、smali 两年以上云开发(OpenStack)相关...

Jr小王子 ⋅ 2015/12/17 ⋅ 0

下一个擎开源大旗的是谁?

在公司对外宣讲的资料中,一贯说,Sun Microsystems是所有公司,机构中,对开源事业贡献开源代码的No.1,这些代码属于很多开发者熟悉的平台,软件和工具,比如OpenJDK, OpenSolaris, GlassFi...

红薯 ⋅ 2010/01/24 ⋅ 16

没有更多内容

加载失败,请刷新页面

加载更多

下一页

JavaScript零基础入门——(八)JavaScript的数组

JavaScript零基础入门——(八)JavaScript的数组 欢迎大家回到我们的JavaScript零基础入门,上一节课我们讲了有关JavaScript正则表达式的相关知识点,便于大家更好的对字符串进行处理。这一...

JandenMa ⋅ 今天 ⋅ 0

sbt网络问题解决方案

转自:http://dblab.xmu.edu.cn/blog/maven-network-problem/ cd ~/.sbt/launchers/0.13.9unzip -q ./sbt-launch.jar 修改 vi sbt/sbt.boot.properties 增加一个oschina库地址: [reposit......

狐狸老侠 ⋅ 今天 ⋅ 0

大数据,必须掌握的10项顶级安全技术

我们看到越来越多的数据泄漏事故、勒索软件和其他类型的网络攻击,这使得安全成为一个热门话题。 去年,企业IT面临的威胁仍然处于非常高的水平,每天都会看到媒体报道大量数据泄漏事故和攻击...

p柯西 ⋅ 今天 ⋅ 0

Linux下安装配置Hadoop2.7.6

前提 安装jdk 下载 wget http://mirrors.hust.edu.cn/apache/hadoop/common/hadoop-2.7.6/hadoop-2.7.6.tar.gz 解压 配置 vim /etc/profile # 配置java环境变量 export JAVA_HOME=/opt/jdk1......

晨猫 ⋅ 今天 ⋅ 0

crontab工具介绍

crontab crontab 是一个用于设置周期性被执行的任务工具。 周期性执行的任务列表称为Cron Table crontab(选项)(参数) -e:编辑该用户的计时器设置; -l:列出该用户的计时器设置; -r:删除该...

Linux学习笔记 ⋅ 今天 ⋅ 0

深入Java多线程——Java内存模型深入(2)

5. final域的内存语义 5.1 final域的重排序规则 1.对于final域,编译器和处理器要遵守两个重排序规则: (1)在构造函数内对一个final域的写入,与随后把这个被构造对象的引用赋值给一个引用...

江左煤郎 ⋅ 今天 ⋅ 0

面试-正向代理和反向代理

面试-正向代理和反向代理 Nginx 是一个高性能的反向代理服务器,但同时也支持正向代理方式的配置。

秋日芒草 ⋅ 今天 ⋅ 0

Spring 依赖注入(DI)

1、Setter方法注入: 通过设置方法注入依赖。这种方法既简单又常用。 类中定义set()方法: public class HelloWorldOutput{ HelloWorld helloWorld; public void setHelloWorld...

霍淇滨 ⋅ 昨天 ⋅ 0

马氏距离与欧氏距离

马氏距离 马氏距离也可以定义为两个服从同一分布并且其协方差矩阵为Σ的随机变量之间的差异程度。 如果协方差矩阵为单位矩阵,那么马氏距离就简化为欧氏距离,如果协方差矩阵为对角阵,则其也...

漫步当下 ⋅ 昨天 ⋅ 0

聊聊spring cloud的RequestRateLimiterGatewayFilter

序 本文主要研究一下spring cloud的RequestRateLimiterGatewayFilter GatewayAutoConfiguration @Configuration@ConditionalOnProperty(name = "spring.cloud.gateway.enabled", matchIfMi......

go4it ⋅ 昨天 ⋅ 0

没有更多内容

加载失败,请刷新页面

加载更多

下一页

返回顶部
顶部