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