從技術小白成長為有著Apache member、Apache spark PMC、Apache Livy PPMC等頭銜的國際頂級開源大牛,邵賽賽用了十年。
在回答是什么讓這位鵝廠技術大牛十年如一日貢獻開源的時候,他的回答是“愛和堅持”。
剛接觸Apache開源社區時,邵賽賽時常看著郵件列表陷入迷茫,這種上世紀90年代流行的互聯網溝通方式,在20年后已經讓新生代的程序員們有些看不懂了。如何訂閱、回復還有郵件要發給誰,都是他感到疑惑的問題。
更加令他疑惑的還有各種英文縮寫,雖然認識每個英文字母,但組合在一起卻像是天書,過了好一段時間他才搞明白,原來“LGTM”是“looks good to me”,而“PTAL”是指“please takea 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貢獻時,很長的一段時間里,國內沒有多少人在做這個,相互間不多的交流也僅限于在社區上,說不辛苦,那是不客觀的。
但他的開源貢獻最終帶來的長期價值也是巨大的,甚至不僅僅是一個ApacheSpark PMC的頭銜所能概括的。對有志于做開源的人來說,“路漫漫其修遠兮,吾將上下而求索”。