像中国的绝大多数同行一样,我在学校里也是通过谭浩强的《C程序设计》开始学习C语言和编程的。
经过几年的软件开发工作,回过头来看看就总觉得这位谭老师是一个很少自己编写程序的老学究,至少缺乏编写大型复杂软件项目的经验。他的书里面没有经验建议,也没有自己独到的见解,只有完全正确的规范。感觉是ANSI C标准的翻译版,中规中矩,了无趣味。看完了也只能是知其然而不知其所以然。所以仅仅合适当工具书(但说起C语言工具书又有哪本书敢和K&R的《The C Programming Language 》争锋,或者你也可以直接下载一篇ANSI C的标准)。
而国外的很多C语言书是由C语言创始者或拥有几十年经验的质深程序员编写的。这些书里更重要的是融入了作者多年的编程经验。在书中汇集了很多技巧和建议,笔锋犀利而又常常不失幽默,能将一个复杂深奥的问题阐述的浅显易懂。即使你使用了多年C语言之后,随手翻翻这些书,仍时常会对作者独到见解深受启发、拍案叫绝。但是看很多国内的教材却总是觉得味如嚼蜡。还常常喜欢公式到公式的推导,将一些明明是很简单的问题弄得深奥晦涩。
举一两个简单的例子:
1.运算符优先级问题
谭浩强的《C程序设计》只是在附录中将ANSI C里有关运算符优先级的规范抄了一遍,区区两页。当然这样最稳妥,最不会出错。
在《Pointers On C》中作者不仅详细解释了运算优先级,还分析了C语言规范中定义不清的地方,也就是告诉读者C语言中哪里存在陷阱。此外还对在各种编译器中的运算结果进行比较。可以看出作者颇费了些心思。
而在另一本书——《实用C语言编程》/《Practical C rogramming》中作者建议道:你只需要记住乘除的优先级高于加减,其它地方一律加上括号。我经历过几次对着运算符优先级表帮别人查软件BUG以后,就把这句话作为编程原则发给每个新来的人。
2.编程风格
谭浩强的书从不涉及编程风格,可能是因为C语言规范中没有这方面的规定,也可能他自己就没意识到编程风格的重要性。
而在绝大部分国外的入门级编程书籍中常常都会单辟一章详细介绍编程风格,因为良好的编程习惯要从一开始培养。养成好习惯很难,坏习惯一学就会。
现在对刚参加工作的大学毕业生做的最多的培训就是编程风格培训。因为他们绝大部分对缩进式风格、命名规则、注释的重要性等等都一无所知。但即使这样常常也达不到效果,因为这些学生早就在学校里养成了只要能实现功能,其他都无所谓的习惯。这应该算谁的责任?
不是说谭浩强的书不好,只是觉得国内大学里的很多所谓教授的应酬太多、赚钱太多、实践经验太少、学术研究太少。写出来的书同国外的经典书籍比起来整整差了一个档次。这些在刚刚接触C语言时可能感觉不到的。但过了多年后才发觉以前走了不少的弯路,自己花了几年总结的经验教训,实际上在很多国外的优秀书籍里早就有了。
当然也不是天下乌鸦一般黑,国内的C语言教材就全都一文不值。我看过清华大学裘宗燕教授的《从问题到程序--程序设计与C语言引论》就很不错。里面汇集了裘老多年C语言教学的经验,书写得也非常用心和严谨。另外裘老的很多翻译作品也是经典中的经典,如《C++语言的设计和演化》、《C++程序设计语言(特别版)》、《程序设计语言——实践之路》
关键词:
国内
语言
教材
一点
感想
编程