6

开源十问, 社区新人快速上手指南

 3 years ago
source link: https://segmentfault.com/a/1190000039986016
Go to the source link to view the article. You can view the picture content, updated content and better typesetting reading experience. If the link is broken, please click the button below to view the snapshot at that time.

​第一次接触开源,该从何处入手?

没有基础,怎么在开源社区做贡献?

如何成长为开源社区的大牛?

刚接触开源的你,可能还有很多困惑。别担心,SegmentFault 思否通过调查问卷的方式收集了开发者对于开源的十大问题,并邀请社区开源大咖对这些问题进行深入讲解,他们的答案或许可带你轻松上手。

第一问:第一次接触开源,我该从何处入手?

来自 openEuler 社区的开源大咖马全一回答道,“想干的事情、适合干的事情和最终能干的事情是否匹配,是决定将来工作是否幸福的关键。”选择一个适合自己的开源项目至关重要。

那么具体应该如何选择适合自己的开源项目呢?可以考虑以下四个方面:

  1. 技术趋势,综合考虑技术趋势发展,选择一个有前景的技术方向才能在未来的竞争中获得优势。
  2. 个人技术领域,需要开发者认真评估自身技术栈,选择和自身能力、兴趣爱好匹配的开源项目,只有真正有兴趣投入的技术领域才能最大的发挥开发者的能动性,也才有机会获得更大的成功。
  3. 合理调配投入时间,在工作、生活和家庭之间需要合理平衡投入,通过合理规划可支配时间,保证对技术领域的研究和投入,只有持续的参与开源项目,才能从开源中获得优厚的回报。
  4. 建立开发者关系,和社区内的核心开发人员建立紧密的联系,良好的开发者关系有利于扩展人脉,为在开源项目的发展建立扎实的基础

第二问:没有基础,如何在开源社区做贡献?

作为开源社区里活跃着的年轻开发者,华东师范大学、X-lab 实验室成员夏小雅表示:“新人对于一个社区是格外珍贵的,在邮件列表、会议中收到的回应和鼓励也会非常多,这一点我深有体会。”所以千万不要觉得自己是一个“后来者”就羞于表达。不懂就问、勇于表达、刷脸熟、主动请求帮助,积极参与讨论、活跃贡献是享受开源的第一步。

想要为开源项目贡献代码,确实需要一定的技术功底。但没有基础就不能为开源社区做贡献了吗?并不是!Apache北京本土社区发起人姜宁强调,除了提交软件代码,还有很多参与开源贡献的方式。作为新手区的我们,可以先参与一些翻译和本地化、文档撰写、设计等工作,这些非代码贡献对于项目也同等重要,还能帮助我们快速和社区大牛熟悉起来,加深对开源项目的理解。

在新手如何参与开源这一问题上,马全一也给出了一些建议:

  • 写代码远远不够,开发者需要善用搜索引擎。同时与社区大牛建立沟通联系,去了解各类开源开发问题;
  • 仔细观察,深入思考。搜索引擎及社区大牛给出答案后,你能不能看到东西,能不能思考,这一点很重要;
  • 穷举法。有时候思考的结果不见得对,你可以把所有的可能试一遍;
  • 写文章。输出是最好的输入,如果你能够给别人讲明白这件事情,你自己对这个问题就是理解的;
  • 参与社区活动。

第三问:哪些开源项目是值得关注、有前景的?

挑选值得关注、有前景的开源项目需要考虑多种因素,比如技术和社区运营是否前沿 ——

  • 技术的前沿性既涵盖技术本身的先进性,还体现在支撑该项技术的底层技术是否先进。比如开源软件的基础设施是否主流、开源,这决定了项目的开放性、透明性和可持续性。
  • 社区运营的前沿性体现在社区是否有完整的治理机制,是否具备多样性,有很多企业参与项目贡献,社区玩家是否覆盖完整的产业链。此外,在挑选项目时,我们还需要关注社区贡献者的活跃度。

另外,开源项目是否在基金会也是一个重要的考量要素。

当然,在选择值得关注的项目时,每个开发者本身都是带着自己的兴趣和待解决问题的。找到自己感兴趣的项目,开发者才能支撑自己投入更多时间做这件事。

目前,开源社区涵盖大量项目,如 Vue.js、React.js、Angular 等前端项目,Django、Spring-Boot、next.js等后端框架,TensorFlow、PyTorch 等机器学习框架,还有华为 MindSpore、KubeEdge 等新秀项目。

第四问:怎么才算加入开源社区?

  1. 成为某个开源项目的用户(user)
  2. 当你开始在该项目的邮件列表 (mailing list) 里参与讨论并提供补丁、文档和建议,就会成功晋升为开发者(Developer)或贡献者 (Contributor )
  3. 当你不断修炼 (提交 Bug 报告、贡献代码、参与邮件列表讨论、参与社区建设),就有可能受邀成为提交者(Committer)或维护者(Maintainer)
  4. 成为有影响力的贡献者后,可能会进一步被推选进入该开源项目的技术决策委员会等,更深度参与开源项目的管理与决策

