《Imperfect C++》译序
by 刘未鹏
刀有很多种,有单刀,双刀,朴刀,戒刀,锯齿刀,砍山刀,鬼头刀,
雁翎刀,五凤朝阳刀,鱼麟紫金刀。
—— 古龙《飞刀,又见飞刀》
这里我们要说的刀,是瑞士军刀,瑞士军刀其实严格来说并不能算是一种刀,其功能的繁杂和精细已然超过了刀的范畴。它包含的工具一般有主刀、小刀、剪刀、开瓶器、木锯、小改锥、拔木塞钻、牙签、小镊子等,而在一些工具上还设计了多种功用,如开瓶器上,就具有开瓶、平口改锥、电线剥皮槽三种功用。随着时代的发展,一些新兴的电子技术也被引入瑞士军刀中,如内藏激光、电筒等。
1879的瑞士军刀原形仅具有6种功能,而今天的一把瑞士军刀上可具有多达30余种功能(威戈的"15403-超能太空刀"和维诺斯的"16795-瑞士冠军")。多功能性成为瑞士军刀的又一大特色。在一把小型刀具上赋予了许多的实用小工具,解决了人们在日常工作及生活中的种种难题。而且不论在何种环境下,瑞士军刀都表现出它非凡的实用价值及相应的质量品质。瑞士军刀的组合工具不仅表现在品种上,同时还在于巧妙的组合在同一种工具上,使有限的工具发挥更多的实功能。
见过瑞士军刀的人大约都知道,瑞士军刀唯一可以算是缺点的地方是它的体积稍嫌臃肿,虽然瑞士军刀有若干种类,其中有些体积也相当精简,不过一把瑞士军刀总归还是要比普通的刀大许多,不过这其实严格来说并不能算是缺点,设想你把一把瑞士军刀中的各项功能全都用独立的工具来承担,可想而知需要消耗多大体积,带来多大的不便。
瑞士军刀是军人在野外生存的必备工具,其小体积浓缩众多实用功能的精心设计能够将一把刀的容限发挥到最大,丝毫不逊于《第一滴血》中蓝博带在身上的那把锐利的寒光闪闪的钢刀。
那么现在你拿在手里的这本书就是一把瑞士军刀!
这是一本非常特别的C++书,在市面上已经存在的大量经典C++书籍当中,这本书的着眼点和写作风格使它显得那么特立独行和标新立异,甚至有点另类。书中几乎巨细靡遗地涵盖了C++中大大小小的不完美之处,并以一系列成功案例证明C++的确同时也提供了迂回之道、解决之道,再加上其用本主义的立场,正如同一把实用的瑞士军刀,功能繁杂而面面俱到,实用之至。同其它C++著作不一样,本书虽然尊重标准,但同时又超越标准,当标准不能满足需求或成为拦路石的时候,后者才是第一位的,于是有了作者所谓的“不完美主义的实践者”以及“不完美工具箱”之说。此外,作者的所谓“苦行僧式编程”哲学在我看来也是极其实用的一种编码方式!
我们以前看到的绝大部分C++书籍可说是统统走的“阳关大道”,然而Matthew这本书却偏要走他的“独木小桥”,蹊径虽小,然则别有一番风味,不一样的景观。我们意识到原来C++中也存在着如此多大大小小的不完美之处,就像宫崎俊电影中的那些打满补丁的海盗飞机一样,Bjarne本就说过,C++是为“用本”而设计的,诚然!而本书最大的趣味就在于它并不去一味抱怨这些缺点,而是积极地采取其它替代方案来达到同样的目的,并借此展现出C++自由强大的一面!
作者Matthew常用“survive”一词来描述在编码的现实世界中的境况,作为STLSoft库的主要编写者,他十几年来积累的经验在书中充盈四溢,很多我们平常看不到的方面都会被他挑出来,甚至连我这个译者都觉得有点“啰嗦”,不过,对于喜欢他这种“唠叨”讲法的人,他那种辨证主义的严密论证法倒是能令你获益颇多(至少能够为你带来一笔额外的不菲的稿酬:))。另外,书中随处可见具有作者个人特色的幽默,在大量形容枯槁的技术书籍当中可算是一大亮点。
本书的一个小缺憾就是它不适合初学者,甚至有点儿不适合中级读者,作者自己经验非常丰富,因此有些地方就不加解释地一带而过,为此译者适当添加了一些译注,以便读者理解和阅读。
最后,感谢荣耀先生在本书初译的过程中一直给予的支持和信任,并容忍我总是延期交付章节,对我来说那使得译稿的质量达到了至少令我自己相当满意的程度,荣耀先生对技术的精益求精和一丝不苟也令我在翻译的过程中获益良多。
最大的感激要归于我的父母和我的爷爷,感谢他们一直以来对我的追求的支持和鼓励,没有他们我无法想象完成这项工作。
希望这本令我在翻译过程中获益匪浅的书也能够给你带来美妙而独一无二的阅读享受,Let's dig in!