zoukankan      html  css  js  c++  java
  • 一本超越期待的 C++ 书——简评《Boost程序库完全开发指南:深入C++“准”标准库》

    赖勇浩(http://laiyonghao.com)

    作为一个时不时要用一点 C++ 的程序员,我常常自嘲为斯德哥尔摩综合症患者,用 Python 写着懒散的代码时,会怀念以前编写 C++ 代码的那种被虐感。但当真正要写一些 C++ 代码的时候,又会怀念 Python 带给我的自在,这也许就是所谓的由奢入俭难了。幸好有 Boost,有时候它甚至让我觉得其实 C++ 也可以写得如同 Python 般雅致。大概是因为 Boost 的组委们一直以来的高要求,好库,好文档,所以长期都是阅读在线文档作为学习的途径。后来也有国人翻译了一本 Boost 的书,书很棒,但对应的 Boost 的版本就比较过时了,而且语言转换过程中也有不可避免的信息流失,令人扼腕。这几年,alai 等人自发组织起来,翻译了 Boost 的全部文档和一些相关书籍,而且对版本的跟进也是比较及时的,是不可多得的好材料。尽管有如此方便的资源,我还是比较期待有一本国人写的,Boost 相关的书,我相信国人对我们使用的 C++ 风格和水平有更好的理解,能够写出更适合我们真实需求的书。所以后来手上才有这本《Boost程序库完全开发指南:深入C++"准"标准库》(以下简称《Boost 指南》)。

    虽然我期待一本国人写的 Boost 相关的书,但是当我看到这本书的目录时,我不由地鄙视起来:太多东西了,像流水账,甚至可能是直接抄袭官方文档。

    当书到手后,我发现它超越了我的期待,作者的苦心孤诣不说,至少抄袭完全是不存在的。第 0、1 两章把读者引入 Boost 的新新世界,讲述了本书的基本结构和阅读指南,然后是 Boost 的安装与编译,给了初手一条向上的梯子。本书可以说是详略得当,作为一作定位为手册+介绍的书,做到这一点不太容易。编排由浅入深,而又曲径通幽,比如以“时间与日期”作为 hello boost 之例,与当前市面上的 Boost 大有不同(通常是以 shared_ptr 为始),因为“时间与日期”是大家天天接触的概念,接受起来容易不少,让人感觉 Boost 真的有用,解决实际问题,这样读者对 Boost 的兴趣就被勾了起来,再往下读,也不那边怕艰难了。其实按我的设想,我觉得接下来就讲一下字符串和各种容器,比如 tuple、unordered、bimap、circular_buffer 之类的,应该更好一些;可惜这本书还是接下来马上就开始讲内存管理,介绍 shared_ptr 了,不能免俗啊。

    这本书的另一个特色就是例子都是作者专心构造的,尽显作者给足了心想做本好书。比如讲 date_time 库的那一章,构造了一个信用卡的免息期的计算例子,例在身边,感受新鲜,我当时读到这个例子觉得作者真可算得上匠心独运了。虽然如此,但仍然要指出一下因为作者可能不太喜欢参考他人的一些例子(太怕被人说抄袭而刻意避嫌?),也有一些我觉得不太好的例子,比如讲 operators 时,那个 class point,居然支持大小比较和加减操作,多少有点算概念没理清。如果实在要用这个例子,我觉得也许叫 class vector3d(三维矢量)更好一些。

    最后,讲一下这本书我觉得比较不喜欢的地方。在我看来,既然读者都已经开始学习、使用 Boost 了,想必基础较好、自我学习能力较强,《Boost 指南》仍然定位在介绍和手册这一层次,我觉得多少让人觉得这本书写得啰嗦、写得不够深入。虽然全书都是作者自己的经验和学习成果,例子也是精心构建,但读来仍然不会有胜于官方文档的感觉。关于 Boost 的书,我更期待的也许是如何以 Boost 来解决一些经典的问题,向读者展示 Boost 的强大与实用的《Boost Cookbook》。从全书来看,作者 C++ 经验相当丰富,这本书完全没有展示出作者的实际水平,很期望作者能够加加油,换换思路,带给我们一本《Boost Cookbook》。

    最后两章,Boost 和设计模式、结束语,是画龙点睛之笔。前者对 GoF 的 23 个设计模式和后来总结的 3 个设计模式与 Boost 结合起来,点破 Boost 中的哪些库使用了哪个设计模式,可以说是点破了 Boost 库精巧灵活之谜,也让设计模式的学习者、爱好者有一个可观摩的模式的应用与实现的典范。这是在其它书中不曾见的。而在结束语中,作者直言 C++ 和 Boost 仍然有很多不足,但我们也不必拘泥于此,我们要有开阔的眼界,用好工具解决好问题,编程,功夫在诗外。作者最后讲到一句话,因为我也曾说过类似的言论,使我顿生戚戚,所以借来作为我的书评的结束吧:……生活中不只有 C++、代码和编程,还有更多的东西值得我们去体味,朋友、亲人、爱人更值得花时间与他们在一起。走出办公室,离开计算机,去亲近大自然,享受美餐,散散步,打打球……拥有美好的生活才能够创造出完美的程序。

  • 相关阅读:
    241. Different Ways to Add Parentheses java solutions
    89. Gray Code java solutions
    367. Valid Perfect Square java solutions
    46. Permutations java solutions
    116. Populating Next Right Pointers in Each Node java solutions
    153. Find Minimum in Rotated Sorted Array java solutions
    判断两颗树是否相同
    求二叉树叶子节点的个数
    求二叉树第k层的结点个数
    将二叉排序树转换成排序的双向链表
  • 原文地址:https://www.cnblogs.com/aiwz/p/6154349.html
Copyright © 2011-2022 走看看