軟件開發(fā)如同木匠做桌子
做一張桌子看起來十分的簡單。任何人都可以做,不是嗎?找個(gè)大塊的四方形木板,四個(gè)等長的木頭柱子,四個(gè)釘子和一個(gè)錘子。把四個(gè)柱子釘?shù)剿姆桨宓乃膫€(gè)角上,你就做成了一個(gè)桌子。當(dāng)當(dāng)當(dāng)!
現(xiàn)在來讓一個(gè)真正的木匠為你打造一張桌子。首先他要花時(shí)間跟你討論桌子的用途和功能——用在室內(nèi)還是室外,廚房還是餐廳,主要用來展示還是使用,它 需要能夠承受多大的負(fù)載。然后他需要確定使用什么樣的材料——軟木還是硬木,用木板還是三合板還是鐵軌枕木。然后他會(huì)研究桌子的風(fēng)格——桌邊的截面設(shè)計(jì), 桌腿底座設(shè)計(jì),桌腿是按在中央還是四角。這最后,他才去動(dòng)手做這張桌子,他花大量的時(shí)間去斜截,鑿眼,契合所有的連接點(diǎn),安裝撐條,使用高質(zhì)量的粘膠,木 釘,螺釘,他要檢查表面平整,打磨它,著色,封蠟,拋光——打造出一張能夠引以為豪的桌子。看起來是一大堆的事情要做,不是嗎?它只是一張桌子,不是嗎?
兩種做桌子的方法存在著很多不同之處,你看出來了沒有?
只用了四個(gè)釘子的桌子看起來很毛糙,它不穩(wěn),因?yàn)樽劳炔焕喂?,桌腳不平,頂多能用一個(gè)星期,它的一個(gè)腿就會(huì)扭斷,根本承受不起一個(gè)鹽罐子的重量。木 匠的桌子看起來更好,好用而且美觀,它很牢固,不搖晃,桌腿經(jīng)過矯正,直的,很平,沒有棱角,能用很久,你完全可以放心的在它上面擺上一頓豐盛的晚餐跟一 群客人享用。你更想要哪個(gè)?
當(dāng)人們談?wù)撈疖浖蠖鄶?shù)人想像的工作量很像第一張桌子的建造過程。只需要?jiǎng)?chuàng)建一個(gè)數(shù)據(jù)庫,填上一些數(shù)據(jù),畫出一些界面,這就完了,你就得到了一個(gè) 軟件產(chǎn)品。我無論如何都想不出人們這樣的一種認(rèn)識(shí)是怎么產(chǎn)生的。也許是人們用慣了Excel——“我可以用Excel做這些,所以編程應(yīng)該很簡單”。什 么?
開發(fā)軟件不容易。需要做很多的工作。非常像那個(gè)木匠做桌子的方式。作為設(shè)計(jì)師和程序員,我們需要理解業(yè)務(wù)、用戶用例,以及產(chǎn)品功能。我們需要討論和 理解誰將要用它,它有什么功能,它如何和其它軟件集成,它要用在什么地方,數(shù)據(jù)量如何,等等,等等。我們?nèi)缓蟛湃セù罅康臅r(shí)間搭建架構(gòu),確保它能承受用戶 和數(shù)據(jù)負(fù)載壓力,要能夠升級(jí)和擴(kuò)展,要能處理大數(shù)據(jù)量情況(例如單表負(fù)載)。我們?nèi)缓笮枰嗟臅r(shí)間寫出有質(zhì)量的、可讀的、可維護(hù)的代碼,測(cè)試每個(gè)組件, 確保它們正確、快捷的運(yùn)行,改正bug,清除瓶頸(在數(shù)據(jù)庫表模型上使用正確的結(jié)構(gòu)和關(guān)聯(lián))。我們還要使用更多的時(shí)間來把這些組件組合到一起,確保每個(gè)接 口都正確的調(diào)用,確保錯(cuò)誤都被捕捉到,確保界面設(shè)計(jì)可用,簡單,美觀(桌子的切截,鉆孔,契合,打磨,著色,拋光)。最終,我們交付客戶一個(gè)完整的可信賴 的產(chǎn)品,一個(gè)符合需求的產(chǎn)品,一個(gè)我們和你們都引以為豪的產(chǎn)品。
我相信,木匠很少會(huì)遇到像程序員需要面對(duì)的那樣讓人抓狂的事。也許他的客戶也會(huì)抱怨做這個(gè)桌子花了太長的時(shí)間,或造價(jià)太高。也許他的客戶并沒有說桌子的用途或應(yīng)該是個(gè)什么樣,然后大聲的抱怨它跟他從未說出的期望的樣子不一致。也許他們的客戶會(huì)瞪著他說做這樣的桌子只需要幾塊木板和幾個(gè)小時(shí),木匠做桌子已經(jīng)有幾千年的歷史了,這種桌子能有什么不同。也許他們的客戶會(huì)說這很簡單,所以應(yīng)該很快,很便宜,魔術(shù)般的做出來,我猜測(cè)他們是這樣想的。
我們的客戶完全也是這樣。而且?guī)缀趺看味歼@樣。從沒例外過,最初給我們新需求時(shí)說“這只需要你花幾個(gè)小時(shí)的時(shí)間…”,或“你可以這樣做…這樣更簡單”,或“你只需要簡單的把它改成…”。什么?
對(duì)軟件產(chǎn)品增加新功能可不像多釘一顆釘子或多加一個(gè)柱子。我們需要理解新功能的形式和功用,創(chuàng)建它,測(cè)試它,寫文檔,確保新增加的功能不會(huì)影響現(xiàn)有 的系統(tǒng)。如果我們不這樣做,軟件就會(huì)做出錯(cuò),到處是bug,不能正確的運(yùn)行,給用戶來帶來大量的問題。有很多軟件項(xiàng)目都是這樣,任何用過這種有問題的軟件 的人都不會(huì)信任它,甚至不愿意使用它。就像那個(gè)搖晃的桌子。
如果你需要一個(gè)新功能,盡管提,但你要做好準(zhǔn)備跟我們的木匠——程序員們認(rèn)真仔細(xì)的討論它。我們會(huì)用正確的方案開發(fā)你要的應(yīng)用,保證讓它正確的運(yùn)行,一直正確的運(yùn)行。你到我們這里來是想要有質(zhì)量、可信賴的軟件,就像是你要從木匠那得到一個(gè)有質(zhì)量的桌子。
千萬不要告訴我們這樣多簡單,多容易——除非你自己做過。如果你真的認(rèn)為能既迅速又簡單的做出來,你自己試試。干吧,拼裝出一個(gè)搖晃的桌子。
如果你希望得到一個(gè)好的產(chǎn)品,你要理解明白開發(fā)需要時(shí)間和技能,有很多你根本想象不到的問題在里面,工匠們也是人,是有感情的,一個(gè)好的產(chǎn)品是一個(gè)永遠(yuǎn)讓人快樂的事,值得我們付出努力和耐心,這樣,它將成為我們所有人能引以為豪的東西。
英文鏈接:It Should Only Take You a Few Hours...
原文鏈接:http://www.aqee.net/it-should-only-take-you-a-few-hours/
【編輯推薦】