正文

也看《千万别买谭浩强的书》2005-08-15 02:34:00

【评论】 【打印】 【字体: 】 本文链接:http://blog.pfan.cn/xiangyu/3810.html

分享到:

也看《千万别买谭浩强的书》

2006年1月14号修订(今天刚好2006年的考研第一天),把里面的一些措词修改了一下,把一些脏话去掉^_^。提出一些更强有力的例子。总体意思不变。

当时大约05年8月份的时候写完这篇以后,陆陆续续又看到很多关于评论谭浩强的帖,我倒不是说不能评论什么,而是觉得很多人说话很像有目的的(也就是我说的“卑略行为”),搞不懂为什么很多中国人就是喜欢这样,难道这就是曾士强中国式管理中的真正的中国人,但是我还是不喜欢这样,所以又写了一篇:http://blog.programfan.com/article.asp?id=7045希望进一步阐明我的观点。

《千万别买谭浩强的书》这篇文章的链接:http://www.programfan.com/club/showbbs.asp?id=89829

这篇文章搞很多热门帖,不过我可不是为了这个无聊的“名誉”来发这次帖。为了这个,id:问题大王,发了个帖《主题:观看贴子<<千万别买谭浩强的书!!>>后的感慨》支持谭浩强,没想到竟然吵了起来,首先我要声明的是我可不是为了吵架。

下面代表我的观点:希望我没有误导各位
第一.这篇文章的题目本身就是错的。为什么?因为太武断了,什么叫“千万别买谭浩强的书”,这是这么观点呢?还有这篇文章不仅仅针对谭浩强《c程序设计》这本书,而且最不能让我容忍的是竟然针对人,把谭浩强扁得一文不值,说什么垃圾,什么没写过程序……我一直在想要是这篇文章让老一辈程序员看到的话,这个所谓的北航老师的学生不知道会是什么样一个后果。

1.这就是强加给大家一种思想,暂且不说这种思想是好的还是坏的,这样的做法本身就不对了。马克思主义是真理,可是当我们党一直在给我们灌输这种思想时,我们是不是会觉得很不爽啊。我知道了,还用你一直说。

2.况且,这种思想可不是正确的,至少我是这样认为的,或者至少我们还没有用实践来证明这是正确的。是吧?要不然你怎么证明啊?反过来证明这种观点是错的还差不多。因为有人暂且不说很多人,看了谭浩强的书受益啊。当然,你不能说有人看了谭浩强的书浪费了很多时间,因此就说千万别买谭浩强的书,如果是有人看了谭浩强的书浪费了很多时间,那么你得出的观点至多是:谭浩强的书并不是合适所有人读的。大家应该都是理工科出身的,可能对我的逻辑不是太清楚,不过不要紧,反正看不明白的你就当作没有吧。

3.其实,谭浩强的书有很多还是很不错的,而且谭浩强影响了不只中国程序员,不仅仅一代程序员。

第二.我们来看看一个很有说服力的观点(至少我是这样认为的)

1.《世界经理人》评选的《影响中国软件开发的20人》(其实我最早的是在《程序员》杂志上看到的)
[6]谭浩强    
    入选理由:计算机基础教育    

    雷军曾经说过:“是谭浩强让程序员感到了写程序就是自己的生命。”这可能是早一代程序员的感觉吧。在计算机基础教育方面,谭浩强无疑拥有极高的声望和经验。不过,现在社会已经进入新的阶段,尽管谭浩强已经成立了工作室,并不断出版了一系列的书籍,但真正如《Basic语言》这样风行的书籍并没有再次出现。    

    谭浩强的书集中体现了中国计算机教育的特点,浅显,作为入门级的书籍非常不错,但一旦真正要深入下去,可能就要选择国外那些大师级人物所写的书籍了。这也是国内很多程序员对谭浩强某些书籍颇有微词的原因所在。    

    然而,不管如何,时代和机遇都造就了谭浩强在中国计算机史上的地位,这一点无法抹杀。


上面那段是报刊的原文,从这里面,我们应该得出几个结论吧
(1)谭浩强是搞基础教育。
    有很多人拿这样的观点:说谭浩强的某某书是给儿童、小孩,有的人还说了个岁数好像是7——11岁,来批评谭浩强,来支持《千万别看谭浩强的书》。^_^,同志们,你们说对了,谭浩强的书是给小孩看的,因为人家是基础教育啊,人家当然是给初学者,给小孩看的,我搞不懂这是什么观点,你既然觉得谭浩强的书浅显,是给小孩看的,那你水平高看了,当然是活受罪啊,你是自找苦吃,你怪谁啊。

