花了一天的时间,读完了两本国产C/C++书(《C指针编程之道》、《我的第一本C++书》),随即写下印象与评价

A_Zhao 2012-05-24 12:18:46
花了一天的时间,读完了两本国产C/C++书(《C指针编程之道》、《我的第一本C++书》),随即写下印象与评价

用“指针”名头包装着的N本大学计算机教材合辑

——《C指针编程之道》(孔浩 张华杰 陈猛 人民邮电出版社)印象与评价

花了一个下午,还算是比较仔细地读完了本书,随即写下大概的印象与不全面的评价如下。如有错谬之处,期待各位大虾指正,免得误人子弟。

光看书名,实在很震慑人心!指针!道!这是一本关于C的灵魂的灵魂的书呀!接着看封面,一个ASCII Art的墨镜男Geek头像,范儿黑客帝国呀!太酷了!再看封底,“爱数组,爱结构体。爱琢磨算法,爱玩弄内存,更爱掰着手指数字节。爱自己冥思苦想,也爱与众生分享。……”—— 绝对是Geek + Hacker + Open Source呀!真是心有戚戚焉!

好了,最后咱们翻开书页看内容吧……

最初的印象,全书编排紧凑却又有些狭促:扉页前没有空白装帧页;序、跋、参考文献、附录、索引、后记、编后等辅文一概都没有;正文第394页就紧粘着封底;每章首页隐去了页眉与页脚但无留白,全书唯一的留白处仅仅是在各章的尾页。

其次,全书的代码块部分,皆使用g字不打圈&字不开口的Sans字体(或类似字体)呈现,有别于最常见的Courier/New字体,看着也还是挺养眼的。不过非代码块(行文/解说)中的代码字体却是非等宽字体,跟谭老教授畅销书一类的一样,算是粗陋了。

接下来,翻翻目录,首先发现有《4.2 不能不说的秘密——main函数的秘密》,以为是重大亮点,立即翻至第69页拜读。结果令我跌碎眼镜。第69页最后一行开始解说如下:

“C语言规定,main函数定义形式为:
void main(……){……}”

—— 这是最让我反感的C编程观念之一,但这里作者却断言是“C语言规定”。在《4.2.2野百合也有春天》中,作者用了不到一页纸的篇幅,非常粗略和狭隘地解说了main函数的参数与操作系统的关系。整个4.2让我觉得,这一节写了还不如不写。

要说本书作者(们)抱定“void main(……)”的“规定”,那也不是。前五章的代码示例还全都是用“int main(void)”的。(而以后各章节却是错误地使用void main(……)。)

再翻到第56页,在那里却又是这样说的:

“在最新的C99标准中,只有两种定义方式是正确的:
int main(void)
int main(int argc, char *argv[])”

由此看来,整本书所体现的关于C的标准或“规定”,没有统一性。这可能跟整本书分由三位作者撰写以及编辑不在乎ANSI/ISO标准有关吧。莫非……本书真是在言说一个“绝圣弃‘标’,民利百倍;绝仁弃‘准’,民复孝慈”之“道”?

进一步仔细阅读全书各章……

读完前4章,感觉是谭老教授畅销的C教材中“指针”部分的一个“详化版”。

读到第5章,感觉跟国内大学传统的《数据结构(用C描述)》教材线索与风格基本一致,并无太多新意。本章可以作为上述教材的“超缩略版”。

而第6章,也是谭老教授C教材中“I/O”部分的一个“详化版”。

第7、8两章,跟第5章一样,同属大学《数据结构(用C描述)》(包含了算法的)教材的“缩略版”。

第9章,是大学《计算机组成原理》教材中“汇编语言”部分的“蜻蜓点水版”。

读到第10章《Linux C 编程技术简介》一开始,才觉得略有新意。见到GNU的gdb登场,算是有一点点Hacker灵光乍现,但毕竟也只是“现”一簇昙花而已。进入本章的第2、3节,就是大学《操作系统》教材的一个“超缩略版”。而本章的第4节,则是大学《计算机网络原理》教材的一个“Baby级入门版”。

第11章,也属于大学《操作系统》教材的一个“超缩略版”。

第12、13章,类似于市面上的那种号称“精彩应用”、“开发实战(例)”等等之类的教程。

纵观全书,分明就是国内大学计算机专业里N门传统基础课程教材的杂凑合辑,“道”(盗)了谭老教授、严老教授、汤老教授等等的教学思路之一贯,所谓“一贯道”。

所以,我认为,在本书《前言》部分,编者宣称:

“本书适合以下读者阅读:
C语言开发初\中级爱好者
C语言开发专业人员
高等院校的学生”

—— 其中所列3类人当中,有2.5类纯属滥竽充数。本书对于当代C语言中级爱好者来说,已经完全不够用或早已过时(比如说,里面大量的实例是基于Turbo C和MS DOS的),更遑论对于“C语言开发专业人员”。而高等院校的学生则根本不需要本书,因为只要他们通过了专业科目的考试,所有的教材,以及基本上作为这些教材缩略版的本书,就真的可以统统扔掉了,本书的价值甚至可能还不如他们的课堂笔记和“考前预测题”试卷。

严格地说,本书的读者群应该这样定位:对C有比较强烈兴趣但却没有接受过系统的计算机专业教育和训练的人。

在本书中,还存在一些专业性错谬。比如:

(i)在第9页的例子(1)中,对于“int num[70];”这个“定义”,解说是“该数组可以存放71个int类型的数据”。这是一个典型的,有如著名的《C陷阱与缺陷》中所提到的“差一错误(Off-by-One Error)”。但是,本书中的这个错误又不是那么的“典型” —— “差一错误”应该是“很隐蔽”或“较难觉察”的,但是这里的这个错误,却也太明目张胆了呀!

