C++图书热点观察

转载自2005年第11期《程序员》杂志

不知不觉,C++迎来了自己20岁的生日。20年来,C++从一个实验室语言成长为软件产业一流主导语言,在实际应用中取得了巨大的成功,同时也催生了大量为技术人员耳熟能详的经典技术著作,比如Bjarne Stroustrup的《TC++PL》和《D&E》,Stan Lippman的《C++ Primer》,Scott Meyers的《Effective C++》,GoF的《Design Patterns》,Andy Koenig的《Ruminations on C++》,Herb Sutter的《Exceptional C++》,Andrei Alexandrescu的《Modern C++ Design》,Addison Wesley的“C++ in Depth”系列等。C++领域的一些经典图书不但对于C++语言的发展起到了巨大的推动作用,而且对于其他相关技术领域也起到了指导和促进作用。例如Scott Meyers的“Effective系列”,开辟了技术图书写作的新风格,而“Design Patterns”的影响,更是远远超出C++的范畴。这些经典的好书,已经成为C++辉煌历史的一部分而被人们铭记。

20年后的今天,软件产业的规模和环境已经发生了深刻的变化。如今企业级应用整合与开发的任务主要由JavaC#Visual Basic以及各种新型动态语言来承担,而C++的应用场合也有所收缩,不再是像1990年代中期那样从上到下包打天下,而是呈现出鲜明的应用领域特色。相应的,近期的C++技术图书也更加注重在特色领域的发挥。下面我们分别从几个角度来了解近期C++图书的热点,并且展望未来一年中C++技术图书中值得注意的选题。

  

经典著作全面翻新

这一两年,一大批经典技术图书都经历了一次更新换代,C++经典图书自然也不例外。第一个要说的就是Scott Meyers的《Effective C++》。这本书在1991年推出第一版,1998年推出第二版,在C++技术的传播与教育方面居功至伟。包括我在内的很多C++开发者都是通过阅读这本书而寻得升堂入室的门径。今年,《Effective C++》推出了第三版。这一版决不是第二版的简单修订,而是根据八年来C++所发生的巨大变化而进行的一次全面改写,几乎是一本全新的书。其内容涵盖了旧版的精髓,也体现了诸如Boost库、TR1标准等C++领域最新成果。如果说这本书的内容发生了重大的变化,那么可以说不变的是这本书的地位——它仍然是每个严肃的C++开发者都应当反复阅读领悟的重要作品。

另一本翻新的著作是Stan Lippman的《C++ Primer》第四版。这本书的历史地位无需赘言,迄今为止仍然是对C++介绍最全面的一本著作。第四版进行了大幅度的删修,篇幅减少近300页,而内容也大幅修改,以反映C++近年来的变化。对于希望系统学习C++的新手,或者希望拥有一本手册以备查的老手来说,这本书的地位是不可取代的。

有传言说GoF打算翻新“Design Patterns”。该书第一版于1995年初版,此后十年,设计模式领域的理论探讨和实践基本上仍然围绕这本书中的观点和内容进行,少有突破。已经有不少开发者对于这种情况表示了不满,认为初版中的一些观点已经过时,甚至对现在的一些技术应用构成思想上的羁绊。但是此书实在声名太盛,真正的突破恐怕只能由GoF自己完成,因此本书新版如果推出,必将是技术界内的一桩大事。不过传言亦称,GoF对于新版“Design Patterns”是否继续使用C++作为示范语言存在分歧。不管怎样,相信广大读者会对这本书抱有高度的关注。

 

 

 

新锐佳作剑走偏锋

近年来,一批C++技术新锐崛起,给我们带来了一批令人耳目一新的C++好书。在技术上,这批图书偏重于C++模板风格的巧妙运用,富于智趣而对实践的关注略显不足。这类图书以2001Andrei Alexandrescu的《Modern C++ Design》为开端,之后又有《Boost Graphic Library》,《C++ Template Metap- rogramming》等。这些书一度以其新颖的思想和奇妙的技巧吸引了大家的目光,但由于缺乏实践的支撑,逐渐褪去光环。这两年,这类题材逐渐缩减。即使像Andrei Alexandrescu那样的模板技术奇才,最近与Herb Sutter合作的《C++ Coding Standard》也并没有过多地炫耀模板技巧,而是中规中矩地对C++编码的经验做了贴近实践的总结。这本书与Steve McConnell的经典著作《Code Complete II》相配合,应成为每一位C++开发者必读的基本著作,将帮助读者奠定坚实的编码和微观设计技术基础。

BoostC++社群尽人皆知的“准标准库”,其中大量的组件已经基本成熟并可供应用。最近Bjorn Karlsson撰写的《Beyond C++ Standard Library: An Introduction to Boost》是市面上第一本全面介绍Boost的著作。对于那些勇于吃螃蟹的C++先锋开发者来说,这本书无疑是值得一读的。不过在C++社群,对Boost库还存在争议。大部分C++实践者比较保守,这本书对他们的吸引力恐怕将打折扣。

Stephen Dewhurst是近年来比较活跃的新锐作家,他的两本书《C++ Gotchas》和《C++ Common Knowledge》,单独来看都是值得一读的好书,可惜现在不是1995年,而是2005年,Scott MeyersHerb Sutter煌煌巨著已然危急九五,Dewhurst只好自叹施手略慢。不过我们希望他能够再接再厉,找到创新点,突破前人。

