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

在我前一篇文章中,介紹了很多本當年曾經給我許多重要知識的書,也有不少朋友覺得這是懷古文 … 不過說到古,我也才三十好幾,沒有到可以拿出許多古物出來開博物館的年紀,要說古的話,有好幾位真的是夠古,而且是古到 Apple II, IBM MAINFRAME, 8086, 8088, … 都可以講的出來的 XD,但我就不說是誰了~

在我前一篇文章中,介紹了很多本當年曾經給我許多重要知識的書,也有不少朋友覺得這是懷古文 … 不過說到古,我也才三十好幾,沒有到可以拿出許多古物出來開博物館的年紀,要說古的話,有好幾位真的是夠古,而且是古到 Apple II, IBM MAINFRAME, 8086, 8088, … 都可以講的出來的 XD,但我就不說是誰了~

在說到 .NET 的好書前,我前一篇文章還少一個部份沒說,容我補述 …

 

11. 演算法書系 (algorithms)

我承認 … 我演算法不夠強,因為我的離散數學不夠強 Orz,雖然我喜歡數學,但卻不喜歡看不懂的數學 … 自唸書以來,我自己的數學能力並不差,但離散數學真的打中我的罩門 … ,這點也完全反映在我考研究所的時候,尤其是成大資管的科技組很愛出演算法的考題,資料結構的分數不難拿,但演算法往往是決定是否能考上的關鍵。不過也拜研究所考試之賜,我讀了好幾本演算法的書籍,但是老實說,幾乎都是天書,只能由圖形或是演算法的程序來思考,至於時間複雜度的計算什麼的,我只能放棄了,真的看不懂 囧。

說到演算法的聖經,絕對非 MIT Press 所出的 Introduction to Algorithms 莫屬,考研究所必看的書,這本書裡面集合了相當多的演算法,從一開始的簡單演算法,分而治之 (Divide and Conquer),動態程式規劃 (Dynamic Programming),貪婪演算法 (Greedy Algorithm),一直到一些常用的排序演算法,雜湊法,隨機演算法 (random algorithm),二元搜尋樹 (binary search tree),紅黑樹 (red-black tree),圖形演算法,生成樹 (spanning tree),最短路徑演算法 (shortest path algorithm) 等都有提到,這些都是資料結構中出現過的,但演算法著重的是這些資料結構以及計算方式的數學理論,也就是非常強調時間複雜度 (Time Complexity) 的計算與演算法的數學推導,若對離散數學不熟的話,看不懂的機率是非常非常高 (我也很多看不懂)。許多學校的演算法課程都用這本書上,所以它也順理成章的成為研究所考試的聖經本了。

編按:這本書以前曾經出現中文的翻譯版本,我也在書店翻過,但當時認為目標並不在此所以沒購入,據許多讀者反應中文翻譯本翻的很爛,現在這本書也已絕版,但大陸簡體翻譯書有在台灣出現,但我並沒細讀簡體中文的翻譯書,故無從得知簡體中文本的翻譯品質,也許下次去簡體書專賣店時可以找來讀一下。

可是這本真的天殺的看不懂,所以我又買了幾本書,像是:

其中 Data Structure, Algorithms and Applications in C++ 這本書同時擁有資料結構和演算法的內容,很充實,和 Fundamentals of Data Structures in C++ 一樣重要,而 Foundation of Algorithms using C++ Pseudo code 也很不錯。

 

12. 學貫的 .NET 書系

在 2002 年時,Visual Studio .NET 2002 才剛推出沒多久,市面上能找到的 .NET Framework 1.0 與 C# 的書,大概就只有學貫所出的這幾本書吧,這些都是由恆逸資訊的講師所撰寫,說明了 C#, .NET Framework 程式設計以及 ASP.NET 程式設計的方法,也提供了不少範例,我的 .NET 之旅就是由這三本書開始。

