发新话题
打印

千万别看谭浩强的书——写给那些真正想学好C语言的人

千万别看谭浩强的书——写给那些真正想学好C语言的人

广大有志于从事IT行业的同志们,在你们进入这一行之前千万请看这篇文章!太经典了!对你绝对有启发!
千万别买谭浩强和等级考试的书!!!!!
整理别人的言论,请大家踊跃讨论!!!!!!!!!!!
1:书皮上面有那么多的牛人题词,估计也许是自己的水平太低
2:ANSI只给了两种方式:
int main(void) {/*...*/}
和 int main(int argc, char *argv[]){/*...*/}
其它的形式都是不标准的,属未定义行为,老潭就好这个

      3:如果你有兴趣,不妨查查近二十年来老谭写过的书。老先生的主要作品是:Basic语言教程、C语言教程这两种书。他的书现在的版本与十年前的相比,多少也有点“与时俱进”,根据语法变化做了点修改。但是改不掉的是他那种糟糕的编码风格、好钻“未定义行为”在某种编译环境中的具体表现的牛角尖而且颇为自已能用很多篇幅讨论这样无聊的问题而沾沾自喜的性格,以及对程序设计中很多方面的错误理解和解说。
       有意思的是,这两种书他前后大概各出过七、八本——在不同的出版社、用不同的书名、列入不同名称的从书系列,而且它们面向的都是初学者这个读者群体。如果说一本书出版了六、七年后,在出新版本的时候他打算找另外一家出版社出,这倒无可厚非。问题在于,现在他是在两、三年时间内会在不同的出版社用不同的名称(有时干脆就是相同的)出几本内容基本相同的初级编程教材。说刻薄点,他的这种干法只能解释为:老先生自知来日无多,要赶紧把贬值速度如同老蒋逃离大陆前夕的国民政府法币的“谭浩强”这个无形资产尽可能多的套现,以为子孙多积攒点遗产。
说句公道话:老谭虽然水平不高,但是在中国计算机教育的早期他的确作出了不少贡献。因为那时全国上下懂计算机的人很少、总体水平极低,所以以老谭之碌碌,仍能对大伙有所帮助。但是人贵有自知之明:你的时代已经过去了,你就应该知趣地退在一边看年轻人的表演。这方面王选先生就很值得学习。王先生自已说过:在90年代初的时候他就深切地体会到自己对新技术的学习和掌握已经赶不上身边的年轻人了,所以他自觉退出科研一线,让有能力和活力的年轻学者挑大梁。反观谭先生,不但隔个一年半载的就要把他那泛黄的书稿拿出来掸掸灰、改几个字,然后找家出版社出版,而且,他老先生还成立了一个所谓“谭浩强工作室”,组织一伙写手写了一批同样的碌碌之作——其中某些书涉及的领域,相信谭先生自己恐怕知之甚少。以王选先生之学识和名望,尚知其力有不逮。老谭,你为什么不惭愧?

       4:建议老谭好好看看The C Programming Language,好好学学C语言。
      我最烦学生拿着他书里一个语句里面好多++的问题来问我。
