前几天在网上看到一篇《C语言与C++不得不说的那点事》的博文http://www.wking-china.com/xpjylc/turingbooks/article/details/7860153#comments。发现是图灵的一本新书《C程序设计伴侣》的片段,故去图灵网站转转。发现这书的争议很大,我也发表了一些自己的见解。我的观点是这回弄不好图灵要出本糟书。我认为截止到今天(2012-08-17),按已放出的样章的水平,程序员们是不会掏银子的。有位言辞激烈的同学,连这本带着《C程序设计》,是狠批到底,不留余地呀。不像我,总觉得要给人家留点面子,斟酌一下词句。

《C程序设计伴侣》到底如何,因为还没有最后定稿,故此不好品评。今天打算谈谈谭浩强的《C程序设计》的事情。毕竟这本《伴侣》之所以争执优劣,很大程度上是因为谭浩强的《C程序设计》。《C程序设计》这本书从91年出版,到今天为止已经4次改版,号称印刷量高达1100万册。平均下来150多个中国人就能有1册。一本书20余年能够到这个地步,无论是因为什么,都是难能可贵的。

但是你去互动等网上书店,看到《C程序设计》的书评,各种批评车载斗量。给予正面力挺的,也多是打感情牌。意思就是这本书总体上还是有功的,不能这么骂。怪哉,这本书既然持续出版20年,发行量1100万。为什么这么多的批评?

我真正开始学习编程是在97年,当时学校给的C语言教材是什么样子,十多年过去已经记不得了。加上工作后并没有使用过C,故此C的水平只能说平平,看到C程序能基本通读一下,好坏只能说说代码风格如何,没法从C本身的角度评价。这次因为这场争论需要看看原书,特意从找了《C程序设计》第三和第四版来了解。 因为时间有限,我只是简单的读了一遍。我觉得我找到了网上为什么那么评价的原因。这本书的核心问题,其实就是国内计算机院校教材的通病,没有适应时代发展,躺在原来的成绩上面睡觉。

《C程序设计》之所以能够取得这么大的印量,20年来长盛不衰。其第一版应该居功至伟。当时我还是小学生呢,平时最多玩玩红白机,最多会在学习机上跑个Basic。还是Helloworld水平的。上了初中,才开始接触电脑。不过也多是在玩儿游戏和少量文字处理。这个时期,普遍的就是缺。会用电脑的缺,程序员更缺。很多人开始考计算机等级考试。一级和二级的报名考证很火。就类似于改革开放刚开始的几年,什么方面都缺,只要有就是好东西,根本不吝好坏,起码比没有好。《C程序设计》在国内院校教材里面,还是水平线以上的,可以算是一本好书了。那么在这种市场环境下,《C程序设计》取得成功很正常。大量的学生通过这本书入门,自然对这本书有了感情。但是也要看到,这本书的定位也就是让你能够写些最简单的程序,能够期末考试通过,最多考个二级证。不能让你真正能够用C去吃饭。

我在学校里面学编程是97年开始的。学校先是QB(QuickBasic,不是某传销魔兽),然后是Pascal,接着是C和8086汇编。感觉就是学了一大堆,写的代码最大的也没500行。出来的东西和市场上面的软件一比,连个玩具也算不上。后来3年级开VisualBasic和VisualFoxpro,才算能做出个玩具了。《C程序设计》就是为这种教学环境编写的。让你知道C语言,但是没法实用化。当时也没人说什么软件工程,瀑布模型学校里面好像都没怎么说。根本就不像这些年,敏捷啦、重构啦、代码的可读性啦这些全出来了。这些东西当时想学都没得找资料。连老师带学生,代码都是意大利面条。

前几年上电大,成人再教育。老师教编程,我发现虽然语言变了,用Java了。但是整体水平仍然和10年前差不多。目标是让你能够期末考试通过,而不是能做出可用的程序来。架构、代码重用、封装、代码可读性这些就没人提过。老师写代码,基本上都是

int a,b;

这种水平的。根本没有代码可读性的概念。

