為非我發明症辯護 In Defense of Not-Invented-Here Syndrome

作者:周思博 (Joel Spolsky)
譯:Paul May 梅普華
Sunday, October 14, 2001
屬於 Joel on Software, https://www.joelonsoftware.com/2001/10/14/in-defense-of-not-invented-here-syndrome/

猜謎時間到了。

Copley_Square.jpg

1.程式碼重用是:

a)好的
b)不好的

2.重新發明輪子是:

a)好的
b)不好的

3.非我發明(Not-Invented-Here)症是:

a)好的
b)不好的

當然囉,每個人都知道應該要善用別人的工作成果。所以正確答案當然就是 1(a) 2(b) 3(b)。

確定嗎?

別說得那麼快!

非我發明(NIH)被公認為典型的管理病狀,指某個團隊拒絕使用不是自己創造的技術。NIH 症的患者顯然只是很小家子氣,只因為沒辦法居功就拒絕為整體組織的利益貢獻(對吧?)。你可以在當地大書店的沈悶商業史區找到一堆故事,說愚蠢的團隊花了幾百萬美元和 12 年的時間,卻只做出某些只要 9.99 元就能在 Egghead(譯註:線上零售商)買到的東西。任何人只要有注意過去三十年間電腦程式設計的進展,就會知道重用是所有現代電腦系統的聖杯。

沒錯,我也是這樣想的。所以我在做第一版 Visual Basic for Applications 的專案經理時,就很小心的聯合了四個(注意是四個哦)微軟內不同的團隊,要做出 Excel VBA 裡的定製對話盒。整個想法非常複雜而且各部門間相互牽連。有個叫 AFX 的團體在製作某種對話盒編輯器。然後我們會利用 OLE 團體新寫的程式把一個應用程式嵌入在另一個程式裡。而 Visual Basic 團隊則是提供裡面的程式語言。經過幾星期的協商,AFX 和 OLE 還有 VB 團隊原則上都同意這個作法。

我去到 Andrew Kwatinetz 的辦公室。他當時是我的經理而且我知道的一切都是他教的。「Excel 開發團隊絕對不會接受這個方法,」他說:「你知道他們的格言嗎?『找出相關性,然後去掉。』他們絕對不會接受這麼不獨立的東西。」

真-有-趣-啊。這事我竟然不知道。我想這解釋了 Excel 團隊有自己的 C 編譯器的原因了。

現在我確定很多讀者已經笑到在地上打滾。「微軟真是笨啊,」你會這樣想「他們拒絕用別人的程式碼,而且只是為了一個產品還自己做編譯器。」

別說得這麼快,老弟!Excel 團體粗魯的獨立心態意味著他們總是能如期上市,而且出來的程式碼都有一致的高水準。另外他們的編譯器(由 80 年代開始的)會產生 pcode,所以不必修改就能在 Intel 電腦和麥金塔 68000 晶片的系統上執行。pcode 也使得執行檔在 Intel 平台上只有原本的一半大小,所以由軟磁載入時能更快啟動而且需要較少的記憶體。

「找出相關性,然後去掉。」當你在一個非常非常優秀,有著偉大程式師的團隊工作時,其他人的程式坦白說都是有蟲的垃圾,何況其他人都沒法子準時上市。如果你是法國藍帶學院的主廚,需要新鮮薰衣草時你會自己種而不是去菜市場買,因為有時候新鮮的薰衣草可能會缺貨,有時候店家可能拿不新鮮的薰衣草假裝新鮮賣給你。

事實上最近的網路熱潮中,一堆裝內行的企業作家說未來的公司會完全虛擬化,公司變成只有幾個時髦的傢伙待在起居室裡喝著白葡萄酒,所有事情都外包出去做。這些換氣過度的「夢想家」並沒有注意到市場機制是為所增加的價值而付錢的。一個客廳加上兩個雅痞,向 A 公司買一套電子商務引擎,拿 B 公司做的貨來賣,再找 C 公司處理庫存和送貨,客戶服務則交給 D 公司,這種作法實在沒有增加什麼價值。事實上如果你曾經把很關鍵的業務拿去外包,就會瞭解外包其實是個地獄。不能直接控制客戶服務,客服就會爛到不像話,爛到像某人在網誌上寫的,想在電話公司找個人(任何人都好)去做些最最簡單的事都辦不到。如果物流外包出去,你的物流包商或許對即時送達會有不同的認知,而你的客戶就會不太高興,可是你一點辦法都沒有,因為重新找一個物流包商要花三個月。何況事實上你根本不會知道客戶不高興,因為他們找不到你,因為你設立了一個外包的客戶服務中心,宗旨就是不要讓自己聽到客戶的聲音。至於你買的電子商務引擎?絕對不可能像 Amazon 用 obidos 做的那麼有彈性,obidos 可是人家自己寫的(否則 Amazon 跟買那種東西的競爭者相比就沒有優勢了)。另外也沒有現成的 web 伺服器在速度上比得過 Google 自己親手製作並最佳化的伺服器。

很不幸的這個原則似乎與「重用程式碼好,重新發明輪子壞」的想法直接衝突。

我能給的最好建議是:

如果是核心的事業功能,不管是什麼都要自己來做。

找出你的核心事業能力和目標,然後在公司內執行。如果是家軟體公司,寫出優越的程式碼就是成功的方法。公司餐廳和光碟壓製都可以外包出去。如果是家藥廠,就去寫藥物研究的軟體,可是不要寫自己的會計軟體。如果是家網路會計服務公司就寫自己的會計軟體,不過別想做雜誌廣告。如果有客戶的話就千萬不要把客戶服務外包出去。

如果你在開發電腦遊戲,而且地圖(plot)部份是你的競爭優勢,大可去用其他廠商提供的 3D 程式庫。不過如果遊戲特色是很酷的 3D 特效,3D 程式部份最好自己來。

我懷疑這個規則唯一的例外,就是當你自己的人完全比不上別人,不管自己做什麼都會失敗。沒錯,這種地方很多。如果是這種情況,我就幫不上忙了。

這些網頁的內容為表達個人意見。
All contents Copyright © 1999-2006 by Joel Spolsky. All Rights Reserved.