由於 ASP.NET 的設計是全新的觀念,必須要跳脫 ASP 時代的作法才能發揮它的能力,然而當時不少 ASP.NET 的書仍舊以 ASP 的觀念來講 ASP.NET,這對初入門者來說會造成觀念的混淆,而 [精通 C# 與 ASP.NET 程式設計] 書中的介紹完全以全新的觀念來說明,在學習 ASP.NET 時才不會又和 ASP 攪在一起。

我最常看的是 [C# 與 .NET Framework 實戰演練] 與 [精通 C# 與 ASP.NET 程式設計] 兩本,[ASP.NET 資料庫開發實務] 反而很少看,原因是這本書並沒有寫的比另外兩本好。而 [C# 與 .NET Framework 實戰演練] 這本寫的東西又是三本書中最多的,看這個可以學到不少 .NET 的概念,後來這三本書也有改版,只是內容都沒什麼變 (VS.NET 2002->2003 其實真的變化很少),只是換個書皮而已 …。

 

13. Wrox Press 的 .NET 書系

Screenshot - 4990.gifCover image for product 0764543776 Professional Windows Forms

Wrox Press 的 Programmer to Programmer 書系,一向是以厚,以及專門寫給程式設計師而聞名,我經常以紅皮書來稱呼它,因為它一向都是以紅色的書皮作為書籍的封面,而且只要是開發工具,資料庫或技術,Wrox Press 幾乎都有出書,微軟系列的工具則是它出書的大宗,我買的書有 C#, ASP.NET, ADO.NET, XML, .NET Framework 與 Windows Forms 等書,它們都有中文翻譯版,除了 Professional C# 是等不及了才買英文版外,其他都是中文翻譯版。

Professional C# 是一本厚達一千多頁的書,將 C# 的語言特性完全且詳細的描述,而且有相當豐富的範例程式 (sample code),以及作者所開發的範例應用程式 (sample application);Professional ASP.NET 則是深入介紹了 ASP.NET 核心特性,控制項,HTTP Handler/Module 與安全性等功能;Professional .NET Framework 介紹了 CLR 與 .NET Framework Class Library;Professional ADO.NET 完整的剖析了 ADO.NET 這個資料庫用戶端函式庫;Professional Windows Forms 對 Windows Forms 與 Windows 應用程式開發有完整的介紹。我的 .NET 能力是看了這些書奠定的基礎,它們在當時可說是除了 MSDN Library 外最詳盡的 .NET Development 叢書了。

另一個與 Wrox Press 旗鼓相當的是 Addison-Wesley 的 .NET Development Series 書系,不過我印象中這個書系並沒有被翻成中文,所以只能看原文書。另外一個考量是,原文書隨便一本都是以千起跳的,可以買二本中文書了 Orz。

 

14. Programming Windows, Programming Windows with C# (Charles Petzold 著,Microsoft Press 出版)

Programming Windows, 4th edition    Programming Microsoft Windows with C#

如果你是一位 Windows 程式設計師,卻沒看過 Charles Petzold 的書,那可能你要去買本來看一看,因為 Charles Petzold 是 Windows 程式設計教父級的人物,他的書是寫 Windows 應用程式的人必讀的,為什麼這麼說?你可以到他的網站去看,他從 Windows 1.0 開始就撰寫了 Programming Windows 這本書,而且隨著不同的 Windows 版本改版,目前最新的版本是 Programming Windows 5/e,而且仍承襲本書系列的優良傳統:大量的 API 介紹,本書涵蓋了許多重要的 Windows API 說明,這也是為什麼寫 Windows 應用程式的開發人員一定要看這本書的原因,不論你是用 C/C++ 還是 VB 或其他程式語言,只要有使用 Windows API 的話,這本書就應該要在你的案頭。

台灣有翻譯 Programming Windows 95 這本書,是由松格出版社翻譯的,但它被分成上下兩集,其實我個人是不太喜歡這種分法,我比較喜歡一次購足,而不是分批購買。而 Programming Windows 5/e 是由文魁翻譯的,它的厚度以磚頭來比喻一點都不令人驚訝。這本書後來也有印行復刻版。

相較於 Programming Windows,他的 Programming Windows with C# 反而在台灣並沒有受到預期的歡迎,我個人的感覺是也許在 .NET Framework 上,API 的用量很少且都是以類別庫方式存在,也許是 Charles 第一次撰寫這類型的書吧,在運筆上仍不脫 Programming Windows 一貫的風格,而且這本書也是很厚的一本書,聚焦於 Windows Forms 開發,Charles 把 Windows Forms 的各個部份都拆解並介紹一遍,如果是開發 Windows Forms 應用程式,這本書也是值得一看,但讀者要有不會看到睡著的心理準備 :)。

 

15. Programming Windows with MFC (Jeff Prosise 著,Microsoft Press 出版)

要說 Charles Petzold 是 Windows 程式設計的教父,那 Jeff Prosise 可以說是 Windows MFC 程式設計的教父了 (不過教父不只他一個就是了 :) ),他所著的 Programming Windows 95 with MFC 在當時可說是以 MFC (Microsoft Foundation Classes) 開發 Windows 應用程式的開發人員必讀的經典,Programming Windows 95 with MFC 當時在台灣由松格出版社翻譯,然而不但是名稱被改掉,還多加上了一篇 ActiveX 的內容,侯捷老師對此有一些評語,我個人認為這本書已經夠厚了,再加上 ActiveX,又讓它的體積更大了。不過它的新版 Programming Windows with MFC 2/e 由文魁出版社出版,目前在架上還買的到。

這本書是以 MFC 為載台來介紹 Windows 程式設計,因此它的主力是 MFC 中的各種類別,而不是專注於 Windows API 本身,讀者可以透過這本書來學習怎麼應用 MFC 來開發 Windows 應用程式,若配合 Inside Visual C++ 以及侯老師的深入淺出 MFC 一起服用,相信會讓讀者功力大增,而且 Programming Windows with MFC 的介紹重視的是基本功,你看不到花俏的程式設計技法,但卻有很豐富的基礎類別運用。

我以前也擁有松格出版的 Programming Windows 95 with MFC 翻譯書,記得是由黃昕暐老師所譯,可是一樣毀於 2001 年的七一一水災,現在在二手書市中也找不到此書了,不然我可能會再把它買回來。

 

16. Advanced Windows, Windows via C/C++ (Jeffrey Richter 著,Microsoft Press 出版)

Advanced Windows

Jeffery Richter 是 Windows 作業系統與程式開發的重量級人物之一,幾乎是可以和 Charles Petzold 和 Jeff Prosise 齊名,他早期所著的 Advanced Windows NT 以及 Advanced Windows 3/e 都是以 Windows NT 為主要標的,它和 Programming Windows 的不同,在於它介紹的是更深層以及進階的 Windows API,舉凡基礎服務,Security,Registry,ACLs,Process/Thread,Process and Thread Synchronization,I/O,DLL,Unicode,Exception Handling 與較接近核心的 API 運用等,在 Advanced Windows 書系中有相同豐富的介紹,對於想進一步應用 Windows API 實作服務以及進階系統處理的開發人員來說,Advanced Windows 書系是非常重要的經典。

編按:這本書被改過好幾次名,原先是 Advanced Windows NT,後來變 Advanced Windows,再來變 Programming Applications for Microsoft Windows,最近則是 Windows via C/C++。

 

17. CLR via C# (Jeffery Richter 著,Microsoft Press 出版)

Jeffery Richter 不愧是 Windows 開發的重量級人物,他也很擅長撰寫系統工具來深入到 Windows 作業系統內,這點也反應於 .NET Framework 上,[CLR via C#] 就是他研究與剖析 .NET Framework 的終極著作,只要是 .NET Framework 與 C# 的開發人員,都一定要看這本書,它介紹了許多 .NET Framework 的核心觀念,舉凡一開始的資料型別,組件與型別描述,CLR 的運作機制,事件與委派,介面與泛型,自訂特徵 (attributes),到 Reflection,例外處理,GC 與記憶體管理.CLR Hosting 與動態程式設計等,幾乎貫穿了 .NET Framework 所有重要功能,讀了它以後,絕對可以讓 .NET 的功力大增,且這些功能都可以應用於 Windows 和 Web 平台。

只是,這本書並沒有繁體中文翻譯版,似乎沒有出版社想出,但對岸卻有簡體中文的翻譯版,這著實令人汗顏,如此重要的技術書籍竟沒有出版社願意出來翻譯,多多少少也反應了台灣電腦書市的殘酷現實:高階的技術書沒人願意出版,永遠都是入門書,台灣難道永遠都在入門嗎 …。

 

18. Windows Forms Programming with C# (Erik Brown 著,Manning Publications 出版)

Windows Forms Programming with C#

如果你覺得 Programming Windows with C# 這本書太過大部頭,那麼你可以選擇看這本書,因為這本書是 Programming Windows with C# 的一半厚度,但該有的都沒有缺,相關的控制項介紹一樣也沒少,台灣有出這本書的翻譯版,當初是在好友 Clark 的書架上發現的,簡單翻閱後覺得這本書很不錯,因此向 Clark 借來閱讀,書中從基礎的 Visual Studio .NET 操作開始,Windows Form 的基礎使用,控制項,到深入的 SDI/MDI Programming,Data Binding 等都有,不過這本書是以 .NET Framework 1.1 為藍本撰寫的,因此如果是較高版本的 .NET Framework,可能要稍微過版一下,以免在書中找不到新版的控制項。

 

19. 更深入了解 Windows 作業系統的數本好書。

Windows® Internals: Including Windows Server 2008 and Windows Vista, Fifth Edition (Pro Developer)

如果想要深入去了解 Windows 作業系統的功能與行為的話,Windows Internals 絕對是要閱讀的經典,它解釋了許多 Windows 作業系統核心的運作,而且也有撰寫不少程式碼驗證,這本書在台灣有中文翻譯版,但非常厚,是一本大部頭的書。而潘愛民教授的 Windows 核心原理與實務開發則是以 Windows 原始碼為主,利用剖析 Windows 原始碼的方式來介紹 Windows 作業系統核心層次的許多功能,對於無法取得 Windows 原始碼的我們而言,這本書可以一窺 Windows 作業系統核心層的運作方式,以及被允許釋出,於書中展示的少量 Windows 原始程式碼。

 

20. Inside SQL Server 書系 (Microsoft Press 出版)

若想要深入了解 SQL Server,那麼一定不能錯過 Inside SQL Server 系列,這本書也是早期我學習 SQL Server 的第一本書,它除了介紹了 SQL Server 的發展史外,對於 SQL Server 內部的許多部件 (查詢處理器,查詢最佳化器,交易,檔案儲存,效能調校與 SQL 指令等) 都有詳盡的介紹。Inside SQL Server 在 2005 開始被切分為數個部份,也許是因為它太大了,若寫成一整本的話可能會破 2000 頁吧,分開也許是個好決定,但我前面也說過,我比較喜歡一次購足 …

 

21. Microsoft Windows DNA 2000 解決方案開發實務 (張智凱,許薰尹,鄭淑芬著,華彩出版社出版)

這本書是在 Windows 2000 時期,為介紹 Windows DNA 架構所撰寫的一本書,作者都是恆逸資訊的講師,他們以 MSDN 上的一個範例專案 Fitch and Mather Stocks 為藍本,介紹 Windows DNA 中的開發技術,包含 COM+ 元件技術,Event,Queued Component 與 Object Pooling,ADO 以及 Web 開發技術,和 Designing Component-based Applications 這本書很像,但我個人覺得 Designing Component-based Applications 的內容比較好,但這本書以範例專案剖析的方式,我覺得是很好但也很大膽的嘗試,這本書是 MSDN 導讀系列的第一本,但很可惜也是最後一本…。

 

22. Inside COM (Dale Rogerson 著,Microsoft Press 出版)

這本書是 COM 技術的官方經典,如果想了解 COM (Component Object Model) 的系統層次的話,那本書是一定要讀的,它介紹了 COM 到底是什麼東西,COM 介面與實作,Registry 的資料,COM Client 與 COM API 的使用等,不過我認為這本書要和 Essential COM (COM 本質論,Don Box 著) 一起服用會有更好的效果。

 

其他還有,下回再述吧。