如何通过开源让自己的技术水平更上一层楼

简介:   本篇内容选自 Gitee 发起,邀请全体开源爱好者共同参与的开源百科编写项目《开源指北》。  什么是开源,相信前面的章节已经说的非常清楚了。开源作为一种贡献技术的方式,对整个技术界和开源社区的正向回馈是巨大的。近 10 年来,越来越多的项目加入了开源界。其中有许许多多的知名开源项目被人所认可和追捧。  操作系统:Linux,Android编辑器:Vim,Emacs,Atom,VSCode版本管理:SVN,Git,Fossil数据库:MySQL,MongoDB,Redis大数据平台:Hadoop,ElasticSearch,HBase容器:Apache,Nginx虚拟化软件:Dock

  本篇内容选自 Gitee 发起,邀请全体开源爱好者共同参与的开源百科编写项目《开源指北》。

  什么是开源,相信前面的章节已经说的非常清楚了。开源作为一种贡献技术的方式,对整个技术界和开源社区的正向回馈是巨大的。近 10 年来,越来越多的项目加入了开源界。其中有许许多多的知名开源项目被人所认可和追捧。

  操作系统:Linux,Android编辑器:Vim,Emacs,Atom,VSCode版本管理:SVN,Git,Fossil数据库:MySQL,MongoDB,Redis大数据平台:Hadoop,ElasticSearch,HBase容器:Apache,Nginx虚拟化软件:Docker,Kubernetes

  这些列出来只是冰山一角而已,还有很多这种耳熟能详的开源软件,他们共同形成了一个完整的开源生态,现在已经渗透到了各行各业。可以这么说,现在你电脑上用的软件,手机里用的 App,你的衣食住行背后,都有开源项目的支撑。没有了开源项目,这个世界根本不是现在这个样子。

  随着开源协作这种方式越来越被这个世界所认可,有很多的公司和个人开发者也加入了开源大家庭,他们把自己的技术沉淀、解决方案做成开源项目回馈给开源社区。如今的技术界,正因为有了开源,而变得不再是闭门造车,而是呈现出一种百家争鸣,欣欣向荣的景象。

  开源社区又称开放源代码社区,一般由拥有共同兴趣爱好的人所组成,根据相应的开源软件许可证协议公布软件源代码的网络平台,同时也为网络成员提供一个自由学习交流的空间。由于开放源码软件主要被散布在全世界的开发者所开发,开源社区就成了他们沟通交流的必要途径,因此开源社区在推动开源软件发展的过程中起着巨大的作用。

  开源社区究竟有什么魅力,让无数开源爱好者趋之若鹜?从本质上来说,这是开源社区的宗旨所决定的。所谓的宗旨,实际是指一个社区的内核,是融合了开源发起者和核心成员的理念而成的产物,你也可以将其理解为价值观。比如:Facebook 的目标是「让世界更加开放,更加紧密相连」。

  《大教堂与集市》的译者卫剑钒在《开源的 7 大理念》一文中分析阐述了开源 7 大理念:

  完全自主:开源之所以能够大行其道,是因为所有程序员都喜欢源码。

  高度开放:对软件而言,源码都开放了,还有什么不能开放?

  自发自治:所谓开源社区,指的是所有关心、参与、支持、帮助某个开源项目的人的集合。

  自下而上:自下而上是大自然最普遍的法则,开源作为一个从草根社会发展起来的事物,必然会遵循这个法则。

  自由竞争:开源,是一个靠实力说话的世界。开源软件在竞争什么?竞争的是谁的软件好使,谁的评价更高,以及,最终,是谁获得了更多的市场份额。

  赢在声誉:除了项目发展、能力增长、回馈社会、自我实现之外,最大的好处莫过于声誉。这也是很多黑客贡献代码的初衷。

  社区赋能:Apache 有一句格言叫”社区重于代码",它强调的是:一个健康的社区远比良好的代码重要。如果代码消失, 一个强大的社区可以重写它;但是, 如果一个社区不健康, 代码最终也会失败。

  上述理念是作者基于自己对开源项目的了解而进行的分析总结,可以很好地指导开源爱好者对开源的理解。随着你在开源领域的不断摸索,会对这些理念有更深的理解,然后基于自身理解去凝聚自己的一份开源宗旨。

  开源社区的每一个人都有自己的角色,每个角色在开源社区内,都能收获不同方面的成长与提升。一般一个大型的开源社区有以下几种角色:

  开源领导者(Leader):领导者承担了带领项目发展的责任,一般拥有项目事务的决策权。开源维护者(Maintainer):维护者承担了项目日常维护工作,一般拥有项目事务的管理权。开源提交者(Committer):提交者负责对项目提交成果物(一般指源代码提交),并参与项目事务的处理。开源贡献者(Contributor):贡献者通过多种方式为项目做贡献(如解答 Issues、社区宣传等)。开源使用者(User):使用者是项目的使用者,一般会围绕项目进行技术讨论和意见反馈。

  下面我们就来聊聊,不同的角色会有什么样的收获。

  开源领导者

  开源领导者这个角色,就像是 QQ 群的群主、BBS 的创始人,是开源项目的决策者,对开源项目的事务拥有决策权和最终话语权。开源领导者需要决定开源项目的发展方向,并对项目的发起、设计、开发、维护、迭代,以及最终目标负责。现有版本需要解决什么问题?下一版本该上什么样的特性?这个项目最终能达到的高度和解决什么样的问题。

  作为项目的领导者,需要去从大局观去考虑,从项目所处的专业领域的发展,到每个特性关联的技术方向,再到怎么在社区内进行推广,怎么持续推进项目的进度。这些实际操作的过程累计的经验,能让你在任何一个项目中都能正确分析和决策,游刃有余。因此,领导者获得的提升也是全方位的,主要提升体现在以下几点:

  得到一次将自己的思想落地实现的机会 每一个技术人的梦想!谁不想用技术改变世界呢?获得更高的技术洞察力、更广的行业观察力 一方面,开源项目的用户是来自各行各业的开发者,而开发者会把你的项目用于各种业务场景。这就和公司级项目中单一化的场景有所不同,所以你必须考虑到更多的层面去设计你的开源项目,也必须更深的掌握相关知识点。另一方面,你需要关注相同或相邻赛道的项目,更加了解赛道内的情况。磨炼一份坚韧不拔的精神力 领导者并非无所不能的,但若想开辟道路,你需要变得“无所不能”。一个项目的成功只靠天赋的一时兴起是不行的,你区别于其他人的能力,很大程度上都是因为坚持。提升自身的领导力 孵化一个开源项目并非一帆风顺的。作为领导者发起一个开源项目,意味着你要为后续所有的问题寻求解决办法,当其他人遇到困难停滞不前时,需要站出来带领大家走出困境。提高自我认同感和成就感 当你在项目中解决一个个问题,将一个个想法落地实现,你会感受到一份收获的喜悦和对自己成就的肯定,鼓励你在任何时候都能不断前行。积累自身的声望 随着开源项目的发展,项目拥有越来越多的众多的追随者,作为领导者,业内声望也会水涨船高。结识一群可爱的朋友 开源项目不是一个人的独酌,而是一群人的狂欢。开源项目的发展与壮大,离不开朋友的鼓励和帮助。江湖儿女,自当恣意江湖!提升个人综合素质 学习精神。做开源要面对大量不同的场景,同时也要对你选型的其他开源框架有更深入的了解,自主的学习是每一个开源人的特点。 竞争精神,开源的理念有一项就是自由竞争,做开源当然是希望自己的项目成为这个赛道里靠前的项目,自然会涉及到竞争,在完全自由化的开源社区,竞争也是一种良性的循环。

  开源维护者

  开源维护者是项目中的主要管理者,可以类比为 QQ 群的管理员、BBS 的版主,会帮助开源领导者分担项目管理事务。在很多开源项目中,在开源项目运转前期,项目领导者与项目维护者这两个角色很可能是重叠的。

  如果将开源领导者比作 CEO,那么开源维护者就是 CTO 或 COO。身为开源维护者,需要在分担领导者管理事务的同时,也需要担任核心的技术领导者,掌握项目中使用的所有技术脉络,保持对新兴技术的敏锐度和判断力。

  因此,一个优秀的开源维护者能够获得的提升完全可以参考开源领导者中所提及的。

  开源提交者

  开源提交者是可以直接提交代码到主干的人,在项目模块的维护中发挥重要作用。就像一个班级的学习委员、宣传委员、体育委员一样,通过明确分工的划分,负责在一个或多个领域内进行维护。提交者需要对自己负责模块所使用到的技术有较深的理解,能够担任核心的开发工作,同时还要对项目架构有一定的设计能力。而提交者也可以在开源项目中获得自我的提升。

  提升领域技术能力 开源提交者需要对自己维护的领域有资深的了解,可以说在项目的这个领域中,无人能出其右。因此,遇到新的挑战时,日复一日,你的“剑法”必将炉火纯青。磨炼一份坚韧不拔的精神力 哪怕是资深人士也会遇到棘手的难题,当遇到这些“拦路虎”时,就需要一份屡战屡败、屡败屡战的勇气,支持自己突破自身技术瓶颈。提高自我认同感和成就感 当你在项目中解决一个个问题,将一个个想法落地实现,你会感受到一份收获的喜悦和对自己成就的肯定,鼓励你在任何时候都能不断前行。积累自身的文凭,通过贡献代码/文档到开源项目,是非常有效的一种证明自身技术能力的方式,所以能够很直接地提升自己的技术影响力;如果你在贡献代码的同时,还擅长通过技术写作、技术演讲等形式来推广该项目,那么这种技术影响力就会被进一步放大;另外,参与知名开源项目本身就可以为贡献者带来背书和技术影响力,而且这种结局是双赢的。结识一群可爱的朋友 开源项目不是一个人的独酌,而是一群人的狂欢。开源项目的发展与壮大,离不开朋友的鼓励和帮助。江湖儿女,自当恣意江湖!提升个人综合素质 开源能力。通过参与开源可以了解开源项目的孵化细节,能够在创建和参与开源项目时起到帮助作用。 技术能力。长期关注开源社区,能让使用者长期紧跟社区最新的技术方向,这也能让你在选型企业级系统中间件的时候有很多选择。 学习能力。通过了解代码细节获得相关知识,成功的开源项目一定是能帮助开发者解决一块领域的问题的,了解作者如何做到这点的细节会对你有帮助。 文本能力。通过贡献 Issues、贡献文档来获得写文档的能力,提升书面叙述解决方案的能力。 沟通能力。开源项目面对的用户是其他开发者,开源项目的迭代一定是要使用者参与的。正确的处理使用者的反馈,通过交流听取使用者的建议,会使开源项目处于一个正向的循环中。 提出与解决问题能力。在解决问题之前,要先学会问问题。精确的提问和解答,可以让你在处理问题时更加得心应手。

  开源贡献者 & 开源使用者

  开源贡献者是一股推动项目发展和改进的不可小觑的力量,贡献者可以通过 提交 PR、提交 Issues、解决 Issues、邮件反馈、社区分享、社区答疑、宣传推广等方式,为开源项目贡献自己的一份力量。如果对项目有一定研究,对项目发展起到推动作用,那可以认为是一名开源贡献者。

  开源使用者作为社区成员,他们最有价值的部分是提出需求、报告缺陷、提出建议。通过提出需求,报告缺陷让你企业级项目里的碰到的问题得到快速解决,也能促进开源项目的迭代,等于是贡献了社区。

  作为开源贡献者、开源使用者,这两者与开源提交者的界限仅仅在于项目维护者是否采纳了你提交的PR,因此,所获得的的提升也是相差无几的。只要你保持热情,积极为开源项目做贡献,所有项目参与者都会将你的贡献看在眼里。

  除了开源社区,我们不得不提一下程序员素养,一个优秀的程序员需要拥有什么素养呢?是不是只需要写代码就可以了?答案当然是否定的。抛开其他素养不谈,我们这里只提以下 5 点。

  扎实的专业技术和技能架构设计能力和模块化思维能力团队精神和协作能力文档习惯和写作能力需求理解能力

  就开源社区而言,参与开源可以很好的锻炼程序员的以上 5 个素养。

  总的来说,个人参与开源项目对职业发展和个人成长都有很大帮助。

