軟件設計學什么課程,軟件設計師( 二 )


什么是軟件設計,其目的是什么:

軟件設計學什么課程,軟件設計師

文章插圖
件設計是從軟件需求規格說明書出發,根據需求分析階段確定的功能設計軟件系統的整體結構、劃分功能模塊、確定每個模塊的實現算法以及編寫具體的代碼,形成軟件的具體設計方案 。
什么是軟件設計:
軟件設計學什么課程,軟件設計師

文章插圖
【軟件設計學什么課程,軟件設計師】?就筆者的觀點來看:軟件設計是采用編程或腳本語言優雅地表達并解決現實需求的一門科學和藝術 。優雅地表達想傳遞的意思是,所設計出來的軟件應當能容易被人理解、方便擴展和維護 。從這一定義可以看出軟件設計首先是一門科學,是一門解決用戶需求的軟件科學 。既然是科學,不可避免的要掌握相關的科學知識,比如數據結構、計算機組成原理、編程語言等等,而這些內容也正是大學計算機相關專業所傳授的知識 ??茖W知識或許更加容易被量化,拿數據結構為例,一種算法比另一種算法是否更優可以從算法的時間冗余度和空間冗余度進行衡量 。
除了科學的部分,軟件設計還涉及藝術的范疇 。既然是一門藝術,那就一定存在欣賞的問題,也就意味并不是每個從業人員都能欣賞這種藝術,而只有達到了一定的層次且形成了自己的思想后才能欣賞它 。由于設計中藝術的非直觀性,造成其在現實中不容易被量化,因此難以形成相應的評估準則,進而造成在軟件行業容易被忽視 。試想想,大學課程有多少內容是在教我們將軟件設計當作藝術進行欣賞并追求?
好的軟件設計能相對方便地實現新的需求問題 。需求分析是告訴我們做什么,其顯然非常的重要,而設計更多地涉及怎么做更好 。既然對于設計的好壞不能完全通過量化的方式進行衡量,那如何去評價一個軟件設計的好壞呢?或者在進行軟件設計時,如何去思考以做出一個好的設計呢?這可以通過對一些軟件設計原則的把握來做到 。設計原則可能有很多,但并不是每一個項目都要同時滿足所有的設計原則,另外,不同的項目其特性有可能使得有些設計原則并不適用 。另外,設計原則也不是一成不變的,可能因項目的特點又可以抽取出另外的設計原則 。筆者將在后續的文章中闡述日常工作中所遵守的軟件設計原則 。
軟件設計是一個不斷提煉和抽象的過程 。說它是一個提煉的過程,是因為在設計之初會想到很多需要考慮的因素,這些因素在設計工作沒有深入之前,并不能發現它們有些是重疊的,或者有些根本就不需要考慮 。隨著設計的深入,會從眾多的因素中得到其中的關鍵因素并將這些因素付之于實踐 。設計也是一個抽象過程,需要從眾多的表象中找到它們的共性,通過表達共性從而最終描述每個個性,而不應當局限于直接去描述每一個個性 。設計的深入過程并不只是一味地思考,除非設計者以前有過類似的設計經驗,否則設計過程通常需要進行一定的代碼編寫工作,以輔助思考,這一點對于開發軟件架構師也應當是一樣的 。
軟件設計是一個創造模型的過程 。通過對需求的理解和抽象,好的設計將最終構造出一個模型,而且這個模型與現實世界的某樣東西可能是相類似的 。這個模型除了實現了用戶的需求,還向他人展示了她自己是什么模樣以及可能會如何行事 。打個比方,如果有人發明了一種新的交通工具,他如何最為有效地表達這一新的交通工具到底是什么樣的呢?是直接拿一張圖紙給他人并說你看看圖紙就知道了好呢?還是打一個大家都耳熟能詳的比方好呢?顯然,后者更好 。如果他說這個新的交通工具與現在的轎車很像,只不過,如此一來,聽眾馬上就會想,這個新的交通工具有四個輪子、也有方向盤等等 。顯然,后者能很快地讓聽眾利用其生活經驗快速的接收信息,而好的軟件設計也應當做到這一點 。軟件設計時的模型創造過程,其實就是賦予軟件代碼生命的過程,由此看來一個好的設計應當是 有生命的 。
軟件設計是一個做選擇的過程 。人有時沒有選擇反而輕松 。一個剛畢業的大學生如果只拿到了一個offer,他可能沒有選擇單位的煩惱,不論單位好壞都去報道就是了 。但是,如果他拿了兩個offer,選擇的煩惱也就有了是去A單位好呢?還是B單位好?不幸的是,軟件的設計過程往往存在大量的選擇 。是用空間換時間好呢?還是用時間換空間好?是現在考慮可擴展性呢?還是將來?等等 。因此,毫不夸張地說,設計是痛苦的,除非設計主題很簡單或直接了當 。有苦當然也就有樂,在設計沒有最終定下來時,需要痛苦地思考和選擇,往往是一個覺得這個也不行、那個也不好的過程 。但是,一旦設計最終定稿,會發現這就是我想要的設計,隨之而來的是三百六十度的大轉變,覺得這個也應當就是這樣,那個也應當是這樣,其結果是設計者能從中體會到一種美,并從中收獲樂趣 。

推薦閱讀