广大有志于从事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 程序设计语言》(第二版)徐宝文译
版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系QQ:729038198,我们将在24小时内删除。
发表评论