目录
相关文章
|
29天前
|
算法 搜索推荐 量子技术
技术探索之旅:从基础到创新的心得体会
在技术的浩瀚海洋中,我踏上了一段从基础学习到创新实践的旅程。这不仅是一次知识的积累,更是一场关于自我挑战与突破的冒险。本文将分享我的技术感悟,展现如何从零开始,逐步深入,最终实现技术创新的过程。
|
3月前
|
机器学习/深度学习 人工智能 自然语言处理
AI技术性文章移动应用开发之旅:从新手到专家的蜕变之路
【8月更文挑战第30天】本文将介绍人工智能的基本原理和应用,包括机器学习、深度学习和自然语言处理等。我们将通过代码示例来展示如何使用Python和TensorFlow库实现一个简单的神经网络模型。
|
3月前
|
Java 物联网 Android开发
移动应用与系统:技术演进与未来展望探索安卓应用开发:从新手到专家的旅程
【8月更文挑战第28天】本文将深入探讨移动应用开发的技术演进、移动操作系统的发展历程以及未来的发展趋势。我们将通过实例和代码示例,展示如何利用最新的技术和工具来开发高效、可靠的移动应用。无论你是初学者还是经验丰富的开发者,这篇文章都将为你提供有价值的信息和见解。 【8月更文挑战第28天】在这个数字时代,掌握安卓应用的开发技能不仅是技术人员的追求,也成为了许多人实现创意和梦想的途径。本文将通过深入浅出的方式,带领读者从零基础开始,一步步走进安卓开发的奇妙世界。我们将探讨如何配置开发环境,理解安卓应用的核心组件,以及如何通过实际编码来构建一个功能完整的应用。无论你是编程新手还是希望提升自己的开发者
|
3月前
|
Cloud Native 持续交付 开发者
"云原生时代,开发者如何坐拥创新利器,秒变技术大牛?揭秘黄金时代背后的秘密武器与无限可能!"
【8月更文挑战第14天】云原生技术的兴起标志着软件开发进入黄金时代。它不仅是一种技术趋势,更是思维的革新,赋予开发者前所未有的灵活性和效率。通过微服务、容器化等技术,云原生加速了创新迭代,提升了资源利用与成本效益,增强了应用的可靠性和韧性,并促进了团队间的协作与知识共享。这一切都为开发者创造了更多机遇与挑战。
38 1
|
4月前
|
存储 安全 Android开发
安卓应用开发的安全之道
【7月更文挑战第4天】在数字时代,移动应用的安全性至关重要。本文将深入探讨在安卓平台上开发安全应用的最佳实践,包括代码混淆、数据存储加密、网络通信安全、权限管理以及定期的安全审计和更新策略。通过这些措施,开发者可以显著提高他们的应用抵御恶意攻击的能力,保护用户数据免受侵害。
|
5月前
|
算法 前端开发 程序员
一个土木工程专业背景的开发者,讲述开源带给他的力量
**谭雪峰在TDengine Open Day分享开源经历,揭示程序员如何通过开源项目成长。自学成才的他,从土木工程转行编程,借助开源社区学习、贡献代码,参与TDengine HiveMQ挑战赛获胜,最终加入涛思数据。开源不仅提升代码质量、提供实战经验,也拓宽技术视野,助力个人品牌建立,促进开发者、项目和社区的共赢。程序员通过参与开源,能从代码编写者转变为问题解决者和工具创造者。**
62 0
|
6月前
|
人工智能 Kubernetes Java
Java开发工程师如何紧跟技术前沿对于保持专业竞争力、提升工作效率以及适应行业发展?
【4月更文挑战第4天】Java开发工程师如何紧跟技术前沿对于保持专业竞争力、提升工作效率以及适应行业发展?
81 4
|
6月前
|
消息中间件 存储 缓存
阿里P8架构师带你“一窥”大型网站架构的主要技术挑战和解决方案
传统的企业应用系统主要面对的技术挑战是处理复杂凌乱、千变万化的所谓业务逻辑,而大型网站主要面对的技术挑战是处理超大量的用户访问和海量的数据处理;前者的挑战来自功能性需求,后者的挑战来自非功能性需求;功能性需求也许还有“人月神话”聊以自慰,通过增加人手解决问题,而非功能需求大多是实实在在的技术难题,无论有多少工程师,做不到就是做不到。
|
存储 分布式计算 架构师
阿里架构师十年开发总结的《分布式系统开发学习笔记》太强了
分布式系统 分布式系统是将多台小型微型机互连组成的一种新型计算机系统。它冲破了传统的集中式单机局面,从分散处理的概念出发来组织计算机系统,具有较高的性能价格比,灵活的系统可扩充性, 良好的实时性、可靠性与容错性等潜在优点,是近几年来计算机科学技术领域中极受重视的新型计算机系统,现已成为迅速发展的一个新方向。
|
前端开发 程序员 开发者
开发者要想走更好的出路必须选全栈工程师这条路吗?
虽然说“技多不压身”,“术业有专攻”,但是作为程序员,尤其是做业务场景的开发者来说,并不是会的面越广越好,而且现在的技术迭代速度太快,不管是前端领域还是后端领域,技术栈或者技术框架更新迭代的周期越来越短、越来越快,学习成本越来越大,尤其是要做资深的全栈工程师,需要学的知识是非常的多,而且还需要各个方面的时间沉淀,考虑到人的精力会随着年龄的增长而递减,成反比例,所以虽然全栈工程师有着丰富的工作从业经验和经历,但是如果想要具备各个方面都差不多,难度是很大的。
201 1
开发者要想走更好的出路必须选全栈工程师这条路吗?