博文视点的编辑让我写一篇关于《.NET Compact Framework程序设计 C#版》中文版的书评,花了一个上午,憋出这些文字来,基本上没有阿谀奉承的成分,个人感觉还是比较客观的(因为没有利益成分,没这个必要,哈哈)。贴一个把,解决自己blog的旱灾。

探索移动开发的新航路
――评《.NET Compact Framework程序设计 C#版》中文版

何宗键

移动设备与.NET Compact Framework
近年来,消费性电子产品在国内外都得到了飞速的发展,其中以PDA和智能手机为代表的个人手持设备的技术更新更是一日千里。

让我们以手机为例回顾一下。或许大家都还记得三年前的手机是什么样子,五年前、十年前的手机又是什么样子。是的,在短短的几年内,手机的通信技术迅速的经过了1G的模拟语音,2G数字语音,2.5G的数字语音 + 数据,并在逐渐向完全数字的3G时代过渡。与手机相关的硬件设备也在迅速发展,现在的一些智能手机上已经配备了几百MHZ的CPU、64MB的内存和几GB的Flash存储器。Intel的下一代Xscale移动处理器“Monahans”的处理速度已经可以达到1GMHZ以上。与硬件发展相对应的是手机软件的迅速发展,随着越来越多的应用需求推动,手机软件正在逐渐摆脱“裸机”编程这种比较原始的开发方式,嵌入式操作系统逐渐成为了手机软件中不可或缺的部分,手机软件的层次架构开始逐渐分明。

微软公司在10年前就推出了Windows CE,这个专为嵌入式设备设计的操作系统,经过十年的发展,Windows CE已经在移动领域取得了显著的成就。在PDA市场,Pocket PC已经超过了老牌劲旅Palm OS,成为了领头羊;在智能手机市场,Smartphone已经与Symbian和嵌入式Linux形成了三足鼎立之势。

我从.NET Compact Framework还未诞生之日起就开始接触Windows CE及Windows Mobile开发。几年来见证了.NET Compact Framework从Beta测试到正式发布到最新的.NET Compact Framework 2.0版问世的成长历程。毫无疑问为Windows CE开发的.NET Compact Framework是微软整个.NET战略的一部分,但是.NET Compact Framework走过的路却并不平坦。

在嵌入式设备上使用虚拟机与中间代码来开发无疑具有独特的优势,其实远在.NET诞生之前,微软就已经在Windows CE上开始了中间代码的尝试。我们可以想象一下,开发人员完全不需要关心底层的处理器类型,一次编译之后的代码就可以在ARM、MIPS、PowerPC等多种嵌入式CPU上运行,这对嵌入式开发者来说,简直是梦幻般的神话。但是在.NET Compact Framework诞生之初,对它的质疑和不满甚至要比赞美更多。这些问题大多也来自.NET的虚拟机与中间代码机制。

首先,许多嵌入式软件――尤其是一些可靠性和实时性要求比较高的场合――都强调对系统的可控性,.NET Compact Framework简化了开发的同时,开发人员也很大程度上丧失了软件运行效率与对底层的控制权,此外,选择.NET Compact Framework还会让整个操作系统的体积增大几兆。这是很多嵌入式开发人员不希望看到的。尤其是一些长久以来从事电子工程和控制领域的嵌入式开发人员对使用.NET Compact Framework有一些抵触情绪。其次,纵观整个.NET Framework BCL,服务端技术ASP.NET可以说是最华彩的部分。而客户端的WinForm由于需要在用户的机器上安装一个30几兆的.NET 运行时,所以一直推广的不是很好。而.NET Compact Framework中不可能也不需要包含ASP.NET,因此,砍掉了大量类库的.NET Compact Framework在功能上也受限。

但是任何技术都有其长处和短处,在技术的应用中,扬长避短才可以找到合适的发展路线。.NET Compact Framework及其类库的长处是移动设备应用程序的快速开发和数据访问。而不是实时性要求高的工业控制等领域。微软似乎也慢慢意识到了这些,在随着Windows Mobile 5.0推出的.NET Compact Framework 2.0中,.NET的类库得到了大幅度的强化,许多以前只能通过P/Invoke方式才可以实现的功能都可以通过.NET Compact Framework进行。而且在Pocket PC和Smartphone的产品中,都在ROM中固化了.NET类库,这也推动了.NET Compact Framework的应用。因此,我觉得如果要在Windows Mobile平台上开发应用程序,.NET Compact Framework应该是首要选择。
关于本书
我在同济大学教授基于Windows CE的嵌入式课程已经三年了,这三年中一个最遗憾的感受是中文资料的匮乏,在课程开设之初,在市场上想找一本中文的Windows CE方面的科技书籍作为教材都很困难。后来只能尴尬的让学生用MSDN作为参考资料,在我接触的一些国内Windows Mobile开发人员中,大多数也都是阅读英文资料自学成材,如果能有一系列中文的Windows Mobile开发书籍,就可以解决目前这个尴尬的现状。经博文视点编辑的介绍,我接触了《.Net Compact Programming with C#》的中译版。拜读了前面几章之后,颇有一些感想。

《.Net Compact Programming with C#》是Paul Yao和David Durant的作品,在Amazon上面有四星半的评分。全书涵盖的内容非常丰富,几乎包括了在.NET Compact Framework下开发应用程序所需要的所有知识。既包括.NET Compact Framework的基本原理,也涵盖.NET Compact Framework的体系结构;既包括了窗体控件编成,也涵盖了后台数据访问。.NET Compact Framework的开发人员完全可以把它当作一本案头的参考书。

现在有一些技术类书籍喜欢浮于表面,读过之后经常感觉“知其然而不知其所以然”。有幸的是《.Net Compact Programming with C#》这本书的作者并没有在本书中一味介绍一些函数或类库的使用方法,而是对.NET Compact Framework以及类库的一些底层机制和原理进行了探讨。例如在介绍垃圾回收的时候,作者不单介绍了垃圾回收的功能,还详细介绍了垃圾回收的过程,还介绍了.NET Compact Framework与桌面.NET Framework之间的差别,这样开发人员可以窥探.NET Compact Framework平台底层的机制,从而写出更优秀的代码。

从书籍正文中的一些插述中,可以看出作者在软件设计开发,尤其是Windows CE与.NET Compact Framework方面有丰富的经验,很多插述都是作者的经验之谈,从中经常可以找到闪光之处。可以对我们有很好的启迪。

在Windows CE中文科技书籍匮乏的今天,本书中文版的面世,让更多的中国读者可以阅读这本.NET Compact Framework领域的著作,也丰富了这类书籍的市场。实在是一件令人开心的事情。希望这本书可以给广大的移动与嵌入式开发人员带来更多的收获。