# 轻松话题(一) | 4本值得一读再读的经典好书 你好,我是Chrono。 著名的文学家高尔基说过一句名言:“书籍是人类进步的阶梯。” 利用碎片时间学习固然很重要,但静下心来认真地读书却更加重要,它能够让你去主动思考、主动探索,更系统、更完整、更深入地获取知识。 为了能够让你在工作之余充充电,提高一下自己,今天我就暂且岔开话题,不讲C++语言,而是开列一个清单,精选出几本我认为值得一读再读的技术类好书。 顺便说一句,“读书”最好是看纸质实体书,而不是电子版。 在现在的环境下,手机或者平板电脑实在是太“浮躁”了,在用它们阅读时,经常会被跳出的通知、消息打扰,而且“人性”使然,也很难控制自己不去点开其他的应用玩玩小游戏、看看短视频。 另外,这些设备大多是“主动发光”型的,长时间看会导致视觉疲劳,影响眼睛健康,还是纸质的书更好。只要在一个合适的光照环境下,冲一杯茶或者咖啡,给自己留出一段充足的闲暇时间,你就可以抛却世俗的喧嚣和烦恼,尽情地畅游在书的海洋。 闲话不多说了,It’s showtime。 ## 《设计模式:可复用面向对象软件的基础》 软件开发类图书浩如烟海,但如果让我只推荐一本,那就只能是《设计模式:可复用面向对象软件的基础》。它是在我心目中**永远排在第一位**的技术书籍。 这本书出版得比较早(1994年),到现在已经超过25年了,但是仍然没有过时。 在上个世纪90年代,软件的开发还是处于比较“混沌”的状态,虽然自发地出现了一些“习语”“惯用法”,却没有能够很好地指导软件设计的通用原则。 这本书一出现就获得了无数的赞誉,犹如黑夜里的一盏明灯,为所有开发者指明了道路。 书里系统地总结了专家的经验,开创性地提出了“设计模式”的概念,只要遵循“模式”,就能够得到良好的设计。 其中阐述的23个设计模式已经被无数的软件系统所验证,并且成为了软件界的标准用语,比如单件、工厂、代理、职责链、观察者、适配器,等等。 无论你使用什么语言,无论你使用哪种范式,无论你开发何种形式的软件,都免不了会用到这些模式。而且有些模式,甚至就直接成为了编程语言的一部分(例如C++的iterator、Java的Observer)。 作为软件开发历史上里程碑式的著作、模式运动的开路先锋,我认为它是每一个精益求精的程序员都必须拥有的宝典和圣经,值得放在手边经常翻阅,随时随地获取设计灵感。 这本书要说缺点也是有的,就是论述太严谨。毕竟四位作者都是博士出身,看起来太有“论文范”了,很多话都需要反复琢磨,才能理解。但从另一方面看,这也是它的优点,几乎没有多余的文字,可以说是字字珠玑,绝非那些“白话”“大话”之类的书籍可比。 ## 《C++标准程序库》 再回到C++领域,我认为**一定要看**的就是《C++标准程序库》。 讲C++语言的书有很多,但讲C++标准库的却是屈指可数。因为标准库的庞大和复杂程度远远超过了语言本身,能把它“啃”下来就已经很不容易了,要把它用通俗易懂的形式讲出来,更是难上加难。 而这本书却“举重若轻”,不仅完整全面地介绍了标准库,而且还由浅入深、条理清楚,对库中每个组件的优缺点都分析得丝丝入扣,让人心悦诚服。内容的安排组织也详略得当,千余页的大部头作品读起来却毫不费力,不得不叹服作者的至深功力。 十几年前,C++资料非常匮乏,当时我还对标准一无所知,偶然看到了本书的第一版,顿时有种如获至宝的感觉,当即“拿下”,回家仔细、反复研读,真的是“手不释卷”。 经过了这本书的“洗礼”,我才真正地“脱胎换骨”,透彻地理解了C++,开启了泛型编程、函数式编程的新世界大门。而我今天能够以这种方式与你聊天,绝对有它的功劳。 虽然现在C++相关的资料已经很多了,但如果你想要成为C++“大伽”,那么这本《C++标准程序库》必然是你成长之路上的“良师益友”。 ## 《C++语言的设计与演化》 接下来要说的这本《C++语言的设计与演化》比较特别。 特别之一在于,它是由C++语言之父亲手撰写的,能够直接与“造物者”本人对话,机会难得。 特别之二在于,它并非直接描述语言特性,而是以“回忆录”的形式介绍了C++语言的发展历史和设计理念,同时坦诚地反思了一些由于历史局限而导致的缺点和失误,视角非常独特。 这两个特别之处让它从众多语言类书籍中脱颖而出,能够解答很多学习C++过程中的困惑。比如,为什么C++会变成这个样子,为什么要引进class、template关键字,为什么会设计出那些奇怪的语法……知道了前因后果,你就可以更深刻地理解C++。 阅读这本书时,你还能“读史以明志”,学习先驱者的经验教训,了解他们做决策时的思考方式,领会语言设计背后的“哲思”,这些技术之外的“软知识”也能够帮助你更好地使用C++。 唯一的遗憾是它出的时间太早,都没有赶上C++98,后来也没有重新修订,到现在可能快“绝版”了,如果你在旧书摊上遇到了,一定不要错过。 ## _C++ Primer_ 最后一本要推荐的书是 _C++ Primer_ 。 “Primer”的意思是“初级读本”,不过在我看来,这可能是作者的谦虚之语。 虽然这本书确实自视为“入门教材”,全书的编排也是循序渐进,例子浅显易懂,但内容非常得全面、精准,基本囊括了C++11的所有新特性和标准库组件,C++老手完全可以把它当成是语言参考手册。 而且,它还有一个独到之处,就是把语言和库融合在一起讲解,而不是像其他书那样割裂开。这对于C++初学者可算得上是“福音”,可以一开始就接触到标准库,学习现代C++编程方式,减少了很多入门的成本。 它的不足之处是,没有涉及标准库里的线程部分,不过考虑到这本书的名字“Primer”,而多线程编程确实比较高级,不讲也是情有可原的。 ## 小结 今天就到这里,只介绍了四本书,好像有点少,不过我觉得应该“贵精不贵多”。 如果像“报菜名”那样一下子列出十本八本的,我倒是省事,但你可能根本看不过来,所以还是把有限的时间汇聚在少数“精品”上更好,尽量通读、透读。 其实,选这四本书我也是花了心思的,你留意一下就会发现,它们的定位各有特色:**面向对象**(《设计模式:可复用面向对象软件的基础》)、**泛型编程**(《C++标准程序库》)、**历史读本**(《C++语言的设计与演化》)和**教科全书**(_C++ Primer_)。我觉得,还是比较完整地覆盖了C++的知识面的,有广度有深度,有点也有面,你以为如何呢? 欢迎在留言里分享你的读书心得。如果你觉得有所收获,也欢迎你把今天的内容分享给你的朋友。 ![](https://static001.geekbang.org/resource/image/34/a1/34963ab5fac6e1abb9c62b11de0d80a1.jpg)