posts - 23,comments - 66,trackbacks - 0
          Thinking in <The Cathedral and the Bazaar>? 《大教堂和集市》摘要
          by lostfire

          1. Every good work of software starts by scratching a developer's personal itch.好的軟件都起源于開(kāi)發(fā)者本身的切身之痛
          ??? 這一條或許可以解釋為什么開(kāi)源的程序往往質(zhì)量比較高。
          2. Good programmers know what to write. Great ones know what to rewrite (and reuse).優(yōu)秀的程序員知道寫什么程序,偉大的程序員知道改寫或重用什么程序。
          ??? 一個(gè)很簡(jiǎn)單的邏輯是,在現(xiàn)有基礎(chǔ)上工作總比什么都沒(méi)有強(qiáng)。很多人以為這樣很難創(chuàng)造出偉大的作品,其實(shí)不然,對(duì)于大多數(shù)軟件開(kāi)發(fā)來(lái)說(shuō),優(yōu)秀的軟件總是在不斷改進(jìn)中創(chuàng)造出來(lái)的,誰(shuí)能一步就做成偉大的作品呢?我認(rèn)為這里的關(guān)鍵思想是軟件要以用為本,軟件不是藝術(shù)品,雖然偉大的軟件看起來(lái)如此的完美,以至于創(chuàng)作的人常常將其當(dāng)成藝術(shù)品來(lái)看待。軟件開(kāi)發(fā)的目的就是要滿足人的需求,只不過(guò)優(yōu)秀的設(shè)計(jì)比拙劣的設(shè)計(jì)更容易達(dá)到這個(gè)目標(biāo)而已。
          3. ``Plan to throw one away; you will, anyhow.'' (Fred Brooks, The Mythical Man-Month, Chapter 11)計(jì)劃拋棄一種途徑吧,因?yàn)槟銓?lái)一定會(huì)這么做的。(選自《人月神話》)
          ? 針對(duì)一個(gè)問(wèn)題, 在尚未作出第一個(gè)解法前, 你通常并不真正了解這個(gè)問(wèn)題. 也許第二次的時(shí)候你才能充分了解怎麼做才對(duì), 所以即使你想做對(duì)一件事, 但起碼你要準(zhǔn)備從第一次做起.
          4. If you have the right attitude, interesting problems will find you.如果你有正確的觀念,你就會(huì)發(fā)現(xiàn)很多有趣的問(wèn)題。
          5. When you lose interest in a program, your last duty to it is to hand it off to a competent successor.當(dāng)你對(duì)一個(gè)問(wèn)題失去興趣的時(shí)候,你的最后一個(gè)責(zé)任就是把它移交給一個(gè)勝任的繼承者。
          6. Treating your users as co-developers is your least-hassle route to rapid code improvement and effective debugging.把使用者當(dāng)成合伙的開(kāi)放者是進(jìn)行快速代碼改進(jìn)和有效debug的最有效途徑。
          ??? 事實(shí)上, 開(kāi)放源碼世界的所有人, 幾乎都嚴(yán)重低估了因使用者增多而產(chǎn)生用以對(duì)抗系統(tǒng)復(fù)雜度的力量, 直到 Linus Torvalds 明白地揭露了這一點(diǎn).在開(kāi)源界很多軟件的使用者同時(shí)就是開(kāi)發(fā)高手,他們有更好的直覺(jué)和開(kāi)發(fā)能力,絕對(duì)是必須重視的力量。
          ??? 每一個(gè)成功的軟件幾乎都經(jīng)過(guò)若干次重寫或重構(gòu),而迫使重寫或重構(gòu)的原因幾乎全部來(lái)源于使用者的需求,他們高瞻遠(yuǎn)矚又精準(zhǔn)的需求迫使開(kāi)源的軟件不得不做的越來(lái)越棒。
          7. Release early. Release often. And listen to your customers.早早的發(fā)布,經(jīng)常發(fā)布,并傾聽(tīng)使用者的意見(jiàn)。
          ??? 其實(shí)現(xiàn)在我們很多熟知的公司或軟件都自覺(jué)不自覺(jué)的通過(guò)這種方式來(lái)提高聲望,比如PPlive,比如gmail,使用戶產(chǎn)生一種期待和參與感,十分有利用提高軟件的知名度,培養(yǎng)忠實(shí)的用戶群體。
          ??? 看看Eric對(duì)Linus的評(píng)價(jià):
          雖然 Linus 是一位很厲害的高手 (在我們之間, 有多少人能夠完整地寫出一個(gè)具有商品品質(zhì)的作業(yè)系統(tǒng)核心呢? ), 但 Linux 並不是一個(gè)空間先進(jìn)的觀念, Linus 也并非(或者說(shuō)至少目前還不是) 如 Richard Stallman 或 James Cosling (NeWS 和 java 的創(chuàng)世者)這樣的天才創(chuàng)新者, 而我個(gè)人認(rèn)為他是一位天才工程師, 他有避免程序錯(cuò)誤及避免程序發(fā)展掉入死胡同的第六感, 和找到兩點(diǎn)間最省力路徑的技巧. 事實(shí)上,整個(gè) Linux 的設(shè)計(jì)中, 我們可以看到 Linus 表現(xiàn)出的品質(zhì)和他保守而簡(jiǎn)單的設(shè)計(jì)取向.
          8. Given a large enough beta-tester and co-developer base, almost every problem will be characterized quickly and the fix obvious to someone.如果有足夠的beta測(cè)試者和合作開(kāi)發(fā)者基礎(chǔ),幾乎每一個(gè)問(wèn)題都可以很快的定位,并且對(duì)某些人來(lái)說(shuō)修復(fù)他們是很顯而易見(jiàn)的事情。
          ??? 足夠多的人來(lái)看程序,所有的問(wèn)題都變得很淺顯。
          ??? 我想這就是教堂模式和市集模式最主要的不同, 以教堂建造者的觀點(diǎn)來(lái)看程序發(fā)展, 程序錯(cuò)誤和相關(guān)問(wèn)題難以處理,并潛伏在深處, 需要數(shù)個(gè)月的工夫仔細(xì)查看來(lái)找到他們, 而這對(duì)程式開(kāi)發(fā)者的自信少有加許. 發(fā)布的周期越長(zhǎng), 一旦經(jīng)長(zhǎng)期等待的新版本發(fā)布后便不如預(yù)期完美, 使用者的失望也越大.
          ??? 開(kāi)發(fā)者和單純使用者對(duì)于軟件模型的認(rèn)識(shí)是不同的,開(kāi)發(fā)者從內(nèi)向外看,而使用者從外向里看,因而造成溝通上的問(wèn)題。但開(kāi)源模式就避免這個(gè)問(wèn)題,大家都在代碼級(jí)別上有效的交流。在《人月神話》里邊Brook談到了增加人員帶來(lái)的溝通的開(kāi)銷是十分巨大的,這個(gè)問(wèn)題在開(kāi)源模式大大減少了一個(gè)人同其他所有人這種溝通,避免了溝通開(kāi)銷的問(wèn)題。
          9. Smart data structures and dumb code works a lot better than the other way around.輕巧的數(shù)據(jù)結(jié)構(gòu)同笨拙的代碼搭配比相反的組合要好。
          10. If you treat your beta-testers as if they're your most valuable resource, they will respond by becoming your most valuable resource.如果你把beta測(cè)試者當(dāng)作你最寶貴的資源,那么他們也會(huì)用成為你最寶貴的資源來(lái)回報(bào)你。
          ???? 看看Eric使用的方法吧:
          1) 我盡早并經(jīng)常發(fā)布新版本 (幾乎至少每十天就發(fā)表一次, 甚至在開(kāi)發(fā)的高峰期, 一天一次)
          2) 對(duì)于每一位與我討論 fetchmail 的人, 我把他們列入 beta 測(cè)試者的名單 , 所以名單越來(lái)越長(zhǎng).
          3) 每當(dāng)我開(kāi)發(fā)出新版本, 一定發(fā)出像聊天般的通知給 beta 測(cè)試者名單上的人, 鼓勵(lì)他們一起來(lái)參與這個(gè)項(xiàng)目.
          4) 而我也總是傾聽(tīng) beta 測(cè)試者的心聲, 詢問(wèn)他們對(duì)于這個(gè)程序的設(shè)計(jì)上有無(wú)意見(jiàn), 并且回應(yīng)他們送來(lái)對(duì)程序的修補(bǔ)和回饋.

          11. The next best thing to having good ideas is recognizing good ideas from your users. Sometimes the latter is better.下一個(gè)獲得好點(diǎn)子的最好的方法是識(shí)別那些從使用者中反饋的好主意,更后到來(lái)的往往更好。
          ??? 你將會(huì)發(fā)現(xiàn)一件很有趣的事: 如果你很誠(chéng)實(shí)并很謙虛地知道你欠人多少, 那么全世界都會(huì)認(rèn)為你發(fā)明了全部, 而且對(duì)你先提出的天才創(chuàng)作, 也會(huì)以為你非常謙虛, 這些我們可以在 Linus 身上得到印證.
          12. Often, the most striking and innovative solutions come from realizing that your concept of the problem was wrong.通常最顯著的最有創(chuàng)新性的革命都來(lái)自于意識(shí)到你對(duì)于問(wèn)題概念理解的錯(cuò)誤。
          ??? 當(dāng)你在開(kāi)發(fā)程序的過(guò)程中撞到障礙物時(shí) -- 也就是當(dāng)你發(fā)現(xiàn)很難想出下一步要怎么修復(fù)時(shí), 通常是反省的時(shí)候了, 但不是問(wèn)是否已找到正確的答案, 而是我們提出正確的問(wèn)題了么?也許問(wèn)題需要再重新整理一番.
          13. ``Perfection (in design) is achieved not when there is nothing more to add, but rather when there is nothing more to take away.''"完美不是已經(jīng)沒(méi)有東西可以加入而是沒(méi)有東西可以移除"--from Andrew S. Tanenbaum<Modern Operating system>
          14. Any tool should be useful in the expected way, but a truly great tool lends itself to uses you never expected.用所期待的方式使用任何工具都應(yīng)該有用,但是真正偉大的工具會(huì)讓你以從來(lái)未曾預(yù)想的方式使用。
          ???? 這個(gè)是一個(gè)多么偉大的境界,或許可以好比說(shuō)你在解析了一千種表達(dá)式以后創(chuàng)造了正則表達(dá)式的解析器而你卻不知道將來(lái)誰(shuí)會(huì)怎樣使用它,如果說(shuō)這個(gè)說(shuō)法不太恰當(dāng),那么在Linux中如此多的簡(jiǎn)單的工具,完成了超出其本意的工作或許可以說(shuō)明問(wèn)題。或許可以假設(shè)你做一個(gè)東西出于你的一個(gè)本意但它太經(jīng)典了以至于用戶在它基礎(chǔ)上開(kāi)發(fā)了許多種的新用法,或許我現(xiàn)在用gmail寫blog就是gmail這個(gè)team不曾預(yù)想過(guò)的吧。
          15. When writing gateway software of any kind, take pains to disturb the data stream as little as possible—and never throw away information unless the recipient forces you to! 在寫任何網(wǎng)關(guān)軟件時(shí),盡可能不去弄亂數(shù)據(jù)流,永遠(yuǎn)都不要丟棄任何信息,除非接受者強(qiáng)迫你這么做。
          當(dāng)CPU和存儲(chǔ)都變得便宜時(shí), 設(shè)定的語(yǔ)法的簡(jiǎn)潔已不再是我們的目標(biāo), 現(xiàn)在的情況是: 一個(gè)電腦語(yǔ)言中符合人性易於使用的重要性已超過(guò)節(jié)約電腦的計(jì)算資源.
          16. When your language is nowhere near Turing-complete, syntactic sugar can be your friend.當(dāng)你的語(yǔ)言沒(méi)有嚴(yán)謹(jǐn)?shù)浇咏鼒D靈完整性的時(shí)候,最好采用平易的語(yǔ)法。
          17. A security system is only as secure as its secret. Beware of pseudo-secrets.一個(gè)安全系統(tǒng)是否安全取決于它保存的秘密,不要偽裝秘密。

          集市模式的條件:
          不能用集市模式來(lái)建立軟件,只能用來(lái)測(cè)試,除錯(cuò)和改進(jìn)。
          要讓你的設(shè)計(jì)使人能夠相信你的軟件將來(lái)會(huì)大有可為。
          事實(shí)上,協(xié)調(diào)者是否具有天才設(shè)計(jì)并不重要,重要的是他要能夠識(shí)別別人給出的好主意。
          開(kāi)放源碼社區(qū)對(duì)于名譽(yù)的重視給人一種微妙的壓力,如果無(wú)法勝任項(xiàng)目以后的發(fā)展,那么就不要去啟動(dòng)。
          領(lǐng)導(dǎo)人良好的溝通技巧。
          18. To solve an interesting problem, start by finding a problem that is interesting to you.為了解決一個(gè)有趣的問(wèn)題,開(kāi)始尋找一個(gè)對(duì)你來(lái)說(shuō)有趣的問(wèn)題吧。
          19: Provided the development coordinator has a communications medium at least as good as the Internet, and knows how to lead without coercion, many heads are inevitably better than one.給開(kāi)發(fā)協(xié)調(diào)者一個(gè)至少像Internet一樣好的溝通媒介,并且知道如何不用強(qiáng)制來(lái)領(lǐng)導(dǎo),那么許多人一定比一個(gè)人要好。
          注:
          1,藍(lán)色字體部分是在下的一些理解。
          2,詳細(xì)文本,F(xiàn)rom:http://www.catb.org/~esr/writings/cathedral-bazaar/cathedral-bazaar/index.html
          posted on 2006-07-19 17:09 rd2pm 閱讀(2026) 評(píng)論(0)  編輯  收藏 所屬分類: system design

          只有注冊(cè)用戶登錄后才能發(fā)表評(píng)論。


          網(wǎng)站導(dǎo)航:
           

          主站蜘蛛池模板: 长宁区| 大荔县| 浦城县| 特克斯县| 沙田区| 乌鲁木齐市| 海兴县| 兰溪市| 双牌县| 信阳市| 古蔺县| 防城港市| 射洪县| 济源市| 呼伦贝尔市| 芦溪县| 上思县| 永康市| 航空| 四川省| 泊头市| 吉隆县| 锡林郭勒盟| 娱乐| 武穴市| 拉萨市| 昌邑市| 长宁县| 鄂伦春自治旗| 德江县| 姚安县| 广宗县| 四子王旗| 奉节县| 韩城市| 思茅市| 长武县| 黄骅市| 安国市| 竹北市| 杂多县|