C语言在现在的实际工作中,一般只有两种地方用。一个是操作系统内核、编译器、驱动程序这样的底层。非大牛不能操刀。一个是嵌入式、单片机,因为资源太少,只能用C。就是嵌入式市场,因为这些年硬件的发展,C的圈子也在缩小,大量高级语言随着硬件水平的提高而进入这个圈子。C很多时候只是一个教学语言了。TOIBE排行榜上C常年位居第一,其实倒不是其日常用的这么多,而是学生学习编程占了很大一块。《C程序设计》扎根学校,服务目标明确,自然订单源源不断。

但是,最近几年,C在应用开发中也有回暖的趋势。随着Python、Lua等胶水语言开始在国内普及。原来已经在日常开发中不太使用的C开始用于编写对性能有较高要求的模块。编写好后,由脚本语言调用。这种混合编程方式开始流行起来。很多程序员需要重新学习C语言。那么自然,印刷量巨大的《C程序设计》被不少人选择。也许是因为前辈当年就是通过这本书入门的,向后辈推荐。或者因为自己当年读的就是这本,因为它领着自己第一次学会了编程,出于这种感情又去读这本书。但是这本书虽然在院校教材里面算不错的,但是仍然沾染了国内院校教材的很多坏毛病。最主要的问题就是书的目的是为了C语言期末考试或者考二级,而不是让学生能够在实际生产生活中使用C语言编程。内容和习题都是考试型的。其次就是内容陈旧,更新缓慢。即使是最新的第四版,还用VC6作为编程环境。甚至还嫌VC不够老,连Turbo C++都拿出来了。这都哪年的产品了!Borland都被收购多少年了!Turbo C++ 3.0可是92年的产品,今年是2012年。编译器又是不断发展的,不是一个多少年不变的东西。拿20年前的老古董来,真的大丈夫?第四版号称基于C99规范,我想问问,92年的C++编译器支持C99吗?C99新添的特性怎么能编译得过去呀。起码您也安个mingw,用gcc怎么也比TC、VC好吧。而且没盗版问题。支持最新的规范。

而且市场上这些年来引进的国外顶级大牛执笔的经典越来越多。人家的目标不是让你期末考试通过,而是让你能真正用来干活。大家读书,不免拿来比一比,可这一比就坏了。《C程序设计》是大家本来心目中的经典,把它的地位给拔高了。结果和国外的经典一比,差距出来了。要是这本书是现在哪个没名学校的三脚猫教授编的用来赚学生钱的破书,大家理都不理。互动上这种书很多。VFP6都多少年没人用了,还有人出它的新书呢。为什么呢?学校还在教,二级考试里面还有它。有这个市场,自然就有新书出来。我看了几本的介绍,这类书除了学校和考级的买,根本没人要。卖出去多少本我不知道。但是书评是一个也没有。大家根本懒得写书评。甚至不但书评没有,电商也知道这些书零售基本没人要,连介绍都不写。但是 《C程序设计》 是自己心里本来的经典呀,和国外经典比出失落感来了。常言道爱之深责之切,自然是破口大骂。

所以就出现了这种现象。《C程序设计》销量一直不少,但是书评里面的骂声也越来越高。我认为大家还是对这本书更加客观一些比较好。对这本书的感激和怀念之情没错,91年的第一版当得起。但是对于现在的第三第四版,就不要再期盼其能够做到第一版的地步。因为它就是一本国内院校的教材,就是比较好的院校教材,那也是院校教材。院校教材里面可以矮子里面拔将军,不代表其可以去和国际经典比肩。大家还是让它回归自己的合理地位,做一本合格的院校教材好了。不要给与超过其承受度的期望。如果有后辈询问如何学习C语言时,一定要问清楚其目的。如果只是期末考试或者二级证,以后不大可能做编程,那么推荐这本书还是可以的。如果是真心想要学习C语言,日后吃IT这碗饭的。还是建议其购买真正的经典比较好。既不用误人子弟,让后辈日后抱怨。也让这本《C程序设计》继续在我们的记忆里面保留美好的印象,少挨几句。