open soruce guide figure

为普及同学们对于开源社区文化内核以及具体参与、维护一个开源项目的细节的了解,接下来的几周会陆续翻译开源指南的内容发布在微信公众号上,第一周介绍了一些入门与导论性质的东西。

原作:https://opensource.guide

翻译:psyduck

为何要为开源贡献力量

为开源贡献力量,是一个很好的学习与教学方式,同时你也可以获得任何你能想象到的技能经验

提升现有技能

无论是码代码、用户界面设计、图形设计、撰写文档或是组织活动,如果你正在寻找锻炼的机会,开源项目中总会有你的一席之地。

遇见趣味相投的人

开源项目多年以来以一个温暖,热情的社区环境令人流连忘返。

不论是一次技术研讨会上的热烈的讨论,还是一次在线的彻夜长谈,很多人在参与开源项目的过程中都与他人结下了深厚的友谊。

寻找导师,并帮助他人

与他人合作一个项目意味着你需要解释清楚自己是如何做的,并学会向他人寻求帮助。相互间的学习与教学能让每位参与者都受益良多。

构建一个公共项目帮助您获得声誉(以及事业)

根据开源的定义,你所有开源下的工作都是公开的,这意味着能够向他人随时随地的展示您的能力

学习人际交往能力

开源为您领导力以及管理能力的实践提供了非常多的机会,例如,解决矛盾冲突、组织团队、安排工作优先级。

鼓励作出改变,哪怕只是微小的

参与到开源中来,你不必成为一名资深的contributor。你是否曾遇见过网站上的拼写错误并希望将它更正?在开源的项目中,你只需要做就可以了。开源帮助人们在日常生活中感到有干劲,而这种感觉本身就是喜人的。

##贡献的含义

如果你是一名开源新手,整个流程可能会显得有一些吓人,如:该如何找到正确的项目?不懂编程怎么办?万一做错事情了怎么办?

其实不必担心,参与开源项目的途径多种多样,一些小建议将帮助您充分利用您的能力。

并不一定需要提交代码

对于维护开源项目一个常见的误解就是,维护开源项目必须提交代码,实际上,项目的其他部分经常被忽视。

通过提供这些类型的贡献,您也将对项目做出极大的贡献。

即使您乐于撰写代码,其他类型的贡献也是参与项目以及与项目成员会面的好方法。构建这些关系能让您有在项目其他部分工作的机会。

您是否热衷于策划活动·

组织与项目有关的研讨会与线下活动,一如 @fzamperin 为 NodeSchool 所做的那样

为项目组织大型会议(如果有的)

帮助项目成员寻找合适的会议并给予发言提案

您是否热衷于设计

重组项目布局以提升项目易用性

进行用户调研,重组及完善项目导航及菜单

归纳风格指南,以帮助项目有统一的视觉设计

设计T恤或新logo,就像 hapi.js 的贡献者那样

您是否热衷于写作

撰写及完善项目文档

通过实例来展示项目

为项目撰写通讯或通过邮件布道

为项目撰写教程, 一如 pypa 的贡献者所做的

您是否热衷于组织

找到重复的issue,并提起新issue,使项目井井有条

仔细检查公开的issue,并及时关闭旧的,就像 @nzakas 为 eslint 做的

在公开的 issue 下澄清问题,以推动讨论

您是否热衷于撰写代码

找到一个公开的 issue 并解决它,就像 @dianjin 为 Leaflet 做的

询问是否能帮助撰写新功能

自动化项目设置

改进工具和测试

您是否热衷于帮助他人

在 Stack Overflow(像 Postgres 的这个示例)或者 reddit 上回答关于项目的问题

在公开的 issue 下为人们解答问题

帮助缓和讨论版以及

改善他人的代码

审核他人提交的代码

为如何利用项目撰写教程

为其他 contributor 提供指导 正如 @ereichert 为 @bronzdoc 所做的那样

