軟體開發如同木匠做桌子

發表於2012-03-01

英文原文:It Should Only Take You a Few Hours…,編譯:外刊IT評論

做一張桌子看起來十分的簡單。任何人都可以做,不是嗎?找個大塊的四方形木板,四個等長的木頭柱子,四個釘子和一個錘子。把四個柱子釘到四方板的四個角上,你就做成了一個桌子。噹噹噹!

現在來讓一個真正的木匠為你打造一張桌子。首先他要花時間跟你討論桌子的用途和功能——用在室內還是室外,廚房還是餐廳,主要用來展示還是使用,它 需要能夠承受多大的負載。然後他需要確定使用什麼樣的材料——軟木還是硬木,用木板還是三合板還是鐵軌枕木。然後他會研究桌子的風格——桌邊的截面設計, 桌腿底座設計,桌腿是按在中央還是四角。這最後,他才去動手做這張桌子,他花大量的時間去斜截,鑿眼,契合所有的連線點,安裝撐條,使用高質量的粘膠,木 釘,螺釘,他要檢查表面平整,打磨它,著色,封蠟,拋光——打造出一張能夠引以為豪的桌子。看起來是一大堆的事情要做,不是嗎?它只是一張桌子,不是嗎?

兩種做桌子的方法存在著很多不同之處,你看出來了沒有?

只用了四個釘子的桌子看起來很毛糙,它不穩,因為桌腿不牢固,桌腳不平,頂多能用一個星期,它的一個腿就會扭斷,根本承受不起一個鹽罐子的重量。木 匠的桌子看起來更好,好用而且美觀,它很牢固,不搖晃,桌腿經過矯正,直的,很平,沒有稜角,能用很久,你完全可以放心的在它上面擺上一頓豐盛的晚餐跟一 群客人享用。你更想要哪個?

當人們談論起軟體,大多數人想像的工作量很像第一張桌子的建造過程。只需要建立一個資料庫,填上一些資料,畫出一些介面,這就完了,你就得到了一個 軟體產品。我無論如何都想不出人們這樣的一種認識是怎麼產生的。也許是人們用慣了Excel——“我可以用Excel做這些,所以程式設計應該很簡單”。什 麼?

開發軟體不容易。需要做很多的工作。非常像那個木匠做桌子的方式。作為設計師和程式設計師,我們需要理解業務、使用者用例,以及產品功能。我們需要討論和 理解誰將要用它,它有什麼功能,它如何和其它軟體整合,它要用在什麼地方,資料量如何,等等,等等。我們然後才去花大量的時間搭建架構,確保它能承受使用者 和資料負載壓力,要能夠升級和擴充套件,要能處理大資料量情況(例如單表負載)。我們然後需要更多的時間寫出有質量的、可讀的、可維護的程式碼,測試每個元件, 確保它們正確、快捷的執行,改正bug,清除瓶頸(在資料庫表模型上使用正確的結構和關聯)。我們還要使用更多的時間來把這些元件組合到一起,確保每個接 口都正確的呼叫,確保錯誤都被捕捉到,確保介面設計可用,簡單,美觀(桌子的切截,鑽孔,契合,打磨,著色,拋光)。最終,我們交付客戶一個完整的可信賴 的產品,一個符合需求的產品,一個我們和你們都引以為豪的產品。

我相信,木匠很少會遇到像程式設計師需要面對的那樣讓人抓狂的事。也許他的客戶也會抱怨做這個桌子花了太長的時間,或造價太高。也許他的客戶並沒有說桌子的用途或應該是個什麼樣,然後大聲的抱怨它跟他從未說出的期望的樣子不一致。也許他們的客戶會瞪著他說做這樣的桌子只需要幾塊木板和幾個小時,木匠做桌子已經有幾千年的歷史了,這種桌子能有什麼不同。也許他們的客戶會說這很簡單,所以應該很快,很便宜,魔術般的做出來,我猜測他們是這樣想的。

我們的客戶完全也是這樣。而且幾乎每次都這樣。從沒例外過,最初給我們新需求時說“這隻需要你花幾個小時的時間…”,或“你可以這樣做…這樣更簡單”,或“你只需要簡單的把它改成…”。什麼?

對軟體產品增加新功能可不像多釘一顆釘子或多加一個柱子。我們需要理解新功能的形式和功用,建立它,測試它,寫文件,確保新增加的功能不會影響現有 的系統。如果我們不這樣做,軟體就會做出錯,到處是bug,不能正確的執行,給使用者來帶來大量的問題。有很多軟體專案都是這樣,任何用過這種有問題的軟體 的人都不會信任它,甚至不願意使用它。就像那個搖晃的桌子。

如果你需要一個新功能,儘管提,但你要做好準備跟我們的木匠——程式設計師們認真仔細的討論它。我們會用正確的方案開發你要的應用,保證讓它正確的執行,一直正確的執行。你到我們這裡來是想要有質量、可信賴的軟體,就像是你要從木匠那得到一個有質量的桌子。

千萬不要告訴我們這樣多簡單,多容易——除非你自己做過。如果你真的認為能既迅速又簡單的做出來,你自己試試。幹吧,拼裝出一個搖晃的桌子。

如果你希望得到一個好的產品,你要理解明白開發需要時間和技能,有很多你根本想象不到的問題在裡面,工匠們也是人,是有感情的,一個好的產品是一個永遠讓人快樂的事,值得我們付出努力和耐心,這樣,它將成為我們所有人能引以為豪的東西。

相關文章