我不教C语言,只教C语言版数据结构,发现计算机专业没有一个C语言学得好的学生,对此很无奈。都是老潭的教材闹的,我发现凡是C标准上说的is undefined老潭讨论起来就特别来劲
5:老谭后面的写的也是漏洞百出的。例子程序也是臭不可闻的,有些编译不过去(例如把不同的指针类型用等号赋值,用过C的人都知道不同类型的指针在赋值前需要进行转换,C标准里也规定了),有些执行不了(例如老谭改字符串常量的值),不知道他写完书有没有把书上的例子编程序试一下。还有老谭跟本就没写过或者阅读过20行以上的程序,书中的许多东西都是老谭想当然之作,有些地方想法很幼稚。所以请大家不要和这个没写过程序的人学编程了

       6:这位谭教授涉猎颇广,从C,BASIC到网页制作、Word应用可以说应有尽有,谭甚至主编过一本如何使用Windows 98的书,比如如何用画笔程序画画,也许7-11岁的孩子们会喜欢,对此我非常理解,因为这些书的发行量很大,可以赚很多钱,只是,在你决定买他的发行量达400万的《C程序设计》时,是否应该考虑一下,会不会有其它更好的选择。

       7:编程风格在软件工程中影响到编写一个程序的效率,程序升级时候潜在的隐患,别人能否正确理解你的程序...等等很多方面.打个比方,一个函数void f()括号中没写void 那么根据k&r的风格它可能是有参数的,而根据美国C的风格它就是没参数的.显然不同风格对这个函数理解不同.所以void f()这种歧异风格是以后软件升级和软件管理的隐患.又好像 goto语句,任何一本外国的书都会严重警告读者不要使用.何故?因为 编写大程序时候这种原始控制流语句会破还程序的运行.当然,如果 你 学C语言只是为了考试,那么当然感觉不出goto 有何缺点,因为你只需要写几行的代码而不是真正开发程序!总之当今软件产业最大的耗费资金不是软件开发而是软件维护!如果你1年前编写的程序如果风格不好,那么可能一年后你自己想升级软件时的难度相当于重新构想该软件了!升级这软件的任务由别人来承担时这就更不用说有多难了.
谭浩强更差的地方是没有在书后给出一些编程经验和警告.这无疑使初学者学习事陪功半.对比国外好书 ,每章后面除了经验和警告外还会又系统相关性,这对于C这类系统相关语言是很有必要的.
谭浩强的书讲解也很不透彻,例如什么是头文件就 放到函数那章才提及,大概已经是 第八章了.但外国的好书都是 从一开始就讲头文件是什么,这更有助于读者理解.国外的书还特别有一章讲结构化 编程,而且是放到前五章之内.后面的章节每一个例子都是用结构化写成的.绝对不是谭那种一个main函数到尾的考试编程.在数组和指针上,谭的书是分开两章来教,而且中间隔开一章,而国外的好书是 放到同一章节中讲述,并强调它们的联系与区别.

       以上列举了谭书的部分缺点.我所说的国外好书主要是我详细看过的〈C语言解释教程〉,同为入门书, 我感觉教出来的学生纵使本来一样勤奋,但素质都会截然不同.这就是中国高等教育远远不如美国的地方.说明显了就是应试性特强,不注重基础原理, 排版混乱且没特色, 软件工程与软件入门全面脱钩...等等.
本人说夸张一点,谭这种烂人有当今的显赫威望绝对是中国的悲哀.他严重阻碍了中国软件教育事业的发展,更为可悲可叹, 这里居然有人说他
的书不错真是荒谬之极

       8:读了老谭的书,总觉得谭浩强是一个很少自己编写程序的老学究,四平八稳、中规中矩。他的书里面没有经验建议,也没有自己独到的见解,只有完全正确的规范。合适当工具书(但说起C语言工具书又有哪本书敢和K&R的《The C Programming Language 》争锋)。而国外的很多C语言书是由C语言创始者或拥有几十年经验的质深程序员编写的。这些书里更重要的是融入了作者多年的编程经验。使用了多年的C语言后,随手翻翻这些书,时常会对作者独到见解拍案叫绝、深受启发。但是看谭浩强的书,总是觉得乏味枯燥——典型的中国教材。
举一两个简单的例子:
       1.运算符优先级问题
谭浩强的书只是在附录中将ANSI C里有关运算符优先级的规范抄了一遍,区区两页。当然这样最稳妥,最不会出错。
在《Pointers On C》中作者不仅详细解释了运算优先级,还分析了C语言规范中定义不清的地方,也就是告诉读者C语言中哪里存在陷阱。此外还对在各种编译器中的运算结果进行比较。可以看出作者颇费了些心思。
       而在另一本书——《实用C语言编程》/《Practical C rogramming》中作者建议道:你只需要记住乘除的优先级高于加减,其它地方一律加上括号。我经历过几次对着运算符优先级表帮别人查软件BUG以后,就把这句话作为编程原则发给每个新来的人。

2.编程风格
       谭浩强的书从不涉及编程风格,可能是因为C语言规范中没有这方面的规定,也可能他自己就没意识到编程风格的重要性。