每个社区的文化和风格其实各不相同,如果把“加入”开源社区看作一个动作,那么之前你在不经意间,使用开源社区某一个项目,就可以当做是加入开源社区的开端。

第五问:如何成长为开源社区的大牛?

Apache 软件基金会首位华人董事,Apache SkyWalking 创始人吴晟向我们介绍 ——

开源社区的大牛,往往是已经把开源的技术、品牌和宣传,变成职业化的一群人。

他们以开源的模式进行广泛的协作和共赢。因此他们在开源社区的设计、开发、跨社区合作和基金会工作中,展现出高人一等的职业性素养,以及开源爱好者无法比拟的超长投入时间。

类似大家熟悉的一万小时定律,在开源圈子也同样成立。当这些爱好变成了职业性,在高强度的投入后,其他人会看到他们异乎寻常的成长速度。

所以,确保自己有足够的时间来从事开源。让自己参与的开源成为经济正向循环的一环,才能成为大家眼里所谓的「大牛」。

但与此同时,我并不建议大家去过分追求成为「大牛」。毕竟开源在职业化、商业化之外,也可以给贡献者带来属于自己的成就感和满足感。并不是每个人都需要成为一个职业开源人,普通开发者和爱好者也能享受到开源协作的乐趣。

此外,姜宁强调,对于普通开发者而言,如果你梦想有一天成为开源社区的大牛,要从勇敢承担开源项目的核心任务开始,在不断贡献中获得成长。

开源社联合创始人刘天栋补充道“这个社会有提出问题的人,有制造问题的人,但是更需要的是解决问题的人。当我们参与到开源贡献里,协助他人解决问题的时候,不但能更好的实现自我,也能够让他人更快的认识我们的价值,成为他人眼中的「大牛」。而我们参与开源贡献的经历就是我们最有价值的履历表。”

第六问:怎样深度参与开源项目?

要回答这个问题,首先需要回答“怎样才算深度参与了开源项目?”——
成为核心贡献者拥有代码仓库直接写入权限?
入选项目委员会会直接参与开源项目的管理与决策?
或者哪怕只修复过一次代码核心 BUG?
……

这个问题见仁见智,业内并没有一个绝对标准。

作为潜伏在各大社区的开源大咖,SegmentFault 思否创始人、 CTO 祁宁表示 “其实,开发者并不需要把「深度」二字看得过于沉重—— 实际上国际上很多知名的开源大咖也都是在某次不经意的贡献中「入坑」开源的,或许第一次只是为了收获一件社区周边、或是使用开源软件过程中的顺手为之。随后才逐渐深入接触、持续贡献,从 Contributor 到 Maintainer。”所以深度参与开源项目和成为开源大牛一样,都是一个循序渐进、水到渠成的过程。

但需要强调的是,如果你期待深度参与某一开源项目,或者成为某一项目的核心成员,一定要多思考、多维度贡献 —— 当你除了贡献代码、解决 issue 以外,也在开始思考项目的价值、规划项目的前景时,就离深度参与不远了。

第七问:开发者如何通过参与开源项目提升技术?

许多开发者,特别是应届毕业生,大多面临缺少大型、高质量项目开发经验的困境。较为成熟的开源项目,很多已具备一定的生产环境应用经验,参与贡献的开发者可以深入项目,理解、学习优秀的代码逻辑、架构设计等,收获宝贵的研发经验。

我们都知道,作为一名开发者,学习与解决问题的能力至关重要,开源项目可以给予每位参与者充分的锻炼空间。具体来说,提升技术的方式大致分为以下几种:

  • 关注社区动态,紧跟技术潮流新方向,向技术选型库中装填新「弹药」;
  • 阅读开源项目中的高质量源码,研究代码逻辑,在日常工作中学以致用;
  • 持续贡献文档,通过提交 PR、贡献 Issues 等方式,提升书面表达能力;
  • 通过邮件列表,issue或者代码审查的方式与社区前辈交流, 学习他们的研发经验,提升视野;
  • 与使用者多交流,根据反馈不断优化项目,更好地理解产品、了解用户需求;
  • 学会提问,在开源社区中,不是所有问题都能够得到答案。提问者需要把问题的上下文环境讲清楚,并且尽量谦虚的表达才可能得到帮助,当你学会提问,沟通的能力势必也会提升不少。

