Chinaunix首页 | 论坛 | 博客
  • 博客访问: 12730
  • 博文数量: 1
  • 博客积分: 682
  • 博客等级: 上士
  • 技术积分: 20
  • 用 户 组: 普通用户
  • 注册时间: 2010-09-18 17:03
文章分类
文章存档

2010年(1)

分类: C/C++

2010-09-18 17:12:54

评 《C++程序设计原理与实践》

这是一本大杂烩!

文法分析、 GUI、 数据结构、 正则表达式、 数值计算、 嵌入式、 内存管理、 加密、 测试, 哦, 还有某章中的若干语言; 最后, 当然还包括C++自身 —— 每一个方面的入门书籍, 都不会比本书更薄。

本书目的何在?

入门级书籍

“我需要这样一本C++书籍,看了之后就可以在实际环境中得心应手地使用C++。” —— 这种想法也没什么不好, 如果真的存在这样一本书, 肯定会被视为C++社区的福音, 推荐给每一个想要学习C++的人。

问题是, C++的复杂性使得这个任务几乎不可能完成。 Stroustrup博士的新作给人带来了一丝希望, 但我觉得本书依然没能创造这个奇迹, 依然是一本入门级别的书。

上手容易 从来不是C++的优点, 将来也不会是。 所以, 打算学习C++的朋友,请打消 “一口吃成C++专家” 的念头。 吃成C++中级用户都不太现实, 除非你才华出众。 就目前来看, 依然需要走那个经典的模式: 从一本入门级别的书感受C++的整体轮廓, 然后从更多书籍中逐步细化、 完善对C++的各个方面的认识。 立马行动, 极有可能在神作出现之前就不再需要它了。

而与其他同类书籍相比, 本书还是有一些特点的。

着重程序设计而非语言规则

记得我们是如何学习加法与乘法法的? 从竖式开始? 竖式确实能展示计算的过程, 并能得出计算的结果。

但计算意义, 通常不是通过竖式了解到的, 而是在更早的启蒙教育中就获得了:

“我给希望工程捐12元, 你给希望工程捐26元, 我俩 总共 捐了多少元?”

因为我不懂政治, 所以答案是38元 —— 这就是加法的含义: 求和。

“每发一帖可以得5毛钱, 发74帖 一共 能得多少钱?”

这就是乘法的意义 —— 多个相同的数求和。

正因为我们需要解决这些问题, 所以给这些问题以定义, 并逐步总结解决问题的一般方法。

而很多C++书籍着重C++语言本身。 通过这类书籍,我们可以得知 X —— 此处, X=构造/析构、访问控制、 虚函数、 继承、 异常、 模板等等 —— 能起到怎样的效果、 存在何种陷阱、 甚至还能了解X是如何被实现。 但很少有书籍能清楚的阐述出 “ 为什么需要X ?”、“ X应该用于何种场景 ?”

本书的的首要主题是 程序设计 。 是因为程序设计需要: 维护不变式、 隔离接口与实现、 开闭原则、 差异编程、 错误的报告与处理分离、 元编程等等等等。 为此, C++添加了许多特性以直接支持种种程序设计的需要。

所以本书不是孤立地介绍C++, 而是揭示C++与程序设计的关系。 通过本书, 可以更快掌握X的使用时机。

示例选材

程序设计要通过编写程序的实践来学习

—Brian Kernighan

所以, 编程书籍中从来不会缺少示例。

本书从程序设计的各个领域(见上)中选取较丰富的题材、 加以简化浓缩、 作为书中的示例。 一方面, 可以开阔视野; 更重要的是, 通过这样的示例比那些个 toy 示例 更能体会出程序设计, 而不是仅仅展示语言规则 —— 那些充斥着 foo 、 bar 、 42 什么的代码片段最讨厌了。

另外, 关于这些丰富的题材:

  1. 如果对某领域感兴趣, 想更深入地了解, 肯定需要参阅更多的资料。 但以“通过这些题材体会程序设计与C++相应支持”为目的的话, 并不需要额外掌握相应的知识。
  2. 这也是一个例子, 说明C++是一门general purpose而非领域专用的语言, 能够(但并不总是适合)在许多领域使用。

