天天看點

《開源思索集》一聊聊Github的方法與哲學

本節書摘來異步社群《開源思索集》一書中的第1章,作者: 莊表偉 責編: 楊海玲, 更多章節内容可以通路雲栖社群“異步社群”公衆号檢視。

開源思索集

開源已經是一場革命,但是在開源的發展曆史上,其實依然在不斷地發展,甚至革命。簡單地回顧一下:

最早的開源,僅僅是把自己的源代碼開放出來,或者讓别人用錄音帶複制帶走,或者放在server上供人下載下傳。

再後來,關于這個項目的代碼與功能,就浮現出來了兩個問題:代碼大家都能改,如何整理與彙總各自的工作成果?功能大家都有想法,最後應該做成什麼樣?

于是,源代碼版本管理工具與各種線上讨論的方式,開始了一輪又一輪的演進。具體的項目就不再一一列舉,但是其中最大的一次創新,就是從集中式版本管理走向了分布式版本管理。如果說github有自己的哲學,它的來源,首先是分布式開發的理念。

分布式開發與分布式版本管理:沒有一個核心的版本庫,意味着沒有任何一個人、任何一個組織是核心,每個人都可以在自己的機器上保留全部的版本樹,并且不斷發展自己的版本。一個人的代碼,既可以貢獻給a,也可以貢獻給b,一切自由。

随着linux開發的哲學,被逐漸地傳播開來,才有了github的出現。最初的github的最大的貢獻,是将這種無中心,多分支的開發模式,web化、常态化了。一鍵就能夠fork自己的分支,然後可以跟原有的分支毫無關聯,也可以非常友善地送出pull request,這就帶來了更加頻繁的分裂,**使得分裂常态化了。

**

原來的開源社群,我改了代碼,希望能夠貢獻給社群,需要穿越種種障礙,如果社群不接受,最後我隻能逼不得已,自己開一個新的分支,變成一個新的項目。在分裂是異常的狀态下,分裂是罪惡的,是不應該的,是會帶來陣痛的。當分裂變得常态化,pull request也變得常态化,分分合合,以每天n次的速度發生,恰恰因為如此,它不再是一種罪惡,而是一種健康的、向上的、以更快速度進步的模式。大家不再是在一個版本下,各自貢獻,而是在各自的版本下,獨立發展,想分就分,想合就合。

這背後折射出的哲學,可以這樣總結:如果将分裂視為罪惡,而力圖用各種方法去阻止,總會碰到各種各樣的新的困難。如果反其道而行之,通過技術手段盡可能地友善分裂與合并,這反而是滿足了真正的需求。(阻止分裂,其實是在壓抑開發過程中存在的真實需求)是以,盡力滿足真實的需求,才有可能獲得成功。

随着這樣的模式,變得常态化,然後github才被稱為一個社群,fork/pull request也從一種開發行為變成了一種社交行為。于是,程式員們發現,最好的交流,正是通過源代碼來交流,一切的講道理都不如用源代碼來講道理。這恰恰是程式員們最習慣,也最喜歡的一種交流方式。這當然也是因為滿足了真實的需求。甚至我們可以說,github創造了真實的需求。

随後的事情是順理成章的,程式員們泡在github上,自然想在github上做所有的事情,這不必再過多分析了。

繼續閱讀