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

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

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

剛接觸Apache開源社區(qū)時,邵賽賽時??粗]件列表陷入迷茫,這種上世紀90年代流行的互聯(lián)網(wǎng)溝通方式,在20年后已經(jīng)讓新生代的程序員們有些看不懂了。如何訂閱、回復還有郵件要發(fā)給誰,都是他感到疑惑的問題。

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

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

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

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

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

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

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

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

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

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

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

第二階段是committer(提交者),committer能夠?qū)ontributor貢獻的代碼或文檔提交到代碼的分支里去,并且日常review代碼,幫助將patch盡快“核”進去,維護項目更好地發(fā)展。

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

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

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

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

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

“你找不到更好的可以貢獻的東西了,也不知道做什么好,有的人可能就放棄了,但經(jīng)歷一段時間的摸索和尋找,你會逐漸發(fā)現(xiàn)有一些潛在的可以投入的點,可以做出貢獻,這兩種狀態(tài)會周期性的交替出現(xiàn)。”在邵賽賽看來,成為Apache member,最重要的并不是技術要有多牛,而是熱愛這個社區(qū),愿意在社區(qū)上做更多的貢獻,幫助社區(qū)的項目更好的發(fā)展。

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

“慢工出細活”

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

比如一名contributor發(fā)現(xiàn)了一個問題,他首先要分析這個問題到底是什么,分析出原因后,要去說服社區(qū)的大佬,因為自己分析出來的原因可能并不是深層次的原因,要繼續(xù)分析。真正的原因分析出來后,還要做出解決方案,而且不是短平快的解決方案,是相對長期的解決方案。

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

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

邵賽賽認為,目前國內(nèi)開源和國外開源比較大的區(qū)別,是國內(nèi)外對開源的理解不同。國內(nèi)絕大多數(shù)人或企業(yè)對開源的理解,僅限于把代碼放出去,讓別人知道這個代碼是我或我們組織開源的,認可這個代碼很厲害,這樣就完了。開源之后,可能就沒有持續(xù)的貢獻了,開源的回饋或收益很低,或者是只有影響力層面的回饋,這就是國內(nèi)開源絕大多數(shù)時候的現(xiàn)狀。

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

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

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

但國內(nèi)并非沒有做好開源的潛力,比如目前在開源領域非?;钴S的騰訊,本身就擁有著海量的數(shù)據(jù)需要處理,這對其內(nèi)部技術的要求極高。騰訊同樣從開源社區(qū)獲取了不少的幫助,這些對問題的解決方案如果反饋到開源平臺,也會推動社區(qū)的發(fā)展。另一方面,騰訊在大數(shù)據(jù)領域的基礎技術已經(jīng)基本完善和成熟,因此也有更多的意愿,去做更加前沿的技術研發(fā),這也是大公司獨有的優(yōu)勢。

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

三年過去,目前騰訊已經(jīng)對外開源了140+個項目,有數(shù)千位貢獻者,Star 數(shù)超過40萬,開源貢獻居于全球前列。在內(nèi)部騰訊已組建和孵化了117個開源協(xié)同小組,涵蓋了計算、存儲、數(shù)據(jù)等所有互聯(lián)網(wǎng)技術基石。全公司內(nèi)部代碼開源率達到85%,不僅給騰訊帶來巨大的效能提升和成本節(jié)約,同時通過騰訊云不斷助力越來越多的生態(tài)伙伴,并源源不斷將經(jīng)過內(nèi)部大量業(yè)務沉淀和檢驗的優(yōu)質(zhì)項目對外開源。

比如,致力于大數(shù)據(jù)領域的天穹Oteam,將各事業(yè)群的大數(shù)據(jù)最佳實踐復制到了各個場景,實現(xiàn)平臺互通,功能復用,大幅提升了通用性能與資源利用率。

做開源的“愛與堅持”

做開源需要怎樣的特質(zhì)?

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

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

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

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

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

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

開源是一件偉大的事情,讓全世界的智慧能夠匯合在一起,并無償?shù)胤答伣o全世界。但對于開源社區(qū)的貢獻者來說,做社區(qū)貢獻,就像是一個人默默去爬山,既孤獨又艱巨。曾經(jīng)邵賽賽在做Spark貢獻時,很長的一段時間里,國內(nèi)沒有多少人在做這個,相互間不多的交流也僅限于在社區(qū)上,說不辛苦,那是不客觀的。

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

(免責聲明:本網(wǎng)站內(nèi)容主要來自原創(chuàng)、合作伙伴供稿和第三方自媒體作者投稿,凡在本網(wǎng)站出現(xiàn)的信息,均僅供參考。本網(wǎng)站將盡力確保所提供信息的準確性及可靠性,但不保證有關資料的準確性及可靠性,讀者在使用前請進一步核實,并對任何自主決定的行為負責。本網(wǎng)站對有關資料所引致的錯誤、不確或遺漏,概不負任何法律責任。
任何單位或個人認為本網(wǎng)站中的網(wǎng)頁或鏈接內(nèi)容可能涉嫌侵犯其知識產(chǎn)權或存在不實內(nèi)容時,應及時向本網(wǎng)站提出書面權利通知或不實情況說明,并提供身份證明、權屬證明及詳細侵權或不實情況證明。本網(wǎng)站在收到上述法律文件后,將會依法盡快聯(lián)系相關文章源頭核實,溝通刪除相關內(nèi)容或斷開相關鏈接。 )