天天看點

大教堂與集市 筆記

  • 出于商業利益和市場競争的考慮,軟體制造商本能地希望把源碼保護起來,而黑客出于分享、貢獻和不重複勞動的考慮,下意識認為開放源碼是更道德的事情,他們考慮的是如何更好更快地做事,考慮的是如何建立一個自由自在、為所欲為的軟體世界,而不是如何把源碼藏起來牟利

  • 大教堂和集市模式
    • 傳統大型軟體公司的開發模式就像艱難而緩慢的大教堂建造工程,它有着嚴密的管理和封閉的集中式結構,但是在創新上、生産力上和bug控制上卻落後于集市模式

    • 集市模式是一種并行的、對等的扁平化開發結構,其參與者大多來自于網際網路上的志願者,結構松散,來去自由,就像是一個亂糟糟的集市,但就是這樣的組織形式,卻取得了像Linux這樣令人驚歎的成功

  • 開源軟體系統性的利用開放式開發和分布式評審(peer review),不僅降低了成本,還提高了軟體品質。
  • 好的軟體作品,往往源自于開發者的個人需要
  • 優秀的程式員知道寫什麼,卓越的程式員知道改寫(和重寫)什麼。
    • 卓越程式員們有一個很重要的特征是"建設性懶惰",他們知道人們要的是結果而不是勤奮,而從一個部分可行的方案開始,明顯要比從零開始容易得多。
  • 計劃好扔掉一個吧,遲早你會這麼做。《人月神話》
    • 在你第一次把問題解決的時候,你往往并不了解這個問題,第二次你才可能知道怎麼把事情做好。是以,如果你想做對事情,至少再做一次。
  • 如果你有正确的态度,有趣的事情自然會找到你
  • 當你對一個程式不再感興趣時,你最後的責任就是把它交給一個可以勝任的接棒者。
  • 把你的使用者當成開發合作者對待,如果你想讓代碼品質快速提升并有效排錯,這是最省心的途徑。
    • 使用者越多越能有效對抗系統的複雜性。
  • 早釋出,常釋出,傾聽使用者的回報。
    • linus在持續不斷地激勵和回報者他的黑客/使用者,用自我滿足感激勵他們,用持續改進(甚至每天都有改進)回報他們。
  • 如果有足夠多的beat測試者和合作開發者,幾乎所有問題都會很快顯現,然後自然有人會把它解決。
    • 隻要眼睛多,bug容易捉。–Linus定律
    • Linus定律道出了大教堂模式和集市模式最關鍵的差別

      • 在大教堂建築者看來,bug是棘手的、難以發現的、藏在深處的,要經過幾個人數月的全心投入和仔細檢查,才能有點信心說已經剔除了所有錯誤。而釋出間隔越長,倘若等待已久的釋出版本不完美,人們的失望就越發不可避免

      • 對于集市模式而言則完全不同,在上千名合作開發者熱切鑽研每個新釋出版本的情況下,你可以假定bug是淺顯易找的,或者至少可以很快變得淺顯易找。是以你會頻繁釋出以獲得更多的修正,其副作用是良性的:即使釋出中有些小問題,你也不會損失太多

    • 透明性和同行評審對控制作業系統複雜度很有價值
    • Linux實驗版和穩定版分開的做法:風險對沖,解決要命的最後期限問題。
      • 程式員在需求清單不能調整和最後期限不能拖延的雙重要求下,會完全顧不上品質,整個工作很可能會變成一團亂麻。放寬這兩個限制的任意一個,都會使進度變得可行

      • 一種辦法是保持最後期限不變而讓需求清單靈活一些,允許某些到最後期限時任未完成的需求舍棄,這基本就是"穩定版"核心采用的政策

      • 另一個辦法是設定好想要的需求清單,并在其完成時釋出,這基本是"實驗版"核心的政策。這個進度政策也叫"好了告訴我"(wake me up when it's done),這不僅能夠保證最高品質,而且就平均而言,與"保守"和"激進"的進度安排相比,它的傳遞時間更短

      • 過程透明。
    • 閉源代碼,測試者從外往内看,開發者從内往外看,各自局限于自己的角色。開源代碼讓測試者和開發者發展出一個共享的表達模式并進行有效交流。一個僅描述外部可見症狀的bug報告,和一個直接關聯到源碼的分析性bug報告,對開發者而言簡直就是天壤之别。
    • 在快速釋出模式下,如果多人同時嘗試對bug進行追蹤,很可能某人立刻就發現了最短路徑,然後在比别人短的時間内逮住bug。項目維護人員看到後會釋出一個新版本,這樣在其他更難路徑上追蹤該bug的人就可以停下來,以免浪費更多的時間。
  • 聰明的資料結構配上愚蠢的代碼,遠比反過來要好的多。
  • 如果你把beat測試者當做最珍貴的資源對待,他們就會成為你最珍貴的資源.
  • 僅次于擁有好主意的是,識别來自使用者的好主意,有時後者會更好。
    • 如果你發自内心的謙遜,并承認你欠别人很多,你将很快發現世界會這樣對待你:他們認為是你發明了整個軟體,而且你對自己的天賦有着得體的謙遜。
  • 通常,那些最有突破性和最有創新力的解決方案來自于你認識到你對問題的基本觀念是錯的。
  • 設計上的完美不是沒有東西可以再加,而是沒有東西可以再減

  • 任何工具都應具備預期内的功能,但一個偉大的工具能給你帶來預期外的功能。
  • 寫網關類軟體時,盡可能不要幹擾資料流,而且絕不要扔掉資訊,除非接收方強迫你這麼做。
  • 當你的語言還遠不是圖靈完備(Turing-Complete)的時候,文法糖會讓你受益良多。
  • 系統的安全性隻取決于它所擁有的秘密。謹防虛假的秘密。
  • 集市模式的必要條件:
    • 項目上司人必須要有高度的設計直覺和聰明才智。
      • 承諾:項目能運作;讓潛在的合作開發者相信,這個軟體在可預見的未來,能演變成一個非常棒的東西。
    • 集市項目的協調人或上司人必須要有很好的人際交往和溝通能力。
  • 想要解決一個有趣的問題,先去找一個讓你感興趣的問題。
  • Linux黑客們緻力于最大化的"效用函數",其目的并不是經典意義上的經濟價值,而是自我滿足和黑客聲望這些無形的東西

  • linux項目:把一個個黑客的利己動機盡可能牢靠地牽系到一個艱巨的任務目标上,而這個目标隻有在衆人持續的合作之下才能完成。
  • 如果開發協調者有一個至少像Internet這樣好的溝通媒介,并且知道如何不靠強制來上司,那麼多人合作必然強于單兵作戰。
    • 并不是說個人眼光和遠大志向不再重要,相反,沖在開源軟體最前沿的人,正是憑借自己的眼光和才華而發起項目,并通過建構有效的志願者社群将之發揚光大。
  • "玩"是創造性活動中最具經濟效能的工作模式

  • 文化禁忌:
    • 分化一個項目會遇到強大的社會壓力,隻有在極為必要的情況下才使用,而且要重新命名和做出大量的公開解釋
    • 在沒有項目主持人認可的情況下釋出更新是令人不悅的,除非是特殊情況(如本質上不重要的移植bug修複)
    • 在項目曆史、緻謝表或維護清單中移除某個人的名字是絕對不可以的,除非當事人明确表示同意。
  • "集市模式"開發社會動力學:送出禮物競争社會地位。
  • 禮物文化并不是對物質稀缺的适應,而是對物質充裕的适應。
  • 在禮物文化中,社會地位并不取決于你控制了什麼,而是你給予了什麼。
  • 什麼是好的禮物?
    • 如果它不能像我所預期的那樣工作,那就不是好的–不管它多麼聰明和有原創性。
    • 在心智層的拓展性工作要比在某功能域内(對現有作品)的重複性工作好,原創性工作比功能複制要好。
    • 能進入主要發行版的作品比不能進入的好。在所有主要發行版中都包含的作品最令人尊敬。
    • "使用"是最真實的贊美,類别殺手比同類競争者好。
    • 相比那些隻挑有趣和簡單工作的人,長期緻力于艱苦和乏味工作(如調試、寫文檔)的人更令人欽佩。
    • 重要的功能擴充比低層次的修補好。
  • 開源開發團體在生産力上會遠遠超過(特别是長遠地看,創造性作為生産力倍乘器的作用會越來越重要)同等規模與技能的閉源程式員團體,後者受稀缺性報酬激勵但同時也導緻動力不足。
  • 程式的使用價值是它作為一個工具、一個生産率倍乘器的經濟價值;程式的銷售價值是它作為一個可買賣商品的價值。
  • 将軟體”免費”所帶來的的效果,看來會強制我們進入以服務費為主導的世界

  • “使用價值”資助模型:僅靠使用價值就能持續資助開源開發的模式。
    • 成本分攤:Apache伺服器,由一個通過網際網路連接配接起來的團隊做出來的,他們明白,與其很多人都搞類似的開發,不如将自己的工作投入到公共代碼中。通過這種方式,他們不僅能獲得“自己做一個Web伺服器”的好處,還會因為大規模的同行評審而獲得強大的排錯效果。以更低的成本提供更好的産品。
    • 風險分擔:開源不僅可以降低成本,還能分散和降低成本,還能分散和減輕風險。所有參與方都發現,源碼的開放與合作社群(由多個獨立的收入來源資助)的存在,提供了一種故障保險(fail-safe)機制,其本身的經濟價值足以吸引資金支援。【不懼怕開發者的離開等】
  • 開源能擷取的非直接銷售價值
    • 占領市場
    • 硬體糖霜:靠硬體盈利,軟體本身不是盈利中心。開源軟體,讓其他開發者開發驅動程式。
    • 銷售附加價值。Red Hat:通過內建和測試,向客戶提供一個不斷發展的作業系統,保證它是商業級的,并可以以該品牌其他作業系統向後相容。
    • 附屬物政策:馬克杯、T恤
    • 當下收費,未來免費:以封閉許可證的形式釋出軟體的二進制和源碼,在許可證中,禁止免費的商業使用,保證釋出一年後,軟體遵循GPL條款。
    • 軟體免費,品牌收費:開源一項技術,保留其測試套件或相容性标準,然後賣品牌認證,如果某公司的産品通過認證,則表明他們對該技術的實作和其他擁有該品牌認證的産品是相容的。
    • 軟體免費,内容收費:向使用者提供可信的資訊
  • 基礎架構的開放和共享,使每個參與者都得到競争上的好處,一是參與者能以較低成本生産出可擴充的産品和服務,而是參與者的市場定位可以讓客戶放心,他們很少面臨這樣的尴尬境遇:由于供應商更改了戰略和戰術,導緻産品被抛棄而無人照管

如何成為一名黑客

  • 黑客的态度:黑客解決問題并做出東西,他們相信自由,并自願地互相幫助。
    • 這個世界充滿了迷人的問題等待人們去解決

      • 成為一名黑客,你必須要對解決問題、磨砺技能和智力挑戰有着基本的興奮感。這樣你的黑客能量才不會被社會上的其他東西慢慢耗盡。
    • 不要解決一個問題兩次

      • 創造性頭腦是無比珍貴的有限資源,它們不應該浪費在重新發明輪子這種事情上,尤其還有這麼多迷人的新問題在哪裡等着。
      • 想要成為一名黑客,你必須相信:其他黑客的思考時間是很寶貴的–它是如此寶貴,以至于共享資訊、解決問題并将解決辦法饋贈給其他黑客幾乎就是你的道德義務,這樣,其他黑客就可以解決新問題,而不是永無休止地重複解決老問題
    • 無聊和乏味是有害的

      • 黑客應該不會覺得無聊,也不會去做那些乏味而愚蠢的重複性工作,如果這種事情發生,意味着他們沒有做隻有他們才能做的事–解決新問題。
      • 要當一名黑客,你必須得非常相信這點,并希望盡可能

        将那些無趣的事情自動化

        ,這不僅是為自己,也是為其他人(尤其是其他黑客)。
    • 自由是好事

      • 黑客是天生反權威的。如果有人能指令你,他就能讓你做不成你特别想做的事。是以無論什麼地方出現權威主義傾向,你都要與之抗争,以免他們壓迫你和其他黑客。
    • 态度不能代替能力。
      • 要想成為黑客,就需要配上這些态度。但僅憑态度也不行,

        你需要智慧、實踐、投入和努力

  • 黑客技能
    • 程式設計語言 Lisp C
    • 學習和使用Linux,閱讀源碼
  • 地位之于黑客文化:給出你的實踐、創造力、提現技能的成果。
    • 寫開源軟體。
      • 最核心、最傳統的。寫出其他黑客認為有趣或有用的程式,然後将程式源碼釋出給整個黑客文化。
      • 在黑客圈,最受尊敬的偶像是這樣一類人:他們寫出大型的、能滿足廣泛需求的程式,并将程式貢獻出來,使得任何人都能使用這些程式。
    • 協助測試和調試開源軟體。
      • 找一個感興趣的項目。并試着做一個beta測試員。從幫助測試到幫助排錯,再到幫助修改,這是一個很自然的過程,會從中學到很多。以後也會有人樂意幫助你。
    • 釋出有用的資訊。
      • 收集、過濾那些有用并且有趣的資訊,将他們放到網頁或者類似FAQ清單的文檔中,并讓人們容易看到
    • 幫助做一些基礎工作。
      • 志願者。幫忙管理郵件清單等
    • 服務黑客文化本身。
      • 比如,寫一本關于"如何成為黑客"的精準入門教程

繼續閱讀