《21st Century C, 2nd Edition》译者序

最近非常有幸的接受了人民邮电出版社胡俊英和陈冀康编辑的邀请,翻译《21st Century C, 2nd Edition》这个书,这是一本非常经典的C语言著作,目前已经是第二版了。计算机书出了很多年,大家对其自有判断,最简单的办法就是根据书名,90年代末期出版过几本比较经典的计算机图书,书名为:《**入门到精通》,《21天学会**》等。不过很快大家就开始借用这种书名,最后搞得有些良莠不齐。更有甚者,最近出现了好多,《**从入门到放弃》, 《**从入门到入院》 系列丛书,彻底颠覆了以前程序员中这么神圣的书名。好在还有O’Reilly出版社的动物丛书,目前还都是品质和经典的象征。经典到有的时候在圈内人们都忘了书名,只记得动物的名字。例如Perl语言的 “骆驼书”以及Git的“蝙蝠书”等等。

当完成最后一个字的录入,作为这本书的译者,应该系统的给这本书做个总结了。首先,这是一本经典的C语言图书,amazon有50多个评论,评分达到4分。这个骄人的成绩主要来自于本书的两个优点:第一个优点就是系统性和大局观。C语言最开始作为开发UNIX操作系统的工具,它和UNIX操作系统有着不可分割的关系。无论UNIX派生的POSIX标准以及GNU运动,C语言都是其核心的开发语言和工具。所以如果想真正发挥C语言的威力,那必须要把这个语言放到一个更大的编程环境中去。这本书通过对POSIX标准库,GNU编译器,Shell 脚本,Make,GIT以及文档和测试等一系列内容的介绍,建立了一个高效整合的开发环境,C语言作为这个环境的核心开发语言,通过各种开发工具和库的配合,将开发环境的优点淋漓尽致地发挥出来,从而能显著地提高你的开发效率。

第二个优点就是新思维和反规则。作为物理学的爱好者,我用物理来做一个类比 。牛顿创立了经典力学和万有引力。正当我们认为物理学已经完胜的时候,爱因斯坦在一边幽幽地说了一句:“光会拐弯”。在爱因斯坦的结论在观测日全食得到验证以后,这位天才自信心爆棚并宣称:“一切都是可以通过计算来确定的”,这个时候研究量子力学的波尔却传给了他一个纸条说:“上帝掷骰子!”。也许,我是说也许,我们一直都相信的规则或者答案过于片面。 就像有一天我6岁的女儿小米粒问我,“我们人类从那来啊?”我说:“有人说是猴子变得,有人说是神创造的,你信哪个都可以?你告诉爸爸,你信那个啊?”我的女儿想到没想就回答到:“是神把猴子变成人的!”说完她飘然而去。

我们人类总是有一种倾向,一旦形成了自己的某些规则,那么就会自然地排斥和否定另外的反规则。而这本书的难能可贵之处就在于,它不仅提出了C语言的一些反规则,而且通过一些例子证明这些反规则是合理的。例如,我们可以建造高效和准确的宏,我们可以不需要斤斤计较对内存的使用,哪怕有点内存泄漏,我们可以用goto,但是对switch却完全可以放弃等等。现代物理有一个反物质学说,当物质和反物质遇见,二者会立即湮没,并爆发出巨大的能量。这里我借用一下:当你熟悉了规则,同时也理解了反规则,这个时候你的心中就没有了规则。剩下的就是巨大的能力。此时小李飞刀已经不带刀,此时无招已经胜有招。

俗话说:“优点不说没不了,缺点不说不得了。”下面说说本书的缺点,那就是:对每一部分的内容并没有详细地介绍。所以你不要指望着阅读完本书,你能熟练地使用shell脚本,写出复杂的makefile并通过Git高效地与人协作。坦白的说,这也并不算是缺点。这本书的目的就是告诉你,当你想干XXX的时候,有YYY工具你可以用,而YYY工具的基础用法是ZZZ。 当你发现ZZZ并不够用的时候,你可以去找专门的介绍YYY的书。这个时候你会发现完整介绍YYY的书,它的厚度足以挡住狙击步枪射出的子弹。客观点说,这也算不上啥缺点。没办法,任何和UNIX相关的东西,都有吓人的学习曲线。你想要“会当凌绝顶,荡胸生层云”,那么曲线必须要很陡才行!

最后说说本书面相的对象:首先,这本书并不是教材,虽然本书的后面有一个简短的介绍C语言的附录,我没有骗你,它确实是很简短。请注意我的用词,我只是说“简短”,并没有说“简单”。所以如果你是一个C语言的初学者或者是零基础,这本书并不适合你。

这本书的面相对象是:有一定C语言基础的高年级学生,或者是一些使用C语言作为主要开发语言的工程师。对于高年级的学生,它们缺乏的是一种对大的编程环境的认识。 而对于使用C语言的从业人员,这本书会让你对C语言有不一样的认识,它对你多年使用C语言形成的习惯和风格提出了挑战,让你有一种“原来C语言也可以这些用”的赞叹!然后让这些反规则去湮没你心中存在多年的规则,从而爆发出巨大的能量!

有的时候,书和读者之间是讲点缘分的。 有的时候读者会问什么是好书?我认为:你看懂的,有收获的都是好书。有些人看见花,有些人看见草,而我只是把你带到草地上。最后,我为本书做了一个网站: http://zhaoyan.website/xinzhi/c21/book.php 里面对每一章都有我的观点,推荐的补充内容等。对于本书的“每部分内容过于简短”这一缺点,我做了一些有益的补充和修正 。Enjoy It!

赵岩
02/11/2017