如何加入一个开源项目(转载)

这不是一篇权威的指南,只是一些你需要遵循的基本规则,这些规则可以让你对开源项目的贡献使得你和项目维护者都感到愉快!

为什么加入一个开源项目?

首先,有很多加入开源项目的动机。排在第一的可能是“酷”:)当你告诉你的朋友“嘿,我在XYZ项目开发团队! 我很潮吧?”

但是这并不是一个很好的原因。加入一个开源项目的首先需求是你需要使用它。如果你自己不会实际使用,那么就不会有很强的动机去加入一个项目。

其它一些加入开源项目的原因可能是:

  • 获得写权限,将你自己的特性或者bug修订加入到基础代码中;
  • 你认为自己能够对项目带来很大的提升;
  • 你有很多空闲时间:)

初始方法

因为如下两个原因,第一次加入一个开源项目可能需要慎重对待:

首先,没有标准的方法,没有“加入此项目”这个按钮。你需要直接联系项目的所有人(或者维护人),同他交谈。

对起步者来说,另外一个可能导致加入过程有点困难的事情是缺少课题。

在你尝试加入一个开源项目之前,你应该尝试自己启动一个项目。即使这仅仅是一个小项目或者只是一个Lib库,或者是一些简单但有用的东西,然后在你自己的Blog或者社交网站上宣告项目。如果你幸运的话,一些人会发现项目的价值,然后开始使用它。

通过做这件事情,你将学会两件事:首先是如何运转一个开源项目,其次是你的发明被很多其他人使用时是什么样子。当你意识到可能有成百上千的人使用你的代码,有的人检视它并反馈意见、想法、补丁包给你的时候,这是一件很令人激动的事情。

除了这些,你也可以看到社区是如何运转和发展的,你将开始从不同的环境不同的角度来看你的项目。

它将为你打开新的视野!

即使你已经做了这些事情,或者感觉自己已经做好无论如何都要加入一个开源项目的准备,也还有其它前提条件:

  • 你必须熟悉掌握项目使用的VCS(Version Control System)工具。例如,如果项目使用Subversion(SVN),你必须知道如何提交、合并、回退、修补等等
  • 你必须知道可读的代码和文档的重要性
  • 你必须知道如何注释你的代码

如果你觉得所有这些你都没有问题,第一步就是开始“玩”项目:将代码Checkout,然后一头扎入代码中,去学习代码如何工作以及代码完成什么功能。

同时也要关注项目使用的编码风格,你不需要完全按照当前项目维护者那样编码,但至少要保证是相同的风格。你需要考虑到总会有人将要阅读和修改你的代码。

就像有人说的:编码的时候你要想象那个最后维护你代码的人是一个知道你住在哪里的暴力精神病患者!

当你感觉已经做好要加入的准备,你可以进入下一步:联系项目维护者!

初步联系

如果你准备运行自己的开源项目,你可能已经有了一个如何让你的Email被尊重和别人看到Email的时候如何想的好主意。

这个不是什么高深复杂的事情(原文为rocket science):

  • 这个家伙加入了许多开源项目,而且可能在项目中担任全职工作,所以Email要短、要令人愉快。
  • 这个家伙根本不知道你是哪根葱。所有运行开源项目的家伙至少知道一件事情:好心未必有好报(Hell is paved with good intentions)。
  • 展示你项目有关的知识,而不是你的激情。换句话说,向项目所有者证明你具有成为项目一部分的资格。如果你加入了,你有足够的时间来展示你的动力和激情

好的,我已经加入了,现在干嘛?

根据经验,有两种类型的人将加入开源项目:一种是推动项目前进的人,一种是不会推动项目前进的人。

与展示实际的资格相比,那些不会推动项目前进的人总是更加倾向于展示自己的激情。他们加入项目,然后从不提交任何东西,或者提交新的代码,或者提交新的功能,因此也不会带来任何Bug。

当加入一个项目的时候,问问自己是否有足够的动机去实际做一些事情是重要的,但不要做得太多也同样重要。

一个新的程序员在某种意义上来说有点像一个新的经理,要想成功,必须具备相似的品质。

一个真正优秀的经理将谨慎的接受一个新的工作职位。即使他的最终目标是将公司颠覆过来和优化整个流程,他也会以完美的模仿前任经理来作为开始。

为什么?

设身处地的想象一下:如果你是新经理的下属,或者新经理的上级,他们得到一个新的经理:

A经理:加入公司,试图将公司业务颠覆过来,打破正在运行的流程,阻止人们进行工作。但是经过一些列的困难工作后,前景将如此美好!

B经理:加入公司,完美地深入细节地工作,同时给工作流程带来小的增量的改进,最终起草并向上级提交详细、完整、通过颠覆原有流程来优化的计划。

谁将有更大机会获得成功?

很明显是B经理,因为首先他通过带来一些微小的改进来证明他更有竞争力,然后在他尝试去实施大的改进之前,提交一个清晰和完整的计划。

给一个开源项目带来很大改变不是不可能的,但首先你要证明你能够完成它。

一个成功的开源项目很像一个成功的商业:如果不毁灭它,那么很难带来很大的成功的改变。

所以特别小心你的大的改变。