(2)谭浩强的书集中体现了中国计算机教育的特点,浅显,作为入门级的书籍非常不错(上面说的哦,不是我说的,但是也是我想表达的意思)
    我想大家稍微喜欢搞IT和管理的基本上不可能不知道《经理人世界》和程序员杂志吧,在我看来这两本书发表出来的文章至少比这种在论坛里面连姓名可能都写是:半男不女,的人写的文章《千万别看谭浩强的书》来得客观,来得有说服力吧。反正我是这样认为的。

因此,谭浩强是搞基础教育的,他的书,至少在编程语言(c,basic)方面是适合初学者的。既然有一些书,哪怕只是一本适合大家看,有助于大家学习,那么还是可以说明:谭浩强有那么一点点书可以看的,而不是说千万别看谭浩强的书。

第三.让我们来看看一些数据吧。

以下摘自:《中国计算机报》 记者 刘韧 张永捷

----发行量过万册的书确属凤毛鳞角,语言作到了。如果在美国 ,谭浩强一定是亿万富翁,可他满足于桃李满天下。中国信息产业发展如此之快,谭浩强功不可没。

  谭浩强1980年写就的《BASIC语言》截止目前发行量超过1200万册,创科技书籍发行量世界纪录。这本书直到现在仍在以每年30万册至40万册的速度递增。近20年来,谭浩强一共写书78本,总发行量超过2200万册。1981年,中央电视台播出谭浩强主讲的BASIC语言,当年观众达到100万人,此后,中央电视台所播FORTRAN、COBOL、PASCAL、C、QBASIC等几个主要语言都是请谭浩强主讲,观众超过500万人。在中国计算机界谭浩强的学生最多,懂计算机的人很少不知道谭浩强这个名字。

此外,他编著的《C程序设计》发行了340万册,FORTRAN,COBOL,PASCAL,QBASIC等书发行量均为全国之首。

稍微有点常识的人看了这些数据你应该知道什么书叫做:畅销吧。
如果说谭浩强的书实在很差的话,那么看了这些数据,我想我得出的结论恐怕只有一个:中国人,干脆说全世界的人都是傻瓜。为什么?因为明知那么差还一直买。我想,没有人会赞成我这种结论吧。那么这又说明什么问题,我想应该只有:谭浩强的书确实还可以吧,要不然怎么会那么多人买呢。

第四、我上面在“第二”只是用了一个例子来说明问题。并不是说对谭浩强好的评价只有这么一个。下面是另外的很多例子:
1.1989年,被北京市政府授予“有突出贡献专家”称号;
2.1995年,被国家科委和中国科协 表彰为“全国优秀科普工作者”。
3.影响中关村的50个人
4.1984年,全国高等院校计算机基础教育研究会成立,谭浩强历任副理事长、理事长
5.2000年1月被《计算机世界》报组织的“世纪评选”评为我国“20世纪最有影响的IT人物”10个人之一(排在笫2位)。他的功绩是把千百万群众带入计算机的大门。

当然,还有其他很多……

第五、阶段性总结:
   上面的例子数据并不代表说明,至多只能说明谭浩强老师确实教育了好几代程序员,他的功劳功不可没。

在这里我要谈谈我对谭浩强书籍的看法

1.我认为谭浩强的编程语言的书确实很适合初学者学习,不知道他的书参考的标准是不低了,但是有一点就是他的书的语法介绍得还不错。如果大家发现他的书的标准太低了,那么可以去看看是不是你看的版本太低了,他那本《c程序设计》最新版本是第三版的(红色,已经发行了,我在海定图书城看到过,不过我没有买来看),如果你发现第二版(就是绿色的那版)标准太低了,你可以去看看第三版,里面的参考的标准应该是比较新了,其实C语言的标准已经很久没有大修改。还有你也可以只参考里面一些基本的语言特性,这种特性基本上不会随标准的升级而改变的。孟岩说:谭浩强的这本书里面的例子有很多具有模仿意义。

2.谭浩强的其他类的书可能不一定是他写的,即使是他写的可能也不是他的擅长,大家可以自己先下载或者书店看看,觉得自己可以看懂,又能学到一些自己以前不知道的知识,那你再考虑要不要买了。反正我是不知道好不好。这些书可能还是他工作室的人写的。

