丁老師在他的知識星球邀請我回答以下一個問題:
我覺得這個問題非常有意思,姑且把它貼到公眾號這裡,與大家分享一下我對這個問題的一些感悟。
感謝丁老師的邀請問答:
在這裡我就簡單說下,我這段時間參與 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 全家桶等。內容不一定面面俱到,但一定讓你感受到作者對於技術的追求是認真的!
公眾號:後端進階
技術部落格:https://objcoding.com/