不记得具体从什么时候开始(反正很多年前的事了)的,不少人都陆续批评过谭浩强的《C语言程序设计》,各方面都有扒过。例如,与实践脱节,很多例子在不同编译器上运行是错误的,代码风格糟糕等等方面。这里首先给出本人对《C语言程序设计》的看法:
在国产C语言相关的教材中,《C语言程序设计》应该算是少有的、还算不错的教材。
有些人就会想:你是不是收钱了?给《C语言程序设计》打广告吗?错!《C语言程序设计》出版了这么多年,还用着我这个无名之辈去宣传吗?咱又不是比尔盖茨或求伯君!我只是想站在一名图书作者的角度去评价它。当然,我觉得有一点点资格评价它的原因,并不仅仅是因为我写过书,也略懂写书,更是因为《C语言程序设计》曾经是我的大学教材,因为咱不对自己未精读过的书做评价。
与实践脱节?这个批评是错误的吗?严格来讲并不算,但是《C语言程序设计》本身就是一本学校教材,它的定位就是初学者与理论,用与实践相关程度来评价是否有欠妥当?会这样评价的人可以说根本没有用心去看这本书。想要实践方面的书?图书馆里不是有大把吗?现在花点钱可以买到很多书,英文水平不错也能直接看国外原版,从网络下载电子书甚至连米都省了。为什么同一个班级毕业的学生,有些人的编程能力差得离谱,而另外少数人却已经达到专业编程员水平?真正的原因不在教材,而在人本身!
有些例程在不同编译器上会出现不同结果?这个批评是错误的吗?严格来讲也并不算,但还是那句话,《C语言程序设计》主要是讲理论的,它只是传达一种学习与思考方法,这才是大学教材应该做的事,而《C语言程序设计》在这方面做得很好。如果在其它编译器上的运行结果不尽相同,你能分析出原因吗?我可以负责地说:认真学过《C语言程序设计》的读者肯定做得到!
代码风格也被人批评得体无完肤。举个例子,《C语言程序设计》中很多例程会直接使用多个“常数”(也称为“魔数”),有人批评应该使用#define将它们定义为宏,这样可读性更强。这个说法错了吗?严格来讲也不算!但是如果每写一个仅有几行的代码就使用#define定义为宏,我身为一个作者就坚决不赞同这么做,因为代码少时使用常数没什么问题,不然就会显得冗余(写书灌水),关键要理解代码说明什么。
在进行图书撰写时,为了方便读者理解某个知识点,作者会适当编写一些配套代码进行说明,你却