C++语言规则选材

C++语言规则非但不是本书的第一要素, 还要通过审查才能进入本书。

本书包含了C++语言规则的 每一个主要方面 , 没有遗漏任何一个方面; 但每个方面中, 作者只介绍了C++中的 最常用与实用的部分 , 有意避免了那些 复杂且冷僻 的部分 [1] :

  • 函数没有重载解析规则
  • 类没有多继承
  • 内存管理没有 operator new
  • 流没有 locale 与 codecvt
  • 模板没有偏特化与 template template argument
  • 异常没有 terminate_handler 和 exception specification
  • ……

也就是说, 本书包含了C++语言的 所有主干内容 , 如果对那些细枝末叶的东西感兴趣, 可参阅更多的C++书籍。

如果不感兴趣?上面那些东西其实也没什么大不了的。

[1]注意: 这并不是一个 系统的C++语言规则列表 。 并且, 因为时间仓促, 可能与书中的真实情况不符。

权威的指导

事物越是复杂, 对它的理解也就越多样化, 也越不可能和谐统一。 C++自然也如此。

对 应该如何使用C++ 这个问题, 10个人可能会得出11种答案。 稍有经验的C++程序员都会存在自己的 倾向 , 即: 当满足何种条件时, 使用/禁止某种特性 。

上文有提到, C++书籍中, 多是讲述语言特性是什么, 而非 指导应在何种情况下使用 。 因为大师们都明白后者很难, 为了不误导读者, 他们只能从C++的 某些局部 选出一些 久经考验 、 并且在绝大部分情况下都适用的经验, 从而成就了一些C++的经典书籍。

既然本书旨在传授 “如何使用C++的方方面面”, 并且本书的作者之一 —— Stroustrup博士 —— 可谓全世界对C++理解最深入与权威的人, 所以本书必然存在相当强烈的倾向。

我不是在说 “迷信权威” 。

对乐于让别人代替自己思考的人, 跟着Stroustrup博士混, 风险最小 —— 本书中的C++倾向是最为主流与经典的一脉。

对喜欢自主思考的人, 当你对C++越来越熟悉的同时, 也会产生不同于其他人的看法。 但在变得熟悉之前, 总得被动接受点什么。 Stroustrup博士可能会教给你一些在20%的情况下不适合的东西, 人无完人; 但不太可能教给你一些在80%情况下都不适合的东西。 人是白纸一张时最容易吸收, 而且也吸收的最彻底; 往后要发现、 承认并改正这个时期产生的认识偏差是很困难的。 跟Stroustrup博士混, 这种情况不那么容易出现。

关于倾向, 最后再多说一点个人建议供参考: 请考虑你编程的目的是为了 用小代价解决问题 , 还是为了将某种技术 —— 不仅仅只C++语言的各种特性, 还包括但不限于OO、 设计模式等 时尚 的东西 —— 玩得最 纯粹 、 最  ?

附录

当需要查询某个C++语言规则时, 由于本书的安排, 这些规则散布在各个章节之中。 这非常不利于查阅。

本书的附录可作为一种补充。 附录A是按语言规则而非程序设计组织, 并且:

  • 包含正文章节数, 如果本书中有关于该规则的详细讨论
  • 或者 “请查阅专家级的书籍或资料”, 表示本书中没有(或极少有)相关讨论, 并且可能属于比较偏门的知识。

遗憾的是附录在中文版中被阉割, 只能 在线 下载, 文件没有标签, 甚至搜索不能…… 严重影响附录原本的查阅效果……

三周时间要细读这样一本书还是有些小困难…… 所以, 以上的文字请各位 随便看看就好, 切勿太过当真……

最后, enjoy

阅读(1756) | 评论(1) | 转发(0) |
0

上一篇:没有了

下一篇:没有了

给主人留下些什么吧!~~

chinaunix网友2010-09-21 08:06:03

很好的, 收藏了 推荐一个博客,提供很多免费软件编程电子书下载: http://free-ebooks.appspot.com

评论热议
请登录后评论。

登录 注册