我參與 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 社區歡迎你,和一羣優秀的人做一件有趣的事!

相關閱讀:

分佈式事務中間件Seata的設計原理

作者簡介

作者張乘輝,擅長消息中間件技能,負責公司百萬 TPS 級別 Kafka 集羣的維護,作者維護的公號「後端進階」不定期分享 Kafka、RocketMQ 系列不講概念直接真刀真槍的實戰總結以及細節上的源碼分析;同時作者也是阿里開源分佈式事務框架 Seata Contributor,因此也會分享關於 Seata 的相關知識;當然公號也會分享 WEB 相關知識比如 Spring 全家桶等。內容不一定面面俱到,但一定讓你感受到作者對於技術的追求是認真的!

公衆號:後端進階

技術博客:https://objcoding.com/

GitHub:https://github.com/objcoding/

公衆號「後端進階」,專注後端技術分享!

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章