軟件開發如同木匠做桌子

jopen 12年前發布 | 5K 次閱讀 軟件開發

[本文英文原文鏈接:It Should Only Take You a Few Hours... ]

桌子

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

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

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

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

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

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

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

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

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

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

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

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

來自: 外刊IT評論
 本文由用戶 jopen 自行上傳分享,僅供網友學習交流。所有權歸原作者,若您的權利被侵害,請聯系管理員。
 轉載本站原創文章,請注明出處,并保留原始鏈接、圖片水印。
 本站是一個以用戶分享為主的開源技術平臺,歡迎各類分享!