我参与 Seata 开源项目的一些感悟
丁老师在他的知识星球邀请我回答以下一个问题:

我觉得这个问题非常有意思,姑且把它贴到公众号这里,与大家分享一下我对这个问题的一些感悟。
感谢丁老师的邀请问答:
在这里我就简单说下,我这段时间参与 Seata 开源项目的一些感悟:
1、如何参与到开源项目中并贡献自己的一份力量?
我一直都有上 GitHub 搜索一些主流开源项目的习惯,我是从去年 5 月份从 GitHub 开始关注 Seata 项目的,经过入门上手之后,我就觉得它的设计理念非常棒,尽管当时还有很多地方没有完善,但并不阻碍我对它的赞美,我对它产生了浓厚的兴趣,我那个时候就萌发了我要成为这个项目的贡献者。
很多人说,我又不是大佬,我现在还不够优秀,我没有太多的业余时间和精力,我也不知道这个项目是否合适我,等等,也有人以为需要成为某个领域大牛,才可以参与其中,其实这是对开源最大的误解,开源当然有大牛,不但有,而且非常多,这些大牛很多都是值得你学习的榜样,但是为开源项目做贡献需要成为某个领域大牛并不是必要的,但需要你花费大量时间和精力去贡献,在这个过程中,你同样能够学到很多。
我接下来继续讲讲我是如何参与 Seata 的贡献:
我是先从官方文档开始了解 Seata 项目的,并根据自己的了解,写了一篇文章,同时这篇文章还被阿里巴巴中间件转载过,正如丁老师所说,为开源项目做贡献并不只是贡献代码,为项目写文章同样是一种贡献。
在了解 Seata 的原理之后,我就着手看 Seata 源码,继续深入研究,在这个过程中,我是发现 Seata 源码是有很多地方需要完善的,因此我得到了代码贡献的机会,在看源码的过程中,我参与了某些 bug 的修复,一些功能的开发,同时还对部分代码进行了优化,代码优化这点我特别有感触,因为 Seata 的 RPC 重构主要是由我完成的,由于我之前研究过一些 RocketMQ 的源码,其中就包括 remoting 模块,感觉它的设计思想非常好,于是我就将这个设计思想从 RocketMQ 带到 Seata 中。
我这里在补充一点,很多人看源码的时候,看到某些代码写得不是很优雅,瞬间不想研究下去了,我觉得这点非常不可取,我们在看源码的同时,需要秉承一种 “不拘小节,观其大意” 的精神,因为每个人都有自己的编码风格,如果你觉得写的不好,那么这时候你的机会就来了,这时候提个 PR 优化一波会不会更加爽?而且一个开源项目都有其本身的设计理念,不要为了拘一时小节,而忽略了其整体的架构设计。
在参与开发的过程中,相当于在玩游戏打怪升级,如果你对某个开源项目贡献了自己的代码,那么恭喜你,你成功成为了该项目的贡献者(Contributor),这时候在开源项目的贡献者名单中,就有你的大名啦,你的代码将会随着项目 run everywhere,是不是心中充满了成就感?如果你一直对项目有持续的贡献,那么成为该项目的核心开发(Committer)指日可待。但需要记住一点的是,持续贡献不仅仅只是提交代码,参与 PR Code Review、输出文章、解答用户问题同样是一种贡献。
总之,参与到开源项目中并贡献自己的一份力量并没有想象中的难,难的是你有没有一颗坚持的心,难的是你有没有花心思并付诸行动。
做开源,需要持之以恒。
2、从开源项目中能够学到什么?
从以上的描述中,我花费了那么多时间和精力,我能够从中得到什么?仅仅只是让我的代码 run everywhere?那不免太过于浮躁了。
在这个过程中,你将会和一群优秀的程序员沟通交流,能够将本职工作做好,同时还能把业余时间贡献给开源的人,本身就说明了这个人能力不赖,而且富有激情,至少对编程这件事来说,是充满兴趣的,跟者这些优秀的人在一起做一个有趣的开源项目,你也会慢慢地变得优秀起来。
参与开源项目会形成给予你一种学习驱动力,比方说我在重构 Seata RPC 模块时,驱动我去学习 Netty 相关知识,在写配置同步脚本时,驱动我去学习写脚本(我真的是边学边写 Seata 配置同步脚本的),在研究 Seata 配置中心实现原理时,驱动我去研究 Seata SPI 机制,并且要了解各个配置中心框架的特性等等,人性往往是懒惰的,如果你为了学而去学,很多时候你会半途而废,很多时候你做着某件事半途而废,往往就是因为没有外界驱动力,去驱动你去坚持。学过物理的都知道,世上没有永动机,外界驱动力就是你坚持下去的动力源泉。
同时,你在研究源码或者进行 PR CodeReview 时,可以看到很多大牛的编程思想,这也是你最宝贵的经验源泉,比如 Seata RPC 模块的 Processor 处理器设计思想就是我从 RocketMQ 源码中参透而来。如果你想摆脱日常 CRUD,想增进自己的编码水平,来开源做点贡献吧!
开源项目中的大牛很多,参与开源会使自己变得更加谦卑,还会让自己的思维变得更开阔,不会局限于自我。
以上就是我暂时想到的从开源项目中能够学到的一些东西以及感悟。
PS:怕后台有很多人问起怎么进入丁老师知识星球,我在这里提前说下,公号回复「星球」即获取进入星球二维码,一起交流源码,探讨架构,打造高质量的技术交流圈。
PSS:Seata 社区欢迎你,和一群优秀的人做一件有趣的事!
相关阅读:
作者简介
作者张乘辉,擅长消息中间件技能,负责公司百万 TPS 级别 Kafka 集群的维护,作者维护的公号「后端进阶」不定期分享 Kafka、RocketMQ 系列不讲概念直接真刀真枪的实战总结以及细节上的源码分析;同时作者也是阿里开源分布式事务框架 Seata Contributor,因此也会分享关于 Seata 的相关知识;当然公号也会分享 WEB 相关知识比如 Spring 全家桶等。内容不一定面面俱到,但一定让你感受到作者对于技术的追求是认真的!
公众号:后端进阶
GitHub:https://github.com/objcoding/

