丁老師在他的知識星球邀請我回答如下一個問題:git
我以爲這個問題很是有意思,姑且把它貼到公衆號這裏,與你們分享一下我對這個問題的一些感悟。程序員
感謝丁老師的邀請問答:github
在這裏我就簡單說下,我這段時間參與 Seata 開源項目的一些感悟:編程
一、如何參與到開源項目中並貢獻本身的一份力量?後端
我一直都有上 GitHub 搜索一些主流開源項目的習慣,我是從去年 5 月份從 GitHub 開始關注 Seata 項目的,通過入門上手以後,我就以爲它的設計理念很是棒,儘管當時還有不少地方沒有完善,但並不阻礙我對它的讚美,我對它產生了濃厚的興趣,我那個時候就萌發了我要成爲這個項目的貢獻者。架構
不少人說,我又不是大佬,我如今還不夠優秀,我沒有太多的業餘時間和精力,我也不知道這個項目是否合適我,等等,也有人覺得須要成爲某個領域大牛,才能夠參與其中,其實這是對開源最大的誤解,開源固然有大牛,不但有,並且很是多,這些大牛不少都是值得你學習的榜樣,可是爲開源項目作貢獻須要成爲某個領域大牛並非必要的,但須要你花費大量時間和精力去貢獻,在這個過程當中,你一樣可以學到不少。框架
我接下來繼續講講我是如何參與 Seata 的貢獻:分佈式
我是先從官方文檔開始瞭解 Seata 項目的,並根據本身的瞭解,寫了一篇文章,同時這篇文章還被阿里巴巴中間件轉載過,正如丁老師所說,爲開源項目作貢獻並不僅是貢獻代碼,爲項目寫文章一樣是一種貢獻。源碼分析
在瞭解 Seata 的原理以後,我就着手看 Seata 源碼,繼續深刻研究,在這個過程當中,我是發現 Seata 源碼是有不少地方須要完善的,所以我獲得了代碼貢獻的機會,在看源碼的過程當中,我參與了某些 bug 的修復,一些功能的開發,同時還對部分代碼進行了優化,代碼優化這點我特別有感觸,由於 Seata 的 RPC 重構主要是由我完成的,因爲我以前研究過一些 RocketMQ 的源碼,其中就包括 remoting 模塊,感受它的設計思想很是好,因而我就將這個設計思想從 RocketMQ 帶到 Seata 中。學習
我這裏在補充一點,不少人看源碼的時候,看到某些代碼寫得不是很優雅,瞬間不想研究下去了,我以爲這點很是不可取,咱們在看源碼的同時,須要秉承一種 「不拘小節,觀其大意」 的精神,由於每一個人都有本身的編碼風格,若是你以爲寫的很差,那麼這時候你的機會就來了,這時候提個 PR 優化一波會不會更加爽?並且一個開源項目都有其自己的設計理念,不要爲了拘一時小節,而忽略了其總體的架構設計。
在參與開發的過程當中,至關於在玩遊戲打怪升級,若是你對某個開源項目貢獻了本身的代碼,那麼恭喜你,你成功成爲了該項目的貢獻者(Contributor),這時候在開源項目的貢獻者名單中,就有你的大名啦,你的代碼將會隨着項目 run everywhere,是否是心中充滿了成就感?若是你一直對項目有持續的貢獻,那麼成爲該項目的核心開發(Committer)指日可待。但須要記住一點的是,持續貢獻不只僅只是提交代碼,參與 PR Code Review、輸出文章、解答用戶問題一樣是一種貢獻。
總之,參與到開源項目中並貢獻本身的一份力量並無想象中的難,難的是你有沒有一顆堅持的心,難的是你有沒有花心思並付諸行動。
作開源,須要鍥而不捨。
二、從開源項目中可以學到什麼?
從以上的描述中,我花費了那麼多時間和精力,我可以從中獲得什麼?僅僅只是讓個人代碼 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/