`

【转】如何熟悉一个开源项目?

阅读更多

from:http://www.blogjava.net/killme2008/archive/2012/05/22/378885.html

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

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

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

分享到:
评论

相关推荐

    NVIDIA开源项目文档

    总的来说,NVIDIA的NVDLA开源项目提供了一套全面的深度学习加速器设计,其文档通过ReST和Sphinx构建,便于理解和定制。对于想要进入AI硬件开发或者对低功耗深度学习解决方案感兴趣的开发者来说,这是一个宝贵的学习...

    开源项目-icholy-rip.zip

    开源项目“icholy-rip”是一个利用sed工具实现文本处理功能的项目。在信息技术领域,开源项目意味着源代码对公众开放,允许用户查看、修改和分发代码,以促进协作和创新。在这个特定的项目中,“rip”可能代表...

    ESB开源项目研究

    **ESB开源项目研究** 企业服务总线(Enterprise Service Bus,ESB)是企业级集成中的关键组件,它提供了一种灵活、松散耦合的方式来连接不同系统和应用程序,实现服务之间的通信。ESB通常基于消息传递架构,允许...

    Java开源项目Hibernate包作用详解

    ### Java开源项目Hibernate包作用详解 #### 概述 Hibernate是一个强大的对象关系映射(Object-Relational Mapping,简称ORM)框架,它极大地简化了Java应用程序与数据库交互的过程。通过Hibernate,开发者能够更加...

    开源项目-gen2brain-flite-go.zip

    开源项目-gen2brain-flite-go.zip是一个专为Go编程语言设计的开源项目,它提供了与Flite(festival-lite)语音合成引擎的接口绑定。Flite,全称FESTIVAL Lite,是源自爱丁堡大学的FESTIVAL语音合成系统的轻量级版本...

    开源项目-saschagrunert-ccli.zip

    开源项目-saschagrunert-ccli.zip是一个包含开源项目ccli的压缩文件。ccli全称为"colored command line argument parsing",是用于命令行界面(CLI)应用程序的工具,它提供了彩色输出和参数解析的功能。这个项目由...

    仿转转商城,带接口,开源,可二次开发

    标题中的“仿转转商城”指的是该项目是基于PHP语言实现的一个类似转转(一个二手交易平台)的电商网站。"带接口"意味着这个平台不仅有前端展示,还包含了后端接口,能够与移动应用或其他系统进行数据交互。"开源,可...

    C#代码项目转换VB.NET项目代码(可整个项目转换)

    要实现整个项目的转换,可以利用专门的转换工具,例如使用SharpDevelop,这是一个开源的集成开发环境(IDE),支持多种.NET语言,包括C#和VB.NET。在提供的压缩包文件中,"SharpDevelop_3.2.1.6466_Setup.msi"是...

    开源项目-mewmew-mips.zip

    开源项目“mewmew-mips.zip”是一个专注于32位MIPS I指令集架构的解码库,它采用Go语言编写。MIPS(Microprocessor without Interlocked Pipeline Stages)是一种精简指令集计算机(RISC)架构,广泛应用于教学、...

    实验4 基于Spark MLlib的开源软件项目流行度预测1

    实验4主要关注基于Spark MLlib的开源软件项目流行度预测,这个实验旨在让学生深入理解GitHub软件项目的流行度预测背景,熟悉Spark的基本原理和运行模式,同时掌握特征工程、SparkSQL的使用、Spark Pipeline的操作...

    开源项目-barthr-rosetta.zip

    开源项目“barthr-rosetta”是一个基于命令行界面(CLI)的小工具,它利用了Rosetta技术。Rosetta通常指的是Apple的软件转换技术,允许Intel架构的Mac电脑运行为PowerPC处理器编译的软件。然而,在这个上下文中,...

    开源3DMap Flex 3D地图

    为了更好地理解和利用这个开源项目,你需要熟悉Flex编程、ActionScript 3.0、以及3D图形编程的基本概念和技术。同时,对于地理信息系统(GIS)和地图数据的理解也是很重要的。通过深入研究这个开源项目,你可以掌握...

    开源项目-google-puffs.zip

    4. 开源许可证:熟悉开源项目常见的许可证类型,如 MIT、Apache 2.0 或 GPL,了解它们对项目使用和分发的限制和权利。 5. 社区参与:探讨如何参与到开源项目中,包括报告问题、贡献代码、参与讨论和维护项目更新。 ...

    开源项目-cznic-wl.zip

    开源项目cznic-wl是一个基于Wolfram语言的解析器,旨在为开发者提供一个理解和操作Wolfram语言的工具。Wolfram语言是一种强大的符号计算和数据科学语言,由Wolfram Research公司开发,广泛应用于数学、物理、工程、...

    开源项目-marijnfs-YAWN.zip

    开源项目“marijnfs-YAWN”是一个基于Go语言构建的快速笔记服务器,它利用了leveldb数据库和mathjax技术。这个项目旨在提供一个高效、便捷的笔记存储和渲染平台,尤其适合需要处理数学公式和符号的用户。 首先,...

    开源项目-esimov-asciibrot.zip

    开源项目-esimov-asciibrot.zip是一个包含开源代码的压缩包,它实现了ASCII艺术形式的Mandelbrot集合,这是一种著名的数学分形。这个项目由Esimov开发,可以在命令行终端环境中运行,无需图形界面,为用户提供了在纯...

    开源项目-icholy-Duration.py.zip

    【开源项目-icholy-Duration.py.zip】是一个包含Python代码的开源项目,主要功能是解析`time.Duration`字符串。在编程领域,`time.Duration`通常用于表示时间间隔,特别是在Go语言中,它是一个内置类型,可以方便地...

    开源项目-a8m-mark.zip

    开源项目"a8m-mark"是一个使用Go语言编写的Markdown处理器,其主要目的是为了提供一个有趣且高效的解决方案,用于处理和转换Markdown格式的文本。Markdown是一种轻量级的标记语言,广泛应用于文档编写、笔记记录以及...

    网易开源项目pomelo VS2010工程项目

    “网易开源项目pomelo”是一个高性能、分布式的游戏服务器框架,它主要用于构建实时多人在线游戏(MMO)服务端。该框架由网易公司开发并维护,采用C++语言编写,旨在提供高效、稳定和可扩展的解决方案。VS2010...

    开源项目-seedifferently-nogo.zip

    "seedifferently-nogo" 是一个开源项目,其主要功能是通过DNS(Domain Name System)进行全网广告和网站的屏蔽。"nogo" 这个名字可能是“no go”的缩写,暗示该项目能阻止用户访问指定的广告或不受欢迎的网站。这个...

Global site tag (gtag.js) - Google Analytics