(ii)从第13页开始讲解字符串,下面始终把字符串末尾的结束符写成“\o(小写拉丁字母O)” —— 这让人感觉好像有那么一点在数学里空集符号 Ø与希腊字母φ、Φ、Ψ、ψ混淆乱用的意思 —— 这之所以是一个比较严重的专业性错误,是因为在C当中,“\o”有着完全独立和迥异的意义。

(iii)在第234页,把gcc命令参数-o后面所要标识的文件,以及a.out这类文件,都明确地称为“目标文件”。这又是一个严重的专业性错误。对于那些本来就对编译、链接等概念含混不清的学生来说,这种误导简直就是不能原谅的。

除此之外,还有一些“笔误”。比如在第114页,有一处写成“文本(test)文件”。

当然,本书还是有一些值得称道的优点:

(i)穿插在全书中的“知识提示”楷体字部分,不失为亮点之一。

(ii)本书对于代码实例的讲解很细致,不大而化之,尤其是在前5章里面;且注重代码中的注释。

(iii)全书有大量的代码实例,均尚未发现其中有语法错误和逻辑错误 —— 这应该跟有多达23位专业人员“参与了资料整理和代码编写”有关。

最后,还是向本书作者孔浩、张华杰、陈猛三位先生,以及那个多达23人的”资料整理和代码编写”团队,致以敬意和感谢!


...全文
252 4 打赏 收藏 转发到动态 举报
写回复
用AI写文章
4 条回复
切换为时间正序
请发表友善的回复…
发表回复
向上的心 2012-06-24
  • 打赏
  • 举报
回复
赞!!!!!!!
泰山1979 2012-06-15
  • 打赏
  • 举报
回复
什么时候开始卖书啊???
A_Zhao 2012-05-24
  • 打赏
  • 举报
回复
《我的第一本C++书》(陈良乔 华中科技大学出版社)印象与评价

花了一个晚上,还算是比较仔细地读完了本书,随即写下大概的印象与不全面的评价如下。如有错谬之处,期待各位大虾指正,免得误人子弟。

(1)虽然不是特别浓重,但也还是体现出偏向微软的立场 —— 考虑到作者是MS的MVP,这点很正常。本书花了一些篇幅介绍.NET Framework、CLI(一点点)、MSVS(大约有18页的篇幅,在第35页至少有两次将MSVS誉为“首席IDE”,在第34页的笑话似乎是对包括Eclipse在内的其他IDE的嘲讽)和MS的Parallel Patterns Library(第12章展开讲解)。如果考虑到国内大多数学生严重依赖MS Windows和IDE,这也算是正常。本书对于C/C++与跟它们联系最密切的UNIX、GNU Linux之间的关系,介绍得奇少(不到1页纸)。在第4页提到了1973这个年份以及后来的K&R C,但是竟只字不提UNIX,倒是第10页开始的1.3.1却着重列出三点强调MS Windows与C++有“得天独厚”、“历史积淀”的关系云云。而提到GCC的,印象中仅有一句话(第340页),而且几乎等于没说。

(2)作者或编者的不严谨:在第62页,没有进行充分的背景说明,就断言“int类型在内存中占2个字节”,但在第190页通过指针机制揭示了int类型是占4个字节,这种前后不一致恐怕会给初学者带来困惑。在第63页的表3-2中,指出int类型的“字节数”为“16”等等,恐怕这里(和接下来的表3-3)表头里的“字节数”应该改为“位数”才更达意。

(3)感觉从第5章开始渐入佳境。第7章为最佳。范例和阐释均比较精彩。第5、6、7章分别讲解了C/C++的一些核心观念:函数、OOP、指针、引用、异常处理等等。初学者只要仔细阅读并操练,这些一贯被视为难点的部分,亦不再难以理解与掌握。

(4)知识点释出的顺序问题:在第6章讲解OOP时,没有介绍引用机制却运用到了它(比如第152页),对引用机制的解说是在后来的第7章。这样的编排恐怕会给初学者设置障碍。第7章的内容几乎完全可以(也强烈建议应该)放在第6章之前。

(5)教学曲线:前两篇(第1至7章)教学曲线比较平坦。从第8章(第3篇起头)开始,讲解STL,教学曲线变得越来越陡峭,对理解代码的思维要求变高。建议初学者要在第3篇的操练上花上数倍于前两篇的精力。

(6)书名问题:在一些场合,本书有“游历C++世界的地图”这个副标题,但是在我手中拿到的这本书当中(2011年5月1版1刷),没有找到这个副标题(在封面、封底、扉页、版权页均未见),不知何故。此外,纵观全书,感觉“地图”的意味其实很弱。

(7)其他印象:(i)虽然以MSVS为先导,但全书几乎完全没有涉及到MFC和GUI编程,唯一的例外是在第197页提到了GetMainWnd()函数,还有第18页的图2-2,但也均等于没说。(这不是批评。)(ii)书中有穿插的“最佳实践”楷体字部分,算是亮点,但太少。(iii)本书第12章涉及到了C++0x即C++11。(iv)本书第13章(《找工作就靠它了》)是比较新颖的特色。(v)本书《后记》似乎有一些大话西游+武林外传式的悲凉,感觉意犹未尽……

最后,向本书作者陈良乔先生致以敬意和感谢!

590

社区成员

发帖
与我相关
我的任务
社区描述
提出问题
其他 技术论坛(原bbs)
社区管理员
  • community_281
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