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