要成為武林高手,需要長時間的勤學苦練。要成為軟件開發(fā)高手,又需要多長時間呢?《Modern C++ Design》的作者Andrei Alexandrescu認為:一個人有可能在20幾歲就成為編程高手,但要成為設計高手卻需要熬到35歲左右。以23歲大學畢業(yè)計算,要經(jīng)過漫長的12年時間。
以我個人為例(我尚不敢自認是設計高手),22歲大學畢業(yè)后,在某研究所用8086匯編語言寫一些小規(guī)模的程序,頗覺得心應手。凡是能用流程圖表示的問題,都似乎不在話下。工作中,與同事共同切磋結構化程序設計,并能有意識地用于實踐中。
三年后,承接一個縱向課題:在Windows上開發(fā)一個交互式排版系統(tǒng)。用Windows SDK開發(fā)。興奮之余,自然想起用結構化方法進行設計:把整個系統(tǒng)當成一個黑盒子(black box),輸出當然是排版。結果,不管是什么格式,輸入是???。我卡住了。難道用戶操作是輸入嗎?但用戶操作有那么多,怎么表示呢?系統(tǒng)的數(shù)據(jù)流圖該怎么畫?數(shù)據(jù)字典該怎么寫?和同事討論n次后,仍不得其解。懊喪之余,先模仿Quark Express搭個界面吧。然后研究排版算法。程序結構經(jīng)過至少三次大規(guī)模修改,終于能排出一些版式,并在兩年后通過了鑒定(鑒定后當然是將其束之高閣)。我從中體會到結構化開發(fā)方法不適合開發(fā)交互式系統(tǒng)。在開發(fā)初期,你不太可能正確地畫出數(shù)據(jù)流圖,而結構化設計方法完全依賴數(shù)據(jù)流圖。數(shù)據(jù)流圖發(fā)生改變,整個程序結構就要隨之改變。
后來,加入一家合資公司,擔任開發(fā)組長,有五、六個組員。這時我已讀過了邵維忠等譯的《面向?qū)ο蟮姆治觥?、楊芙清等編譯的《面向?qū)ο蟮脑O計》和《Code Complete》中譯本。對面向?qū)ο蟮某绦蛟O計雖有所了解但仍是一知半解。
首先,我們用MSVC 1.5開發(fā)一個圖形編輯軟件。我用紙畫了20幾張對象圖,與同事討論通過后,開始編程。有人負責數(shù)據(jù)模型,有人負責用戶界面,有人負責圖形顯示。幾個月后,老板已可向潛在用戶進行展示,反應良好。老板和開發(fā)人員都被一種興奮的心情籠罩著。我們不斷地加新功能,老板不時地到展覽會上做演示。功能加齊了,開始讓潛在用戶試用。老板和我們都松了一口氣:就剩下改錯了,咱們是兵來將擋、水來土屯,沒什么可怕的。錯誤報告來了。我們信心滿滿地開始查錯改錯。有些錯誤很快地被改掉了。但后我們發(fā)現(xiàn)錯誤源源不斷。改了一個錯誤有可能引起別的錯誤。軟件永遠達不到能用的地步。后,時機被錯過。該軟件不得不被砍掉。懊喪之余,我們做了反省。大家都認為應盡早改錯。同時模模糊糊地覺得數(shù)據(jù)模型和用戶界面的程序一定要嚴格分開,否則程序極難修改。
以我個人為例(我尚不敢自認是設計高手),22歲大學畢業(yè)后,在某研究所用8086匯編語言寫一些小規(guī)模的程序,頗覺得心應手。凡是能用流程圖表示的問題,都似乎不在話下。工作中,與同事共同切磋結構化程序設計,并能有意識地用于實踐中。
三年后,承接一個縱向課題:在Windows上開發(fā)一個交互式排版系統(tǒng)。用Windows SDK開發(fā)。興奮之余,自然想起用結構化方法進行設計:把整個系統(tǒng)當成一個黑盒子(black box),輸出當然是排版。結果,不管是什么格式,輸入是???。我卡住了。難道用戶操作是輸入嗎?但用戶操作有那么多,怎么表示呢?系統(tǒng)的數(shù)據(jù)流圖該怎么畫?數(shù)據(jù)字典該怎么寫?和同事討論n次后,仍不得其解。懊喪之余,先模仿Quark Express搭個界面吧。然后研究排版算法。程序結構經(jīng)過至少三次大規(guī)模修改,終于能排出一些版式,并在兩年后通過了鑒定(鑒定后當然是將其束之高閣)。我從中體會到結構化開發(fā)方法不適合開發(fā)交互式系統(tǒng)。在開發(fā)初期,你不太可能正確地畫出數(shù)據(jù)流圖,而結構化設計方法完全依賴數(shù)據(jù)流圖。數(shù)據(jù)流圖發(fā)生改變,整個程序結構就要隨之改變。
后來,加入一家合資公司,擔任開發(fā)組長,有五、六個組員。這時我已讀過了邵維忠等譯的《面向?qū)ο蟮姆治觥?、楊芙清等編譯的《面向?qū)ο蟮脑O計》和《Code Complete》中譯本。對面向?qū)ο蟮某绦蛟O計雖有所了解但仍是一知半解。
首先,我們用MSVC 1.5開發(fā)一個圖形編輯軟件。我用紙畫了20幾張對象圖,與同事討論通過后,開始編程。有人負責數(shù)據(jù)模型,有人負責用戶界面,有人負責圖形顯示。幾個月后,老板已可向潛在用戶進行展示,反應良好。老板和開發(fā)人員都被一種興奮的心情籠罩著。我們不斷地加新功能,老板不時地到展覽會上做演示。功能加齊了,開始讓潛在用戶試用。老板和我們都松了一口氣:就剩下改錯了,咱們是兵來將擋、水來土屯,沒什么可怕的。錯誤報告來了。我們信心滿滿地開始查錯改錯。有些錯誤很快地被改掉了。但后我們發(fā)現(xiàn)錯誤源源不斷。改了一個錯誤有可能引起別的錯誤。軟件永遠達不到能用的地步。后,時機被錯過。該軟件不得不被砍掉。懊喪之余,我們做了反省。大家都認為應盡早改錯。同時模模糊糊地覺得數(shù)據(jù)模型和用戶界面的程序一定要嚴格分開,否則程序極難修改。

