一般來說,商業應用的開發可以分為設計和制造(編程)兩個階段。軟件開發人員則有設計人員(主要是系統工程師)和程序員之分,先由設計人員寫出“設計書”,然后由程序員來編程。設計書式樣各異。由于是第一道工序,所以就有可能會使用DFD(data flow diagram,數據流圖)、ERD(entity-relationship diagram,實體關系圖),或者最近頗為流行的UML(unified modeling language,一體化建模語言)。如此說來,所謂的設計階段就是指“設計人員完成設計書然后交給程序員”這么一個過程。
當然,不能否認盡量以簡單的模塊來實現復雜的軟件結構這一工作的重要性。但是,單靠設計書就真的能開發出軟件嗎?至少筆者還從來也沒有聽說過“只憑設計書就能自動生成所有代碼”的說法。目前能夠實現這一任務的CASE(computer aided software engineering)工具也還沒有開發出來。
這樣一來,程序員就得仔細閱讀設計書,深挖“字里行間”的要求,并解決設計階段無法預見,但在編程過程中出現的問題。特別是隨著近來技術革新速度的加快,比起自動代碼生成技術來說,還是人更容易跟上形勢。但是這種情況下,如果設計書比較含糊,或者程序員能力不足的話,就可能會開發出功能不全或及性能不佳的軟件來。
這一點正是軟件開發同其它工程領域最顯著的不同之處。比如說工業產品的設計書(設計圖)是絕對的,只要有設計書,那么擁有相同的制造設備的生產商就能生產出相同的產品(當然也有例外)。而在軟件開發領域,軟件開發的編程階段主要依賴于程序員的能力而不是設計書。由程序員完成的軟件與設計書的內容大相徑庭的例子也并不少見。也就是說設計書并不能起到像機械加工方面的設計圖一樣的作用。
筆者最近開始思考這么一個問題:與其說問題出在設計書的內容上,倒不如說是設計工程的方法本身出現了錯誤。促使筆者產生這種想法的契機是美國軟件技術人員Martin Fowler寫的論文“The New Methodology”(http://www.martinfowler.com/articles/newMethodology.html)。Martin Fowler在該論文中寫道“軟件開發的全部過程都屬于設計,制造階段僅僅指編譯和聯接過程”。另外Martin Fowler還主張“源代碼才是真正的設計書。直到編程作業都應算做設計階段”。
筆者認為,這種想法從根本上改變了設計人員與程序員之間的關系。話雖如此,實際上大多數程序員還是僅僅被看作是從事簡單的重復勞動的人員,不管他們付出怎樣的辛勤勞動從事編程作業,都難以得到公正的評價。實際上,整個軟件業界都有這么一種印象“比起程序員來說,設計人員更加優秀”。筆者也曾經接受過上司這樣的教導“要朝高級設計人員努力!不要再做程序員了”。這其中的邏輯就是:只有成為設計人員才是升職之道,而程序員隨時可以從外面招聘。
如果大家都認為程序員只不過是成為設計人員的一個跳板的話,那么誰也沒有情緒老老實實地干活了。這樣下去要培養出優秀的程序員可就難上加難了。而且從設計人員與程序員的力量對比來說,程序員也還是處于不利的地位。筆者認為,最近被人們掛在嘴邊上的職業道德危機及軟件質量低下的問題,實際上原因正在于此。
或許重新審視編程并將其納入設計過程,就會為目前僵硬的軟件開發體制提供一個洗心革面的機會。因為這樣一來,比起做出周密的設計來說,人們會更加關注如何才能寫出優秀的程序來。
注:這是我在網上搜到的一篇文章,對程序員很有益.
延伸閱讀
文章來源于領測軟件測試網 http://www.kjueaiud.com/