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