不一定是软件项目

虽然“开源”二字常常是指软件,但其实您可以在几乎任何事情上进行协作。比如图书、食谱、列表、以及任何可以开源的项目。

例如

​ @sindresorhus 创建了 list of “awesome” lists

​ @h5bp 维护了针对前端开发者的 list of potential interview questions

​ @stuartlynn 和 @nicole-a-tesla 收集了 collection of fun facts about puffins

即使你是一名软件开发者,撰写文档也可以帮助您开启您的开源之旅。对于不涉及代码的工作人们总是不那么惧怕,而合作的过程能帮助您积累信心与经验。

加入一个新项目

除了拼写错误之外,为开源做贡献就像是行走在陌生人之间,如果你正在说A时大家正在对B进行深入讨论,肯定会让人感到奇怪。

与其仅凭自己的意志盲目地游荡,不如学习规则,这将会增减你的想法被人注意以及接受的概率。

开源项目基本架构

每一个开源社区都是不同的。

在一个开源项目上花费多年的时间意味着你只是熟悉这一个项目。切换到一个不同的项目,你可能会发现词汇、习惯用语、沟通方式都完全不同。

然而,很多开源项目都遵循一个相似的组织结构,了解不同的社区角色和整体流程可以帮助您快速融入一个新项目。

一个典型的开源项目通常会包含以下类型的人:

  • 作者(Author): 项目的创始人或创始组织
  • 归属者(Owner): 代码仓库或组织的管理员(不一定和作者是同一个人)
  • 维护者(Maintainers): 贡献者,负责项目的未来走向和组织的管理(他们通常也是项目的作者或归属者。)
  • 贡献者(Contributors): 任何一个为项目作出了贡献的人。
  • 社区成员(Community Members): 那些使用项目的人。他们或许是积极的讨论者,又或者是为项目的方向提出意见的人。

更大一些的项目可能还会有细分的子社区,货是针对不同任务的小组,例如,工具小组、分流、社区事务、以及活动组织等。在项目网站找到“团队”界面,或者是查看管理文档,从而获得此类信息。

一个项目同样会有文档,这些文档通常会在代码仓库的顶级目录列出。

  • 许可协议(LICENSE): 根据开源的定义,每一个开源项目必须是有开源许可协议的. 可以这么认为:假如说某个项目源码开放,但是没有任何的许可协议,那么它就不能叫做开源。
  • README: README 是一个介绍性的说明文件,对初次光临社区对人们表示欢迎,它通常会解释项目有何用处,为何发起,以及如何快速入门等。
  • 贡献(CONTRIBUTING): READMES帮助人们来认识项目,贡献这个文件则是帮助对项目如何做贡献。它解释了目前项目需要什么样类型对贡献者,社区对流程是啥样的。并非所有的项目都会有这个文件,它某种程度上也是展示项目对于贡献者的友好程度。
  • 行为准则(CODE_OF_CONCEPT):行为守则为参与者的行为制定了基本规则,有助于形成一种友好的氛围,不是所有的项目都会撰写行为准则文件,它某种程度上也是展示项目对于贡献者的友好程度。
  • 其它文档: 有些项目也许还有其它文档,例如教程、导览,或者是治理规则,这在大型项目中常见。

最后,开源项目还会利用一下工具来进行讨论,阅读这些文档能然后你对于社区的思维以及工作方式有一个清晰的认识

  • Issue tracker: 人们讨论项目相关问题的地方。
  • Pull requests: 审核代码、以及相关的问题讨论。
  • 论坛或邮件列表: 一些项目会实用会话式的主题(例如 “How do I…“ 或 “What do you think about…“ 来替代Bug报告或特性请求)。还有一些项目利用 Issue tracker 完成全部讨论。
  • 即时在线聊天: 有一些项目会实用聊天频道(诸如 Slack 或 IRC),从而能够随意的谈话、协作和快速交流。