我参与 Seata 开源项目的一些感悟的更多相关文章
- 如何参与flink开源项目
参与flink开源项目 https://flink.apache.org/how-to-contribute.html 1.回答社区问题 2.撰写bug报告 3.对于改进建议或新的特征 4.帮助别人并 ...
- 使用github参与到开源项目的维护
参与到开源项目的维护工作一般分两种,一种是由项目建立者拉入到贡献者列表中,拥有对项目的读写权限,而普通用户对项目仅有读取权限,另一种是fork项目到自己仓库,然后把修改后的内容发送给项目管理者者请求合 ...
- 怎样在Github参与一个开源项目
转载:http://www.csdn.net/article/2014-04-14/2819293-Contributing-to-Open-Source-on-GitHub 最近一年开源项目特别的热 ...
- 参与.net开源项目开发
EntityFramework6 https://github.com/aspnet/EntityFramework6 https://github.com/aspnet/EntityFramewor ...
- 关于如何参与到开源项目中《How To Succeed In Open Source ( In Ways You Haven't Considered Yet )》
转自:http://gaslight.co/blog/how-to-succeed-in-open-source-in-ways-you-havent-considered-yet It’s Easy ...
- 参与github上开源项目的大致流程和注意事项
Foreword github是一个很火的代码托管服务网站,可能好多人都想参与一两个项目玩一玩学习一下,但由于是纯英文的网站,可能又会止步于想法上没有动手实践.接下来我就介绍一下参与github上开源 ...
- 如何从零开始参与 Apache 顶级开源项目?| 墙裂推荐
写在开头 从 2021 开始,有一个很有意思的说法经常在各大技术媒体或开源论坛中出现,「开源正在吞噬一切」.不论是否言过其实,从一个行业从业者的切身感知来看,开源确实从少数极客的小众文化成为主流的 ...
- .NET开发人员值得关注的七个开源项目 .
NET开发人员值得关注的七个开源项目 软近几年在.NET社区开源项目方面投入了相当多的时间和资源,不禁让原本对峙的开源社区阵营大吃一惊,从微软.NET社区中的反应来看,微软.NET开发阵营对开源工具的 ...
- .net 开源项目
.NET开发人员值得关注的七个开源项目 [IT168技术分析]微软近几年在.NET社区开源项目方面投入了相当多的时间和资源,不禁让原本对峙的开源社区阵营大吃一惊,从微软.NET社区中的反应来看,微软. ...
随机推荐
- 域名和服务器绑定及https协议更换
服务器是之前已经购买了的 1.腾讯云产品中搜索域名注册(产品太多了懒得找,直接搜索来得快些) 2.进去之后可以选择各种后缀的域名,输入自己喜欢的,看看哪些后缀是没有被注册的.自己挑选一个就可以,按照指 ...
- 一图了解redis
了解redis,这一张图就够了,话不多说,看图: 版权所有,转载请注明出处,欢迎讨论交流
- python爬虫——用selenium爬取京东商品信息
1.先附上效果图(我偷懒只爬了4页) 2.京东的网址https://www.jd.com/ 3.我这里是不加载图片,加快爬取速度,也可以用Headless无弹窗模式 options = webdri ...
- Java初学者最近三次作业的心得体会
作为一个初学者,简单的谈一下自己的作业心得体会.如果你是完全没有接触过Java的学习,本篇博文可能会有些收获,如果你已经学习Java有一段时间了,那么可以放弃这篇文章了,因为这篇文章讲解的是基本的东西 ...
- material UI中子组件样式修改的几种方案研究
material UI是一个流行的与React配套的前端UI框架,对于开发者而言,熟悉它的样式修改方案是必要的.但目前相关资料并不直观,并且没有总结到一起.如果对相关特性不太清楚,开发者很可能会在 ...
- 解析HTML、JS与PHP之间的数据传输
在电商网站搭建过程中,前端经常会向后端请求数据,有时候通过HTML.JS和PHP文件的处理来实现数据的连通.通常情况下,用户在HTML中做关键字操作,JS对提交的表单进行数据处理,向后端发起ajax请 ...
- mac OS 安装破解 Navicat Premium
Navicat Premium for mac V12.0.24 中文破解版 下载地址 https://www.cnblogs.com/huihuizhang/p/9889780.html 由于新版本 ...
- 集合框架-day10
day10-集合框架-对象数组的概述与引用 1 集合框架的简单介绍: A:集合的由来 数组长度是固定,当添加的元素超过了数组的长度时需要对数组重新定义,太麻烦,java内部给我们提供了集合类,能存储任 ...
- Netty(五):ServerBootstrap启动流程
这篇文章主要是对ServerBootstrap启动流程做一个梳理,方便我们串联起各个类,同时也对主要的一些类有个大概的印象,方便之后逐个类的深入学习. 本篇文章不在具体贴出代码,而是对整个启动流程画了 ...
- RedHat Enterprise Linux 5.8 升级openssl
RedHat Enterprise Linux 5.8升级openssl,遇到以下问题,做下标记: 由于之前安装RedHat Enterprise Linux 5.8 时候只安装了服务器环境,没有安装 ...