gitbook/罗剑锋的C++实战笔记/docs/235306.md
2022-09-03 22:05:03 +08:00

90 lines
7.5 KiB
Markdown
Raw Permalink Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

# 轻松话题(一) | 4本值得一读再读的经典好书
你好我是Chrono。
著名的文学家高尔基说过一句名言:“书籍是人类进步的阶梯。”
利用碎片时间学习固然很重要,但静下心来认真地读书却更加重要,它能够让你去主动思考、主动探索,更系统、更完整、更深入地获取知识。
为了能够让你在工作之余充充电提高一下自己今天我就暂且岔开话题不讲C++语言,而是开列一个清单,精选出几本我认为值得一读再读的技术类好书。
顺便说一句,“读书”最好是看纸质实体书,而不是电子版。
在现在的环境下,手机或者平板电脑实在是太“浮躁”了,在用它们阅读时,经常会被跳出的通知、消息打扰,而且“人性”使然,也很难控制自己不去点开其他的应用玩玩小游戏、看看短视频。
另外,这些设备大多是“主动发光”型的,长时间看会导致视觉疲劳,影响眼睛健康,还是纸质的书更好。只要在一个合适的光照环境下,冲一杯茶或者咖啡,给自己留出一段充足的闲暇时间,你就可以抛却世俗的喧嚣和烦恼,尽情地畅游在书的海洋。
闲话不多说了Its 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)