软件工程师的发明家—从发明家的视角分析软件
生活随笔
收集整理的這篇文章主要介紹了
软件工程师的发明家—从发明家的视角分析软件
小編覺得挺不錯的,現在分享給大家,幫大家做個參考.
明年就大四了,同學要去參加實習生面試,卻又不知如何推銷自己,他在校也做過不少項目,索性我就想讓他以項目為主,圍繞項目展現自己。所以如何讓面試官最快的了解自己的項目成了最大的問題, 我也就做了下類比,把向遠古人介紹自行車和向對項目一無所知的面試官介紹項目做了類比。
?? ? ? ?軟件工程師就像就發明家一樣,每個軟件都是其發明創造的產物。軟件工程屬于工程學,很早就有人把軟件工程和建筑學相對比,并因此產生了一本創造性的書籍《設計模式》。既然都是工程學科,那么將軟件的創造和自行車的創造進行類比自然是不無道理的。
?? ? ? ?人認識事物的方式是從抽象到具體,借鑒這種認識方式,我們用一句話去描述系統的概念。
?? ? ? ? 一句話描述
?? ? ? ?首先我們需要一個概念性的認識,并用一句話去描述這個概念。對自行車來說,“便于人們騎行的2輪路上交通工具”足以描述自行車的概念。而對于一個系統或一個軟件來說,如何用一句話來描述它的概念呢?我們以blog為例,百度百科給出的定義是“是一種通常由個人管理、不定期張貼新的文章的網站”。我來分析下這個的定義,首先bolg是一個網站,這里定義了blog的性質,與自行車是交通工具一樣。其次“個人管理和不定期張貼新文章”給出的是其主要功能,這又與自行車的“騎行”一樣。
?? ? ? ?在概括描述了整個系統之后,需要進一步的對系統進行分析解說,一般一個系統都是由很多個模塊組成。
?? ? ? ? 介紹系統組成模塊
?? ? ? ?左邊是一幅自行車的結構圖,右邊是其對應的樹形分解圖。有沒有發現這個樹形分解圖和WBS很像呢?沒錯,自行車的制造者也是按照模塊化進行分解的。制造商將一個自行車分成多個子系統(模塊),如果一個子系統(模塊)過于復雜,則繼續進行分解,直到這個部件可以被直接生產制造為止。從宏觀來看,自行車由龍頭、車架、車輪、腳踏板、鏈條等構成。從職責來看,龍頭負責掌控方向、車架負責支撐、車輪負責行駛、踏板負責提供動力、鏈條負責連接踏板和車輪。每一個部件都是一個模塊,把這些類比到一款軟件里面,如果我們按責任去發現模塊,那么一個blog系統將進行如下分解:個人信息管理模塊、文章發布管理模塊、評論管理模塊、好友管理模塊、文章分類模塊。當然,這只是我個人進行的粗略的分解,但是卻并不影響我所要表達觀點。在這一步中,只是闡明系統的組成部分,闡明模塊的細節放在下一步中。
?? ? ? ? 分別介紹各個模塊的細節
?? ? ? ?還是以自行車為例,我們從車輪入手,對車輪進行分析。在這一步中,我們可以闡述對車輪具體的設計:比如車輪為什么是圓的,而不是方的?如何設計車輪才能使其更經久耐用?如何設計設計使其能夠減少摩擦,行駛的更快。諸如此類的問題。
?? ? ? ?雖然系統可以被分為多個模塊,但模塊之間并不是簡單的組裝就能成為一個系統,還少不了重要的一步
?? ? ? ? 模塊之間的協作
?? ? ? ?模塊之間的邊界都該盡可能的被設計為接口。車輪和鏈條如何銜接,他們又是如何和腳踏板一起協作來完成行駛功能的,這也就是部件的協作問題。可以把每個部件之間的連接點理解成接口,模塊之間通過接口調用函數來完成協作。當然,如果要考慮到模塊之間的協作的話,可能需要對上一步中所分析出來的模塊進行修改,比如說車輪出需要打個洞,來安裝和鏈條銜接的部件。軟件設計也是一個不斷迭代的過程,不斷的去修改之前的設計,又在不斷的設計中發現新的修改。
?? ? ? ?這是一個自頂向下的分析過程,在系統視角里,我們從責任出發,去發現模塊。然后降低視角,在模塊視角中從責任出發去發現對象,通過對象協作完成模塊內部的責任。再提高視角,通過模塊之間的協作完成模塊的責任,并不斷的重復上面的操作去完善我們的設計??偨Y起來就是“ 責任、對象、協作 ”。
?? ? ? ?軟件工程師就像就發明家一樣,每個軟件都是其發明創造的產物。軟件工程屬于工程學,很早就有人把軟件工程和建筑學相對比,并因此產生了一本創造性的書籍《設計模式》。既然都是工程學科,那么將軟件的創造和自行車的創造進行類比自然是不無道理的。
?? ? ? ?人認識事物的方式是從抽象到具體,借鑒這種認識方式,我們用一句話去描述系統的概念。
?? ? ? ? 一句話描述
?? ? ? ?首先我們需要一個概念性的認識,并用一句話去描述這個概念。對自行車來說,“便于人們騎行的2輪路上交通工具”足以描述自行車的概念。而對于一個系統或一個軟件來說,如何用一句話來描述它的概念呢?我們以blog為例,百度百科給出的定義是“是一種通常由個人管理、不定期張貼新的文章的網站”。我來分析下這個的定義,首先bolg是一個網站,這里定義了blog的性質,與自行車是交通工具一樣。其次“個人管理和不定期張貼新文章”給出的是其主要功能,這又與自行車的“騎行”一樣。
?? ? ? ?在概括描述了整個系統之后,需要進一步的對系統進行分析解說,一般一個系統都是由很多個模塊組成。
?? ? ? ? 介紹系統組成模塊
?? ? ? ?左邊是一幅自行車的結構圖,右邊是其對應的樹形分解圖。有沒有發現這個樹形分解圖和WBS很像呢?沒錯,自行車的制造者也是按照模塊化進行分解的。制造商將一個自行車分成多個子系統(模塊),如果一個子系統(模塊)過于復雜,則繼續進行分解,直到這個部件可以被直接生產制造為止。從宏觀來看,自行車由龍頭、車架、車輪、腳踏板、鏈條等構成。從職責來看,龍頭負責掌控方向、車架負責支撐、車輪負責行駛、踏板負責提供動力、鏈條負責連接踏板和車輪。每一個部件都是一個模塊,把這些類比到一款軟件里面,如果我們按責任去發現模塊,那么一個blog系統將進行如下分解:個人信息管理模塊、文章發布管理模塊、評論管理模塊、好友管理模塊、文章分類模塊。當然,這只是我個人進行的粗略的分解,但是卻并不影響我所要表達觀點。在這一步中,只是闡明系統的組成部分,闡明模塊的細節放在下一步中。
?? ? ? ? 分別介紹各個模塊的細節
?? ? ? ?還是以自行車為例,我們從車輪入手,對車輪進行分析。在這一步中,我們可以闡述對車輪具體的設計:比如車輪為什么是圓的,而不是方的?如何設計車輪才能使其更經久耐用?如何設計設計使其能夠減少摩擦,行駛的更快。諸如此類的問題。
?? ? ? ?雖然系統可以被分為多個模塊,但模塊之間并不是簡單的組裝就能成為一個系統,還少不了重要的一步
?? ? ? ? 模塊之間的協作
?? ? ? ?模塊之間的邊界都該盡可能的被設計為接口。車輪和鏈條如何銜接,他們又是如何和腳踏板一起協作來完成行駛功能的,這也就是部件的協作問題。可以把每個部件之間的連接點理解成接口,模塊之間通過接口調用函數來完成協作。當然,如果要考慮到模塊之間的協作的話,可能需要對上一步中所分析出來的模塊進行修改,比如說車輪出需要打個洞,來安裝和鏈條銜接的部件。軟件設計也是一個不斷迭代的過程,不斷的去修改之前的設計,又在不斷的設計中發現新的修改。
?? ? ? ?這是一個自頂向下的分析過程,在系統視角里,我們從責任出發,去發現模塊。然后降低視角,在模塊視角中從責任出發去發現對象,通過對象協作完成模塊內部的責任。再提高視角,通過模塊之間的協作完成模塊的責任,并不斷的重復上面的操作去完善我們的設計??偨Y起來就是“ 責任、對象、協作 ”。
總結
以上是生活随笔為你收集整理的软件工程师的发明家—从发明家的视角分析软件的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: VB.NET完成一个功能增强的记事本
- 下一篇: 想象5年后的你