堅持貢獻10年,他在開源領域做到了國際頂尖

從技術小白成長爲有着Apache member、Apache spark PMC、Apache Livy PPMC等頭銜的國際頂級開源大牛,邵賽賽用了十年。

在回答是什麼讓這位鵝廠技術大牛十年如一日貢獻開源的時候,他的回答是“愛和堅持”。

剛接觸Apache開源社區時,邵賽賽時常看着郵件列表陷入迷茫,這種上世紀90年代流行的互聯網溝通方式,在20年後已經讓新生代的程序員們有些看不懂了。如何訂閱、回覆還有郵件要發給誰,都是他感到疑惑的問題。

更加令他疑惑的還有各種英文縮寫,雖然認識每個英文字母,但組合在一起卻像是天書,過了好一段時間他才搞明白,原來“LGTM”是“looks good to me”,而“PTAL”是指“please take a look”。

多年後,當他看到“YYDS”,別人告訴他這是“永遠的神”時,熟悉的感覺立刻就回來了。

持之以恆,“魚”就會到來

2010年畢業的邵賽賽,多少有一些“生不逢時”,大學他學的是模式識別與智能系統, 這個看似前沿的專業在當時看來還是太超前了,市場上相關的公司太少。

於是只好去做後臺開發。由於工作中涉及了大量數據分析,此時大數據技術方興未艾,英特爾在國內開始投入大數據相關的研發,他便去了英特爾,後來又去了“Hadoop三駕馬車”之一的Hortonworks,一直做大數據開發。再後來因爲騰訊大數據的體量和業務場景,加入了騰訊。

也因此,他開始了與開源的不解之緣。

說是不解之緣,因爲大數據和開源就像是一枚硬幣的兩面,無論是早期的Hadoop還是之後的Spark等大數據基礎軟件,體量都龐大到一家公司難以支撐其演進,需要全球化的組織來共同推動。

“任何一家公司單獨去做這個東西,它的生命力都是有限的,但開源會讓更多的人不斷投入進去,它的生命力就是無限的,要做大數據,就要投身到開源的領域去。”邵賽賽說。

在Hortonworks,所有的軟件或代碼都是開源的,工程師的工作也都在開源的項目裏進行,公司主要的盈利模式是爲開源軟件提供解決方案。大數據行業裏,絕大多數的底層組件都源自開源社區,也因此,大數據工程師們的工作離不開開源,“不管是去開源社區提patch,還是瞭解開源社區的進展,參與開源社區的討論,都是工作不可分割的一個部分。”

通過參與開源項目,參與者也能獲得對應的頭銜,比如參與Apache社區的大數據項目,貢獻代碼、文檔和問題可以成爲contributor(貢獻者),這是開源項目基本的參與角色。

第二階段是committer(提交者),committer能夠將contributor貢獻的代碼或文檔提交到代碼的分支裏去,並且日常review代碼,幫助將patch儘快“核”進去,維護項目更好地發展。

第三階段就是PMC member——項目管理委員會成員,PMC member所要做的事情,首先是決策項目未來的發展;其次是在contributor中遴選出優秀的個體,然後將他們推選爲committer。總之,通過決策開源項目的每一個點來推動項目發展,這個就是PMC成員。

在PMC member之上,還有PMC chair(項目管理委員會主席),通常是項目的發起者或是領軍人物。

而邵賽賽目前的頭銜——Apache member、Apache Spark PMC和Apache Livy PPMC,在知名的Spark社區,他貢獻了197個patch,排名33位,在Livy社區貢獻了102個patch,排名全球第1位,這些足以體現他在開源社區的影響力。這些的頭銜來之不易,尤其在比較知名或行業影響力較大的社區,要得到大家的認可,成爲committer或者PMC,需要經歷長時間的考驗。

正如文章開頭所說,一開始進入社區,邵賽賽連英文縮寫都看不懂,更遑論瞭解開源社區的規矩和做貢獻了,這也是許多中國人面對開源的第一道坎兒。邵賽賽用《老人與海》中長時間沒有漁獲的老人做比喻,許多人接觸開源時,會有這樣一段艱苦的時期,就像一個人去爬山,然後迷失了方向。

