1. 程式人生 > >讀書筆記-大教堂與集市

讀書筆記-大教堂與集市

內容和作者簡介

《大教堂與市集》(The Cathedral and the Bazaar)是埃裡克·斯蒂芬·雷蒙(Eric Steven Raymond)所撰寫的軟體工程方法論。《大教堂與集市》是開源運動的《聖經》,顛覆了傳統的軟體開發思路,影響了整個軟體開發領域。作者Eric S. Raymond是開源運動的旗手、***文化第一理論家,他講述了開源運動中驚心動魄的故事,提出了大量充滿智慧的觀念和經過檢驗的知識,給所有軟體開發人員帶來啟迪。

關於大教堂和集市,阮一峰的部落格有一篇精彩的筆記點評:http://www.ruanyifeng.com/blog/2008/02/notes_on_the_cathedral_and_the_bazaar.html

大教堂與集市

代表了兩種不同的開發模式:絕大多數商業公司所採用的是大教堂模式,而Linux世界所採用的是集市模式。

從fetchmail中學到的

1.好的軟體作品,往往源自於開發者的個人需要。

2.優秀的程式設計師知道寫什麼,卓越的程式設計師知道改寫(和重用)什麼。比如linux就是從unix核心改過來的。

3.“計劃好扔掉一個吧,遲早你會這麼做的。”(Fred Brooks,《人月神話》第11章)。這句話的意思是指在同質化的開源軟體庫當中,我們所做的第一個選擇,並不一定是最合適的選擇。但凡事都有一個過程,如果沒有第一次的選擇,就不會有後面更好的選擇。

4.如果你有正確的態度,有趣的事情自然會找到你。

5.當你對一個程式不再感興趣時,你最後的責任就是把它交給一個可以勝任的接棒者。

6.把你的使用者當成開發合作者對待,如果想讓程式碼質量快速提升並有效排錯,這是最省心的途徑。

7.早釋出,常釋出,傾聽使用者的反饋。

8.如果有足夠多的beta測試者和合作開發者,幾乎所有問題都會很快顯現,然後自然有人會把它解決。

9.聰明的資料結構配上愚笨的程式碼,遠比反過來要好得多。

10.如果你把beta測試者當做最珍貴的資源對待,他們就會成為你最珍貴的資源。

11.僅次於擁有好主意的是,識別來自使用者的好主意,有時後者會更好。

12.通常,那些最有突破性和最有創新力的解決方案來自於你認識到你對問題的基本觀念是錯的。

13.“設計上的完美不是沒有東西可以再加,而是沒有東西可以再減。”

14.任何工具都應具備預期內的功能,但一個偉大的工具能給你帶來預期外的功能。

15.寫閘道器類軟體時,儘可能不要干擾資料流,而且絕不要扔掉資訊,除非接收方強迫你這麼做。

16.當你的語言還遠不是圖靈完備(Turing-complete)的時候,語法糖會讓你受益良多。

17.系統的安全性只取決於它所擁有的祕密。謹防虛假的祕密。

18.想要解決一個有趣的問題,先去找一個讓你感興趣的問題。

19.如果開發協調者有一個至少像Internet這樣好的溝通媒介,並且知道如何不靠強制來領導,那麼多人合作必然強於單兵作戰。

集市模式成功的關鍵

Linux作業系統很好的踐行了集市模式的概念,一方面是因為他趕上了internet興起的東風,另外一方面,社群的領導力很關鍵,這種領導力不是強制的,集權的那種模式,而是非常民主和諧的一種溝通方式。

系統中每個個體都追求自身效用的最大化,在其共生的過程中,能夠自然建立起一種具備自我糾錯能力的秩序,這種秩序比任何集中式規劃都要精妙和高效。這裡,正是“共識原則”達成的地方。

開源***社會實際上是一種禮物文化

禮物文化並不是對物質稀缺的適應,而是對物質充裕的適應。產生於沒有生活必需品稀缺問題的人群中,在氣候宜人且物產豐富的生態環境中,我們經常可以在其原居民文化中觀察到禮物文化。我們也能在自身所處的社會中觀察到這點,特別是娛樂行業和富豪階層。

充裕性會使命令關係難以維持,會使交換關係變成無意義的遊戲。在禮物文化中,社會地位並不取決於你控制了什麼,而是你給予了什麼。

***的三個禁忌

如果一個人的作品被他人佔用或者亂改,他的聲譽就會受到不公平的損害;禁忌(以及相關習慣)傾向於阻止這種情況發生。

第一個是,專案不要有太多的分支。

第二個是,釋出流氓補丁。

第三個是,偷偷的將某人的姓名從專案中移除。

聲譽競爭

