程序與軟件、編程與軟件開發的區別


     今天突然想到兩個有意思的問題:程序與軟件有區別嗎? 編程與軟件開發有何區別?

     這兩個問題也是我在大學時期一直思考的兩個問題。作者在學校期間閱讀了許多的專業書籍,比如《Java語言程序設計》、《C語言程序設計》、《軟件工程》、《設計模式:可復用面向對象軟件的基礎 》以及許多《21天精通XXX程序設計》系列書籍,也寫了許多的小程序,但有一些問題作者始終沒有完全弄清楚。比如:

      1.真的可以在21天之內精通某一門程序設計語言嗎?

      2.什么是面向對象?

      3.Java語言為什么要提供接口,為什么要將接口定義和實現強制分開?

      4.什么是異常?為什么需要異常處理機制?

      作者在學校期間曾向老師請教過這些問題,得到的答案要么照本宣科,要么含糊其辭不得要領。直到工作多年之后作者才明白,有許多問題是無法在學校得到答案的,必須要等你真正進入這個行業之后,才會慢慢明白其中的道理。 好的老師與差的老師區別在哪里:好的老師總是能用最簡單的方式給大家解釋清楚最復雜的問題。下面來談談上面的幾個問題:

      1.真的可以在21天之內精通某一門程序設計語言嗎?

      從開始學習計算機到現在已有8年時間,但是工作中遇到的難題仍然比比皆是。每當讀到James Gosling、Rod Johnson這些大師的經典著作時,才發現大師的高度難以企及。想想當初找工作在簡歷上寫精通XX語言時,難免汗顏耳赤。

      2. 什么是面向對象?

      在學校期間,計算機課程的老師會引用各種比喻來解釋什么是對象。比如:你是對象我是對象世間萬物皆是對象;類和對象的關系就像學生和王小明的關系、飛機和波音737的關系等等等等。大家聽完還是雲里霧里。其實在了解面向對象之前,我們應該了解兩個概念:數據結構中的抽象數據類型(Abstract Data Type)和C語言中的結構體(struct)。在了解這兩個概念之后,相信大家對面向對象應該有更清晰的了解。面向對象無非是抽象數據類型(Abstract Data Type)實例化,也是結構體(struct)的升級版。很多人容易被面向對象這個概念搞暈往往是因為面向對象這個概念被濫用或者過度解釋所致。無論是結構體還是對象,都是用來組織和傳遞數據的。當軟件規模越來越龐大時,模塊化是必然的選擇。面向對象可以幫我們更好的實現模塊化。

       3.Java語言為什么要提供接口,為什么要將接口定義和實現強制分開?

       如果一個軟件的全部功能都能在一個文件中來編寫實現,那顯然我們不需要接口,也不需要面向對象和類,更不需要package包這些玩意。但是軟件規模的增長速度是驚人的,軟件功能越來越強大,體積也越來越龐大,這是誰也無法阻擋的趨勢。把軟件划分成不同的模塊,讓不同的類去實現不同的功能,讓一個類去調用另外一個類的方法來完成業務,這是通行的做法。但是這種強引用會帶來一個嚴重的問題:耦合度太高。有一個成語可以形容這種情況“牽一發而動全身”,某一處的小改動會導致所有地方受到影響。但是軟件需求的變更、功能的增加、數據的調整,這些是我們每天都會面對的事情。而接口實際上將調用方和實現方強制分離開,實現的變更對調用方不會產生影響,降低了模塊之前的耦合度。

       4.什么是異常?異常處理機制可以保證我們的程序永遠不出錯嗎?

       筆者記得上大學時,老師對着Java異常類層次結構圖大講特講,但最后大家對異常的概念總是一知半解,寫程序時try-catch總是用的不對。其實異常簡單點說就是邏輯錯誤。我們編寫計算機程序實際上是我們邏輯思維的具體符號化,但是邏輯難免會存在缺陷,程序也是如此。編寫程序就像我們焊了一個電路,只有通上電某個地方冒煙了,你才知道這里存在bug,這種情況就是出現異常了。寫代碼時出現編譯錯誤那不叫異常,編譯器可以幫我們指出語法錯誤,但是編譯器無法幫我們解決異常。比如我定義了一個對象,調用了對象的一個方法,但是在運行環境中這個對象卻不存在,這個時候就出現了空指針異常。如果沒有異常處理機制,程序會中斷退出,或者進入非正常運行狀態。運行時異常是非常常見的,我們當然不希望我們的程序出現任何一點異常就崩潰了。所以異常處理機制對於提高我們程序的健壯性有着重要的作用。

      再回到開始的兩個問題:

      1.程序與軟件有區別嗎?

        我們在大學實驗室寫的代碼並不能稱之為軟件,而只能叫做程序。軟件是為了解決用戶的需求,而程序往往沒有特定的用戶。是否經過測試達到一定的質量標准,這也是程序和軟件的差別之一。文檔和代碼對軟件來說同等重要,而程序則對文檔基本沒有要求。

      2.編程與軟件開發有區別嗎?

        這個問題跟上面的問題本質是一樣。我們在學校實驗室寫了一段程序和我們在公司為客戶開發軟件區別在哪里呢? 在實驗室寫程序不用面對客戶多變的需求,也不用擔心程序的版本升級問題,也不必過多考慮程序的容錯性和健壯性等等。我想這就是編程和軟件開發的差別吧。也正是這些源源不斷的問題推動着技術向前發展,我們也在解決問題中不斷提高。


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM