Bob大叔的忠告做一個專業軟體開發者必須精通的事項

袁野發表於2013-07-03

這兩天讀Bob 大叔的《程式設計師的職業素養》,感覺作為一個專業的軟體開發人員不容易,身上頓時感覺壓力山大。

enter image description here

Bob 大叔認為作為一個專業軟體開發必須精通以下幾點:

  1. 設計模式。必須能描述GOF書中全部24種模式,同時還要有POSA書中的多數模式的實戰經驗。
  2. 設計原則。必須瞭解SOLID原則 ,而且要深刻理解元件設計原則。
  3. 方法。必須理解XP、Scrum、精益、看板、瀑布、結構化分析及結構化設計等。
  4. 實踐。必須掌握測試驅動開發、物件導向設計、結構化程式設計、持續整合和結對程式設計。
  5. 工件。必須瞭解如何使用UML圖、DFD圖、結構圖、Petri網路圖、狀態遷移圖表、流程圖和決策圖。

自我總結,在Bob 大叔說的這幾點中,我能做到幾點呢?認真思考一下,發現大概有這麼幾點能做到:

  1. 設計模式,這些年來國內很多關於設計模式的書,讀大學時代看《大話設計模式》,只是把大鳥和小菜的對話當做故事書來看,很多設計模式的知識只是看了就忘記。後來工作後買了本《Java與模式》來看,發現其中設計模式的思想挺好的。作者通過講些中國傳統故事來形容和講述設計模式,通過這本書學習到了不少設計模式的思想,但總是會忘。後面隨著程式設計經驗的增長,瞭解到設計模式其實就是OO思想和設計原則的產物,設計模式不是去學的,應該是感悟的,是我們程式設計師通過工作經驗去感悟的。感悟設計模式才能掌握設計模式的精髓,才能學會怎麼去開發高可擴充套件性程式。設計模式是一種怎麼開發高擴充套件高可維護性程式的思想和實踐。說來慚愧設計模式現在24種大多數都瞭解其思想,但是現實程式設計使用的不多。如果要學習重構程式設計法,設計模式必不可少,福勒的《重構》很多手法就是往設計模式方面靠攏。

  2. 設計原則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 介面分離原則 :不能強迫使用者去依賴那些他們不使用的介面。換句話說,使用多個專門的介面比使用單一的總介面總要好。 這個原則想表達的思想和單一責任原則有點像,一個介面的方法多了,所有的子類都需要去實現它們,當有一天某幾個子類需要增加一個方法時候,考慮把它放到介面裡面,但是又影響了其他子類,使得其他子類需要實現這個方法,所以介面要儘可能的小。

  3. 方法:XP、Scrum、精益、看板、瀑布、結構化分析及結構化設計,這些只是對瀑布、Scrum、迭代開發實踐過,極限程式設計(XP)、精益、結構化分析及結構化設計都是瞭解一些皮毛,這些方面都得努力去學習和實踐。

  4. 實踐:測試驅動開發、物件導向設計、結構化程式設計、持續整合和結對程式設計,對物件導向設計有所涉及但不深入只能說剛入門,測試驅動開發瞭解這種思想,只會寫簡單的單元測試,沒有在專案中經歷過測試覆蓋開發的工作,其他結構化程式設計、持續整合和結對程式設計都是瞭解一點沒有深入理解和實踐過。

  5. 使用過UML和流程圖,其他幾個圖都沒有用過和了解過。UML圖在工作中只有半年多的設計工作中使用過,需要深入理解。

路漫漫其修遠兮,吾將上下而求索,學習技術之路很漫長。做一個專業的程式設計師不容易,需要多加努力,使自己成為一個專業的程式設計師,成為一個具備職業素養的程式設計師。

本文轉自ITeye部落格:做一個專業軟體開發必須精通的事項
原文地址:http://a5728238.iteye.com/blog/1890259

相關文章