相比之下,中文版即将问世的《Imperfect C++》就比较有新意,很值得一读,以至于Bjarne Stroustrup都相当赞赏。这位C++之父表示,如果不是因为该书太厚,他一定会将其纳入著名的“C++ in Depth”系列。这在事实上肯定了本书的高质量。我个人认为,这本书是一年来出版的最值得精读的C++著作,其中对于不少实践中经常遇到的难题进行了深入的分析,给出了实实在在的解决方案。作者Matt Wilson凭借此书以及其系列模板程序库崛起为C++社群中引人注目的新星,实在可喜可贺。

  

关键领域期待佳作

未来C++将主要在系统级复杂应用程序、高性能、实时中间件及嵌入式领域施展,同时,随着多核CPU的的普及和网络安全重要性的空前提升,在并发程序设计和安全程序设计方面,C++也将获得新的应用空间。因此,在这些具体领域的C++著作更值得关注。

1996年,John Lakos出版了《Large Scale C++》一书,该书与 “C++ In Depth”系列中的《Applied C++》一样,是C++著作中极少数实战派佳作,其中字字句句都来自于作者丰富的实际项目经验,对于一线的C++开发者来说是特别值得咀嚼体味的好书。可惜这本书在国内一直没有得到应有的重视,这可能跟本书中译本出版时间过晚,且翻译质量不佳有关。好消息是,John Lakos即将在2006年推出其新作《Scalable C++》。我本人将此书视为未来一年中C++领域最令人期待的作品。这一方面是出于我对于作者的高度信任,另一方面是由于该书题材的极端重要性。该书副标题为“基于组件的软件开发”,而“组件化”这一主题,是C++十几年来的一块心病。在未来,无论C++应用在何种场合,“组件化”是必不可少的基本要求。而COM技术虽然在组件化方面比较成熟,但是不具有可移植性,而且对于无须跨语言的C++开发项目来说过于复杂。因此,C++社群需要自己探讨经济适用的组件化实用方案。John Lakos本人从事大型复杂应用软件开发多年,在这方面的经验无人能敌,由他来对这个主题进行深入剖析,并且给出实际解决方案,毫无疑问是再合适不过的了。虽然这本书还在写作过程中,但是我们有理由对其抱有充分信心。在此我也呼吁本书中文版未来的出版者认真对待此书的翻译制作,不要重蹈《Large Scale C++》的覆辙。

说到COM,自从.NET推出,COM的书几乎一夜之间绝了种,几乎无人再勇于炒这碗冷饭。但这次出版界的茶实在凉得快了些,事实上直到今天,COM开发仍然是Windows平台上应用开发的一个重要方向。特别是在前两年微软Windows核心向.NET全面转型的左倾冒险主义的尝试以失败告终后,在可见的未来,Windows操作系统将继续构建在C/C++COM的基础之上——这就确保了COMWindows平台上的重要地位将至少延续到2011年之后。因此,COMATLWTL开发技术在未来几年都还是颇具意义的出版题材。特别是近年来ATL/WTL的发展之快,相比之下,技术出版在这方面出现了一个空白点。此外,开源的Mozilla项目提供了一个可移植到所有主流平台的COM实现,这对于C++开发者来说是很具有吸引力的,却一直没有出版资源的关注,令人遗憾。

C++近年来的一个应用热点是复杂网络应用的开发,ACE在这方面已经成为越来越流行的选择,而ICE作为目前可用的最先进的高性能中间件产品,崛起的势头很猛。这两方面目前都有一些好书,特别是最近出版的《ACE Programmers Guide》,对于ACE编程入门很有好处。而ICE 1.3版的手册早已由马维达先生译成中文,可在网上自由获得。不过坦率地说,这方面的图书还远远不够,ACE原作者Doug Schmidt所著的两卷本《C++ Network Programming》可读性和实用性不足,而ICE手册深度和广度都显不够,我们期望这方面能有更好的著作出现。

随着多核CPU的普及,并发程序设计将成为C++技术上的一个新热点。这方面目前的好书几乎没有,不知道这个巨大的空白将由何方神圣来填补。

同样,网络安全重要性的空前提升对C++开发提出了很多新的具体要求,很多C++老手面临一个“再教育”的问题。这方面Microsoft Press的《Writing Safe Code》,OReilly的《Secure Programming Cookbook for C and C++》,以及最近Pearson出版的《Secure Coding in C and C++》都是不错的参考。不过我发现目前C++开发者并未普遍重视这个问题。也许管理层还需要更加“血淋淋的教训”来刺激一下,才会有革新的动力。

在嵌入式方面,由于应用复杂度的逐渐提升和Symbian OS/Windows CE等面向消费的高级嵌入式操作系统的广泛应用,给C++提供了一个广阔的发挥空间。可惜在这方面,真正堪称经典的好书还是凤毛麟角,看来还需要时间和经验的积淀。不过有一本书特别值得一提,北航出版社去年引进的《嵌入式系统的微模块化设计》被国际嵌入式开发领域公推为数年来年度最重要的嵌入式软件开发技术著作,其中含有一些意义深远的创新思想,非嵌入式开发者也有必要了解此书的大致思想。

  

总结

程序设计语言数以千计,能够广为流传的不过几十种,而能够风光20年的更是屈指可数。Fortran已经问世50年,仍然是科学计算首选,C语言辉煌30年,至今老当益壮。C++顺利地度过了自己的20岁生日,相信属于它的日子还很长很长。作为C++开发者,我们也希望看到优秀的C++技术图书不断涌现。历史证明,C++领域内的技术创新,不但对于C++开发具有重大意义,而且对于整个软件开发技术都具有重大意义。我们有理由相信,在下一个十年里,以高水平C++技术专家和作家为代表的C++技术社群能够继续为软件技术做出突出的贡献。

阅读更多
想对作者说点什么?

博主推荐

换一批

没有更多推荐了,返回首页