[碎碎念] 入行十年記事:陪我走過十年軟體開發的好書們 [再續]

呼 … 每次整理這個文章都要寫上好幾個小時,因為很多老書都缺圖,基於沒圖沒真相的精神,只有多上 Google 大神的圖片搜尋功能來找圖了,如果找到的又是露天的話,還要把圖抓下來轉存到自己的空間去,才能貼到文章中,我十分能感受到在圖片位置上看到 "露天" 兩個字的錯愕感 :),能找到的我一定會貼,但找不到的 … 也只能請各看倌多包含囉。

呼 … 每次整理這個文章都要寫上好幾個小時,因為很多老書都缺圖,基於沒圖沒真相的精神,只有多上 Google 大神的圖片搜尋功能來找圖了,如果找到的又是露天的話,還要把圖抓下來轉存到自己的空間去,才能貼到文章中,我十分能感受到在圖片位置上看到 "露天" 兩個字的錯愕感 :),能找到的我一定會貼,但找不到的 … 也只能請各看倌多包含囉。

 

23. 軟體工程 (Software Engineering) 書系

Software Engineering: A Practitioner's ApproachSoftware Engineering (9th Edition)

會看軟體工程的書,其實是我早期在準備 MCSD 的 Analyzing Requirements and Defining Solution Architecture 時,針對不足的知識補足而開始的,在 2000 年時,台灣的軟體工程中文書並不多,比較常見的是 Roger. S. Pressman 的 [Software Engineering: A Practitioner's Approach],是一本黑皮的大部頭書籍,雖然內容豐富,但翻譯書的排版很差,閱讀起來很吃力 (眼睛),所以我第一本軟體工程的書不是買這本,而是後來由碁峰出版,Ian Sommerville 所著的 [Software Engineering],這本書和系統分析與設計的書一起讀會收事半功倍之效,系統分析與設計的書有一定程度會和軟體工程有重疊,雖然軟體工程著重的是軟體開發的方法,不過方法會有一部份用在系統分析與設計的流程中,所以兩邊的概論是相通的。

軟體工程的範疇由系統方法,需求擷取與分析,系統設計,開發流程,軟體測試,部署與維護策略,成本估算以及專案管理等,有許多內容現在都已切出來獨立發展了 (像開發流程和軟體測試),但這些書仍然可作為入門者的概論用書。

台灣的軟體工程一向做的都不好,其中一個理由是軟體工程在業界的使用不普遍,但有更多的比例是主事者不願意採用,以台灣這種短視近利的商人居多的環境而言,想長久經營軟體工程,老實說就像導入資訊系統一樣,如果沒有高階主管的支持的話,真的,做夢比較快。

 

24. 軟體開發實務書系

我很愛看這類的書,它們都有一個特性:都來自實戰環境,且這些書中都把理論和實務中的應用有深切的描述,對於許多在大學中學到一堆理論的學生,以及在業界工作許久的上班族而言都是必讀的,這些書中最重要的精華,是作者想要傳達的 Best Practices,這些 Best Practices 都是經過產業驗證可行的,對於不知道哪些技術如何,或該應用到某個領域時,這些書或多或少都有幫助,而對於入行不久的工程師來說,這些書可以避免他們走更多的冤枉路。

[Software Requirements] 這本書對我的幫助尤其大,它以淺顯的文字來介紹軟體需求這件事,從需求的分類,如何擷取需求,可用的方法,語意的需求分析,功能與資料欄位的箤取以及文件化需求等,書中也串接了不少 real case 的對話,讓讀者更能了解使用者或分析者之間的角色扮演與工作。

[How we test software at Microsoft] 這本則是軟體測試實務的必讀經典,書中介紹了微軟自己的軟體測試工具,軟體測試方法以及理論等,很適合想導入軟體測試機制的公司或軟體團隊,不過這本書中有不少的理論介紹,這些理論可能在閱讀上會有些吃力。

[Code Complete] 則是許多網友推薦的好書,我就不贅述了,可參考這篇書評

[Writing Secure Code] 介紹了在開發程式時可能會有的 Security Considerations,從 Buffer Overflow,密碼演算法,存取控制以及資料加解密等,都有提出一些實務上的建議與作法,如果想要訓練自己撰寫較安全的程式碼的開發人員,可以好好的讀一下這本書。

它們也可以當做不錯的廁所文學,或是當成小說來看,尤其是經過經驗的累積後再回來看這些書時,會更有感覺。

 

25. 軟體開發評論書系

說到軟體開發的評論,大概第一個想到的是約耳 (Joel Spolsky) 的網站吧,約耳自己是一間軟體公司的經營者與軟體的開發者,由他來評論軟體開發這件事我個人覺得是相當適合的,而他的評論文有些一針見血,有些恢諧風趣,有些又切合事實,所以當 [Joel on Software] 在台灣出版時,我第一時間就去書店買了,書中所節錄的文章有些真的反映了現在軟體開發的現實,時程的管理與團隊開發的面向,當然也有關於找人這個話題,而在他的第二本書 [More Joel on Software] 中,對人才,學生的訓練等有更多的著墨,我個人認為唸資訊科系的學生都該讀讀這幾篇文章,看看一位真正會受紐約軟體開發商所認可的學生應該修過的課程與具備的能力到底有哪些。

[人月神話] 是台灣軟體業界推薦的重量級書籍之一,作者認為軟體開發的生產力不會因為開發人員人數投入的多寡而成正比的加快,而是應該由熟練或已有合作默契的開發人員團隊來執行,才會有較滿意的生產力與品質,同時加人不代表可以降低團隊成員的負擔 … 等,也有很多網友發表閱讀心得

雖然這些書很有趣,但是有些會帶有一點宗教信仰的味道,而且個人色彩也難免過重,所以如果不愛看太過個人色彩的文章的人,自己可要斟酌一下。

 

26. Project Management: A Systems Approach to Planning, Scheduling and Controlling (Harold Kerzne 著,Wiley 出版)

專案管理 (Project Management) 好像這幾年突然莫名奇妙的變成顯學了,各個產業似乎都吹起 PMP 的風潮,只是到底學專案管理是為了那個理論,還是為了那張紙 (PMP)?我想這答案每個人心裡想的都不同,也沒有標準答案。不過專案管理知識仍然是資訊管理科系需要學會的東西,因為資管系出身的人比較有機會管理軟體專案團隊,或是在產業工作數年升級到專案經理的主管級人物,都會需要學習專案管理這門學問,而 [Project Management: A Systems Approach to Planning, Scheduling and Controlling] 這本書算是專案管理的聖經本之一,將 PMBOK 中的專案管理流程,工具與方法等作了有系統的說明與介紹,對想學習專案管理或是考 PMP 的人來說是非常重要的書籍。

如果說想要考 PMP,那 PMBOK (Project Management Body of Knowledge) Guide 4th 一定要讀。只是台灣補習風這麼盛行,PMI 又要求一定要取得 35 個 PDU 才准考 PMP 的情況下,想要靠自修來考 PMP 可能要很辛苦。

 

27. 物件導向技術書系

   

只要你用的是物件導向的程式語言,不論是 C++, Java, Object Pascal (Delphi), VB 還是 C#,一定會至少碰到物件導向的三個性質:封裝 (Encapsulation), 繼承 (Inhertiance) 與多型 (Polymorphism),但你想過這三種性質可以產生出至少 20 種的設計模式 (Design Pattern) 嗎?四人幫幫你找出來了,[Design Patterns] 這本書是設計模式界的聖經書,作者使用了 C++ 和 Java 來輔助介紹各種不同的設計模式,只是 Design Patterns 比較像是文言書,很多人看不懂 (我是沒完全看懂啦 …),所以也有很多作者試著用不同角度的文字表現來介紹 Design Pattern,[大話設計模式] 和 [設計模式之禪] 就是其中兩本,不過這兩本書的文字與用語相對親和。

物件導向的另一個面向,則是系統分析與設計,物件導向分析與設計 (Object Oriented Analysis and Design) 著重於使用物件導向觀念來分析與設計系統,而 UML (Unified Modeling Language) 扮演了整個分析與設計的溝通角色,不論是 Use Case, Sequence, Class, State, Deployment, Component 等圖,經常用於分析與設計文件中,而 [UML 物件導向系統分析與設計] 一書對 UML 與系統分析部份著墨許多。

說到 UML 的學習,台灣知名作者邱郁惠老師所著的幾本 UML 書,也是值得一讀的書系,邱老師本身也有 OCUP 的認證資格,而他的書用字淺顯易懂,適合 UML 的初學者閱讀。

 

28. 軟體構築美學 (Brownfield Application Development in .NET,Kyle Baley and Donald Belcham 著,Manning Publications 出版)

如果你對物件導向以及近代軟體工程的認識不夠的話,這本 Brownfield Application Development in .NET 非常適合你,因為它由一個可能還有機會再繼續使用,卻可能是眼下看起來很爛的程式碼與架構 (書中將它稱為 brownfield,棕地之意),在適當的軟體工程架構與物件導向方法的薰陶下,有可能會改頭換面重獲新生。書中對一些新的物件導向方法有相關的介紹,像是 IoC (Inversion of Control), AOP (Aspect-Oriented Programming) 等,以及軟體版本管理和軟體測試的架構,作者在本書中很強調持續整合 (Continuous Integration) 的概念,透過不斷的 CI,讓軟體團隊持續融入具生產力的軟體開發概念,以提升軟體開發的生產力與品質。

 

29. WPF, WCF 與 WF 技術書系

Applications = Code + Markup: A Guide to the Microsoft  Windows  Presentation Foundation (Pro - Developer)Windows Presentation Foundation Unleashed (WPF)Essential Windows Presentation Foundation (WPF)

WPF (Windows Presentation Foundation) 是 .NET Framework 3.0 開始才出現的新一代 Windows 應用程式開發模式,WPF 的開發是以 Code 和 Markup (XAML) 組成的,Windows 大師 Charles Petzold 也為 WPF 寫了一本 [Applications = Code + Markup] 的書,以 Programming Windows 書系一貫的風格來介紹這個全新的 .NET API,同一時間 SAMS 出版社也出了一本 [Windows Presentation Foundation Unleashed],不但是介紹 WPF,而且是以全彩的方式出版,台灣的中文翻譯本也是全彩的 (出版社很佛心),對開發人員來說,這兩本都是很適合入門 WPF 的書。另外一本 Essential WPF 則是適合已有程式經驗的 .NET 開發人員入門 WPF,我個人認為三本都不錯,但 WPF Unleashed 較適合喜歡彩色版面的讀者,而 Applications = Code + Markup 則適合想按步就班的開發人員入門之用。

Microsoft  Windows  Communication Foundation Step by Step (Step By Step Developer Series)Inside Windows  Communication Foundation (Pro Developer)MCTS Self-Paced Training Kit (Exam 70-503): Microsoft® .NET Framework 3.5 Windows® Communication Foundation (Pro Certification)

作為 Windows 新一代通訊的核心,WCF 擁有許多重要功能,包含 TCP/UDP/HTTP 等的通訊能力,開發人員只要訂定 Service Contracts, Data Contracts 與 Message Contracts,再透過 Configuration 的方式,就可以設計出具有網路能力的 Client 或 Server 應用程式,但由於它的包山包海能力,也讓 WCF 變得異常難學,尤其是五花八門的組態設定,以及不知何時使用的組態設定等,都讓 WCF 在實質上不易學習與應用。因此有本好書可以帶你進入 WCF 的領域是很重要的,而 [Microsoft Windows Communication Foundation Step-by-Step] 就是這類書的代表,這本書在台灣也有中文版本,由 LOTOTA 翻譯,內容不像 MSDN 的 WCF Documentation 般生硬,文字也很親和,適合入門者閱讀。如果想要再深入一點的話,[Inside Windows Communication Foundation] 深入了 WCF 的內部,探討許多在核心部份的組態設定與作法,這本書比較適合已學會一些 WCF 的基礎的人來讀。若想要了解 WCF 的全貌的話,那麼 WCF Training Kit 會很適合,它充份的介紹了 WCF 的所有功能,但它是以準備考試為導向的書,因此可能不會講的太深入,且需要別的 WCF 書來輔助。

至於相對比較冷一點的技術:WF (Windows Workflow Foundation),則是以工作流程應用程式為標的所研發的,工作流程應用程式最重要的概念之一就是流程設計以及流程之間應該做的事以及狀態的管理等,而 WF 在 Visual Studio Designer 的支援下具有圖形化的設計介面,可滿足基本的工作流程應用程式開發,而 [WF 新一代工作流程開發實務] 則是台灣唯一針對 WF 技術所著的書,對想要了解並學習 WF 的開發人員來說,這本書很適合,但它真的只是帶入門而已,如果想要再深入一點的話,需要搭配一些國外的 WF 書。

我咧 … 都寫了三篇了,還是沒有全寫完,次回再補囉。