慢羊羊的空间

工作做不完了,300出,无瑕。

学习 C 语言不推荐阅读《C Primer Plus》、《C++ Primer Plus》 银牌收录

一句话总结

编程学习的是思维,而不是拿着字典背语法。《C Primer Plus》这类书,适合当字典,不适合当做教程。

具体原因

《C Primer Plus》、《C++ Primer Plus》这些被称作国外经典的编程入门书籍,不要看!

有很多从没看过这两本书,就因为听说是国外经典教材就开始疯狂推荐。书没有好坏,只有“是否适合”。这两本书,不适合初学者用来入门学习编程。我举例:

(注:以下举例初学者可能看不明白,建议咨询专业软件工程师)

以下内容摘自《C Primer Plus (第五版) 中文版》

关于下图,_Bool 类型,和 inttypes.h 头文件,没人用吧。就算要用,也会用 bool。还有,初学者什么都还不懂呢,就要讲 C90 标准、C99 标准么?更何况关于 _Bool 这个绕了一圈的类型,真心没必要刚开始就和初学者提。

关于下图,这句话可以随便去问各大公司从业多年的 C/C++ 码农,你看看谁知道?这都是犄角旮旯的东西了,非要拿出来说,这比茴香豆的“茴”字的四种写法还无聊。

关于下面两张图,分别是 46 页和 66 页,都提到了最大的有符号整形类型、最大的无符号整形类型,可是前后说法却又完全不同。


46 页


66 页

还有,夹带私货。以下摘自《C Primer Plus》(第六版)中文版 267 页,程序清单 9.12 loccheck.c 程序:

这里的函数名用了一个单词:mikado。作为示例,为什么用这么奇怪的命名,而不是写一个 func1 呢?单词 mikado 的意思是“日本天皇”,这个词汇很少有人学过,更别说正确读出来。如果拿这本书讲课,多半情况下连老师都不知道这个东西怎么读。

退一万步讲,这个词大家都认识。但是程序员都知道,函数不应该用“名词”,应该用表示操作的词汇。比如,可以用 getmikado,或者 killmikado,这一看就知道函数是什么功能。就好比程序中会用 getuser、adduesr、deluser 命名函数,而用 user 命名结构体或类。

这是例 9.12。在例 9.11 里面,函数名是 getnights、showprice,例 9.13 里面,函数名是 interchange,这都是非常贴切的命名。这个例 9.12 究竟怎么回事呢?该书的英文版也是这样的写的。无法理解,我只能将这归类为“夹带私货”。

书中类似的无聊东西还有很多,不再一一列举。关键是,不光无聊,还!很!厚!!!有太多同学大一买了这本书,到大四毕业都没读完!!!但是针对 C 语言,大部分学校只给一学期的学习时间,其它时间需要学习更多的专业知识。C 语言在计算机科学领域占比非常小,大学不是为了学习 C 语言。

所以,这个系列的书绝对不适合用来入门学习编程,就像没有任何人会拿着《新华字典》入门学习语文一样。但作为字典,直接在编译器按一下 F1 就有了,比书上的更方便、更详细,何必还花钱买一本占地方还很重的纸质字典?

添加评论