而在很多入门级的编程书中常常都会单辟一章详细介绍编程风格,因为良好的编程习惯要从一开始培养。养成好习惯很难,坏习惯一学就会。
我们对刚到公司的大学毕业生做的最多的培训就是编程风格培训。因为他们常常对缩进式风格、匈牙利命名法、注释的重要性等等都一无所知。但即使这样常常也达不到效果,因为这些学生早就在学校里养成了只要能实现功能,其他都无所谓的习惯。这应该算谁的责任?

        我不是说谭浩强的书不好,只是觉得国内大学里的这帮教授的实践经验太少。所以写出来的书同国外的经典书籍比起来整整差了一个档次。当然这些在刚刚接触C语言时是感觉不到的。但过了多年后才发觉以前走了不少的弯路,自己花了几年总结的经验教训,实际上在很多国外的优秀书籍里早就有了。

       9:为什么有许多"初学者"喜欢这本书,因为这些初学者都是笨蛋,可是他们非要挤进这个行业,他们没有成为设计师的资质,永远都是IT业受人摆步的民工.他们看不懂其他书,太厚的也看不完,这本书对笨蛋来说太好了,不太厚,也不太贵,最重要的老潭让他们懂了C++不过是比C多了点东西,所以它要比C厚点.如果他们连这本都没的看,他们就没法学了.所以这本书是IT民工的圣经!!!笨蛋门,苦海无涯,回头是岸

      10:谭的书千篇一律,都是一个样,乱七八糟不知道说什么,他出的许多书的章节都是一样安排的,完全是骗钱。看看《c语言解析教程》(第四版)吧——你就会知道他和国外大师的差距了

11:我不得不承认,我当年学习c语言的时候就使用这本书,现在看起来,里面的代码确实很不符合软件开发的标准,尤其是代码的命名根本就不符合规范,经常用什么a,b,c啊之类的,但是这本书是最先带我入门的教材,处于对自己“老师”的尊重,决定给3分,书虽然写得不好,但毕竟曾经是自己的老师。不能太过于苛求,毕竟一个年纪这么大的人能够献身于中国的计算机教育事业确实值得尊敬的,想当年计算机不这么普及的时候,那个时候最流行的语言恐怕就是basic了,可是当年谭老的Qbasic创下了2000万册记录,不得不说他也算那个时代的一个英雄,今天我们能够用这么好的高级语言来写代码的同时,不要忘记了哪些曾经用debug,为了不让磁带顺坏而天天在机房捉虫子的程序员,不要忘记我们是站在巨人的肩膀上........
12:1.代码不规范,书中有大量类似的如下代码:
//4页
main()
{int a,b,sum;
a=123;b=456;
sum=a+b;
printf(“sum is %d\n”,sum);

//110页
main()
{float add();
float a,b,c;
scanf("%f,%f",&a,&b);
c=add(a,b);
printf("sum is %f",c);
}
float add(x,y) //过时的声明。
float x,y;
{float z;
z=x+y;
return (z);
}


这样的代码规范吗??我认为应该这样:
#include 〈stdio.h〉

int main()
{
int a, b, c, sum;
a = 123;
b = 456;

sum = a + b;
printf(“sum is %d\n”,sum);

return 0;
}

#include〈stdio.h〉

float add(float, float);

int main()
{
float add();
float a, b, c;

scanf("%f,%f", &a, &b);
c = add(a,b);
printf("sum is %f",c);

return 0;
}

float add(float x, float y)
{
float z;
z=x+y;

return z;
}

虽然我改后的代码不是很标准,但是绝对比原书的好。
把代码写得规范是很重要的!!!!!!!!!!!

2.大量无用细节和讨论。
书中讨论了++运算符。如
k=(++i)+(++i)+(++i)
书中还说什么若i原值等于3,上式等于18,但是我在VC6.0上编译后运行是16!!!!!!!!!!!!

其实像(i++)+(i++)+(i++),(++i)+(++i)+(++i)这些表达式的结果因编译器而异,具有不可移植性况且在软件开发中根本就不用哪些表达式,比如说在linux的内核源代码中也没有用到这类表达式。

所以我认为:没有必要写上面的哪些表达式。把它们提出来,说明一下子哪类结果因编译器而异。在平时编程的时候不要用这类表达式。

很多初学C语言的人都按照书上打上去的程序都不能编译!!这就造成了初学者对C语言的恐惧。

总而言之:这本书很差!!!!真的很差。

奉劝各位初学C语言的人:把谭浩强的《C程序设计》这本烂书拿到厕所里扔掉!!!!

我推荐两本学C语言的书《C语言解析教程》(原书第4版) 麻志毅 译,《C 程序设计语言》(第二版) 徐宝文 译

最后祝大家学习愉快!!

13:这本书烂的可以。我举个例子,谭老在将指针时的一段代码:
void copy_string(char *from, char * to)
{
for(;*from!='\0';from++,to++)
*to=*from;
*to='\0';
}
void main()
{
char *a="I am a teacher";
char *b="You are a student.";
printf("\nstring a=%s\nstring b=%s\n",a,b);
copy_string(a,b);
printf("\nstring a=%s\nstring b=%s\n",a,b);
}
这个经典的错误早已上教科书了,可谭老师拿它说明用指针和用数组运行结果是一样的。可见谭老师根本不懂C。读过这本书的人(包括我)真是悲哀。

14:我觉的这本书根本不用说的,只要看到的都说很烂,简直就是误导人,不但错误百出,而且该详细不详细该简略的不简略,有很多地方都在无谓的细节上打转,譬如说什么运算符优先级之类的,外国老师说的好:如果你不知道,就加上括号得了。
这本书写得很符号中国应试教育得模式,如果你看得好得,我觉得计算机二级你肯定过了,不过写程序肯定是个傻瓜。 只所以把谭捧得厉害,其实是因为学校都统一定这本书,可是大家不平得是,清华把这种烂书拿给我们一般高校当教材,自己却全部用国外原版教材,或者好得译本。。。。。。。
除了候捷得书(他是台湾的),中国人写的那些计算机书简直。。。。。(不好意思说),只是客观事实,根本就是文化传统问题,外国书可以把很复杂的东西讲的很简单,但看看那些中国作者,开篇都是一些大的概念,满篇都是各种缩写,简单的也讲的复杂了。
如果对谭还报有一点好感的朋友们,如果你们仅仅去看一本中流的外国书,我觉的你们肯定改变看法了。 就别说wrox出版社,和
hz(译本)的书了]

