`

如何熟悉一个开源项目?

 
阅读更多

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

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

分享到:
评论

相关推荐

    JAVA上百实例源码以及开源项目源代码

    Message-Driven Bean EJB实例源代码 2个目标文件 摘要:Java源码,初学实例,EJB实例 Message-Driven Bean EJB实例源代码,演示一个接收购物订单的消息驱动Bean,处理这个订单同时通过e-mail的形式 //给客户发一个感谢...

    JAVA上百实例源码以及开源项目

    5个目标文件,演示Address EJB的实现,创建一个EJB测试客户端,得到名字上下文,查询jndi名,通过强制转型得到Home接口,getInitialContext()函数返回一个经过初始化的上下文,用client的getHome()函数调用Home接口...

    Google开源项目风格指南 C++ 4.4.5 (2016) 最新中文版

    本指南的另一个观点是 C++ 特性的臃肿. C++ 是一门包含大量高级特性的庞大语言. 某些情况下, 我们会限制甚至禁止使用某些特性. 这么做是为了保持代码清爽, 避免这些特性可能导致的各种问题. 指南中列举了这类特性, ...

    ntu-cookbook:一个开源项目,汇集了各种烹饪食谱,方法和技术

    这是一个开源项目,由我们的成员之一。 该项目的灵感来自项目。 该项目和回购的目的是汇编诺丁汉特伦特大学学生的各种烹饪食谱,方法和技术。 该存储库由的成员维护和支持。对贡献感兴趣? 如果您正在阅读本文档,...

    OFBIZ 开源项目分析

    正在我兴奋着自己能够成功地进入了这家公司后,一个不小的挑战摆在了我的面前。...在这期间我遇到了许多大大小小的麻烦,主要是因为对OFBIZ的不熟悉造成的,幸亏同事们对我的帮助,让我克服了这一个个困难

    Contribute-101:simple一个简单的项目,可以帮助您开始您的第一个开源贡献

    这个项目只是为了帮助和鼓励新的开发人员熟悉开源贡献。 :cloud: 介绍: 您好贡献者! 开源项目是增强您的编码技能和探索新技术的好方法。 但是,对开源项目做出贡献的最重要的是FUN。 当您的请求请求被接受时,...

    Plone在全球所有开源项目位居前2%,由340核心开发者参考研发,并在57个国家超过300个解决方案提供商 .rar

    这里要重点说说大家不太熟悉的Plone。其实把plone放在跟joonla/druple等建站类的CMS一起来...Zope是web应用服务器,类似于J2EE、.NET,是一个优秀的开放源代码的 WEB应用服务器。Plone已超出了单纯内容管理平台的范畴

    goodcode:来自著名开源项目的带注释代码示例的精选集合

    即使对于经验丰富的专业人士来说,理解它也可能是一个挑战。 你是如何开始探索代码的? 打开随机源文件? 这并不意味着您不应该尝试理解好的开源项目。 你应该这样做,而且这种体验会非常有益。 然而,这不是一个...

    unicorn-projects:独角兽开源项目

    我仍然不熟悉许多开源项目,我可能错过了一些。 如果您最喜欢的项目不包括在内,我很抱歉。 无论如何,请向我发送拉取请求。 为什么? 您很可能直接或间接地从这些项目中受益。 如果您有空闲时间,请考虑回馈这些...

    freemind1.0最新版思维导图软件 开源 免费 上手快

    FreeMind是一套由Java撰写而成的实用的开源思维导图/心智(MindMap)软件,可用来帮助你整理思绪的工具软体,可将每一个环节用图形表示,透过将思路图形化、结构化,帮助你对整个作业流程的了解。FreeMind开发项目组正...

    WSTMall 开源多用户商城系统 v1.9.5.zip

    WSTMall是一款基于thinkphp开发的多商户新零售开源系统,是一款能够帮助企业及个人快速构建O2O(线上到线下)服务体系的系统 ,全方位助力创业团队的快速成长及商业变现! WSTMall已形成集PC端、WAP端,微信端,安...

    开源免费优秀播放器 Media Player Classic – Home Cinema 1.9.11 + x64 中文多语免费版.zip

    Media Player Classic – Home Cinema 就是其中之一,它的试图成为一个简单但功能强大的播放器。 开源免费优秀播放器 Media Player Classic - Home Cinema 中文版开源免费优秀播放器 Media Player Classic – Home ...

    purebasic:PureBasic开源项目

    PureBasic开源项目 Repository: Repository: Vanity URL: Vanity URL: 欢迎来到PureBasic OpenSources Projects ,这是一个中央公共资源库,可以访问所有开源代码, 是Windows,Linux和OS X的本机代码BASIC编译器...

    易于理解:一个旨在使您成为开源贡献者的旅程的项目

    Easy to Git是一个开源项目,提供了许多入门Git和GitHub的方法。 更具体地说,该项目的主分支是的代码,您可以在其中查看贡献的结果。 加入与我们的社区进行互动。 随时提出问题,提出建议并结识其他贡献者。 ...

    30天学通Java_Web项目案例开发

    在每一个项目案例的介绍中,笔者都是按照实际的开发步骤进行的,一个模块一个模块地进行介绍。对每一个项目的代码都进行了详细的介绍,对核心代码还进行了详细的代码注释,尽量让读者读懂代码中的每一行,每一个细节...

    favorite-web:云收藏者Spring Boot 2.X开源项目

    云收藏是一个使用Spring Boot构建的开源网站,可以让用户在线随时随地收藏的一个网站,在网站上分类整理收藏的网站或者文章,可以作为以后阅读的一个临时存放。作为一个开放开源的软件,,可以让用户从浏览器将收藏...

    开源免费图像处理软件 Chasys Draw IES Artist 5.03.01 中文多语免费版.zip

    此外,这是第一个使您熟悉该工具所有功能的窗口,这些功能不限于基本图像格式:空白构图,打印构图,Web,CD 或 DVD 标签动画,扫描图片,静态图标或光标,动画光标或画笔,捕获的视频或屏幕截图。 首先吸引眼球的...

    非常棒的 Java 开源项目集合 Java 开发必备!.zip

    在一个面向对象的系统中,类(class)是数据和操作数据的方法的集合。数据和方法一起描述对象(object)的状态和行为。每一对象是其状态和行为的封装。类是按一定体系和层次安排的,使得子类可以从超类继承行为。在...

    IOS开发工程师面试常见问题

    IOS开发工程师面试常见问题,比如:你为什么热衷于软件开发?你对哪一种控制系统比较熟悉? 是否参与过GitHub项目? 是否参与过GitHub或其他同类型网站的iOS开源项目? 请描述一下你的iOS应用开发流程。 

Global site tag (gtag.js) - Google Analytics