天天看點

軟體開發的核心技術

《程式設計導論(Java)·0.1.5 問題求解》

程式員采用程式設計語言編寫源代碼的活動——程式設計常常概括成問題求解(problem solving)。

待解決的問題可大可小,而問題的解決方案正好需要計算機的參與。是以将程式設計活動稱為問題求解,将計算機科學視為問題求解的科學。

問題的大小主要反映在代碼量和軟體開發參與者的數量上。

實際問題可以是:

²       列印乘法99表;

²       求50000的階乘;

²       建立一種新的大型網絡遊戲平台;

²       開發一個具有學生注冊、班級課程錄入、學生成績查詢……功能的學生成績管理系統;

²       管理企業各種資源,如人力資源、倉庫、資金等等

²      建設數字化醫院,建構面向區域的醫療資訊共享與協同平台、以電子病曆為核心的臨床資訊系統……

對于小項目的軟體開發或小規模程式設計(programming-in-the-small ),通常具有以下特點:(1) 代碼由一個或幾個程式員編寫,每個程式員都能夠了解項目的全部細節。(2)項目可能是獨立的項目,也可能是大項目的一部分,但任務明确,開發的主要目的是編寫清晰而有效的代碼。

對于大項目或大規模程式設計(programming-in-the-large),具有以下特點:(1)需要一個大型開發團隊,組成人員包括項目經理、軟體體系架構師、需求分析員、軟體設計師、界面設計人員、測試人員、程式員等等,沒有一個人能夠了解整個系統的所有細節。(2)開發的對象是一個複雜的系統,開發工作的首要問題是開發團隊的有效交流與溝通、關注軟體的可複用性和可維護性。

問題的大小使得軟體開發的方法學上存在巨大的差别。通常将大規模程式設計稱為 系統開發,如開發大型管理資訊系統、各種系統軟體;将小規模程式設計稱為 (狹義的)問題求解,此時關注求解問題所需的所有詳盡的步驟/操作,而對詳盡步驟的描述,稱為算法。

是以計算機軟體開發的核心技術有二:

★程式的組織(面向對象技術)、問題求解(算法)。

許多C程式員,擁有較紮實的底層技術,但是在強調算法和資料結構、系統程式設計(閱讀《Windows核心程式設計》、《Unix程式設計藝術》等)的同時,傾向于貶低程式組織的重要性;

一些Java/C#程式員,研究設計模式、架構,可能忽視了對作業系統原理,編譯原理、算法等底層知識的時間投入。還有一些搞Java web開發的,可能對底層更加不感冒。

我在這裡将程式組織和問題求解,作為軟體開發的核心技術的簡略概括,希望讀者不要受某些偏執狂的影響,至少在大學階段,你要能上能下——從宏觀上認識程式組織,從細節上認識(俠義的)問題求解。工作後,按照自己的情況,再去加強某些方面——畢竟時間有限。

在講授C語言的時候,我也會按照“程式組織”這個主題,展開#include、函數(結構化程式設計、接口與實作分離)的内容;

另外,請大家注意,“現在,假設該程式非常龐大,需要多個人合作,分别編寫is3X(int)、isInclude5(int)和foo(int)....”,在類似的文字中,提醒讀者,雖然我們書上的例子,隻有一個輸出語句,但是它代表的是,比如說一千多行的代碼!

我曾經看見過某個大牛諷刺OO的狂熱份子,用多層的類+模式來完成一個簡單的工作。baby,例子能不簡化嗎?說大炮打蚊子,倒是可以。是以,在11.1 說明中,我也再次強調了程式組織的重要性,提醒這是一個好的實踐的機會。

軟體開發的核心技術