15:我们老师说这本子书误人子弟.
你们不要找我啊.
这是我老师说的.
他是北航计算机学院的晏海华.有事找他理论.

16:白痴一样的垃圾书
害了一批人
最近随便翻了翻,讲右移〉〉,居然大言不惭,貌似非常肯定的语气说:"右移相当于除2",我靠,稍微有点常识也不能说这样的蠢话吧?然后后面马上又含糊其词的说,对于〉〉,有些机器补0,有些机器补1,至于到底补什么,估计老谭自己都不知道。这种垃圾就应该和禁书一样封了,想我们当年上课老师还推荐这书,现在想想都觉得恶心!!什么是欺世盗名?老谭就是!!
送支鲜花支持 扔个鸡蛋反对
正在读取本评论的讨论,请稍侯……

17:错别字比第一版增加了n的n次方那么多倍,真不知道清华大学出版社的那帮人是干什么吃的。
另外,第二版增加的C++部分我觉得多余。

18:我看过的所有讲C的书中,这本绝对绝对是最差,最烂的。
写程序的风格很烂,满篇无意义的讨论。

19:书的内容有些老,一些内容过于专门化(但又没有讲出关键),另一些内容不是很准确。一个例子是,“Turbo C 和目前使用的多数 C 版本对这两种方法都允许使用,两种方法等价,ANSI 新标准推荐前一种方法,……”(PP. 146)两种方法并不是完全等价的:采用老方式时,编译器可能已经关闭了类型检查。
对 C++ 的介绍没有必要,因为仅靠两章的内容根本没法说清;学习 C++ 最好避免 C 的技巧。我的观点是,C++ 与 C 应尽可能的分开。
最后一章指出的一些错误仍是属于 K&R C 风格的;按照 16.2 节指出的步骤,一个程序似乎应该先写到纸上。难道 Unix 的源代码也是先写到纸上再录入的吗?
20:建议不要看该书,尤其不要做后面的习题,特别不要购买配套练习题。
这本书不是学习的途径,会指引你误入歧途。
真的,不是骗你。
21:我对看这本书的读者建议是:
该书比较适合对C有点掌握的人用来做[排除错误]的练习,比如:可以通过对书中美妙“术语”的斟酌,来加深自己对计算机科学术语的理解;可以通过修改书中已书写“优良”的代码来改善自己书写代码的风格和加深对程序可读性的理解。如此等等。当然还可以有其他很多的提高,只要你肯对书中的内容大力斟酌喽。(特别注意:若你是菜鸟,就不要轻易尝试[排除错误]了。)
最后,推荐初学C和程序设计的朋友去北大裘宗燕老师的网站上看看,肯定不会让你失望的!网址如下:
http://www.math.pku.edu.cn/teachers/qiuzy/
22:跟你说我们班主任(教C语言的)的编码风格和谭的很象。。超浓缩豆腐块。我看在眼里笑在心理。哈哈。更可笑的是已经培养出好几个班上的超浓缩豆腐块。。哈哈
23:谭浩强?老朽而已,原来在清华念过书,因搞共青团工作比较卖力而留校。其实大家都清楚:这类人在大学里是很被人看不起的
24:此书“几年来发行量达270万册,创同类书发行量的全国纪录。”呜呼!那是在全国人民见不到好书的情况下出现的,是全国人民的悲哀!另外,有些教师懒惰,10年间没有换过讲稿,使得这种垃圾教材得以苟延残喘。
25:这本书里的程序代码没有用K&R格式,代码被紧贴着写在左花括号{ 的右边。Deitel父子的那本笔者本要好得多。
22:
C程序设计教程
C How To Program Second Edition

作者: (美)H.M.DEITEL P.J.DEITEL 译者:薛万鹏等译
出版社: 机械工业出版社 ISBN:7-111-07952-3

C primer plus也行。
the C programming language 不适合初学者。

23:我是看着The C++ programming language 入门的,虽然费了很大的劲才慢慢读懂,又在后来的实践中反复阅读一些章节”。后来又翻看了一下c++ primer应该更适合入门者读。优秀的国外c++书籍现在到处都是,也有一些翻译的很好,为什么还需要这么一本垃圾。当年C语言程序设计的辉煌应该说是由当时的客观情况造成的。当时那有这么多优秀书籍。说实话,我看c语言程序设计的时候,只感觉枯燥乏味。现在想起来看这种教条垃圾只会让你编程的思想受到影响。

24:
不知道这位看没看过c++primer,书中的内容一点都不难,初学者完全可以读懂。我是从网上下载C++编程思想学的C++,应该说C++编程思想比c++primer要难,谁说初学者不能学C++primer,那本书就是面向初学者的,高级程序员用得着学C++吗。这本书之所以是垃圾不是因为它简单,是因为它的内容,一个根本就没写过程序的人,一个根本就不懂C++的人根本就不佩写书。

25:从基础学起也不能看一种错误百出的书,也不能看一个根本不懂C++的人写的书。看这本书只能给读者以误导,把初学者引向歧途。你把经典计算机的书比作四大名著并不恰当,世界上面向初学者的书并不是只有老谭会写,那些计算机书本来就是面向出学者的。对于一个刚会写字的小学生我不会让他去读四大名著,但我也不会给他推荐一本到处都是错别子的书去读。掌握面向对象的思想和掌握语法是两个概念吧,这好像没有先后顺序。另外不写软件你学C++干什么,各大高校的计算机软件系的学生学C++都是十个学的到最后有8个放弃的吧,这么不好学的东西难道也要普及吗?

26:C++是要介绍一种面向对象的编程思想,写C++的书不能只介绍语法。谭浩强这种编排方式肯定让初学者误入歧途。所以不要再说他适合出学者。外国的书也不是很难呀,C++primer就很适合初学者。“不要盲目追求什么STROUSTRUP的C++程序设计,不要盲目追求一本上千页的C++PRIMER”连这些东西你都不看,你还写什么程序?“你只要能把老谭教材上每一章后面的习题都自己做出来,你的水平就不会低了”,简直就是一个笑话,我问你老谭他进行过软件开发吗?你以为他的水平有多高呀。从这就话看的出来你根本就不懂软件,语言就是程序设计的一个工具,在软件设计中占的比重很小很小,你看完了C++ Primer,thinking in C++,the C++ programmer language等国外的经典的书只能说你懂了C++的语法,离编程还差的远了,什么算法、操作系统、协议、软件工程等你都要了解。如果真像你说的作完老谭的练习水平就不低了,那这本书真的就是世界图书史上的一个精品。

27:看了个位的评论,感慨颇多,有些人说这本书这有毛病,那有缺点,其实,很多东西谭老已经在前言里明确说明了。对于这本书,我看了一部分,也在机器上运行了书中的程序,起码没出现其他书中的代码印刷错误,起码都运行的了。谭老对本书中的程序已经做了说明,只是用来帮助读者理解c++的,并非实用的程序。有人说,这本书不全面,据我看,任何一本书都不全面,要全面的话,去看标准好了。再说,那么全,有几人能全掌握呢。大家当中国人都几十年了,有几个人能认全现代汉语词典里的字呢?说到底,中国人的毛病:好高骛远,就是不会脚踏实地。说得头头是道,干起来,一塌糊涂。

28:时势创造神话,神化蒙蔽心灵,人们已失去判断力。对老谭的崇拜来自一种惯性,来自一种思维的惰性。各个大学纷纷采用老谭的书并非他的书好的不得了,是因为以前的学习者选择不多,看老谭的书而初入C门径的,现在当他们向后学者传授C语言时,他们又选择老谭的书,原因至少有二。一是图方便,反正已轻车熟路;二是省思考,要让他们选其他的书是对他们的一种折磨,因为跳出老谭的泥潭需要彻底的改造自己,这比新学者更难。
中国的软件产业发展取决于计算机教育的发展,计算机教育的发展必须与时俱进,打破神话跳出老谭的泥潭是第一步!

29:为什么他一出来书就有人骂,书不好呢?还是有一些人看上他出的书啊!
他的书的确教育了很多人,我句话总没错吧!
这书到底那里不好了,我就不懂了。他的水平是不高的,但入门书写的如此之好,你问一下,中国又有几个呢?
中国人能做到如此也不错了,非要和外国人比,你可知道中国与美国软件水平差了差不多20年,同志。
别人是大师,他又是什么啊,他能写的这样的书,可以差不多和大师相比了。
其实大家都没错,错的只不过是眼高了一点,自大了一点。自认为自己水平如何如何,如果你认为自己水平已经达到大师级,那好,你也去出书了,看看能不能与他相比。
如何好书,希望大家都能支持一下。
其实大家都说他编程风格不好,其实中国软件业现在编程风格有几个好的啊!
中国就是这样过来,相信他也是这样过来,你说有什么办法呢?
如果被以前的思想害和深了,你说一下子改的了吗?
如果说风格好的话,我相信中国也要改变一下现状了.
中国前途也要靠这样有水平的人来出书啊!
可能风格不好,但我还是比较支持他一下的.
因为我也是学习他的书过来的,也希望大家都理解一下?
---------------一个三流学校未毕业的学生

30:跟不上时代,水平有限不是老谭的错;想赚钱也不是老谭的错;表现自己对C++所谓的“热爱”和对中国下一代年轻人才的“关心”就更不能说老谭有错了。但是,为了这些就不管三七二十一东拼西凑移花接木打造又一所谓“经典大作”来继续毒害中国广大有志青年,那就是错上加大错!!

31:差的不只是编程风格,谭浩强是个没写过程序的人,对程序了解得很少,作过程序员的人都看得出来,我就不信一个纸上谈兵的人能写出来好书。虽然我没看过这本书,但我看过他写的C我,真是错误连篇呀,我不明白一本书中为什么会有这么多的错误,有些东西初学者都不会犯。一个连C都不懂的人怎么能写好C++。

原文: https://www.52pojie.cn/thread-854107-1-14.html

TOP

发新话题