Bob大叔忠告:專業(yè)軟件開發(fā)者必須精通的事項(xiàng)
Bob 大叔(Robert C. Martin是Object Mentor公司總裁)認(rèn)為作為一個(gè)專業(yè)軟件開發(fā)必須精通以下幾點(diǎn):
- 設(shè)計(jì)模式。必須能描述GOF書中全部24種模式,同時(shí)還要有POSA書中的多數(shù)模式的實(shí)戰(zhàn)經(jīng)驗(yàn)。
- 設(shè)計(jì)原則。必須了解SOLID原則 ,而且要深刻理解組件設(shè)計(jì)原則。
- 方法。必須理解XP、Scrum、精益、看板、瀑布、結(jié)構(gòu)化分析及結(jié)構(gòu)化設(shè)計(jì)等。
- 實(shí)踐。必須掌握測(cè)試驅(qū)動(dòng)開發(fā)、面向?qū)ο笤O(shè)計(jì)、結(jié)構(gòu)化編程、持續(xù)集成和結(jié)對(duì)編程。
- 工件。必須了解如何使用UML圖、DFD圖、結(jié)構(gòu)圖、Petri網(wǎng)絡(luò)圖、狀態(tài)遷移圖表、流程圖和決策圖。
自我總結(jié),在Bob 大叔說的這幾點(diǎn)中,我能做到幾點(diǎn)呢?認(rèn)真思考一下,發(fā)現(xiàn)大概有這么幾點(diǎn)能做到:
- 設(shè)計(jì)模式,這些年來國(guó)內(nèi)很多關(guān)于設(shè)計(jì)模式的書,讀大學(xué)時(shí)代看《大話設(shè)計(jì)模式》,只是把大鳥和小菜的對(duì)話當(dāng)做故事書來看,很多設(shè)計(jì)模式的知識(shí)只是看了就忘記。后來工作后買了本《Java與模式》來看,發(fā)現(xiàn)其中設(shè)計(jì)模式的思想挺好的。作者通過講些中國(guó)傳統(tǒng)故事來形容和講述設(shè)計(jì)模式,通過這本書學(xué)習(xí)到了不少設(shè)計(jì)模式的思想,但總是會(huì)忘。后面隨著編程經(jīng)驗(yàn)的增長(zhǎng),了解到設(shè)計(jì)模式其實(shí)就是OO思想和設(shè)計(jì)原則的產(chǎn)物,設(shè)計(jì)模式不是去學(xué)的,應(yīng)該是感悟的,是我們程序員通過工作經(jīng)驗(yàn)去感悟的。感悟設(shè)計(jì)模式才能掌握設(shè)計(jì)模式的精髓,才能學(xué)會(huì)怎么去開發(fā)高可擴(kuò)展性程序。設(shè)計(jì)模式是一種怎么開發(fā)高擴(kuò)展高可維護(hù)性程序的思想和實(shí)踐。說來慚愧設(shè)計(jì)模式現(xiàn)在24種大多數(shù)都了解其思想,但是現(xiàn)實(shí)編程使用的不多。如果要學(xué)習(xí)重構(gòu)編程法,設(shè)計(jì)模式必不可少,福勒的《重構(gòu)》很多手法就是往設(shè)計(jì)模式方面靠攏。
- 設(shè)計(jì)原則SOLID,以下這些是我這幾年個(gè)人的感悟:
-
SRP The Single Responsibility Principle 單一責(zé)任原則 :當(dāng)需要修改某個(gè)類的時(shí)候原因有且只有一個(gè),讓一個(gè)類只有一個(gè)職責(zé),當(dāng)這個(gè)類需要承當(dāng)其他類型的責(zé)任的時(shí)候,就需要分解這個(gè)類。這也是bob大叔在《代碼 整潔之道》關(guān)于類這一章說的,讓類小盡可能的小,承擔(dān)的職責(zé)單一,這樣才能保持代碼的整潔性,不會(huì)讓這個(gè)類經(jīng)常由于其他職責(zé)的原因而需要修改,這也是達(dá)到 關(guān)閉修改的方式和手段。
-
OCP The Open Closed Principle 開放封閉原則 :對(duì)擴(kuò)展是開放的,而對(duì)修改是封閉的。這個(gè)原則是諸多面向?qū)ο缶幊淘瓌t中最抽象、最難理解的一個(gè)。其實(shí)這個(gè)原則我感覺是OO思想最核心的思想,怎么樣提高 程序的擴(kuò)展性而又不用去修改以前的代碼,這是我們變成中需要注意的問題,當(dāng)然很多設(shè)計(jì)模式就可以達(dá)到這種效果,工廠、策略模式等都是為了這些而工作的。
-
LSP The Liskov Substitution Principle 里氏替換原則:所有的子類都可以替換其基類,這個(gè)原則其實(shí)是對(duì)編程語言的要求,只有實(shí)現(xiàn)這個(gè)原則,我們才能使用多態(tài)去創(chuàng)造靈活的程序。
-
DIP The Dependency Inversion Principle 依賴倒置原則 :高層模塊不應(yīng)該依賴于低層模塊,二者都應(yīng)該依賴于抽象。抽象不應(yīng)該依賴于細(xì)節(jié),細(xì)節(jié)應(yīng)該依賴于抽象。其實(shí)這些都是為了對(duì)擴(kuò)展開放這個(gè)原則服務(wù) 的,Spring的IOC,策略模式這類東西都通過接口去聲明其實(shí)現(xiàn)類,達(dá)到修改和替換子類不影響現(xiàn)有代碼的實(shí)現(xiàn)。一切都依賴于接口,程序直接的耦合在于 其抽象而不在于其具體實(shí)現(xiàn),bridge模式和抽象工廠就是其經(jīng)典實(shí)現(xiàn)。
-
ISP The Interface Segregation Principle 接口分離原則 :不能強(qiáng)迫用戶去依賴那些他們不使用的接口。換句話說,使用多個(gè)專門的接口比使用單一的總接口總要好。 這個(gè)原則想表達(dá)的思想和單一責(zé)任原則有點(diǎn)像,一個(gè)接口的方法多了,所有的子類都需要去實(shí)現(xiàn)它們,當(dāng)有一天某幾個(gè)子類需要增加一個(gè)方法時(shí)候,考慮把它放到接口里面,但是又影響了其他子類,使得其他子類需要實(shí)現(xiàn)這個(gè)方法,所以接口要盡可能的小。
-
- 方法:XP、Scrum、精益、看板、瀑布、結(jié)構(gòu)化分析及結(jié)構(gòu)化設(shè)計(jì),這些只是對(duì)瀑布、Scrum、迭代開發(fā)實(shí)踐過,極限編程(XP)、精益、結(jié)構(gòu)化分析及結(jié)構(gòu)化設(shè)計(jì)都是了解一些皮毛,這些方面都得努力去學(xué)習(xí)和實(shí)踐。
- 實(shí)踐:測(cè)試驅(qū)動(dòng)開發(fā)、面向?qū)ο笤O(shè)計(jì)、結(jié)構(gòu)化編程、持續(xù)集成和結(jié)對(duì)編程,對(duì)面向?qū)ο笤O(shè)計(jì)有所涉及但不深入只能說剛?cè)腴T,測(cè)試驅(qū)動(dòng)開發(fā)了解這種思想,只會(huì)寫簡(jiǎn)單的單元測(cè)試,沒有在項(xiàng)目中經(jīng)歷過測(cè)試覆蓋開發(fā)的工作,其他結(jié)構(gòu)化編程、持續(xù)集成和結(jié)對(duì)編程都是了解一點(diǎn)沒有深入理解和實(shí)踐過。
- 使用過UML和流程圖,其他幾個(gè)圖都沒有用過和了解過。UML圖在工作中只有半年多的設(shè)計(jì)工作中使用過,需要深入理解。
路漫漫其修遠(yuǎn)兮,吾將上下而求索,學(xué)習(xí)技術(shù)之路很漫長(zhǎng)。做一個(gè)專業(yè)的程序員不容易,需要多加努力,使自己成為一個(gè)專業(yè)的程序員,成為一個(gè)具備職業(yè)素養(yǎng)的程序員。
原文鏈接:http://a5728238.iteye.com/blog/1890259