這是《開源共同體-- 程序員的烏托邦》演講的文字稿,大家可以點擊下文章最後視頻鏈接觀看完整的演講。
大家好,今天很高興能和大家分享《開源共同體,程序員的烏托邦》這一話題。
首先介紹一下我自己, 我叫姜寧,我是華爲開源能力中心的技術專家。
在加入華爲之前,我曾擔任紅帽軟件的主任軟件工程師。我是2011年成爲Apache軟件基金會的會員,2015年成爲基金會的孵化導師。2020年我發起了Apache 北京本地社區這個組織,2022年當選ASF董事會董事。
在開始正式話題之前,大家先看一個我們團隊傾情出演製作的一個小短片。
看完短片,大家是不是已經心動了呢?
這裏我把 OpenSource Community 翻譯成開源共同體,共同體中生產者和消費者之間的地位是平等的。這張照片是 ApacheCon 最吸引開發者的一項活動 hackthon,就是在大會幾天的時間裏,大家聚集在這樣的圓桌周圍面對面對進行編程活動。
我2007年第一參加 ApacheCon 的時候,就被這樣一羣開源項目開發人員的忘我的技術熱情所感染,一連寫了兩天的代碼,那種用思維碰撞帶來的頓悟與編碼實現的愉悅讓我至今難以忘懷。
在我眼中的開源共同體是一羣熱愛開源的人,他們對開源項目或者與開源相關的活動很高的熱情。他們專注於自己感興趣的領域,他可能是某個開源項目的用戶,也可能是某個開源項目的核心開發人員,對項目的共同的興趣愛好讓他們走到一起,開發出足以改變世界的開源軟件。
在這裏我們一起交流編程心得,一同協作開發項目,在這裏你不但能夠得到高手的幫助,而且還能爲新人提供指導。好的開源共同體會傾聽更多用戶的反饋,並以可持續發展的方式,不斷打磨需求,創建更加好用的軟件。
加入到開源共同體中你將結交很多志同道合的朋友,快速提升你的技能,收穫比你想象更多的成就感。
接下來我將爲大家分享我在開源共同體中的一些親身經歷。
16年前,我和 XFire項目的創始人,後來CXF的聯合創始人Dan Diephouse在北京閒聊。當時他才25歲,就開始在世界各地爲大家提供XFire的諮詢服務了。 我驚奇地發現他當年大學的專業居然是化學,而不是計算機。
要知道從頭獨立寫一個WebService 框架對一個科班出生的人來說也是一件非常難的事,何況是對一個非計算機專業的人來說。
我非常好奇地向他詢問起他創建項目的整個過程,
他說,他是在酒吧裏開始寫這個項目的,當時得到了開源圈裏面很多高手的幫助。
開源共同體是一個程序員不斷成長的好地方
我當時因爲工作的關係剛剛踏入開源圈,不是很理解他說的這些話,沒有體會到開源共同體的強大魔力。只是覺得他比較幸運,可能是因爲美國的開發環境比較好吧。
因爲當時國企的空餘的時間比較多,而我所在的部門做的業務就是用C++來寫一個通信服務程序,爲了提升技能,我開始研究開源的ACE這個C++網絡編程編程框架。
通過閱讀用戶手冊,學習軟件架構模式,讓我對ACE 框架有了一點基本的認識。
但因爲在公司內部沒有其他人可以交流,我需要花費大量時間讀文檔,看教程,挖代碼,要知道這麼多的代碼不是小說,如果不是帶着問題去讀代碼的話,很難有所收穫。
我花費了大量時間研讀代碼,但是我的學習進展卻非常緩慢。
直到我有幸真正加入到開源項目開發後,我才逐步體會到融入開源共同體會對個人的成長巨大幫助。
與公司封閉的環境不同, 在開源共同體中,我可以找到與開源項目相關所有信息,並且隨時能得到項目資深成員的指導和幫助。
在開源共同體中, 資深開發者非常關注我提交的代碼,經常review我的代碼,並提出中肯的建議。我現在還記得第一次代碼合入到主幹的艱辛與喜悅,
在大神們的幫助下,通過一行一行的代碼切磋,我一步一步地加深了對項目的理解,同時還能不斷提升着我的編碼技能。 爲了提升效率保證開發質量,資深的程序員通常會編寫好用的測試框架, 搭建持續集成測試環境。這樣大家提交的代碼都有各項測試幫我們保駕護航。
有了好用的自動化測試系統,項目release,我都可以從容應對而不再焦慮。
開源共同體的成員往往來自不同的公司,我們很難用傳統的升職加薪的方式來激勵大家。
在ASF是如何工作的這篇博文中提到了 Meritocracy 這個詞 。我們把這一基本的原則稱爲 “任人唯賢,精英治理”, 就是按照功績來賦予權力,而不是靠金錢或者地位來獲取權力。在開源共同體這種公開的環境下,大家的技術影響力,是由日常點滴的貢獻積累起來的功績。 這種把代碼提交權或者是投票權賦予給實際幹活的人的治理方式特別適合志願者團體。
Meritocracy鼓勵讓大家站在整個共同體的福祉角度來想問題,在這種指導原則下,整個組織合作氛圍就會特別好,大家不會只關注自己的眼前的蠅頭小利而拒絕合作,也不會因爲沒有得到授權就放棄掉。如果一件事情對整個組織有很大的意義的話,那麼這件事情就值得去做。因爲這麼做所積累功績可以贏得大家的認可和尊重。
大家通過爲組織做貢獻贏得開源共同體的認可的方式來積累功績。一旦你贏得了足夠的功績,你可以成爲開發者團隊中的一員。你將會獲得代碼庫的提交權限,得到大家的認可,成爲項目的 Committer。
開源共同體是一個虛擬的組織。開源共同體中成員是非常樂意幫助他人的。如果你遇到有關開源軟件的問題,可以直接在郵件列表中尋求幫助。 在這裏你可以直接和軟件開發者近距離溝通,獲得免費的指導。
日常參與開源項目開發的過程中,我的主要工作就是每天查看郵件列表, 參與大家的討論,幫助大家解決問題。 從問問題到回答問題,通過參與這樣的討論我感覺我的能力在不斷得到提升。
我在開源共同體的實際經歷,真正的向大家證明了之前Dan所說的:
開源共同體是一個程序員不斷成長的好地方。
如果說開源代碼是程序員之間相互饋贈的禮物, 開源共同體就爲這些相互饋贈的賦予了生命,把它們變了在共同體內部能夠流動增值的知識。
在這裏大家能夠相互交流,相互幫助,共同成長,開源共同體是最好的的編程練兵場。當我們開發了一個新的功能,很快就能收到用戶的反饋。 在這裏,開發者可以通過幫助用戶解決問題,擴展自己的視野,提升自己的技術水平。
在這裏,你總能找到和你有着同樣興趣愛好,願意分享問題和解決方案的小夥伴,共同成長。
年輕的程序員也許會迷茫選擇什麼樣技術路線,當然沒人有時間把所有的技術路線都探索一遍之後,再選擇哪個技術是最適合他的。
當然開源共同體有很多大神級的程序員, 他們都樂意扮演項目導師的角色,無條件地將他們的經驗和建議傳授給年輕的程序員,幫助他們找到技術拓展方向。
有時候資深程序員的分享與指導可以非常輕鬆地點燃大家的熱情。
我就非常幸運地能和James Strachan這位卓越的程序員共事。 每當他在談論一個新的熱點技術,他就會滔滔不絕地聊起來你能從他的眼睛裏看到那種異常興奮的火光,他對技術的熱情深深地感染了我。
從他發明的Groovy, 到將面向領域的特定語言到Apache Camel的企業集成模式的實現,再到最近的JenkinsX 。每一個十年他都會發起一個新的項目,用他敏銳的技術洞察,引領業界的潮流。直到今天我還能清晰地回憶起他在2013年Dublin團隊會議期間他興奮地向我們介紹Kubernetes時的場景。
開源共同體讓我能夠近距離地與這些卓越的程序員一起工作,在日常的開發中,James 不但給予我很多代碼的指導,而且通過郵件列表幫我解答了很多疑惑。
他真的擴展了我的眼界,帶領我去追求最新的前沿技術。
從參與開源項目,到融入開源共同體其實並不難。你可以通過項目的官網, README文件獲得與項目相關的基本信息,以及如何爲項目進行相關的貢獻。
基於這些開放共享的信息,大家可以結合自己的使用場景做很多微創新。在這裏協作的意識是被放大的,大家非常樂意以公開的方式毫無保留提出自己的問題,分享自己的經驗, 在這裏有價值的話題是會得到非常快速的響應和反饋的。
有時候當我在項目的郵件列表介紹了新提交的功能, 幾天之內就能收到來自共同體用戶的使用反饋。 有時候,如果我們遇到了一個棘手的技術問題, 大家會在郵件列表或者github issue上面進行激烈地討論,並嘗試找到更好的解決方案。
依託互聯網基礎設施,以及成熟高效的開發環境,開源項目團隊人員在異地實現高效地協作。無論是問題解答,提案討論,亦或是代碼審查, 你總會能在共同體中獲得志同道合小夥伴的反饋。也許你們未曾謀面,也許你們素昧平生,但是你總能得到這些人最真誠的幫助和反饋。
接下來我想分享一下ASF前董事會主席 Craig Russell的開源共同體黃金原則
你待人如人之待你、謙遜有禮、達誠申信、虛懷若谷、敢於擔當、求同存異、同心協力、共創未來。
當人們覺得自己在是團隊中重要的,有價值的一份分子,他們是會更加協作,會更具有創造力,並且更加願意爲團隊付出更多。
綜上所述,開源共同體真的是程序員的烏托邦。
對於想加入這一烏托邦的小夥伴,我有以下幾點建議:
1.在進入開源項目之前需要學會傾聽
閱讀項目的官網頁面,quick start,閱讀郵件列表或者issue的歷史討論,瞭解大家是如何提問題的,如何進行代碼評審,如何解決問題的。
2. 理解規則
通過閱讀貢獻者手冊,社區行爲規範瞭解社區規則,通過閱讀代碼評審日誌學習代碼編程規範。
3. 展示工作
學會和共同體成員進行溝通,儘量使用郵件列表,issue 公開地進行討論。不要害怕公開展示自己的設計和代碼,要知道眼睛越多,bug無處躲藏。
4. 注意細節
在提問過程中,分享你所做的嘗試,給出詳細的日誌和錯誤信息。展示新功能,需要提供完善的上下文信息,給出詳細的指導說明。
5. 贏得尊重
樂於助人,不止侷限在代碼貢獻上。需要站在共同體的角度上思考問題,承擔繁瑣但又必要的工作:例如修訂文檔,舉辦會議, 協助社區宣傳。 建立良好的人際關係,贏得共同體的尊敬。
本文分享自微信公衆號 - WeDataSphere(gh_273e85fce73b)。
如有侵權,請聯繫 [email protected] 刪除。
本文參與“OSC源創計劃”,歡迎正在閱讀的你也加入,一起分享。