最后、真心希望大家可以找到一本适合自己学的书,而不是人云亦云。我对谭浩强书的总体认识:他的编程语言类的书比较适合初学者学习,我觉得还是可以比较放心的购买。而且也不是很贵,那本绿色的《c程序涉及》好像才26元吧。你看蔡学墉的《java夜未眠》那么小小的一本也要20元哦。就算是你把26元捐给老一辈的教育家也没什么吧。


附录、以上的说明,可能大家也还是很不爽的,反正就是有人说他不好。所以在这里我们应该好好来看看《千万别看谭浩强的书》里面到底讲的都是什么内容。大家是否都完整认真看完《千万别看谭浩强的书》这篇文章,还是因为自己曾经因为看不懂谭浩强的书过不了计算机二级考试而怨恨谭浩强呢,我猜可能真的有这种情况吧。

不管怎么样,我还是希望大家好好地看看里面到底写了什么,是不是都是对的。因为这本书我其实没有认真看过,不是觉得不好,而是我看了都懂,觉得自己的水平应该比里面的知识高,而且我主要学C++的。因此有一些评论引自别人,我会注明他在编程爱好者论坛中的id。前面的1 2 3 ……是《千万别看谭浩强的书》这篇文章中提出反对谭浩强书的理由,我们现在来看看。


1:书皮上面有那么多的牛人题词,估计也许是自己的水平太低。

我的观点:看到这句话,真想扁他一顿。真是不仅没文化还没素质。好像记得蔡学墉在他的《java夜未眠》里面给读者介绍如何挑选一本好书时说:可以看这本书是否有评论。有人评论说明是一种好事。你是没看到Bruce Eckel的经典著作《Thinking in Java》和《Thinking in C++》前面的评论吗。还有侯捷老师的大部分书都会引用一些读者来信或者某某名人的看法。不懂就别装懂,这是一种商业,同时也是告诉读者这书这人有很多人承认的。

2:ANSI只给了两种方式:
int main(void) {/*...*/}
和 int main(int argc, char *argv[]){/*...*/}
其它的形式都是不标准的,属未定义行为,老潭就好这个。

我的观点:他的这个是什么意思??谭浩强老师这样说没错啊。

在 C89 中,main( ) 是可以接受的。Brian W. Kernighan 和 Dennis M. Ritchie 的经典巨著 The C programming Language(《C 程序设计语言》)用的就是 main( )(第二版仍然使用main( ))。不过在最新的 C99 标准中,只有以下两种定义方式是正确的:

           int main( void )

           int main( int argc, char *argv[] )。谭浩强说的非常对啊。而且希望大家按照这样的格式写,以免影响以后的代码移植。补充一点,在这两者main函数里面一定要显示写上return 0; 这个是ANSI C标准规定的。

下面说说c++标准的不同之处:

 C++98 中定义了如下两种 main 函数的定义方式:

                  int main( )

                  int main( int argc, char *argv[] )

(参考资料:ISO/IEC 14882(1998-9-01)Programming languages — C++ 3.6 Start and termination)

        int main( ) 等同于 C99 中的 int main( void ) ;int main( int argc, char *argv[] ) 的用法也和 C99 中定义的一样。同样,main 函数的返回值类型也必须是 int 。如果 main 函数的末尾没写 return 语句,C++98 规定编译器要自动在生成的目标文件中加入 return 0 。也就是c++标准没有规定必须显示加上return 0;

3:如果你有兴趣,不妨查查近二十年来老谭写过的书。老先生的主要作品是:Basic语言教程、C语言教程这两种书。他的书现在的版本与十年前的相比,多少也有点“与时俱进”,根据语法变化做了点修改。但是改不掉的是他那种糟糕的编码风格、好钻“未定义行为”在某种编译环境中的具体表现的牛角尖而且颇为自已能用很多篇幅讨论这样无聊的问题而沾沾自喜的性格,以及对程序设计中很多方面的错误理解和解说。

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

