1991年,我写作了《Effective C++》。在此之前,我已学习C++多年。坐下来撰写本文的同时,我相信我的C++学习历程始于1986年,现在是2006,正好是我学习C++20周年和写作第一本C++图书15周年纪念。不过,记忆里——至少在我的记忆里——不敢保证,似乎有历史记录证明过我实际于1988年开始接触C++.如果是这样的话,那么现在应该是我与C++的19周年纪念年。虽然这个数字比不得20那么完整,但仍然说明C++于我已是多年老友。今年里,无论作何考虑,我都觉得我不应该关注C++的未来,而是回想它的过去。目前,C++的未来是热门话题,比如备受关注的下一个版本语言规范(C++0x),临近最后定稿阶段,首版技术报告已经出炉,二版也正蓄势待发。但我现在想驻足过去,做点与众不同的事:分门别类评选C++历史上最重要的贡献。
首先要公布的是最重要的五本C++图书。公布之前,我想先罗嗦几句。这些C++领域最重要贡献是在我个人阅历和准则基础上评选的,是我的主观看法,这点自不待言。而不得不说的恰恰是我个人的阅历和评选准则。
你们很多人不得不承认:过去20年里,我从未开发过商业软件,更遑论用C++写这类程序。不,不光过去,将来我也不会。因此,我不但不是真正的C++开发人员,更说不上是C++崇拜者。如果一定要扯点关系的话,那就是我在1985-1993年上大学时,用C++写过一个研究用软件,很小,就几千行代码,我一个人开发,它很快就成了历史的尘埃。自从我十余年前专心作咨询师以来,我的C++编程仅限于玩乐,比如“让我们看看它如何工作”(有时候也“让我们看看它能让多少编译器崩溃”),通常,都是一个文件就可以容纳的程序。make?谁需要讨厌的make?我以C++为生,但不是写C++程序。
和语言标准化亲密接触,于我的生活也没多大干系,因为我从未成为C++标准委员会成员,未被列入委员会的邮件名单,也从来没有参加过任何标准工作会议。我对委员会内部工作的了解——包括对语言有重大影响的工作——都靠阅读他人的文章,或者从他们那听说。因此我对像我们知道的那样推动了C++发展的那些重大努力知之甚少,可能只有委员会内部的同志对这些努力感受最深。
上面说了,我既不用C++写软件,也没为语言规范贡献力量,那我到底在干嘛呢?你可能满怀疑窦。基本上可以这么讲,我就研究C++本身以及它的应用。尽我所能,通过图书、杂志、新闻组、邮件以及和开发者、标准化委员会成员面对面交流,加上我自己写程序做实验玩儿等,我收集了大量有关C++的资料,然后对它们做整理、分析,最后集中打包(如写书、在杂志上发表文章、作技术报告等)提供给真正使用这门语言的朋友们,比如你。你们的工作是使用C++这个工具,开发有用的软件;我的工作是搜集、整理能帮助你们更好使用这个工具的资料。
我希望将自己定位为局外观察员,既不像程序员那样日复一日辛苦劳作,也不愿为标准化工作的纷繁琐事殚精竭思,但我要对二者都保持熟悉。这一系列的文章,就是我这个自封的局外观察员对C++历史上最重大贡献的总结。
所谓“最重大”,我指的是这些贡献对C++开发人员产生了最重大的影响。我的名单上所列项,很多都发挥了直接性的影响,我们也直接感觉到了。比如广泛使用的编译器、库和读者众多的图书与文章,它们的影响力非常直接。另外一些的影响则是间接的——我是说它们首先对中间渠道产生直接或间接的影响,然后由中间渠道直接影响我们(哈,绕口令,惹你讨厌了吧?)——比如你稍后会看到的、被我列为最重要图书之一的《ISO C++ Standard》,对于开发人员,它的影响是间接的,但对编译和库编写者的影响却是直接的。
有些贡献的重要性非常明显,比如和标准有关的。其他的,通常则需要时间老人来验证它们的影响力。因此,在C++圈子里出现相对较晚的,与已经存在较长时间的相比,更不容易列入我的名单。比如我的图书名单里,最晚的只到2001年。这倒不是说在过去五年里出版的图书就没有价值,而是说,以我来看,这些图书还没有表现出我名单上所列图书更大的重要性。如果过些年再来问我,或许就会有所变动了。