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.通常在阅读文档和源码之后,你能对该项目有比较深入的了解了,但是该项目所在领域,你可能还想搜索相关的项目和资料,看看有没有其他的更好的项目或者解决方案。在广度和深度之间权衡。
以上是我个人的一些习惯,我自己也并没有完全按照这个来,但是按照这个顺序,基本上能让你比较高效地学习和使用某个开源项目。
相关推荐
5个目标文件,演示Address EJB的实现,创建一个EJB测试客户端,得到名字上下文,查询jndi名,通过强制转型得到Home接口,getInitialContext()函数返回一个经过初始化的上下文,用client的getHome()函数调用Home接口...
Message-Driven Bean EJB实例源代码 2个目标文件 摘要:Java源码,初学实例,EJB实例 Message-Driven Bean EJB实例源代码,演示一个接收购物订单的消息驱动Bean,处理这个订单同时通过e-mail的形式 //给客户发一个感谢...
我仍然不熟悉许多开源项目,我可能错过了一些。 如果您最喜欢的项目不包括在内,我很抱歉。 无论如何,请向我发送拉取请求。 为什么? 您很可能直接或间接地从这些项目中受益。 如果您有空闲时间,请考虑回馈这些...
FreeMind是一套由Java撰写而成的实用的开源思维导图/心智(MindMap)软件,可用来帮助你整理思绪的工具软体,可将每一个环节用图形表示,透过将思路图形化、结构化,帮助你对整个作业流程的了解。FreeMind开发项目组正...
WebToApp的有一个完整的开源代码,这样你就可以自定义和添加你想要的一切。 高级支持 如果您无法在文档或我们的社区常见问题解答中找到答案,我们将提供个人支持。 伟大的定制 选择您最喜欢的主题颜色和联合收割机...
OSChina Android ##写在前面的话从2.3版本开始,项目已经完成了gradle化,完全迁移到了Android studio,如果想使用eclipse进行该项目的学习,可以克隆v2.2.1,...一级界面包括资讯,动弹两个模块,采用根据滑动到不同页
自己设计一个简答的上位软件,通过usb转串口连接KL25板 控制oled屏,实现点,线,方块,和圆的驱动 原理图 pcb图 新做的板子和kl25核心板,用螺柱跌在一起,中间的连接线用排线或者杜邦线。留出调试接口,复位按键...
在考虑“有效议程”之前,请先熟悉对等公共许可证。 我们的许可要求您分享您的扩展名,并提供我们对我们工作的归属。 如果您发现分享和归属的义务令人反感,则我们的项目不适合您。 开源许可证:...
mdwikimdwiki 是 markdown wiki by python 的简称。...功能特性:首先它的定位...目前正在学习 Python 而且也在期望升级个人网站,故而决定开发一个wiki系统。采用 Python Flask Redis SQLite 开发 标签:mdwiki
5个目标文件,演示Address EJB的实现,创建一个EJB测试客户端,得到名字上下文,查询jndi名,通过强制转型得到Home接口,getInitialContext()函数返回一个经过初始化的上下文,用client的getHome()函数调用Home接口...
该包力图实现四个目标: 简单性:一个简单的到界面,那些交易经验丰富但不熟悉Python的人可以轻松使用。 通往数据科学的门户:这些类允许为infertrade简单接口创建的规则与功能一起用于预测和校准。 (拟合,转换,...
这是一个开源项目,我们 :red_heart_selector: 与社区一起构建出色的工具。 我们准备了一份指南,可帮助您入门。 如果这是您的第一个PR,或者您不知道从哪里开始,请在我们的频道打个招呼,团队成员会为您提供辅导...
[chrome-qrcode] 一个非常简单的chrome插件,用于将当前页面的...本项目是为了熟悉Chrome插件开发,以及webpack的基本使用而做的一个简单项目,参考或者使用的开源项目。 五,后续工作 选项配置页面,自定义二维码样式
贡献这是一个开源项目。 我们很高兴以问题和请求的形式收到您的反馈。 在提交您的请求请求之前,请查看我们的。 感谢所有帮助创建和维护此程序包的贡献者。 贡献者列在“部分。安装Aldryn平台用户从仪表板中选择要将...
产品特点熟悉的Gmail界面跨平台(macOS / Linux / Windows) 有用的键盘快捷键多个帐户可选始终在最前面自动更新到最新版本桌面通知TODO:深色主题待办事项:自定义文字大小TODO:可以用作默认邮件客户端欢迎所有...
玩转开源库 Glide 学一点架构封装 简单爬取必应图片 项目截图 App体验地址: 如果你还没有熟悉RxJava的用法,请看这里: 推荐-推荐的不仅仅是技术 Google推荐的图片加载库Glide介绍 - 泡在网上的日子 Java获取必应...
Office UI Fabric 是一个移动优先、专为开发人员而打造的响应式框架,旨在帮助其通过早已熟悉的Office设计语言来创建基于web的体验。该项目自诩可以非常简单地打造一个全新的插件,或者为现有的附加组件加入新功能。...
Pelias是一个由开放数据提供支持的全球各地搜索引擎。 它将地址和地名转换为地理坐标,然后将地理坐标转换为位置和地址。 使用Pelias,您可以将用户的地点搜索转换为可操作的地理数据,并将地理数据转换为真实的...