我的观点

    什么叫“好钻“未定义行为”…”,这个有什么不好,“未定义行为”可以讲得清楚的国内书籍也没有多少,很多人学了好多年的C/C++,甚至计算机研究生毕业了,还搞不懂什么叫“未定义行为”。能够说清楚在c语言中的哪些地方属于“未定义行为”是很好的做法啊。具体概念不作仔细说明,简单的说“未定义行为”在编译的时候一般不会出错,但是其结果是随意的,得到的可能不是你想要的,还可能造成内存冲突……

    接下来骂了一通谭浩强,我就不想多说了,no sigh

      大家应该清楚:搞教育的和搞研究的是不一样的,水平高的不一定会教书育人或者不喜欢教书育人啊。王选老师和谭浩强明显是分属这两类,不能用水平来比较的。陈景润在厦大还只是图书馆管理员呢(他不会教书)。侯捷老师也自认为自己作开发,理清1万行的代码对他有难度,所以他选择教书写书译书。(在华中科大的一次对话)


4:建议老谭好好看看The C Programming Language,好好学学C语言。
我最烦学生拿着他书里一个语句里面好多++的问题来问我。
我不教C语言,只教C语言版数据结构,发现计算机专业没有一个C语言学得好的学生,对此很无奈。都是老潭的教材闹的,我发现凡是C标准上说的is undefined老潭讨论起来就特别来劲。

我的观点:你的学生连++都不懂,那你还教什么教。再说问你++的问题不对??为什么不能研究++呢?你是说谭浩强讲得不清楚,我不相信的,因为这个问题我曾经参考过他的书的。

对于这个++的问题(--也是一样)的问题,我觉得应该让学生明白三点:

(1)前++和后++的区别

(2)前++和后++能否作左值的问题

(3)表达式中的各个项的计算顺序是没有规定的,所以不要写出

j=++i + i++ +++i;等类似的语句(可怜最近雅虎的招聘笔试题竟然出现这样的题目,真是汗)


5:老谭后面的写的也是漏洞百出的。例子程序也是臭不可闻的,有些编译不过去(例如把不同的指针类型用等号赋值,用过C的人都知道不同类型的指针在赋值前需要进行转换,C标准里也规定了),有些执行不了(例如老谭改字符串常量的值),不知道他写完书有没有把书上的例子编程序试一下。还有老谭跟本就没写过或者阅读过20行以上的程序,书中的许多东西都是老谭想当然之作,有些地方想法很幼稚。所以请大家不要和这个没写过程序的人学编程了。

我的观点:竟然说谭浩强没有写过程序,真是笑掉老一辈程序员的牙了,《basic语言》1200万册,老兄。对于书中的例子,我们看看人家孟岩是怎么样说的:“比如谭浩强的《C语言教程》、钱能的《C++语言大学教程》。这两本书我首推第一本,因为这一本我潜心研究了一年,这本书当中很多程序是可以剽窃的,而且可以对这些程序进行加工和提升。比如结构这一章中,它所给出的用struct来实现链表、二叉树的算法是相当蹩脚的。学习ADT+PP的初学者将这本书揣摩透以后可以尝试修改这两个程序。”见《C++图书三人谈》(见《程序员》杂志2002年第九期P113-116或者《程序员》杂志2002年增值合订本下册P396-398)。我就不想多说了,我这里没有谭浩强的书,就不评论了。


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

我的观点:我相信我们还可以有很多选择,其他选择你可能也是可以入门。但是你不觉得400万册已经够说明一切了吗。还有谭老师的这些书我实在不怎么相信作者都是属他名的。因为他有了工作室以后,其实很多书都是属别人的,只是挂着:谭浩强工作室而已。

7:编程风格在软件工程中影响到编写一个程序的效率,程序升级时候潜在的隐患,别人能否正确理解你的程序...等等很多方面.打个比方,一个函数void f()括号中没写void 那么根据k&r的风格它可能是有参数的,而根据美国C的风格它就是没参数的.显然不同风格对这个函数理解不同.

