评《Applied Microsoft .Net Framework Programming》
又读了一遍Jeffrey Richter的大作《Applied Microsoft .Net Framework Programming》。
这是我第二遍读这本书,第一次阅读的是电子书,当时对Richter就深感佩服。
说起Win32下的经典书籍,绝对要提到Richter的Programming Applications for Microsoft Windows。
对此我早有耳闻,但是从来没有过切身体会。但是在这本书让我真正感受到了大师的风采。
其中的很多内容,不光是对.Net Framework原理的阐述,也对其中的许多特质进行了个人的评价。这一点上,Richter在“原理”和“实践”的尺度上把握的很好,不少代码对于我可以说有着直接的帮助。
而且,Richter的评价真的是大师级的评价,对于.Net Framework的Bug也是说得让人心服口服。
从那时候开始,我向往的Richter中又多了一个(前两个是指挥家Karl Richter和钢琴家Sviatoslav Richter)。
可能是个人水平原因,对于此书的部分内容,似乎有点“非入门”的感觉。我觉得原先没有一定的编程经验,容易把这本书看的迷迷糊糊。特别是头尾附近的部分章节。
最近忽然想重新阅读此书,而且希望是纸版。当时在书店一逛,没有发现影印版,于是买回了李建忠先生翻译,清华大学出版社出版的中文版。
忽然发现,这是我难得希望看到的,也会推荐给别人说一定要读一遍的翻译作品,李建忠先生的翻译及其严谨,而且在相关部分的“译注”也让人不得不承认有相当的分量,在书中他也指出了Richter先生的部分错误。语言平实易懂,把我不少已经淡忘的和误解纠正过来。而且我喜欢在书上“涂涂画画”写点“批注”的本性又回来了。一遍看完,大呼过瘾。:)
Introduction
对.Net Framework进行了简单的介绍,提出了.Net Framework出现的目的、理念,和使用.Net Framework的基础。
Part I:Basics of the Microsoft .Net
虽然大标题上写着“Basics”,可是在我看来应该是本书中最难以理解的部分,却也是理解.Net Framework非常重要的部分。CLR,JITComplie,IL,GAC的理念和实现;模块(Module)、程序集(Assembly)的概念、内容以及使用方式等等。这些可谓都是.Net Framework中的精要,想要不只停留于应用,就要理解这些。但是也正如Richter在书中所说的:“For the most part, you don’t need to know about or understand how the CLR gets loaded. For most programmers, this special information allows the application to just run, and there’s nothing more to think about.”、“If you’re not interested in this subject, feel free to skip to the next section.”(Chapter 1 - Loading the Common Language Runtime),如果只需要正确高效地使用.Net Framework,更重要的是后面的部分。
Part II:Working with Types and the Common Language Runtime
这是使用.Net Framework中非常重要的一部分,不管是任何人都不能放过,必须了解的内容。个人认为,其中的概念性的内容虽然比较简单,但是比较多也很重要、特别是讲Boxing的部分。而且有个相当实用的部分就是Equals操作的实例代码,即解释清楚了Equals操作的方式和原因,又完全可以直接使用。其实这也是这本书的一个特征,这本书的确也应该成为.Net Framework程序员的案头必备。
Part III:Designing Types
这个部分的难度可以说……在整本书中处于下游,有一定.Net Framework代码经验的人就能够轻松理解,不过“事件”方面的代码又是能够直接用用的,真不错。
Part IV:Essential Types
这部分的内容有两个非常重要的部分。其中尤以第12章“文本处理(Working with Text)”为甚(其实看看这一章的篇幅就知道了)。对这一章内容的掌握很大程度上会直接影响到代码编写的质量和效率,其中对于System.String和StringBuilder的阐述可以说相当精彩。对于“委托”,我觉得可以和第11章“事件”结合阅读,毕竟“事件”是“委托”的一种直接而又典型使用方式。这个部分的内容重要,但是不晦涩,理解起来毫无困难。
Part V:Managing Types
第18章写的关于异常的概念、机制和传统不使用异常下面Win32的错误操作的比较等内容都不难理解,但是Richter对于自定义异常所提出的建议可谓相当重要。第19章的垃圾收集机制的解释非常透彻,虽然同样不是所有人都需要了解的,但是了解后对于CLR的一些做法的掌握能够在一定程度上,依靠合理使用垃圾收集机制,来增加代码的效率。同样,提到了小小的优化的技巧。最后一章,我觉得是.Net Framework的精髓之一了,这整本书似乎做到了“首尾呼应”。这一章结合了CLS Host,揭示了AppDomain的内容,也讲了.Net中强大的反射机制的重点。其中的示例代码也是有一定参考价值的。
整本书大概的描述也就这样了,个人觉得,Part II到Part IV适合所有人阅读,而且必须阅读,至于Part I和Chapter 20,就由读者根据自己的要求自行选择阅读了,如果不懂也没关系,多实践,说不定哪天就“豁然开朗”了。
这本书的确是.Net Framework开发人员的案头必备阿,拿到它以后,真的有种相见恨晚的感觉。不过这本书对于P/Invoke和COM互操作等方面似乎只是轻轻地一笔带过。如果读者对这方面感兴趣,可能就需要另外找资料了。这本书和Essential .Net相比,降低了一定理论高度,增加了很多实用的成分。不过即使如此,我还是不觉得它适合入门,呵呵:)
补(修订):
忽然,我也想重新阅读一遍Don Box的Essential .NET,也打算看中文版。因为中文版的封面实在是漂亮,呵呵。传说中的Essential COM和Essential XML未曾相见。第一次接触的依旧是.Net Framework。