建造原型的代價(jià)
???編寫(xiě)原型也是編寫(xiě)代碼。原型具有與編寫(xiě)代碼相同的慣性和成本,但是缺乏真正的軟件產(chǎn)品所要求的可靠性、穩(wěn)定性。軟件的原型類(lèi)似于建筑工程中的腳手架,而真正的軟件和石墻類(lèi)似,具有永久、可維護(hù)、可擴(kuò)展的特性。經(jīng)理們不愿舍棄能夠工作的代碼,即便是原型代碼。他們說(shuō)不出腳手架和石墻的區(qū)別。???編寫(xiě)原型要比編寫(xiě)真正的程序快得多。編寫(xiě)原型的費(fèi)用很低,因而極具吸引力。但是只有通過(guò)真正的程序才能建造可靠的產(chǎn)品,而原型是脆弱的平臺(tái)。原型是應(yīng)該拋棄的實(shí)驗(yàn)程序,但是實(shí)際上很少如此。經(jīng)理們查看原型后會(huì)問(wèn):“我們不能將它用于產(chǎn)品嗎?”對(duì)于程序員來(lái)說(shuō),通俗的回答是很困難的。經(jīng)理們奢望通過(guò)使用原型來(lái)節(jié)約數(shù)以月計(jì)的編程時(shí)間。
???良好編程的精髓在于后期的滿足感。先期辛勤工作,后期收獲。多數(shù)手工工作都非常昂貴。而程序一旦編寫(xiě)完畢,就可以運(yùn)行百萬(wàn)次而不需要額外成本。最昂貴的程序是只運(yùn)行一次的程序,最便宜的程序是運(yùn)行百萬(wàn)次的程序。但是,便宜程序中的任何問(wèn)題也會(huì)出現(xiàn)百億次。軟件的經(jīng)濟(jì)原理讓多數(shù)人感到陌生:最便宜程序的編寫(xiě)成本最為昂貴,最昂貴程序的編寫(xiě)成本最為低廉。
???編寫(xiě)大的程序有些像堆砌一疊磚塊。將1000塊疊放起來(lái),需要及其精確的放置每一塊磚。如果第998塊磚偏移了1/4英寸,將余下的兩快擺上去不會(huì)有什么問(wèn)題。但是如果第5塊就沒(méi)有擺好,擺放10塊以上的磚幾乎不可能的。
???軟件也具有這樣的特性。對(duì)于軟件基礎(chǔ)部分的變動(dòng)要比對(duì)上面部分的變動(dòng)敏感得多。現(xiàn)實(shí)當(dāng)中,多數(shù)程序員起始于錯(cuò)誤的起點(diǎn),隨著進(jìn)程而不斷修正行進(jìn)路線。因而,程序充滿著修改過(guò)的痕跡。很多功能需求是在編程開(kāi)始之后才發(fā)現(xiàn)的。這些功能被強(qiáng)行加入到程序中。程序修改的痕跡與疊放磚塊的偏移類(lèi)似。將一個(gè)按牛從對(duì)話框的一側(cè)移到另一側(cè),就像搖晃一下第998塊磚,但是修改描述所有按鈕的代碼,就像搖晃第5塊磚。面向?qū)ο缶幊碳夹g(shù)和封裝技術(shù)是專門(mén)讓程序免于修改傷痕的防范技巧。但是確切地說(shuō),面向?qū)ο蠹夹g(shù)只是將1000塊磚分割成10組100塊磚,不是根本的解決之道。
???水平高的程序員在編寫(xiě)大程序之前,花費(fèi)很多時(shí)間和精力做準(zhǔn)備工作。單配置編程環(huán)境就需要幾天的時(shí)間。還需要選擇合適的程序庫(kù),定義數(shù)據(jù)項(xiàng)。還必須對(duì)存儲(chǔ)恢復(fù)系統(tǒng)作出分析,對(duì)其進(jìn)行定義、編碼和測(cè)試。
???隨著編程工作的展開(kāi),程序員們必然會(huì)發(fā)現(xiàn)計(jì)劃中的錯(cuò)誤、假設(shè)中的缺陷。他們面臨兩個(gè)選擇,或者從頭再來(lái),或者對(duì)程序中有問(wèn)題的部分打補(bǔ)丁,引入新的“傷痕”。選擇前者的成本非常高,不過(guò)選擇后者,“傷痕”將限制程序的規(guī)模——疊加磚塊的高度。
posted on 2006-12-22 10:55 Zero Lee 閱讀(582) 評(píng)論(2) 編輯 收藏 引用 所屬分類(lèi): Experience and Thought