<audio id="audio" title="轻松话题（一） | 4本值得一读再读的经典好书" controls="" preload="none"><source id="mp3" src="https://static001.geekbang.org/resource/audio/dc/a1/dca60c8f94c6ee76370f7136deb5c1a1.mp3"></audio>

你好，我是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++的知识面的，有广度有深度，有点也有面，你以为如何呢？

欢迎在留言里分享你的读书心得。如果你觉得有所收获，也欢迎你把今天的内容分享给你的朋友。

<img src="https://static001.geekbang.org/resource/image/34/a1/34963ab5fac6e1abb9c62b11de0d80a1.jpg" alt="">