“你找不到更好的可以貢獻的東西了,也不知道做什麼好,有的人可能就放棄了,但經歷一段時間的摸索和尋找,你會逐漸發現有一些潛在的可以投入的點,可以做出貢獻,這兩種狀態會週期性的交替出現。”在邵賽賽看來,成爲Apache member,最重要的並不是技術要有多牛,而是熱愛這個社區,願意在社區上做更多的貢獻,幫助社區的項目更好的發展。

持之以恆,“魚”就會到來。

“慢工出細活”

國內軟件公司由於起步較晚和注重實際業務,普遍追求遇到問題就解決問題、快速迭代的方式,但開源社區卻更講究“慢工出細活”。

比如一名contributor發現了一個問題,他首先要分析這個問題到底是什麼,分析出原因後,要去說服社區的大佬,因爲自己分析出來的原因可能並不是深層次的原因,要繼續分析。真正的原因分析出來後,還要做出解決方案,而且不是短平快的解決方案,是相對長期的解決方案。

這個時候開始,要寫設計文檔,列出幾套解決方案,討論出一套最合適的,然後開始寫代碼,每一行代碼的風格也都要符合社區的標準。寫完代碼提交後,會有比較完善的單元測試或集成測試,社區會反覆review好幾輪,包括註釋的拼寫錯誤都要修正,最後再由committer核入。如果patch比較大,整個過程的週期會長達幾個月甚至一兩年都有可能,這在許多國內公司看來效率太低。

而且許多國內的程序員,習慣的是公司內部有人會爲自己的工作兜底,自己只需要埋頭做事就行,強調與人交流對程序員來說甚至有些“不務正業”。這與開源社區存在極大的不同,做開源需要注重溝通。社區是人形成的圈子,由於社區的成員之間不存在強聯繫,也不存在必須負責的義務,如果成員自顧自地提交代碼,可能根本不會有人看,代碼也就不了了之了;而當一名成員和社區的人更加熟悉後,提交patch會得到更多人更快地響應,整個流程也能夠大大加速。長遠來看,善於溝通的人,在開源社區做事的效率要更高。

邵賽賽認爲,目前國內開源和國外開源比較大的區別,是國內外對開源的理解不同。國內絕大多數人或企業對開源的理解,僅限於把代碼放出去,讓別人知道這個代碼是我或我們組織開源的,認可這個代碼很厲害,這樣就完了。開源之後,可能就沒有持續的貢獻了,開源的回饋或收益很低,或者是隻有影響力層面的回饋,這就是國內開源絕大多數時候的現狀。

相對來說,國外對於開源的理解就比較成熟。首先,爲什麼要開源?開源並不僅僅是爲了影響力,開源也是一種商業行爲或者說是商業模式,目前國外已經摸索出來一套比較好的方案,比如紅帽這樣的大公司,通過開源軟件來教育用戶,之後通過加強的商業版本收費。

還有許多利用開源創業的公司,尤其在大數據領域,這是非常主流的一種方式,它們通過將開源的產品進行重新包裝、打磨,形成商業版的能力然後收費,即使是小公司,也可以依託開源社區去把核心功能做得更好。就像Hadoop三駕馬車中的Cloudera和Hortonworks就先後上市又進行合併,還有Spark方向的Databricks,現在估值已經達到了380億美元。

至於像谷歌這樣的大公司,更是利用開源來形成相應的生態或標準,比如谷歌開源安卓,最終在移動互聯網時代成爲兩大操作系統之一。相比之下,國內絕大多數公司和組織,對於如何通過開源獲取影響力,如何有針對性地去開源,如何利用開源來構建生態,如何利用開源獲得商業利益,不說是腦子裏一團漿糊,也是“知其然不知其所以然”的。

但國內並非沒有做好開源的潛力,比如目前在開源領域非常活躍的騰訊,本身就擁有着海量的數據需要處理,這對其內部技術的要求極高。騰訊同樣從開源社區獲取了不少的幫助,這些對問題的解決方案如果反饋到開源平臺,也會推動社區的發展。另一方面,騰訊在大數據領域的基礎技術已經基本完善和成熟,因此也有更多的意願,去做更加前沿的技術研發,這也是大公司獨有的優勢。

