看到里面說道Linus以重用 Minix(一個用于 P C 機的迷你型 U N I X 類操作系統)的代碼和理念作為開始,引領幾千名散布在全球各地的開發者們,利用業余時間,僅僅是通過 I nternet 這種脆弱的合作,就鬼斧神工般地造就了一個世界級的操作系統。
這突然讓我想到小米在出手機前的MIUI,就適配市面上一些主流的機型,每周發布(Linux當時也是每周發布),讓很多用戶刷機來用,及時發現和提出問題,并且提出一些有價值的建議。記得當時買了一部摩托的Defy,刷了MIUI之后覺得系統好用了很多,基本的撥號、短信、通訊錄都好用很多,雖然問題也不少,但這種參與互動的感覺以及本身有很多兩點的功能就吸引用戶投入,自愿當小白鼠,自愿奉上自己的建議。 當然這個和Linux的開源合作不一樣,但總有些共通處。
書中提到作者在遍尋一個好用的郵件客戶端未果,著手寫一個時(準確說的是在現有的好的開源代碼上完善一個),總結了幾點:
- 好的軟件作品,往往源自于開發者的個人需要。但太多的軟件開發人員并不需要也不熱愛他們正在開發的軟件,他們把編程當差事,為的只是拿薪酬。Linux世界里可不是這樣——也許這可以解釋為什么 Linux社區里原創軟件的平均質量是如此之高。
- 優秀的程序員知道寫什么,卓越的程序員知道改寫(和重用)什么。
- “計劃好扔掉一個吧,遲早你會這么做的。”(Fred Brooks,《人月神話》第11章)或者可以這么說:在你第一次把問題解決的時候,你往往并不了解這個問題,第二次你才可能知道怎么把事情做好。所以,如果你想做對事情,至少要再做一次。
- 如果你有正確的態度,有趣的事情自然會找到你。
- 當你對一個程序不再感興趣時,你最后的責任就是把它交給一個可以勝任的接棒者。
其中,對第2、3點有點感觸。
對于第2點,Mike Gancarz在《Linux/Unix設計思想》中曾經提到過軟件開發人員看完別人的解決方案時經常覺得自己也可以做得更好,于是花費大量的時間去重新造輪子,事實上不一定超越現有的,何況也耽誤了他們做其他的事情。我想,除非僅僅是為了練手,不然,在正當途徑下不要為了證明自己很牛就從零開始去做,大可借用現有的源碼來改造提升(除非現有成果真的是爛的一塌糊涂),甚至買一些合算的商用組件集成到項目中也可以。例如,我們在做一個項目時,因為客戶需要做很多的統計匯總的報表,但這個不是我們的長項,也不適合花太多人力和時間成本。以前的做法是讓一些本身就不很懂業務的項目經理帶著初級的開發人員做出來一個配置超級麻煩、功能簡陋的模塊。后來的人要去看懂維護這段代碼很痛苦,何況功能本身就遠遠不夠用。后來的項目漸漸采用市面上比較成熟的報表軟件,集成到我們系統中,而且花在軟件上錢不比我們自己去開發維護來得多。
對于第3點,我記得項目中“會議系統”這部分的代碼相當亂,就像你不想走進一個多次未沖的廁所一樣。這是以前請的一個外派開發人員寫的, 本身就是趕工出來的東西,未經仔細考慮,而且也沒重構。但是很多人看到這部分代碼還是忍著臭味繼續用,本來就不是很多的代碼,其實如果好好重構甚至重寫一下,后期這一塊的維護和修改演進工作會順利省事很多。大家往往就看到當前為了修改一小個點,如果去重構整個代碼,感到很不劃算,懶得去動