在 SegmentFault 思否 COO、开源社副执行长江波看来,参与开源项目是初学者、大学生最好的练兵场,除了提升技术,还会有很多额外收益,“近两年,SegmentFault 思否一直在支持中科院软件所和 openEuler 社区联合发起的开源之夏活动,有不少大学生在社区导师的指导下提升技术、结识大牛、收获了宝贵的工作机会,或通过选举成为开源项目的 Committer、受到了社区的认可。而 9 年前,SegmentFault 的诞生也和开源息息相关,SegmentFault 最早的几位合伙人正是因为在大学时期参与开源项目相识,后来一起成立了公司。”

参与开源是弯道超车的最佳路径,快让开源社区成为你的成长加速器吧!

第八问:项目捐给开源软件基金会与不捐开源软件给基金会,有什么区别?

CNCF大使王泽锋介绍“一般来讲,基金会对于项目的治理是有开放性要求的,对于其他潜在的参与者来说,参与一个基金会管理的开源项目,可以有稳定的心理预期。”

参与开源软件基金会管理的开源项目时,只要有一定足够的投入,就能在社区中获得相应的话语权,进而影响社区的发展,把自己对于开源项目的发展方向和诉求推进社区。相反,个别企业的开源项目,开放性和连续性是存在一些问题的 —— 近年来发生了很多类似的事件:MongoDB、Redis、ELK 等项目修改开源协议,背后其实是商业公司控制开源项目时,开源与商业变现的冲突,其参与伙伴便失去了保障。

此外,姜宁补充道:“捐献给基金会的项目还会有更完善的法律保障。”开源软件允许使用、修改、分发,但是用什么样的方式呢?这里就涉及到开源协议的问题,不同于商业软件靠知识产权控制,开源软件是靠 License 控制的,对开源社区而言,License 更像是开源社区的“基本法”,它是跨国别跨地域的存在,甚至是全球的基本法。

第九问:开源社区如何能持续发展?

openEuler 社区品牌宣传委员会主席梁冰向我们介绍,一个开源社区能否获得持续发展,关键要看以下四个关键指标:

1.任何社区运营的关键指标都是开发者
开发者是社区的灵魂,开发者的数量和质量决定了这个社区的项目的数量和质量。

2. 第二个指标是CODE
我们有了高质量和高数量开发者,自然会有开发者带来高质量的代码。

3. 第三个指标是用户案例
任何一个开源社区对自己所有的定义,都取决于用户对你的定义。只有你有足够多的用户才能反馈使用中的具体需求,对项目形成一个非常正向的推动。这其实跟你做产品营销是一样的,一个产品没有用户就活不下来,一个开源项目没有用户也是活不下来的。

4.第四个是文档
就像产品需要手册一样,如果开源项目没有很好的文档,很多开发者来了无从下手。所以对于一个成熟、友好的社区,一定要有一套文档去指导大家如何用,如何参与,如何来贡献。

管理和运营社区是开源项目持续发展的核心,一个健康、友好的社区需要完整的治理制度,公平开放的社区氛围,这可以不断吸引新的贡献者加入。当然,资金、资源、基金会的帮助也对开源项目的持续发展有很大帮助,不过最重要的还是项目核心团队不断地努力与持续的投入。

第十问:开放治理对社区的成长到底意味着什么?

openEuler 在过去一年凝聚了超过 3000 名贡献者,有超过 4 万次下载、4万社区用户,也吸引了中国移动、中国联通、银联、飞腾等 60 多家企业、机构和高校的加入。全方位的快速发展就与社区的开放治理密切相关.

梁冰向记者介绍,“只开放源代码,没有社区开放治理的项目是没有前途的。开放治理对于一个开源项目而言就好比养育和陪伴它成长,至关重要,这背后也体现了开源项目的成熟度和严谨、认真、持续投入的态度。”

而以 MindSpore 举例,MindSpore 可能是国内第一个采用开放社区治理的深度学习开源框架。在 MindSpore 社区里,有着非常完善的章程,多国家、多样性团队组成的技术治理委员会,所有流程都在社区公开的邮件列表中,一切决定都有标准化的章程作为依照。公开和开放让 MindSpore 受到了众多开发者的信赖和支持,得以快速发展。

我们常常说“Community Over Code(社区胜于代码)”,一个活跃、开放、友好的社区对开源项目而言,意义非凡。健康的社区甚至远远比优秀的代码更重要 —— 代码不够优秀不要紧,只要持续有贡献者,代码便可以被不断优化、迭代,但如果没有社区,再优秀的代码也会付之东流。只有对新老成员一视同仁、公平开放的社区氛围,才能够持续吸引新成员加入项目贡献,也为开源项目带来持续的生机与活力。

以上十问是否解答了你心中对开源的困惑呢?春风十里,不如代码和你。开源大势所趋,快和我们一起上车吧!


About Joyk


Aggregate valuable and interesting links.
Joyk means Joy of geeK