事实上当加入一个开源项目后最好的开始的地方是非常基础的:在那些你只会带来很小危害的地方开始!

改进项目的文档或者注释、添加单元测试、或者做一些检视,这是一个了解项目、项目的缺点、项目的优点的好机会。项目维护者非常乐意你做这些,这也是获得他们的信任以及展示你是认真帮助项目的好机会。

创建你自己的分支也是一个好主意,这样你就是在一个沙箱(译者注:供儿童在其中玩耍的一个环境,类似于在海滩上堆城堡,可以随便推到从来,也不会带来什么危害)环境中,对项目来说,这样你就几乎没有可能做错事或者破坏项目。

尽管将主干版本合并到你的分支,这样就可以使得你的代码与时俱进。

政治环境

我不认为有任何成文的规定,但是你必须知道一些关于大部分开源项目的一个重要的事情:

没有民主!

随便你怎么说,但最终只有一个权威:项目所有者。

不喜欢这样?忘掉它吧(原为是Fork it)。

==========================================================================

如何熟悉一个开源项目?

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

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

================================================

入门级:Ptypes 
    Ptypes一个开源轻量级的c++库,包括对一些I/O操作、网络通信、多线程和异常处理的封装。虽然代码有限,包括的内容不少,麻雀虽小,五脏俱全。 
    提高:STL Boost和STL ACE 
    Boost库是一个可移植、提供源代码的C++库,作为标准库的后备,是C++标准化进程的发动机之一。 Boost库由C++标准委员会库工作组成员发起,其中有些内容有望成为下一代C++标准库内容。在C++社区中影响甚大,是不折不扣的“准”标准库。 Boost由于其对跨平台的强调,对标准C++的强调,与编写平台无关。大部分boost库功能的使用只需包括相应头文件即可,少数(如正则表达式库,文 件系统库等)需要链接库。但Boost中也有很多是实验性质的东西,在实际的开发中实用需要谨慎。boost 在一些播放软件和音效中指增强,比如Bass Boost,低音增强。 
    Adaptive Communication Environment(自适配通信环境),简称ACE。为一个以C++的Template技术所做成的开放源代码的可跨平台的网络应用程序的程序库套 件。它提供了socket/threading/memory management等多种系统调用的面对对象的wrapper,使C++通信软件开发更加简单。 

 

======================================================

个人觉得比较经典的C++ 开源项目,整理如下:

 

1 、log4cplus

log4cplus 是C++ 编写的开源的日志系统, 功能非常全面。C++ 版的log4j

网址:http://log4cplus.sourceforge.net/

 

2 、Glog

Google Glog 是一个C++ 语言的应用级日志记录框架,提供了 C++ 风格的流操作和各种助手宏。

SVN :http://google-glog.googlecode.com/svn/trunk

 

3 、memcached

memcached 是一套分布式的快取系统,当初是Danga Interactive 为了LiveJournal 所发展的,但目前被许多软件(如MediaWiki )所使用。这是一套开放源代码软件,以BSD license 授权释出。

memcached 缺乏认证以及安全管制,这代表应该将memcached 服务器放置在防火墙后。

SVN :http://code.sixapart.com/svn/memcached

 


4 、 TinyXML

TinyXML 是目前非常流行的一款基于DOM 模型的XML 解析器,简单易用且小巧 玲珑,非常适合存储简单数据,配置文件,对象序列化等数据量不是很大的操作

网址:http://www.grinninglizard.com/tinyxml/

 

5 、OpenSSL

OpenSSL 包含一个命令行工具用来完成OpenSSL 库中的所有功能,更好的是,它可能已经安装到你的系统中了。

OpenSSL 是一个强大的安全套接字层密码库,Apache 使用它加密HTTPS ,OpenSSH 使用它加密SSH ,但是,你不应该只将其作为一个库来使用,它还是一个多用途的、跨平台的密码工具。

网址:http://www.openssl.org/source/

 

6 、xerces

Xerces是由Apache组织所推动的一项XML文档解析开源项目,它目前有多种语言版本包括JAVA、C++、PERL、COM等。

  网址:http://xerces.apache.org/xerces-c/download.cgi

 

7 、Boost

Boost 库是一个经过千锤百炼、可移植、提供源代码的C++ 库,作为标准库的后备,是C++ 标准化进程的发动机之一。 Boost 库由 C++标准委员会库工作组成员发起,在C++ 社区中影响甚大,其成员已近2000 人。 Boost 库为我们带来了最新、最酷、最实用的技术,是不折 不扣的“ 准” 标准库。

网址:http://www.boost.org/

 

8、Zlib

Zlib 软件包包含 zlib 库,很多程序中的压缩或者解压缩函数都会用到这个库

网址:http://www.zlib.net/

 

转自:http://www.cppblog.com/chugf/archive/2011/06/24/149379.html

==================================================

 

 

有人推荐了一个开源项目

muduo

Muduo - A C++ non-blocking multi-threaded network library for Linux

http://code.google.com/p/muduo/

 

原文:http://sunnanx.blog.163.com/blog/static/1139600602012615101843313/

 

 

转载于:https://www.cnblogs.com/sunhuijian/archive/2013/02/05/2892646.html

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值