所以void f()这种歧异风格是以后软件升级和软件管理的隐患.又好像 goto语句,任何一本外国的书都会严重警告读者不要使用.何故?因为编写大程序时候这种原始控制流语句会破还程序的运行.当然,如果 你 学C语言只是为了考试,那么当然感觉不出goto 有何缺点,因为你只需要写几行的代码而不是真正开发程序!总之当今软件产业最大的耗费资金不是软件开发而是软件维护!如果你1年前编写的程序如果风格不好,那么可能一年后你自己想升级软件时的难度相当于重新构想该软件了!升级这软件的任务由别人来承担时这就更不用说有多难了.
谭浩强更差的地方是没有在书后给出一些编程经验和警告.这无疑使初学者学习事陪功半.对比国外好书 ,每章后面除了经验和警告外还会又系统相关性,这对于C这类系统相关语言是很有必要的.谭浩强的书讲解也很不透彻,例如什么是头文件就 放到函数那章才提及,大概已经是 第八章了.但外国的好书都是 从一开始就讲头文件是什么,这更有助于读者理解.国外的书还特别有一章讲结构化 编程,而且是放到前五章之内.后面的章节每一个例子都是用结构化写成的.绝对不是谭那种一个main函数到尾的考试编程.在数组和指针上,谭的书是分开两章来教,而且中间隔开一章,而国外的好书是 放到同一章节中讲述,并强调它们的联系与区别.
以上列举了谭书的部分缺点.我所说的国外好书主要是我详细看过的〈C语言解释教程〉,同为入门书, 我感觉教出来的学生纵使本来一样勤奋,但素质都会截然不同.这就是中国高等教育远远不如美国的地方.说明显了就是应试性特强,不注重基础原理, 排版混乱且没特色, 软件工程与软件入门全面脱钩...等等.
   本人说夸张一点,谭这种烂人有当今的显赫威望绝对是中国的悲哀.他严重阻碍了中国软件教育事业的发展,更为可悲可叹, 这里居然有人说他的书不错真是荒谬之极.

我的观点

    大家不知道有没有仔细看了:为什么这个人说话都是那么武断,就是因为他实在很无聊。他说谭浩强那时出名只是国内还没有多少人懂计算机。这就对了,人家是教育先锋啊,没有人家你不是又要摸索很久。这种人说不定过几年后还开始批评侯捷说:那时是因为大家的水平还不行,要不然你这个烂水平还想出名。你不是看完谭浩强的书,我想你也看不懂人家国外的好书吧。

    还有上面提到的都是谭浩强书中所没有具备的,比如:“谭浩强更差的地方是没有在书后给出一些编程经验和警告.”  这样的荒谬的话也说,人家的书又不是百科全书,需要面面具到吗?其中这种书是初学者用的,也就是让你懂得了c语言,至于怎么样用好c语言,这是谭浩强能力所不能具备的,他没有谈我倒觉得是很明智的选择。

如何更好的用好c语言,我觉得有两者方式:

(1)实践,这个是一定要的

(2)厉害脚色写的经验总结,c语言我不是很了解,在c++中像《effective c++》

《more effective c++》还有类似《代码阅读方法与实践》之类的书就是在介绍这方面的,这些书都是很厉害的实战家写的。

  总之,这里是无病呻吟!

附录、以上的说明,可能大家也还是很不爽的,反正就是有人说他不好。所以在这里我们应该好好来看看《千万别看谭浩强的书》里面到底讲
的都是什么内容。大家是否都认真看过了,还是因为自己曾经因为看不懂谭浩强的书过不了计算机二级考试而怨恨谭浩强呢,我猜可能真的有这种情况吧。
不管怎么样,我还是希望大家好好地看看里面到底写了什么,是不是都是对的。因为这本书我其实没有认真看过,不是觉得不好,而是我看了

都懂,觉得自己的水平应该比里面的知识高,而且我主要学C++的。因此有一些评论引自别人,我会注明他在论坛的id

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语言时是感觉不到的。但过了多年后才发觉以前走了不少的弯路,自己花了几年总结的经验教训,实际上在很多国外的优秀书籍里早就有了。

我的观点:什么事都是讲究进步的,我觉得谭浩强的书应该也是随着版本的递增而进步了。其实对于初学者,看完一本书对于他的编码风格并不会产生巨大影响。反正我以前写c++就是首先想办法让我的程序可以工作就是了。就像现在评价代码一样,首先必须满足正确性,没有正确性什么都不要谈了。如果不能从中学到编码风格,那就先学学如何编写正确的代码吧。


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

我的观点:一点逻辑都没有,真是no sign。 这就好像学习了走路然后再学习跑步一样,在这个人看来,没有直接跑步是“笨蛋”。再次无语。


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

