hello大家好,我是小樓。
流量真是個讓人捉摸不透的東西,有時候寫了一篇自己感覺牛的不行的文章,結果閱讀資料慘淡,有時候覺資料可能沒那麼好的文章,實際資料卻出乎意料。
之前的文章《慘,給Go提的程式碼被批麻了》就是這樣,我以為就一般吧吧,沒想到卻“火了”。
這篇文章截止目前,發表的20天時間裡,在掘金閱讀量突破1w,知乎閱讀量突破1.8w,頭條閱讀量破1.7w,微信公眾號的閱讀加上被轉載的閱讀也有1w,就連公司內網的閱讀都有3k。
可以說這個資料是我從寫公眾號以來最好的了,但我並不覺得它是我寫得最好的文章,所以就很迷。
好了,以上只是寫技術文過程中的一點點驚喜,這樣的驚喜是我繼續寫好文章的最大動力,所以動動你們的小手,點贊+在看+轉發
安排起來。
今天我就順著這篇文章來聊聊大家可能都比較感興趣的話題,開源
。本文會結合自己的一些看法,從參與開源專案的收益和如何參與開源專案兩個方面展開。
參與開源專案的好處
首先要明確,為什麼要參與開源專案?總得對我有點好處吧。每個人可能追求不一樣,所以我這裡就列舉一下我知道的好處,看看有沒有戳中你的點。
- 小禮品
這點可能是被很多人忽略的點,因為太小了,但確實也算得上一個好處。如果你掌握了一些技巧,每年從開源社群拿點小(薅)禮(羊)物(毛)是很easy的。尤其是國內的社群,T恤、杯子、揹包等等是很容易拿到的。
比如這兩年Nacos、Dubbo社群送我的一些杯具:
據我觀察,阿里的開源專案只要每年都去提一個PR,很大概率會送你禮物,不管這個PR是大是小,可以大到貢獻一點原始碼,也可以小到format一下程式碼、修改文件中的一些錯誤、增加一個單元測試等等,所以是不是學到了薅羊毛的技巧?
- 朋友圈素材
這點只是滿足一下虛榮心,其實並沒有什麼卵用,但還是提一嘴,比如下面這些素材,是發朋友圈裝x的利器:
- 裝飾簡歷
如果你有參與開源專案的經歷,寫到簡歷上一般
是個加分項,說一般情況是因為我在面試的時候遇到過候選人在簡歷上這樣寫:
參與貢獻過上萬star的專案。(後面還貼上了專案地址)
一看這句描述就有貓膩,為啥強調上萬star卻不說出專案名稱?於是我開啟後面的github地址發現,原來這個上萬star的專案是個聚合線上學習資料的專案。
不能說參與這樣的專案不好,只是簡歷上這句話讓我感覺在打擦邊球,所以不但沒有加分,反而減分了。
一般來說對專案有過貢獻,無論大小,都可以稱之為Contributor
,貢獻達到一定程度則稱為Committer
,達到多少貢獻才能稱為Committer一般每個社群都有自己的衡量標準,比如Nacos社群有明確的規定:
翻譯下就是:至少有8個PR,團隊協作能力,理解專案的程式碼風格,能寫出優秀的程式碼。當然也有很多社群沒有明文規定,總之就是貢獻越多越有可能成為Committer。
所以在簡歷中如果你是某個專案的Committer就很厲害了,一詞勝千言。退一步就算不是Committer,如果你有一些比較重要或者核心的程式碼提交,也可以寫上,附上具體的issue。如果只是程式碼的format、增加一些單元測試,我建議簡歷上就不要提了。
- 能力提升
通常開源專案的程式碼、設計、規範都是比較優秀的,和優秀的人一起共事能成長更快。
一般我們在參與開源專案時,都是使用英文來交流,所以對你的英文書寫能力是個提升。
其次程式碼規範、測試能力、考慮事情的全面性都將得到鍛鍊。
以我個人的感受來說,雖然嘴上說寫程式碼要規範,但在公司寫程式碼的時候,有時候就不太注意,都是以快速完成任務為目標,但開源專案不一樣,你寫的每一行程式碼都要被眾多的大佬一行一行地review,只要有一點點不滿意都會要求你修改。
測試也是如此,你寫的每一行程式碼都將被程式碼測試,單元測試、整合測試。開源專案更相信用程式碼測試,所以這也鍛鍊了你寫測試和寫程式碼的能力,寫出程式碼不難,寫出容易測試的程式碼還是比較困難的。
- 提升影響力
這是更高層級的追求,當你想在技術上走的遠的時候,需要一些業界影響力,這時,參與開源是個不錯的選擇,能結識更多的圈內牛人,也讓大家能認識你,你的圈子、人脈就會擴張。
提升影響力有什麼作用呢?最直接的是,讓別人知道你的存在,下一次機會來臨時,說不定你會被看中或者推薦。
當然我離這個層次還很遠,只是說一點自己的理解。
如何參與開源專案
- 參與開源的方式
上文其實也提到了,參與開源專案不一定是直接的貢獻原始碼,也可以是對文件的編寫或修正、寫一些單元測試或者測試用例、也可以寫一些開源專案相關的文章。
比如我在去年寫《Dubbo為什麼要用Go重寫?》這篇文章時,就順手把Dubbo-go專案的README改了
還有比如在寫《使用dubbo-go搭建dubbo介面測試平臺》這篇文章時,把這篇文章投稿給了Dubbo-go官方網站,也被收錄進去
這些都算是對開源的一種貢獻。當然如果你有程式碼的直接貢獻是最好的,這也是獲得技術成長最快的方式。
- 從哪裡開始
如果我們平時工作中用到什麼開源專案,沒事的時候可以把原始碼下載下來翻一番,可以按照文件跑起來,打上斷點看看是否跟自己想的一樣,這時我們便有了一些基礎,可以去github上的issue找找,一般的專案會把issue分類,可以從標了good first issue
或者bug
標籤的issue看起,看看有沒有自己能解決的,再結合程式碼,一步一步除錯。
這種方式目的性比較強,我就是衝著提交程式碼去的,而且比較有時間去研究,目前我還沒用過這種方式,我更多的是下面提到的這種方式。
另外一種是如果我在使用開源專案的過程中發現了一個bug,或者一個可以優化的點,可以去github上提個issue先討論討論,如果社群的人也認可你的觀點,可以把你的修復或者修復作為一個PR提交上去。
這個方式我在Dubbo/Sentinel/Nacos/Skywalking/Go中都是這麼幹的,都是平時遇到的一些問題,反哺到社群。
發現問題往往比解決問題更困難,開源專案也是如此。
等等,在你想提交程式碼前,我建議你好好看看開源專案的規範,一般位於專案的README或者官網中,他對issue有什麼要求,對程式碼有什麼要求,對commit message等等都有什麼樣的要求,如果不按照這些規範來提交,可能你的下場會和我一樣,一個字「慘」。
- 提交程式碼流程
這一步網上資料比較多,我這裡只說個大概的流程,具體到每一步我相信你能在網上找到更詳細的教程:
- 提issue討論(不是必須,有些專案可以直接提程式碼)
- fork程式碼倉庫
- 在fork的程式碼倉庫拉一個分支,並把程式碼提交到這個分支上
- 簽署Contributor License Agreement(簡稱CLA)
- 在這個倉庫上向原倉庫發起一個PR
- 等待程式碼Review反饋,並按照反饋修改
- Merge進程式碼倉庫,貢獻完成
最後說一句
萬事開頭難,往往第一個PR是最難提交的,如果嘗試著提交了,我相信你會開啟新世界的大門。
對了,雖然我參與到開源專案的經驗不夠多,但可以給你一點參考,有正例也有反例
- https://github.com/golang/go/pull/50023
- https://github.com/dubbogo/dubbogo.github.io/pull/7
- https://github.com/apache/dubbo/pull/8066
- https://github.com/apache/dubbo/pull/7929
- https://github.com/alibaba/nacos/pull/2403
- https://github.com/alibaba/Sentinel/pull/1045
- https://github.com/alibaba/Sentinel/pull/104
- https://github.com/apache/skywalking/pull/2930
- https://github.com/apache/skywalking/pull/2874
好了,今天的分享到此為止,我們下期再見!
搜尋關注微信公眾號"捉蟲大師",後端技術分享,架構設計、效能優化、原始碼閱讀、問題排查、踩坑實踐。