開源維護者Lawso:最讓人火大的是哪類人?
在物理世界,路與橋等基礎設施的建設,人們都非常重視。在思想觀念上,比如說“要想富,先修路”,已深入人心。在資金保障上,人們也毫不吝嗇,比如說,亞投行的建立、“一帶一路”戰略的確立,都是把基礎設施的重視,提升到非常顯赫的高度。
可是,在數字世界呢?
支撐整個數字世界“縱橫捭闔”的各類“基礎設施”——軟件,特別是占據大半壁江山的開源軟件,比如,大到你常用的Linux、Android,中到大數據常玩的Hadoop、Spark、HBase,小到Accumulo、ACE、Bahir、Bigtop、Coveralls、Travis、Sauce Labs、Kafka、Knox、Lens、Libcloud、Logging、ZooKeeper等等,數以萬計的、你可能都叫不上名字的開源軟件,是它們,正以“潤物細無聲”地方式,讓你每天可以愉快地“玩耍”著手機,瀏覽著新聞、刷著朋友圈、逛著淘寶網……,這些數字基礎設施的背後勞作,你曾經重視過嗎?
天上不會無緣無故地“掉下來個林妹妹”!那麼,又是誰,在背後默默無聞地維係著這些數字基礎設施的運轉呢?
當然是那些“意氣風發”、“技高八鬥”、“樂於助人”的開源項目參與者:Contributor(對開源項目提交過部分有用代碼的貢獻者)和Committer(對開源項目核心模塊和係統架構開發有較大代碼貢獻的技術大咖)。
但“意氣風發”、“技高八鬥”、“樂於助人”等,這些都是光鮮的表象。作為社會人,這些開源項目維護者,他們和普通人,一樣有七情六欲、一樣有喜怒哀樂,一樣有五味雜陳!
Nolan Lawson,就是這樣的人!
他是微軟的資深員工,空閑時維護幾個開源項目(前後大致有7年光景),還打理著自己的個人網站。近日,他在自己的個人網站,吐槽了自己在維護開源項目時的“酸甜苦辣”。
一把辛酸淚,誰解其中味啊?
每次登錄GitHub時,Nolan總能看到一大堆令人頭大的、數以百計的維護通知(notifications),等待自己處理,此情此景,都好似有一萬匹草泥馬,在胸中奔騰。
善良如你,Nolan也想提供幫忙,可是白天上了一天班,已經累得像狗一樣好不好,晚上回到家,心有餘而力不足啊。好不容易熬到周末,本想和自己的狐朋狗友,去郊外踏踏青、吹吹牛,扯扯淡,享受一下生活,可眼下費時費力的忙,到底幫還是不幫?內心好糾結。
這,就是一個開源項目維護者,時常麵臨的尷尬!
在維護開源軟件時,Nolan還會遇到各位形形色色的人群,具體說來如下幾類:
第一類人,他們用你的項目,可能由於某些API(應用程序接口)語焉不詳,他們比較困惑,於是來GitHub詢問。可令人惱火的是,他們貼出來的代碼,連個規整的格式都沒有。有沒有“同誌”有這樣的同感:別人寫的代碼,是天下最難懂的“閱讀理解”!特別是沒有注釋的情況下!
還有就是,可能是由於語言溝通的問題,導致很多問題的描述,理解起來異常困難。
How are you(怎麼是你)?How old are you(怎麼老是你)?
一番折騰,你可能還是不懂對方的問題是什麼?無奈的你,隻能甩給他某個文檔或某個教程給他,或者建議他去Stack Overflow和 Slack去試一試。
第二類人,他們在提問時,已經是怒氣衝衝了。他們會說,你丫咋還不回複他的問題。由於你提供的API有問題,已經浪費他生命中寶貴的兩個小時了!
最最讓人火大的就是TM這種人!這時的你,唯一能脫口而出的話就是:你大爺的,老子上輩子欠你錢嘛?
然而,對這種人,你不必浪費時間,要壓下怒火,然後禮貌但絕不想再次搭理的回複:“這是一個開源項目,由自願者維護,如果代碼有問題,請提交一個可驗證的測試用例或提交一個PR(Pull Request)。
言歸正傳,維護開源項目時,還會遇到第三類人。他們在使用開源項目時,可能會遇到一個非常常見的錯誤。其實,隻需翻翻文檔中的常見問答(Q&A),或查看一下以往的郵件列表,或花幾分鍾時間穀歌一下,度娘一下,一切都能輕易搞定。可他們偏偏任性不這樣,寧願做一個廉價的“伸手黨”!問你,問你,不停地問你!問你妹啊!
相比於“伸手黨”,第四類人就要好很多,他們就是普通的代碼貢獻者(contributor)。他們呢,小有名氣,猶如大俠,技藝高超,俠肝義膽,常常出沒於在各種論壇之中。有時,他們會就某個隻有內行才懂的議題,發起一個PR,並對其中的某個問題進行修複,然而由於這個議題過於複雜,以至於在他們的PR中,不得不用很大的篇幅來解釋他們的所作所為。
當你有點“稀裏煳塗”地認可這個PR之後,並回複LGTM(Look Good To Me),然後將其合並到主代碼庫。
但是,問題來了!
當你沒有充分評估某個PR,而將其合並到代碼主庫,最終會帶來很多不可預見的新問題。比如說,雖然測試用例通過,但項目的整體性能卻降低了10個數量級,這時你會抓狂的。再比如說,一旦合並某個PR後,也會對老用戶造成無盡的困擾。因為更新版的API發生了變化,老用戶依據這個開源項目解決問題的工作流程,可能也會發生變化。這種持續不斷地變化,會讓老用戶的體驗非常不好!
還有一類人,也屬於代碼貢獻者(Contributor),他們發現了項目中一個新的缺陷(bug),並做了修複。但實際上,這個bug其實你是知道的,它存在於該項目的某個子項目之中,然後當你告知他們,希望他們能在子項目裏去PR修複這個問題時,他們時常會“一騎紅塵”,再也不搭理你。
現在,在GitHub中,你看出了Contributor和Committer二者的區別了吧:Contributor是對開源項目做出過貢獻的人,他們有技術,有激情,但大多數Contributor的激情,常常會在一兩次貢獻之後,就“一瀉千裏”。而Committer則不同,他們是Contributor的升級版,有技術,也有激情,最重要的是,他們激情長青,會持續不斷地輸出貢獻
……
還有一類人,他們一開始就興致勃勃的開啟一個PR,但實際上,他們修正的問題,其實早已有其它維護者完美解決了,但他們現在還一片鬧騰,也是醉了!
還有一些人,他們的抱怨,的確是可以理解的。
你是知道的,由於開源項目維護者的精力,實在有限,有些問題,有可能幾個月過去了,都還沒有來得及去處理,所以他們的抱怨是:“3個月前,我谘詢你的問題,現在我自己搞定了。其實,解決的方案其實很簡單,那就是——哥不再用你的項目了。你的項目,俺用不起,還躲不起嗎?”
哇,哇,哇,一腔老血,奪口噴出……
此外,還有很多形形色色的開源項目使用者,他們的問題、他們的抱怨,他們的PR,源源不斷地來,解決一批,來一批,“此恨綿綿無絕期”。
這種場景常常令人非常沮喪,每次在維護一邊開源項目後,Lawson感覺“整個人都被掏空”了。在諸如GitHub這樣的開源平台上,存在這樣一個悖論,那就是:越成功,越受罰!
這是因為,如果你的開源項目越成功,別人關注、使用並反饋的問題,也就越多,你為此就會遭受“懲罰”——付出更多的時間、更大的精力,來維護這個項目!
如果簡單粗暴地不搭理這些問題吧,Lawson就會感到有很強的負罪感:可能自己的舉手之勞,就對別人有很大幫助呢?可自己再怎麼“舉手”,也隻有兩隻啊?數以百計的問題,撲麵而來,如果都是春風細雨般的處理,等不到“夏天”,自己的人生就可能“掛掉”。
但如果總是由“負罪感”驅動來完成某件事,你覺得自己的人生,還會灑滿陽光嗎?
到後來,Lawson開發了兩種策略,簡單說來,就是:
1)自衛,展開說就是“自我防衛”。不看(或者說不敢看)GitHub上的維護通知,而是通過郵件過濾、分類處理大部分通知,做到離線(offline)維護,一切等到有空再說。這是因為,在上班時間,你還要為老板每天給你發的薪水負責。在空閑時間,你還有媳婦要陪!
然後,盡量吸引更多的貢獻者(Contributor)參與其中,經過考核後,然後將部分Contributor提升為Committer。你知道嗎?日理萬機,其實是個貶義詞,那說明你笨,不懂得管理!
2)自慰,展開來說就是“自我安慰”。天下沒有白做的工。做了開源項目,自己不也受益匪淺嘛?首先來說,自己積累了不少社區聲望,由此,還登上大會上作報告,並在推特(Twitter)上,有數以萬計的粉絲,一唿百應。到後來,由於有了開源項目的經驗,還在微軟找到了工作,這一切,不都是拜開源所賜嗎?
嗯,其實吧,做開源,也挺好!
黑夜中,點燃了一支煙,深深地吸了一口,然後緩緩吐出,吹煙嫋嫋升起……
Lawson並不知道,維護開源,自衛和自慰,到底哪一個先來?
本文由北郵@愛可可-愛生活 老師推薦,阿裏雲雲棲社區組織翻譯。
文章原標題《What it feels like to be an open-source maintainer》,作者:Rachel Thomas,譯者:張玉宏(著有《品味大數據》一書),審校:我是主題曲哥哥。
最後更新:2017-04-16 22:02:11
上一篇:
教你如何在機器學習競賽中更勝一籌(下)
下一篇:
教你如何在機器學習競賽中更勝一籌(上)
《阿裏巴巴Java開發手冊》IDEA插件使用手冊
Tomcat部署項目修改瀏覽器上貓咪頭像
Oracle Dataguard在阿裏雲ecs上的測試
字符串查找和替換算法
APMCon 2017中國應用性能管理大會將於8月10日北京召開!
java SpringMVC mybatis 多數據源 代碼生成器 SSM java redis shiro ehcache
ORACLE union order by
【Java編碼規範】《阿裏巴巴Java開發手冊(正式版)》更新(v1.1.1版)
【雲計算的1024種玩法】搭建Linux學習平台
WCF技術剖析之三十三:你是否了解WCF事務框架體係內部的工作機製?[上篇]