我的观点:千篇一律有什么不好,郎闲平教授就是认为人家美国的教育特别是MBA教育是一个模式的,而中国没有一个统一的模式。规范模式就像各个行业中的标准,可以通用。你在美国的MBA毕业后,可以去美国的各家公司上面。里面的人讲的话都是相通的,术语也是一样的。谭浩强书一样的话,你看完他的basic再看c语言会觉得很亲切的,这有什么不好。你不是看完谭浩强的书,我想你也看不懂人家国外的好书吧。

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

我的观点:时代在进步,你想用你以前看的书来定义现在的标准当然不行了,要是可以的话,书为什么还要出个第2版 第3版,甚至《core java》还出到了第七版了。


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;
}

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

我的观点:因为代码已经乱了,就不说了。谭浩强以前的书确实缩进方面没怎么弄好,但是也不会影响阅读的,而且也不是很糟糕。相信第三版的c语言应该改进了很多了。事物尽量看到他的有点长处和潜力也就是可进步的地方,企业用人、家庭孩子的教育都是一个道理的。

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 程序设计语言》(第二版)  徐宝文  译最后祝大家学习愉快!!

id: ytwuyv的观点:你看书也是马虎大意。断章取义:
你再仔细看看,谭老是这样说的:“对于表达式a=f1()+f2(),并不是所有的编译器都先调用f1(),然后调用f2()","因此要小心谨慎“,
“应该避免这种岐义性”,“为避免误解,最好采取大家都能理解的写法,不要写成,i++++j的形式“。
所以,谭老师知道不同的编译器可能产生不同的结果,所以提醒大家编程时"最好采用大家都能理解的写法“

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。读过这本书的人(包括我)真是悲哀。

id:ytwuyv的观点:不好意思,能不能解释一下这个程序错误在哪里。

我的观点:真不知道你要说明什么问题?这种人竟然还教书育人,真是悲哀啊。

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

id:ytwuyv的观点:以偏盖全,你做过多少调查,凭你这种说法,就知道你逻辑不严密。还搞程序的呢

我的观点:

引:“除了候捷得书(他是台湾的),中国人写的那些计算机书简直。。。。。(不好意思说),^_^,不管说什么都是他们的屁话一堆”

真是很搞笑,不懂装懂。说说国内的写计算机书的人吧。其实,一般认为写书类在台湾以:侯捷、李维和蔡学墉水平比较高,当然还有其他的不同领域的专攻者:比如手机游戏,j2me的王森……。在大陆像潘爱民老师、裘宗燕老师的翻译水平都是很高的,而像孙卫琴在struts、tomcat方面的书籍也是很不错的。还有一点就是中国可能比较难找一个像侯捷写书翻译那么全面的(侯捷也是和谭浩强一样入选影响中国软件开发的20人,两个都是教育先锋类的),但是很多人在某方面的特长都是不可忽视的。像严蔚敏老师的《数据结构》不是很出名吗?像李建中编译原理、操作系统和数据库方面都是很不错的。其它的国内好的翻译书籍甚至原作的也有很优秀的,像《java与模式》、林锐博士的《高质量程序设计指南C++/C语言》等等在一定程度上都足够很多人去学习了。好的译者也是越来越多了。

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

我的观点:你老师说你去吃大便你就去啊!!(本来说好去掉脏话了,但是我实在不知道说什么好了)。

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

id:ytwytz的观点:右移相当于除以2,这是让大家加深对右移的理解,事实上,很多除法运算在对速度有求的时侯,都是采用右移的。当然,谭老也说了,要弄清这种编译器是“逻辑右移”还是“算术右移”。不同的计算机系统可能是不同的,谭老师不知道,你知道吗。

我的观点:上面的谭浩强说的话根本就是已经很清楚了,就像C/C++的有些性质一样,人家可能会说:这个跟编译器相关。这已经很明白,难道还要列出所有的编译器一个一个分析。谭浩强说:有些机器补0,有些机器补1,这很明白了,即使具体补0还是1跟机器相关。

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

我的观点:这个问题不知道是不是真的,该不会你自己到书摊上花了2块钱买了吧,再说就像你说的那样,这个是出版社的问题没必要拿来充数的。

于世伟告诉我们:不要说:我认为,我觉得。你认为的,你觉得的往往是错的。

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

我的观点:我看过的所有人写的东西:你这句话绝对绝对是最无聊,最无耻的。看过所有的文章,你这篇绝对是最卑鄙的。

