??????? 晚上跟老爸去遛彎,跟爸聊起工程。老爸是搞建筑工程的,屬于現(xiàn)場指揮工人干活的工程師。
??????? 從跟老爸的談話中可以看出,軟件工程有以下幾個(gè)特點(diǎn):
??????? 1、模式比較固定,需求很明確。比如說蓋飯店就是飯店,蓋寫字樓就是寫字樓。說一層有幾個(gè)房間就有幾個(gè),說幾個(gè)大的幾個(gè)小的,幾個(gè)廁所,都規(guī)定好的。樓梯什么樣,也都有現(xiàn)成的模式。
??????? 2、分工明確。領(lǐng)導(dǎo)們開會(huì)決定需求,設(shè)計(jì)院負(fù)責(zé)設(shè)計(jì),然后拿到現(xiàn)場由現(xiàn)場的工程師將圖紙放大,而且完全遵照?qǐng)D紙,建筑工人來最后實(shí)現(xiàn)(砌磚、搭梁什么的)。
??????? 而我想軟件工程可不是這樣啊!需求總是變來變?nèi)ィ袝r(shí)軟件都編完了,客戶才明白自己想要什么。這是個(gè)軟件工程永遠(yuǎn)也解決不了的問題。從需求到設(shè)計(jì)再到代碼,中間的鴻溝相當(dāng)大,如果說能按照設(shè)計(jì)者的設(shè)計(jì)直接翻譯成代碼(就像建筑工人一樣,不需要思考),那設(shè)計(jì)量相當(dāng)恐怖了。
??????? 正是某些人直接將軟件工程和建筑工程畫了等號(hào),才出現(xiàn)了瀑布模型這樣的錯(cuò)誤方法和軟件藍(lán)領(lǐng)、代碼工人之類的說法。覺得程序員和民工一樣。在20世紀(jì)80年代美國已經(jīng)意識(shí)到這個(gè)問題,國防部、IBM都廢棄了瀑布方法,而改用了IID,而在國內(nèi),很多項(xiàng)目還在繼續(xù)遵從著瀑布模型,而且教學(xué)中依然在強(qiáng)調(diào)瀑布模型,即使強(qiáng)調(diào)了迭代開發(fā)之類的,要么就是說一套做一套;要么就是在迭代方法上附加瀑布模型的對(duì)迭代的錯(cuò)誤理解(看過一本書上說每個(gè)迭代就是一個(gè)小瀑布,其實(shí)這是對(duì)瀑布模型理解的錯(cuò)誤,分析、設(shè)計(jì)、開發(fā)、測試、實(shí)施并不是瀑布模型的專利啊)。而且我還得知,蓋一棟8層家屬樓,才需要1000多萬,而我們現(xiàn)在正在做的這個(gè)項(xiàng)目光軟件開發(fā)費(fèi)用竟然高達(dá)8000萬,看來,從這點(diǎn)來看,建筑工程是不能跟我們相比的。
???????? 正如Craig Larman在《UML & 模式應(yīng)用》?中說軟件是高創(chuàng)造性活動(dòng),具有高風(fēng)險(xiǎn)的特點(diǎn)。作為對(duì)風(fēng)險(xiǎn)的控制,顯然UP/XP會(huì)起到積極的作用。從這點(diǎn)上來講,建筑工程是不能跟軟件工程相比的。
???????? 在軟件活動(dòng)中,程序員應(yīng)該受到尊重,而且程序員是構(gòu)造軟件的核心。偉大的設(shè)計(jì)師必是優(yōu)秀的程序員(借用Fowler在《重構(gòu)》中對(duì)自己的評(píng)價(jià):覺得自己只是個(gè)有著好習(xí)慣的優(yōu)秀程序員),很難想象,一個(gè)不會(huì)編程的設(shè)計(jì)師怎么能理解設(shè)計(jì)模式(反正我因?yàn)榭床惶瓹++的代碼,覺得理解設(shè)計(jì)模式相當(dāng)困難,很多模式是因?yàn)樵诰帉慗ava程序時(shí)遇到過同樣的問題(所謂的context),自己想到一些方案,發(fā)現(xiàn)有些模式正好可以更好的解決我的設(shè)計(jì)難題,覺得比較受啟發(fā)),同樣想成為一個(gè)好的架構(gòu)師,則更應(yīng)該如此了。還有一些人畢業(yè)之后想去做顧問,我很難想象讀了一些網(wǎng)上的文章,就可以去給使用Spring的團(tuán)隊(duì)做顧問了?(當(dāng)然如果你有深厚的EE功底,理解并使用Spring也并非難事)總之,實(shí)踐出真知。而所謂實(shí)踐,大抵對(duì)于軟件構(gòu)造活動(dòng)就是編程,軟件活動(dòng)的最終產(chǎn)物不是報(bào)告,而是可以運(yùn)行的軟件,偏離了這點(diǎn),就是本末倒置了。
??????? 最近在看《UML & 模式應(yīng)用》,覺得大受啟發(fā),剛看完領(lǐng)域模型這一章,但是這已經(jīng)解決了我先前的很多疑問了。比如到底什么是領(lǐng)域模型,怎么寫用例(原來以為用例的根本是畫用例圖,結(jié)果大師告訴我,用例的本質(zhì)竟然是文本,具體的我會(huì)單獨(dú)撰文),先前的很多自己摸索的實(shí)踐,在看書的過程中,不斷提煉,聯(lián)系實(shí)踐,感覺真的很不錯(cuò)~
???????? 還記得有人這樣評(píng)價(jià)Robert Martin:Robert Martin是一位具有三十多年開發(fā)經(jīng)驗(yàn)的老程序員,盡管今天已經(jīng)是世界頂級(jí)的專家,但他對(duì)于“一切必須落實(shí)到代碼”的思想,仍然抱著無比堅(jiān)定的信念。
???????? 希望我自己能成為像Robert Martin,Martin Fowler,Rod Johnson,Craig Larman,Kent Beck等等這些世界級(jí)的專家~