阿裡土話
ASF是一個開源組織,他有自身的文化,阿裡是一個要活好102年的公司,其文化底蘊非凡!分享ASF之前總想或多或少的和大家分享一些阿裡的味道!
- 給世界帶來微小而美好的改變
- 把幸運種子種到别人身上去,你才會有幸運
- Never, Never, Never Give Up(永不放棄)
沒錯,阿裡人看到上面的三句話會倍感親切,因為上面三句都是 “阿裡土話”。雖然是阿裡土話,但我認為其有放諸四海而皆準的魅力!這些話,同樣适用于激發和指導你成為合格的開源貢獻者!不經意間看了一眼窗外,心裡開心默笑,其實阿裡每個角落都充滿這阿裡氣息:

緣
其實每個人參與社群貢獻的機緣不一樣,但無外乎兩種:
- 偶發事件 - 由于參與某項工作,無選擇的就參與了某個開源項目。(我就是這種,很自然的就跟着 蔣曉偉 老師踏入了Apache Flink之旅)
- 因愛而求 - 每個碼農都有一顆想讓自己的的代碼被應用全球的夢想追求!這夢想的實作要依托有開源的力量,ASF完全可以為你營造最好的實作夢想的環境~
給個理由
也許目前的你既沒有工作的需要,也沒有産生對開源産生任何愛意❤️。但了解一件事情總沒有壞處,了解參與開源的利好,也許明天你就踏上了開源之旅!
- 順勢而為 - 如果你是一個碼農,那麼參與開源是一種must to have的事情,目前開源領域形式大好,各大公司紛紛擁抱開源,比如:Google,Alibaba,Hortonworks, Tencent, Facebook等等。參與開源無疑是擴大了生存的空間。
- 業界身份證 - 參與開源就是在一點一滴的描繪你的業界身份證,你的開源貢獻可以公示全球,由一行代碼,一句文檔的貢獻,到成為某個項目的管理者(PMC成員),到成為 ASF Member 甚至 成為董事會成員,這些就像你曾經為之努力的學士學位,碩士學位,博士學位一樣為世人所認可!不誇張的說,某些情況甚至比學位證書還實用!
- 無國界導師 - 參與開源還有一個特别特别特别重大的利好,就是你可以在你所關注的領域尋找到最好的導師,所謂最好,不是牛,最好是最适合!所謂“三人行,必有我師”,社群交流最初你會感覺和業界大牛無法溝通,因為他的一句話,需要分解成十句才能懵懵懂,甚至不懂!這個不是大牛原因,也不是你的原因,是大牛對你水準的了解不足導緻,但即大牛便了解你的水準,也很難讓大牛将一句話分解成十句甚至百句話讨論你關注的問題,不是大牛不願意,更多是我們不好意思:)。是以說,要“門當戶對”找到 社群比你水準略高,同時你也能給人家一些反哺的貢獻者長時間交流。目前ASF有7600+的Committer,就算是某一個項目,也應該有幾十個Committer和數以百計的貢獻者,總會遇到可以和你一起進步的小夥伴!雖不曾謀面,卻已熟若親朋!
- 全球性分享 - 目前ASF項目有140多個領域,參與者覆寫230個國家。如果你小有成就,想将你的知識分享給更多的人,想利用的開源知識幫助更多的人,那麼無疑ASF為你提供了這樣的平台!你又何嘗不能成為上面“無國界導師”中的一員的導師呢!
- 最佳實踐 - 不知 - 了解 - 有方案 - 最佳方案,開源是一個智慧的集結地,一個功能可能有幾十種實作方式,這并不是一兩個人或者某一個小團隊能考慮到(ALL)的,然而在開源一個問題,你在考慮的同時,可能在世界的某個角落,某些角落還有其他人或團隊在考慮解決方案,當大家共享方案的時候,智慧的火花将會産生!
- 上司力塑造 - ASF有公司和項目的治理方式,不論你目前是否一個(技術)管理者,參與開源貢獻你都有機會挖掘你自身的上司力。 TL,可以是 Team Lead,也可以是 Tech lead,作為一個碼農,往往對 Tech lead 更加情有獨鐘!在開源貢獻一向遵循 “正确的就是擁護的,正确的就是堅持的”!如果你一貫的在社群發出自己獨到的見解(管理&技術),那麼勢必會塑造你獨特的上司力,社群上司力是内心驅動的影響力,是以的擁護者都是無外界壓力,無情感偏見,發自内心的崇拜贊許!如果你能達到這樣的成就,将勝過你職業的晉升,當然這個也會促進你的職業晉升!
- 毋以善小而不為,小善舉大美好!有的時候一個文檔優化,甚至一個typo的貢獻都會讓成千上萬的人獲益。更有意思的是很多開源貢獻者都是從文檔貢獻開始的 :)一個很有意思的統計, 28%的開源貢獻來自偶然的文檔改進 。
Casual contributions are far from being trivial. After a manual inspection of a sample of casual contributions, we found that although 28.64% of them are related to grammar and typo fixes.
- 認真生活,快樂工作 - 參與開源不僅僅是工作或業餘愛好的演練台,也是生活的一部分,他會讓你在快樂工作的同時尋找到“臭味相投”的摯友!通過參與Apache Flink項目我也交到了幾位德國好朋友,甚至有些好朋友還成為了我的兒子的好朋友!:)看看下圖有沒有你和我共同的朋友?世界很小~?
給個原則
沒有規矩,不成方圓,如果上面的理由足夠打動你,那麼我再給你一些參與開源的原則:
- 始終堅信滴水成河的道理,社群貢獻在于積累,貴在堅持,不因善小而不為,任何貢獻都會使得社群變得更加美好!
- 公開溝通 - 參與開源的一個重要的原則就是公開溝通,任何問題不論大小,都要在可以被追溯,可以被任何感興趣的人查閱的方式進行讨論。比如:郵件清單,JIRA上,PR中等。切記不要單獨私信讨論,公開讨論有助于更多的人參與,而且還確定了在讨論過程中一些無意識的錯誤可以很容易被發現和糾正。
- 保持尊重 - 社群的任何貢獻都是以自願為原則的,不能強迫任何人做事情,也不要無禮貌的敦促任何人做事情的進度(除非特殊情況)。更不能因為意見不通就進行人身攻擊,不要以為這好笑,其實是真是發生過的!尊重是互相的,你給予我春風,我自送你一縷芳香!大家努力營造開心和諧的社群氛圍。
- 簡明扼要 - 我們可以大膽的在社群提問,追問!但切記在提問之前将自己的問題反複思考,這是對自己負責也是對其他社群貢獻者的尊重!因為你的一次問題描述可能将被數百人閱讀。寫一封簡明扼要的郵件意味着人們可以盡可能有效地了解你的意圖。如果需要詳細說明,請考慮添加摘要。也就是,你的問題描述要簡明扼要(這個很能力有關,盡自己最好就行),盡量寫清楚上下文,你在什麼情況下,遇到了怎樣的問題,如何問題再現等等,你的描述越簡明扼要,越清晰完整,越容易被人取得别人幫助!
-
前進一小步,文明一大步 :)
這可不是 WC 用語,而是确确實實的利他原則。阿裡巴巴國際化戰役中有一個要求,就是參與國際化建設的阿裡人員,到哪個國家,就必須用當地的語言與當地客戶溝通。這展現了足夠的尊重,展現了足夠的服務前的準備和付出!我們在開源社群問問題也是一樣的,不能遇到問題,不加思索的就向社群提問,在提問之前要先進行各種嘗試,各種資料的查閱,社群已有問題的查閱,同時帶上自己的觀點去提問,讓想幫助你的社群人員看到你在設個問題上的努力。
- 我們不僅僅是問題的提出者,慢慢我們自己也變成問題的解決這,由社群求助者變成社群救助員!努力尋求自己反哺開源社群的機會,為他人付出也是為自己積累!所謂 “為自己,照亮他人!”。加入你相信來世今生的話,這裡有個故事分享給給你:
從前有兩個要投胎轉世的人,在投胎之前有機會選擇投胎之後是做“一生向别人索取的人”還是做“一生施惠于他人的人”,選擇了“一生向别人索取的人”的那個,投胎做了 乞丐,而選擇了“一生施惠于他人的人”的那個做了富翁!
是以做社群也一樣,努力做施惠于别人的人,就是在社群德高望重,具有上司力的人!:)
- 理想總是美好的,現實總是骨感的,參與社群的人都具備熱情,耐心的品質,但社群的問題太多,需要得到幫助的人也太多,相同問題千人千面,意見不一緻也是司空見慣的,切記不要意以為提的問題都會很快有人幫忙,你送出的PR很快有人Review。每個大的社群貢獻都需要如下圖所示的投票決定,也許你的貢獻被接受,也許你的貢獻被拒絕,但請不要太在意一次的貢獻成功與否,無輪遇到什麼困難,挫折,都要 Never, Never, Never Give Up(永不放棄),因為馬總說過 “今天很殘酷,明天更殘酷,後天很美好,但是絕大部分人是死在明天晚上,看不到後天的太陽”。 隻有堅持到最後的人,才能享受到和煦的陽光!
如何開始
最常見的參與Apache貢獻的方式是選擇一個你感興趣的項目,因為愛好才是最好的原動力!我曾經用一句話描述過ASF:“ASF是一個與阿裡巴巴同齡(成立于1999年),有完整的組織(董事會)架構管理,以軟體(140個領域)技術全球(覆寫230個國家)共享為使命的公益組織",裡面提及 ASF有140個技術領域總有一個你感興趣的!
ASF 項目目前分為兩大類:
- 孵化器項目 - 是正在孵化的項目,也就是,在成為ASF 頂級項目之前,需要在ASF進行孵化,當從孵化器畢業之後就會成為Apache頂級項目。參與孵化器項目的好處是你能對項目有更早的參與,有多細節變化的了解,也很容易得到該項目的重視:),目前ASF所有孵化器項目清單請 這裡查閱 !
- Apache 頂級項目 - 這是已經從孵化器畢業的Apache 頂級項目,頂級項目的運作一般已經完全符合Apache Way。直接參與頂級項目的好處是能開始就接觸很規範的社群貢獻方式和更高的品質代碼,有更多的學習資料和更多的參與者。目前Apache 頂級項目清單,可以 查閱這裡
一旦選擇參與某個項目,不論在什麼情況下,你都要聽從自己的直覺,做你認為更好或者不同的事情。永遠都不忘初心,堅持自己所堅持的~~,也永遠牢記上面的原則,其中你會發現“給世界帶來微小而美好的改變”非常受用。假如,你在檢視文檔時候,發現了某個連結的錯誤或者typo錯誤。假如,你在使用産品的過程中發現了問題,請不要坐視不理,徑直繞開,或者向社群提出問題,等待其他人來修複,因為這正是你貢獻社群的好機會,解決這些你能看到的問題,因為,在解決這個問題的同時,也許會有新的問題被你發現~~ 進而你就入道啦:)
準備工作
目前ASF開源項目都是在
github上面托管的。是以正式參與ASF開源貢獻之前你要做一些準備工作:
建立一個github賬号
點選建立,為了示範,我建立了一個“pyflink”賬号 :)
Fork 你要參與的項目
以
Apache Flink為例,如下:
點選 “Fork” 之後,會在你的github賬号下出現一個flink項目,如下:
Clone 代碼到本地
做代碼貢獻之前需要Clone你剛才fork的Flink代碼到你本地,以備送出第一個社群貢獻PR!
`
閱讀項目貢獻說明
一般具體項目會有介紹如何參與該項目的貢獻,以Apache Flink為例 就有關于如果參與Flink社群貢獻的說明, 比如:
Apache Flink is developed by an open and friendly community. Everybody is cordially welcome to join the community and contribute to Apache Flink. There are several ways to interact with the community and to contribute to Flink including asking questions, filing bug reports, proposing new features, joining discussions on the mailing lists, contributing code or documentation, improving the website, or testing release candidates.
詳情
訂閱郵件清單
社群問題大多會在具體項目的社群郵件清單裡面進行讨論,是以郵件清單是了解社群動态最重要的收入,以Apache Flink 為例,最要要訂閱
開發郵件清單和使用者郵件清單,如下:
首先,點選上面的link,會引導你給 [email protected] 發送郵件。然後你會收到官方确認郵件。最後你回複确認郵件之後還會收到一封歡迎郵件,也就意味這你訂閱成功了!注意上面每個郵件清單都需要單獨發起訂閱。
OK, 到這一步你已經完成了為Apache Flink做貢獻的準備工作了:),接下來就要尋找做貢獻的機會了!
建立issue或者解決issue
目前大多數ASF項目的問題采用JIRA管理(當然也有例外),我們以Apache Flink為例,當使用者發現的問題可以在
。 如果你發現有你感興趣的issue,不要由于,直接在JIRA下放留言,你想幫忙解決這個問題,并share你解決問題的方法,這樣社群會有Committer來與你溝通了!以一個早起我向Flink提及貢獻的issue為例
FLINK-13471:
當發現有人建立了issue,但還沒有配置設定給任何人,你就可以嘗試幫助解決這個問題,在完成開發後送出PR。
當然,如果你發現了問題,如果是你确認的小問題,可以直接
建立新的issue, 如果你對這個問題并不确定,可以在
開發郵件清單裡面就像郵件讨論。當确認問題之後,再
建立issue.
送出PR
不論你是修複文檔還是貢獻代碼,都建議在你剛才fork的項目中建立一個用于送出PR的分之,以我上面的為例,我會本地建立一個名為
LINK-13473-PR
的分支,當完成開發之後,将分支push到自己的倉庫,就可以建立PR了,如下:
點選“Compare & pull request”,進行PR建立,如下:
建立PR,有幾個值得注意的點:
- 確定你的分支和官方git的master分支沒有沖突,也就是如圖顯示“ Able to merge.”。
- 要對PR所要解決的問題,在Title裡面簡明的展現出來,比如“ FLINK-13471 Add FlatAggregate support to stream Table API(blink planner) ” 明确了 JIRA号
, 子產品FLINK-13471
和PR的内容是table
Add FlatAggregate support to stream Table API(blink planner)
- 同時在詳情裡面要清楚的描述你改動的點,不同項目有不同的要求,但總體上保持上面提到的
的原則,你些的也清楚,Review的人越容易了解你的改動,你的PR約容易被得到有效的回報。前進一小步,文明一大步
最後,點選“create pull request”完成PR的建立!不過,這還沒有完成社群貢獻,還需要等待社群其他貢獻者的Review。
正常情況下,除非是typo的貢獻,一般有代碼邏輯的PR都會或多或少的得到reviewer的改進回報,這時候就是學習交流的好機會啦:) 你可以盡可能的發表你的看法,解釋你的設計,當然也要充分了解回報的内容,最後根據溝通達成的内容進行PR的更新!
最後。。。最後。。。最後 達到了社群代碼品質的要求,Committer會幫助你進行代碼的Merge,這樣你就完成了社群第一份貢獻喽!!
開始1-100之旅
常識性觀念是0-1很難,因為那是創新,那是新領域的探索,那是醞釀了很久之後的第一步!但是參與ASF開源貢獻,恰恰是0-1很容易,1-100才是一個持久戰。需要上面提到的 “Never, Never, Never Give Up(永不放棄)”, 因為我真的看到了很多社群貢獻者在一個社群貢獻了一段時間之後,如果沒有拿到自己想要的結果,比如成為Committer,就會永遠的在這個項目貢獻裡面消失了,Give Up 了!這不是危言聳聽,這是真是的現實!是以在ASF開源貢獻的道理上,的确有很多人被 馬老師的話所命中:“今天很殘酷,明天更殘酷,後天很美好,但是絕大部分人是死在明天晚上,看不到後天的太陽”。是以,你...準備好了嗎?:)
但行善事,莫問前程
不論做人,做事還是社群貢獻,很多道理都是想通的,在下面的ASF金字塔中,我們從 貢獻者 到 董事會成員的路是漫長的,如果你天天想着什麼時候成Committer,什麼時候成為PMC成員,什麼時候成為ASF Member,什麼時候能夠當選董事會成員,我确信,在ASF開源貢獻中,你将無法做到 “快樂工作,認真生活”!過急的目标驅動會增加你的煩惱,相反,登山而不思山頂 攀登,将會迎來一路的驚喜!是以在參與開源的開始,我最後的建議就是:“但行善事,莫問前程”!加油⛽️
阿裡土話為你打氣
我相信在ASF開源貢獻之旅,你會有很多次要放棄的念頭,你會遇到很多懷疑自己的時刻,你會時不時的懷疑社群管理者是否有問題?總之,如果你想把他當作一生的樂趣,在你沒有找到樂趣之前,你一定需要下面的在文章開頭已經提及的三句話:
你參與社群的目的是為了盡自己微薄之力,來讓ASF開源社群更美好!
你參與社群的信念是為其他人播撒幸福幸運的種子,你并沒有在乎得到什麼彙報,你相信“因果”!
你參與社群的堅守是永不放棄,因為隻要我在前行,必将抵達彼岸!永不放棄要深刻你腦海!
我很喜歡上面這三句阿裡土話,我們共勉把!
誠摯邀請
我目前在負責Apache Flink的
PyFlink建設,誠摯邀請想參與ASF社群貢獻的你,以PyFlink作為你的開源之旅的首站!期待在Apache Flink社群PyFlink的建設中,遇見你~~
小結
本篇為大家介紹了參與開源的利好,原則,以及介紹為自己的第一個社群貢獻需要做怎樣的準備。最後誠摯邀請想參與開源建設的朋友首站加入Apache Flink 的
建設!