19:书的内容有些老,一些内容过于专门化(但又没有讲出关键),另一些内容不是很准确。一个例子是,“Turbo C 和目前使用的多数 C 版本对这两种方法都允许使用,两种方法等价,ANSI 新标准推荐前一种方法,……”(PP. 146)两种方法并不是完全等价的:采用老方式时,编译器可能已经关闭了类型检查。
    对 C++ 的介绍没有必要,因为仅靠两章的内容根本没法说清;学习 C++ 最好避免 C 的技巧。我的观点是,C++ 与 C 应尽可能的分开。
    最后一章指出的一些错误仍是属于 K&R C 风格的;按照 16.2 节指出的步骤,一个程序似乎应该先写到纸上。难道 Unix 的源代码也是先写到纸上再录入的吗?

我的观点:对c++的介绍是不是必要也不会影响这本书啊,你可以不看啊,人家只是为了让你知道还有这样一种技术。

20:建议不要看该书,尤其不要做后面的习题,特别不要购买配套练习题。这本书不是学习的途径,会指引你误入歧途。真的,不是骗你。

我的观点:千万不要相信这个人说的话。但是这书合不合适你,你自己看看娄。

21:我对看这本书的读者建议是:
    该书比较适合对C有点掌握的人用来做[排除错误]的练习,比如:可以通过对书中美妙“术语”的斟酌,来加深自己对计算机科学术语的理解;可以通过修改书中已书写“优良”的代码来改善自己书写代码的风格和加深对程序可读性的理解。如此等等。当然还可以有其他很多的提高,只要你肯对书中的内容大力斟酌喽。(特别注意:若你是菜鸟,就不要轻易尝试[排除错误]了。)

最后,推荐初学C和程序设计的朋友去北大裘宗燕老师的网站上看看,肯定不会让你失望的!网址如下:http://www.math.pku.edu.cn/teachers/qiuzy/

我的观点:裘老师是很厉害,但是他的著作和译作好像不是初学者可以读的吧,像C++之父的《the C++ programming Language》《C++语言的设计和演化》《程序设计实践》,其它他自己写的一些书也是没什么名气的,不推荐看。


22:跟你说我们班主任(教C语言的)的编码风格和谭的很象。。超浓缩豆腐块。我看在眼里笑在心理。哈哈。更可笑的是已经培养出好几个班上的超浓缩豆腐块。。哈哈

我的观点:希望大家一起找找这个人,你们好当面问问他了,也顺便打听打听他的教书育人水平。

23:谭浩强?老朽而已,原来在清华念过书,因搞共青团工作比较卖力而留校。其实大家都清楚:这类人在大学里是很被人看不起的

我的观点:真是没话说了。一个老师的思想竟然这门狭隘,还自以为是。


24:此书“几年来发行量达270万册,创同类书发行量的全国纪录。”呜呼!那是在全国人民见不到好书的情况下出现的,是全国人民的悲哀!
另外,有些教师懒惰,10年间没有换过讲稿,使得这种垃圾教材得以苟延残喘。

我的观点:你不知道谭浩强《basic语言》卖了1200万册,全世界都见不到好书??到今天,你说说那个中国人的IT书籍可以畅销全球。最后那句更是让我不知道怎么说你好了。

25:这本书里的程序代码没有用K&R格式,代码被紧贴着写在左花括号{ 的右边。Deitel父子的那本笔者本要好得多。

我的观点:书总是有缺陷的,总之你不能指望从一本书中学到所有的知识。我看完了《C++ Primer》还觉得很多知识都不懂,还继续看《The C++ programming language》。

以下是谭的c++教程评论:

注:以下的观点省略了,因为谭浩强的c++可能确实不是太好,因为毕竟他是从早期的过程化语言走过来的,要改为面向对象可能没那么容易,而且现在年纪大了,知识更新不容易。建议大家先看后买。但是不管怎么样,这种《千万别买谭浩强的书》是绝对毒害大家的。


总结:我想论坛的跟帖应该是没有几个人好好看这篇文章的,大家仔细看看就知道这个人说话像放屁,什么话都是绝对,一定,明显连马克思的辩证法都不知道,还教书育人,好意思说是北航老师的学生,好意思说在教《数据结构》。

 

阅读(11993) | 评论(8)


版权声明:编程爱好者网站为此博客服务提供商,如本文牵涉到版权问题,编程爱好者网站不承担相关责任,如有版权问题请直接与本文作者联系解决。谢谢!

评论

loading...
您需要登录后才能评论,请 登录 或者 注册