这两年来,时常听到读者或者朋友们问我“最近还有新书要出版吗”,我的回答是,有两本拖了很久的书快要出版了。我乐观地估计,这两本书在2005年都能出版,然而,不幸的是,这两本书都未能如期出版。从规模而言,这两本书都是小书,两三百页的书在计算机图书中实在很小(而且版面也不大);但是,书虽小,其英文原版都有不错的反响,甚至全球畅销。
《Effective STL中文版》
第一本书是Scott Meyer的《Effective STL》,原作于2001年6月份出版。国内的C++读者对于Scott Meyer一定不会陌生,而且许多人对这本书也是期盼之极。
清华大学出版社在原书刚出版时就得到了中文版版权,但中文版出版却在近5年以后了。我也了解到,在一个网站上,已经有人自发地把这本书翻译成中文了,我不知道该高兴还是遗憾,只是不希望这样的事情再次发生。
所幸的是,这本书已经出版了,虽然我还没有看到样书,但历经5年磨出来的书一定有非凡的品质,我对书的质量很有信心。只是希望看到书的那一刻,不会再有失落感。
《欺骗的艺术》
第二本书是Kevin Mitnick等人著写的《The Art Of Deception》(中文名《欺骗的艺术》),原作于2002年10月出版,这是一本在全球畅销的书,它不是一本技术书籍。作者Kevin Mitnick是美国的著名黑客,曾经因为非法入侵政府和大型企业的计算机系统而入狱。2000年出狱以后,他改变了生活方式,成为一名全球广受欢迎的计算机安全专家。这本书是他改过自新的一个见证。
2003年,这本书被中国一家出版社引进中文版版权。但遗憾的是,至今尚未出版。在出版社走流程已经有一年时间了,我打电话询问时,似乎还在冷落着。
一点感想
以我的经验来讲,每当出版社拿到一本好书的时候(所谓好书,可以根据作者的声誉,或者原版书已经赢得的口碑),会兴冲冲地找到译者,然后期望把翻译的时间尽可能压到最短,以赢得市场的最大效益。但等你紧赶慢赶好不容易把书翻译出来以后,出版社不着急了,出版流程中的任何一个小环节都有可能导致这本书被耽搁下来,理由有多种多样,反正话说出来都是圆的。对于大多数出版社,一本粗制滥造的教材的优先权比一本精致的经典技术专著要高得多;很多译者还是有责任心的,但编辑或者出版部门不见得有同样的责任心,甚至毫无责任心可言。
我对于每一本好书的热情,对于图书出版的热情,就是这样一点一点被销蚀掉的。多年以前就有很多声音在批评国内计算机图书出版业,可悲的是,至今仍无好转。国内不乏人才,但这样的出版业难以养育出一流的译者和作者;有些人提到问题的根源在于出版监管体制,或者稿酬体制,其实在我看来,问题在于从业者的态度,浮躁的心态,不负责任的态度是最要命的。
最后附上前面提到的这两本书的译序。
附录:
《Effective STL中文版》译序
就像本书的前两本姊妹作(Effective C++、More Effective C++)一样,本书的侧重点仍然在于提升读者的经验,只不过这次将焦点瞄准了C++标准库,而且是其中最有意思的一部分——STL。
C++是一门易学难用的编程语言,从学会使用C++到用好C++需要经过不断的实践。Scott Meyers的这三本姊妹作分别从各个不同的角度来帮助你缩短这个过程。C++语言经过了近二十年的发展,正在渐趋完善。尽管如此,在使用C++语言的时候,仍然有许多陷阱,有的陷阱非常显然,一经点拨就可以明白;而有的陷阱则不那么直截了当,需要仔细地分析才能揭开那层神秘的面纱。
本书是针对STL的经验总结,书中列出了50个条款,绝大多数条款都解释了在使用STL时应该注意的某一个方面的问题,并且详尽地分析了问题的来源、解决方案的优劣。这是作者在教学和实践过程中总结出来的经验,其中的内容值得我们学习和思考。
STL的源码规模并不大,但是它蕴含的思想非常深刻。在C++标准化的过程中,STL也被定格和统一。对于每一个STL实现,我们所看到的被分为两部分:一是STL的接口,这是应用程序赖以打交道的基础,也是我们所熟知的STL;二是STL的实现,特别是一些内部的机理,有的机理是C++标准所规定的,但是有的却是实现者自主选择的。在软件设计领域中有一条普遍适用的规则是“接口与实现分离”,但是对于STL,你不能简单地使用这条规则。虽然你写出来的程序代码只跟STL的接口打交道,但是用好STL则需要建立在充分了解STL实现的基础之上。你不仅需要了解对所有STL实现都通用的知识,也要了解针对你所使用的STL实现的特殊知识。那么,你该如何来把握接口与实现之间的关系呢?本书讲述了许多既涉及接口也关系到具体实现的STL用法,通过对这些用法的讲解,读者可以更加清楚地了解应该如何来看待这些与实现相关的知识。
这两年来,有关STL的书籍越来越多,而且许多C++书籍也开始更加关注于STL这一部分内容。对于读者来说,这无疑是一件好事,因为STL难学的问题终于解决了。我们可以看到,像vector和string等常用的STL组件几乎出现在任何一个C++程序中。但是,随之而来的STL难用的问题却暴露出来了,程序员要想真正发挥STL的强大优势并不容易。在现有的STL书籍中,像本书这样指导读者用好STL的书籍并不多见。
本书沿袭了作者一贯的写作风格,以条款的形式将各种使用STL的经验组织在一起,书中主要包括以下内容:
l 如何选择容器的类型。STL中容器的类型并不多,但是不同的容器有不同的特点,所以选择恰当的容器类型往往是解决问题的起点。本书中还特别介绍了与vector和string两种容器有关的一些注意事项。
l 涉及到关联容器有更多的陷阱,一不留神就可能陷入其中。作者专门指出了关联容器中一些并不直观的要点,还介绍了一种非标准的关联容器——哈希容器。
l 迭代器是STL中指针的泛化形式,也是程序员访问容器的重要途径。本书讨论了与const_iterator和reverse_iterator有关的一些问题。以我个人之见,本书这部分内容略显单薄,毕竟迭代器在STL中是一个非常关键的组件。
l STL算法是体现STL功能的地方,一个简单的算法调用或许完成了一件极为复杂的事情,但是要用好STL中众多的算法并不容易,本书给出了一些重要的启示。
l 函数对象是STL中用到的关键武器之一,它使得STL中每一个算法都具有极强的扩展性,本书也特别讨论了涉及到函数和函数对象的一些要点。
l 其他的方方面面,包括在算法和同名成员函数之间如何进行区别、如何考虑程序的效率、如何保持程序的可读性、如何解读调试信息、关于移植性问题的考虑,等等。
本书并没有面面俱到地介绍所有要注意的事项,而只是挑选了一些有代表性的,也是最有普遍适用性的问题和例子作为讲解的内容。有些问题并没有完美的解决方案,但是,作者已经把这个问题为你分析透了,所以最终的解决途径还要取决于作为实践者的你。
本书的翻译工作是我和陈铭、邹开红合作完成的,其中邹开红完成了前25条的初译工作,陈铭完成了后25条的初译工作,最后我完成了所有内容的终稿工作,同时我也按照原作者给出的勘误作了修订。错误之处在所难免,请读者谅解。
对于每一个期望将STL用得更好的人,这本书值得一读。
潘爱民
2003年6月16日于北京大学燕北园
《欺骗的艺术》译序
科技的发展已经完全改变了人们的生活方式,尤其是电话和网络的普及,一方面缩短了人与人之间的距离,另一方面则导致信任关系的复杂化。在面对面的情况下,人们可以凭借自己的生活经验,以及对物理安全的感知来判断是否可以信任对方;但是在电话或者网络上,生活中的经验不足以提供这样的依据,并且物理安全未受到威胁,于是人们变得轻信和盲从,毕竟人们宁可相信这个世界上诚实的人更多一些。在竞争激烈的企业世界中,这种轻信和盲从是一种风险,对于企业的持续运行是一种挑战。本书正是揭露了攻击者如何利用人类的这种天性来达到攻击的目的。我相信,阅读完这本书会让你大开眼界,从而在未来的工作和生活中,更好地保护好你的企业和自身的安全。
在数字世界中,科学研究人员一直在努力寻求最佳的信息保护方案,甚至已经找到了可以实现理论上绝对安全的量子密码学方法。大多数企业信息系统已经融入了先进的、成熟的研究成果,因而,在一定的假设条件下,这些信息系统可以被证明是安全的。然而,理论上的安全与现实中的安全有很大的差距。首先,理论安全的假设条件并不总是切实可行,甚至屡屡被违反,比如,让每个人都维护一个强密码并不是那么容易做到的。其次,在实现信息系统过程中,由于软件技术方面的原因,也会出现新的安全漏洞。因此,科学家们在不断加固企业的信息系统,但是现实中的企业却打开了一扇又一扇的大门,让攻击者总是有机可乘。
我们常常从各种新闻媒体上看到有关网络攻击事件的报道,这些攻击大多针对一些门户网站或者一些敏感机构的Web站点。但是,针对企业信息系统或者企业运营的攻击事件却少有报道。实际上,这是两种截然不同的攻击事件。针对Web网站的攻击很大程度上依赖于各种技术手段,以及网站管理员的失误,Internet上有大量的资料介绍这些攻击技术和软件工具;而在针对企业信息系统或者企业运营的攻击事件中,攻击者的目标不限于信息系统中的电子资料,也有可能是其他形式的信息资产,而且,攻击者使用的手段并不局限于技术性的工具,而更多地利用企业日常运营过程中的疏忽或者漏洞,甚至有如本书中所展示的那样,利用人性中的缺陷来达到攻击者的目的。
本书主要针对后一种攻击类型,通过大量的案例说明了社交工程师如何利用各种非技术的手段来获得他想要的信息,这样的攻击事例并不神奇,它有可能正发生在你我的身边。攻击者无需高超的技术,也无需超人一等的智商,只需善于利用人们的心理倾向和目标公司的管理漏洞,再加上多一点耐心,就会有很高的成功率。所以,阅读这本书,有助于我们了解社交工程师的常用伎俩,以及相应的应对策略。
科研人员在研究信息安全技术的时候,通常需要考虑两个最基本的问题:对方是谁,如何证明其身份?对方是否有权提出这样的请求?实际上,第一个问题是身份认证(authentication),第二个问题是授权(authorization)或者访问控制(access control)。在研究领域,这两个问题都已经得到了很好的解答,并且这些解决方案已被应用到实际的信息系统中。相应地,在一个机构的实际运营过程中,当员工接到任何请求的时候,也应该认真想一想这两个问题,这实际上构成了一个企业安全运营的重要部分。如果企业没有一套规程来指导员工寻求这两个问题的答案,那么,即使该企业配备了最新的高科技安全手段,也难以全面地抵挡社交工程师的入侵。除了重点谈到这两个问题以外,本书中还包括其他一些日常细节,比如安装和下载软件、电话留言,甚至垃圾处理等。
这本书的读者面很广:企业的管理人员和IT部门的员工是最应该阅读这本书的,毕竟,保护企业的信息安全是他们的职责所在;技术研究人员也应该阅读这本非技术的信息安全书籍,可以有助于设计出更加切实可行的安全方案;一般的企业职员可以通过本书中的案例,了解到社交工程攻击是如何进行的。我相信,阅读过这本书的读者,在面临社交工程师的圈套时,一定会多一份警惕,从而保护好公司和自身的安全。
最后我再说明一点,这不是一本技术性的信息安全书籍,而是一位著名黑客在介绍他的经历和体会。特别是他在书中给出的提示和忠告,更值得我们关注和深思。本书的前三部分读起来饶有趣味,就好像是十多部精简版的侦探小说一样。读者可以在轻松愉快的案例描述中,领略到社交工程的强大威力,然而细细想来,却又发现,其实这样的攻击不难防范,关键是每一个人都履行好自己的安全职责。
在本书的翻译过程中,我得到了我的朋友邹开红先生的大力帮助。他翻译了第1至15章的初稿,尤其是处理了很多非技术性的习惯用语,在此向他表示真挚的感谢。我也要感谢XXXX出版社给了我翻译这本书的机会。最后,若有错误和不当之处,请读者谅解。
潘爱民