聲譽競爭模型解釋了一個常被引用的格言,即“自稱是***不代表你就是***,只有其他***認為你是***,你才是***”10。從這個角度看,所謂***,是一個通過貢獻禮物表現出他(或她)既擁有技術能力又懂得聲譽競爭如何運轉的人。對是否為***的判斷是一種感知和認同,只能由那在文化中已經做得很好的人給出。

好禮物的標準

1.如果它不能像我所預期的那樣工作,那就不是好的——不管它多麼聰明和有原創性。

2.在心智層的拓展性工作要比在某功能域內(對現有作品)的重複性工作好。

3.能進入主要發行版的作品比不能進入的好。在所有主要發行版中都包含的作品最令人尊敬。

4.“使用”是最真實的讚美,類別殺手比同類競爭者好。

5.相比那些只挑有趣和簡單工作的人,長期致力於艱苦和乏味工作(如除錯、寫文件)的人更令人欽佩。

6.重要的功能擴充套件比低層次的修補好。

開源專案的決策和衝突處理

從習慣上講,如果專案有合作開發者,“獨裁者”或專案領導人應該在關鍵決策上徵詢合作開發者的意見,尤其當決策關乎某個合作開發者所“擁有”(也即投入了時間併為之負責)的子系統時。一個有智慧的領導者,會認識到專案內部財產邊界的作用,不會輕易干擾或推翻子系統所有者做出的決定。

若想讓這些衝突解決機制生效,需要整個***社群願意執行它們,唯一可用的執行機制是“批判”和“放逐”——公開譴責那些破壞習俗的人,並拒絕和他們再次合作。

開源盈利模式

開源軟體不僅在技術上,而且也在經濟上挑戰著現有秩序。將軟體“免費”所帶來的效果,看來會強制我們進入以服務費為主導的世界,並讓我們清楚瞭解,閉源軟體一直以來依靠軟體銷售價值的做法是多麼脆弱。

開放原始碼的條件

1.可靠性/穩定性/可擴充套件性非常重要。

2.除了獨立的同行評審,沒有其他便捷易行的方法驗證設計和實現的正確性。

3.該軟體對客戶的業務非常關鍵。

4.該軟體建立或運轉一個公共計算或通訊基礎架構。

5.關鍵方法(或能實現同等功能的方法)屬於公共知識。

linux不會分裂

所有發行商都不得不在同一個公用開原始碼庫上操作。他們中的任何一個都不可能在事實上保持差異化,因為許可證(Linux程式碼的有效成長得益於此)要求他們將程式碼與其他各方共享。任何發行商一旦開發出一個新功能,所有競爭者都可以免費克隆它。

作者觀點的極端性

作者預測,windows企業級伺服器作業系統面世將不會成功,然而現實的情況是,目前windows伺服器作業系統已經發展成為雲作業系統,最新的版本已經迭代到了windows server 2019。所以作者對於閉源軟體的預測也存在偏頗之處。但因為作者是開源運動的死忠粉,所以這一點也能理解。

保持中立客觀和專注

專注就意味著不要遊走到其他有誘惑性的分支上,這一點是我經常覺得需要向***們強調的,因為我們過去的代表們表現出了強烈的意識形態化傾向,他們原本可以把精力集中在相對更有效和更務實的內容上。

***精神

***精神並不侷限在軟體文化中。人們會把***態度用在其他事情上,比如電子或音樂。事實上,對任何科學和藝術,在其最高水平的活動中都可以發現***精神。軟體***若是識別出其他領域的同道中人,也會稱他們為“***”。所以有人說***的天性其實是獨立於他們所從事工作的。

***與駭客的區別

有一群人高調聲稱自己是***,但他們並不是。這些人(大多是些毛頭小子)的主要目的是攻入他人計算機或者破解電話系統。真正的***稱他們為“駭客”(cracker),而且完全不想搭理他們。

如何成為***

1.這個世界充滿了迷人的問題等待人們去解決。

2.不要解決一個問題兩次。

3.無聊和乏味是有害的。

4.自由是好事。

5.態度不能代替能力。

***的基本技能

1.學習如何程式設計。如果你只懂一兩種語言,那你不會達到***的技能水平,甚至連程式設計師都稱不上——你需要學會以一種獨立於任何語言的一般方式來思考程式設計問題。要成為一名真正的***,你需要到達這樣的程度:你能把手冊上的東西和你已經知道的東西聯絡起來,從而可以在幾天之內學會一門新語言。學習程式設計就像學習如何寫好自然語言。最好的方式是閱讀大師們寫的東西,然後寫你自己的東西,多讀一些,多寫一些,再多讀些,再多寫些……如此迴圈往復,直到你寫的東西開始發展出你在經典中所體會到的力量和簡潔。

2.找一個開源UNIX,學習使用和執行它。

3.學習如何使用WWW和寫HTML。


更多資訊請關注下方微信公眾號:

qrcode_for_gh_7159fb337d37_258.jpg