尤其是騰訊930變革以來,開源成爲公司級的技術戰略之一,並在內部成立了開源管理辦公室,下設項目管理委員會、騰訊開源聯盟和開源合規組三大組織,旨在自上而下地傳遞騰訊開源策略,自下而上地落地開源技術生態。同時,通過開放的開源評審平臺,孵化和培育優秀的自主開源項目。

三年過去,目前騰訊已經對外開源了140+個項目,有數千位貢獻者,Star 數超過40萬,開源貢獻居於全球前列。在內部騰訊已組建和孵化了117個開源協同小組,涵蓋了計算、存儲、數據等所有互聯網技術基石。全公司內部代碼開源率達到85%,不僅給騰訊帶來巨大的效能提升和成本節約,同時通過騰訊雲不斷助力越來越多的生態夥伴,並源源不斷將經過內部大量業務沉澱和檢驗的優質項目對外開源。

比如,致力於大數據領域的天穹Oteam,將各事業羣的大數據最佳實踐複製到了各個場景,實現平臺互通,功能複用,大幅提升了通用性能與資源利用率。

做開源的“愛與堅持”

做開源需要怎樣的特質?

邵賽賽認爲,首先是要有毅力,能夠持之以恆。開源項目都是需要長期投入的,只有長期投入後,纔能有更多的回報。對於像Spark社區這樣要求較高的開源社區,從contributor到成爲committer,至少需要持續貢獻三年或更久,其中有的社區大牛,從自己的青年一直貢獻到中年。做開源如果沒有對開源項目真正的熱愛,沒有持之以恆的毅力,而是追求短期的回報,那麼很容易就會放棄了。

其次是有強大的自驅力,支撐自己持續不斷地投入到發現問題、解決問題、貢獻代碼的過程中去。發現問題和解決問題對開源至關重要,但這兩種能力並不是每個人都擁有的,很多貢獻者在使用的過程中發現了幾個問題以後,貢獻完之後不知道還能繼續做什麼,這個時候就需要依靠自驅力以及相應的方法論,去持續發現問題和不停地進行改善。

邵賽賽對尋找值得貢獻的點的經驗是,首先,要找到一個方向,這個方向要具備很多的潛在可以做的點,在這個方向上去尋找可以做的點;其次,在做這個方向的時候,如果發現很多公司在實際應用中有很多問題,證明代碼的成熟度有限,那麼就去構建一套測試框架或是測試集,然後去測試,測試出了問題就解決問題,最終還是會尋找到一條能夠挖掘出更多可做點的路。

而這樣的自驅力又建立在對項目的認可上,只有認可了項目,纔會想做更多的貢獻,並在社區頭銜和影響力上獲取相應的成就,尤其是在全球知名的開源社區獲得影響力,對貢獻者來說也能夠進一步激勵自己。

通過持續對開源做貢獻,開源社區較高的核入門檻,可以讓貢獻者更加系統深入地去思考問題,提出真正能解決問題的方案,而非“短平快”、“頭疼醫頭腳疼醫腳”的解決方案,並且和全球不同文化背景的人溝通,也能讓解決方案更加清晰和麪面俱到。“我在review很多代碼的時候,尤其是國內一些貢獻者代碼的時候,他們的patch是不錯的patch,但是沒有準確地描述出爲什麼要提交這個patch,究竟解決了什麼問題,這也會造成貢獻沒有很好很快地被人接納。在社區中,不但要做事,還要跟人有效的溝通。”邵賽賽說。

開源是一件偉大的事情,讓全世界的智慧能夠匯合在一起,並無償地反饋給全世界。但對於開源社區的貢獻者來說,做社區貢獻,就像是一個人默默去爬山,既孤獨又艱鉅。曾經邵賽賽在做Spark貢獻時,很長的一段時間裏,國內沒有多少人在做這個,相互間不多的交流也僅限於在社區上,說不辛苦,那是不客觀的。

但他的開源貢獻最終帶來的長期價值也是巨大的,甚至不僅僅是一個Apache Spark PMC的頭銜所能概括的。對有志於做開源的人來說,“路漫漫其修遠兮,吾將上下而求索”。

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