为什么这么多人不喜欢谭浩强的C语言程序设计?


他,是谁?

谭浩强教授,我国著名计算机教育专家。


1958年毕业于清华大学自动控制系。

青年时期曾担任清华大学学生会主席、北京市学联副主席、北京市人大代表、全国文教战线先进分子。

他是我国计算机普及和高校计算机基础教育的开拓者之一。

现任全国高等院校计算机基础教育研究会荣誉会长、教育部全国计算机应用技术证书考试委员会主任委员,享受国务院政府特殊津贴。

曾获国家科技进步奖、国家级教学成果奖,被原国家科学技术委员会和中国科学技术协会表彰为“全国先进科普工作者”,被北京市人民政府评为“北京市有突出贡献的专家”。

他在CCTV讲了BASIC,FORTRAN,COBOL,Pascal,QBASIC,C,Visual Basic七种计算机语言,观众超过500万人。

谭浩强教授善于用读者容易理解的方法和语言说明复杂的概念。

许多人认为他开创了计算机书籍贴近大众的新风,为我国的计算机普及事业作出重要的贡献。

21世纪初,被《计算机世界》报组织的“世纪评选”评为“我国20世纪最有影响的十个IT人物”,被《电脑报》评为“我国十大IT人物”,他的功绩是把千百万群众带入计算机的大门。

然而,从很久以前开始,他所著的《C程序设计》就一直被吐槽不断。


这本书几乎是每个程序员必经的“童年”。

这本书已经出到了第五版。

▍那么这究竟是为什么,大家会说这本书是坑?

1、 这本书本身存在很多语法错误,主要是理解或者版本更迭没有及时更新造成,中国大学里面很多教材更迭相对偏慢。

随着计算机软件领域的飞速发展,现在这本书因为内容比较老,可能已经不太适宜做教材。

另外,这本书还是翻译过来的,语言差异加上翻译上理解的偏差,造成书中部分语法和概念确实有一定的问题。

甚至在网上,你还可以看到诸如《谭浩强<C程序设计>错误不完全汇集》的整整50页的纠正文档。(基于第四版的纠错,第五版已修复大部分)


之前嵌入式ARM曾推送过的文章《你有没有想过,C语言 main 函数到底为啥这么写?》中,许多人会错写成void main()的形式,其实就是早期谭老未更正教材的错误之一。

知乎还有人整理出了长长的错误列表……


2、 内容过于老旧,甚至有些程序内容都无法运行,当然这是编译器支持不同的C标准造成的。

这本书甚至大学许多教师的编译环境还是turbo C,这个老古董已经非常过时了,显得这本书非常的low,欠缺与时俱进。

但是此书确实更新速度比较慢,在2000年以后出的版本仍然支持的是C89标准。

3、 后期高质量的书非常多,排版也非常清晰,比如说《C Primer Plus》几乎可以取代这本书,但谭老这本书仍然还是作为大学的教材主力。

4、 有的人表示这本书难度太高了,主要是内容设计有关。开篇的内容对于刚接触C语言的人来说确实具有一定的难度,让不少人望而生畏。

其实最令我印象深刻的是:i+=(++i)+(i++)这种类型的代码。我相信你肯定见过且做过,直到现在仍有不少人为之苦恼,其实此类代码的来源就是这里。我们讲理论目的是指导实践,但是这种堆叠式地靠运算符优先级的写法真的意义不大,实际工程中代码的目标是简单易懂且有效,难道仅仅是为了考察运算优先级?

其实不仅是计算机教材,还有更多的比如线性代数教材、专业课教材、教学用到的软件,全都缺乏更新。

网友们现身说法

一位网友表示,有一位好心学长将谭先生的《C++程序设计》借给了我,这几乎直接导致了我现在还不会编程。

知乎上的人也有人现身说法:

孙涛表示,我是物理专业的,当初启蒙就是这本书。说的严重点,这本书配合一个半吊子老师几乎毁了物理系所有人对编程的信心。造成的心理阴影直到毕业才逐渐消除。当初学c语言,大家感觉奇难无比,毫无头绪,要花大量时间研究特sb的知识点,比如i++++i。那个老师是教物理实验的,对c语言没什么理解,照本宣科而已。每节c语言课我要先预习两个小时,然后再复习两个小时,勉强能把书上奇奇怪怪的“知识点”搞清楚。当时刚上大一,不知道怎么自学,也不知道有什么好教材。越不懂越去研究谭浩强的书,然后就更蒙圈,恶性循环。

曾一度怀疑自己智商有问题,后来觉得不应该啊。总之当时觉得这门课是难到天上去了,考完之后再不想碰。其实c语言比大多数物理课都简单不少。我的很多同学也是对这门课很厌恶,逃避。后来即使在物理实验中遇到需要编程处理数据的,也是能逃就逃。整个转行系(物理系)毕业后鲜有人从事编程相关,绝对和这次打击有关。到现在大家才慢慢缓过来,开始学习其他编程的东西
敖厂长有一期节目说的是雅达利出品的《外星人ET》游戏直接毁灭了美国的游戏机产业,直到微软xbox才复兴。

谭浩强c语言教材对我的打击不亚于这个。谭浩强也算是中国计算机教育的先行者了,教材错误多,过时了,也不能怪他头上。但是他在书里吹牛逼就不对了,成天发行量破几千万!各个大学也是不思进取,直到现在还在用他的教材。vc++6.0,二级考试,谭书,都可以称得上是毒瘤了

假药郎中表示,应该说有两个原因:

1. 这是本烂书。

2. 作为一本烂书,却借着谭的所谓权威名头,年复一年地祸害一代又一代的学生——这才是最令人愤怒的!

谭书中的错误已有无数人吐槽过了。我自己的一个栗子:当年跟着这本书学的#include "xxxx.c"。

说穿了就是:谭根本沒有C的实际开发经验,只知钻语法的牛角尖。而C恰恰是—门存在着很多“语法上不算错,但实际不能这么写”的语言。谭的书给初学者很多这样的误导。

谭的成名是因为当年在电视上讲的BASIC课程,在那个资料匮乏的年代,应该说谭的课程在计算机教育的启蒙普及上起到了作用。但实事求是的讲,谭当年的这些课程,也就好比一个闭塞山区里的乡村教师自己编的土教材,在没有更好的选择下聊胜于无。但随着社会的巨大进步,后来已经有更多更好的教材可用,他早该退出历史舞台。那样的话,也许他的历史形象更令人尊敬。而多年以来,他的书依然凭借行政权力倚老卖老地霸占着全国那么多的学校,大言不惭的标榜“销量千万”,这就很无耻了,让人鄙视也不为怪了。

邢志鹏表示,国内大学生的普遍思想,大学课本教材都是废物,凡是大学的教材,都是应付考试的。在这种提前下,老谭的书就不能幸免了。

其实很多人喷老谭的书都是以讹传讹,看到很多高手都喷谭浩强的书,然后自己也要鄙视一下谭浩强的书,来显得自己也是高手一样。这种人看到谁在看老谭的书就会说一句,这种垃圾书也看,哥看的都是国外的经典。下次遇到这种人,你就让他不查资料,自己直接找老谭的书上的错误,能找出多少。找不出就别喷好吗。

老谭书上类似i++++i这种代码,确实实际代码这么写不合适,但是作为初学者,这是通过这种方式教你在理解优先级,通过这种拗口的方式可以理解的更加彻底,我觉得没问题。就像小学数学课的应用题。举个例子,池子一边装水,一边放水,求水多久能装满池子。难道也要喷一下什么鬼题目,浪费水。这明明就是考的对题目的理解,又不是真让你去做个实验。一个道理。

我上大学的时候就是看这本书自学的,思想很单纯,认准了这本书,就好好学。我感觉谭浩强的书绝对适合入门,学东西最重要的难道不是入门吗,老外很多书确实经典,但是不适合入门,那就不能推荐给初学者,那样只会害了他们。很多人都是看了老谭的书,对C已经有了一个概念以后,再去看那些书显得很从容,但是如果没有一个基础直接看那些书,未必看得懂。

我相信很多喷老谭的程序员是通过谭浩强的C入了门,那就请你不要喷老谭了。更加鄙视那些通过抨击老谭抬高自己的人。在谭浩强那个年代学计算机的,都是聪明人,别的不说,想学计算机身边连本书都找不到,哪像现在各种书泛滥,网上各种教学视频。那个年代学好计算机除了要聪明,也一定要有毅力。现在的学生以为自己会写几句代码一个个都上天了,以为自己比谭浩强这种老古董要聪明不知多少,可笑!

郭靖的故事大家都知道。他的启蒙老师江南七怪,教他学会了功夫。但是真正让他成为大侠的是洪七公,后来他的功夫已经远远超过了江南七怪,但是他还是那么的尊敬他们,而没有半点瞧不起他们,因为没有江南七怪,郭靖也许就不会有后面的故事。我这个比喻也许非常不恰当,没有谭浩强一定有别的书代替。不过我依然认为初学者可以看看老谭的书,至少他适合入门,如果你觉得他的入太抽象难懂了,我只能说要么你没用心,要么就不适合编程。

Hanson表示,现在黑谭浩强的简直是比比皆是。我觉得对于他的教材应该客观的评价。(吐槽一句,现在跟风的实在太多了,别人说什么他们立马附和,黑谭浩强书的人里面也有不少这样的人,估计好多黑他的人还不知道为什么黑他。。。)

不可否认,他的C语言教材在国内用的最广。既然有那么多人用,那么它就一定有他自己的优点。

我觉得,谭浩强书最大的优点就是特别容易懂(刚看有的答主和我的看法完全相反啊。。。),我指的易懂是指看他的书能很容易的自己写出正确的程序(至于代码风格不好,至少不是错误)。我开始接触C语言是在大概初二的时候,当时我第一本书买的就是第五版谭浩强。对于我们西北的这些信息弱省来说,初中那会大部分学生还不知道编程是什么。以此为背景,他的书能让我在完全没有基础的情况下几个月里学会C语言,易懂性是值得肯定的()。

当然,他的书缺点也是很明显的。

首先(也是我觉得最主要的问题)就是不讲原理。他能很快教会你怎么去写程序,但不告诉你为什么要这么写(和他前言说的不一样啊。。。)。这种写法更适合那些非计算机专业的学生(当然主要指学渣,学霸们请忽略这条),但对于真正学C语言的同学来说,就显得不足,对后续的学习应用也可能会埋下不小的麻烦。

其次是大家吐槽较多的代码风格和小错误(个人觉得第五版里错误已经不怎么常见了,至于风格,好吧,的确不怎么样)。

再有,就是个别地方讲的有些然,没讲透。

(具体例子大家可以参考一下其他答案,有的列出不少,我就不重复列出了。不过说一点,有的错误是在特定版本的书里才出现的,看了一下其他答主找的大部分来自第四版,这些错误有的已经改正,但很多也还在,尤其是有些地方没讲清的问题,大部分在第五版仍存在)

Zhu xiangping表示,我觉得很好,我当时学C++就是用的他的书。看他的书让我感觉最舒服的是每当我看到一处知识产生了疑问然后我再往下看就看到他提出了相同的问题并作出了解答。有很多次这样的体验,我觉得这只能是一个教学经验丰富的老师才能做到。

通过学习他的书,我编程的能力对付一般问题应该没有问题。当时C++考试成绩应该在专业里前三,C++项目实习是第一(实现了很多项目没有要求的功能老师还给附加了分)。后来做通信实验,嫌手动采集处理数据麻烦,我还写了个小软件来实现数据采集处理的自动化。当然这对于那些代码大牛来说应该是小菜一碟,但是当时我就在学校开C++时学过程序语言,其余时间基本没有写过代码。后来接触了几种其他计算机语言,我能很快上手。我想这要归功于当时C++的学习。

对于喷,我想这是不可避免的,知名度越高,喷的人越多。喷与不喷,那是个人的自由。适合自己最好。

▍这本书实际上培养了一大批的人


以前在计算机领域可以借鉴的东西很少,可以说正是这样的书籍,以详细的讲解和通俗易懂的风格,培养了一大批的基础扎实的人才,才有了之后的网页和动画,有了众多的可参考的资料,这些贡献都是不可磨灭的。

谭浩强生于1934年,58年从清华毕业,那时候C语言还没有问世。在久远的过去条件下,写出这么一本编程入门教材实属不易。

而值得注意的是,是多年来大学教材质量并没有明显改进所以,现在就是很矛盾。批评教材的主要意见其实是对的,但是在细节部分很容易受到反驳。

造成这种矛盾的主要原因,因为批评搞错了对象,结果是意见不能集中,越说越乱。现在的主要矛盾,是教材的编写方式陈旧、脱离实际,且长期得不到更新。

这个问题不仅仅发生在计算机课程领域,也不必把这个黑锅背在“谭浩强”身上。一本小说写的好,看的人就多,写的烂,看的人就少,这是显而易见的。某作者写的教材好,就采用;写的烂,就不用。

为什么写的不好还要强制统一使用呢?教材的选用还未得到足够重视中国的“211高校”有100多所,培养的老师数不胜数,其中应该有相当数量的老师有写出好书的实力。就算老师不会写,市面上也已经有好多本优秀的国外教材,提供了较新的编写思路可供参考。但是目前已经普遍反映出,大学教材停止了迭代,更没有有效的、与时俱进的质量把控。强烈希望各个大学从教材出发,做好教书育人的本职工作。

无论怎么吐槽,一个人编程水平的高低和所在大学,使用的什么教材都没有太直接的关系,很多人在网上买编程教材一定想着买个最新版本的,其实完全没有必要,这些都是客观因素,主观因素才是关键,真要想学的好,什么教材都玩的转,取决于内在的意识形态,驱动力不够有再好的教材也是浪费资源,无论怎么说老谭对于中国计算机行业的贡献还是非常突出的,感激的心情更多点。

现在还有很多的论调包含的大致意思就是C语言现在已经不行了,完全没有必要再去学习了,看看招聘职位关于C语言的真是少的可怜,现在明显的都在向高级语言进发了,大趋势是向集成化程度高的语言前进,但是集成化语言本身很多都是C语言完成的,未来可能C语言学习的会变少,但是职位要求以及薪资水平会高的让普通程序员都只有羡慕的份,物以稀为贵,这也是市场规模。踏踏实实学好正在学习的编程语言,把精力放在语言本身,而不是去争论谁好谁坏,即使分出个高低了对于个人又有什么直接好处,认准一种编程语言一直学到最后,然后想办法过度到别的语言,触类旁通。

老谭作为早期的布道者已经做出了不可磨灭的贡献,仅此一点就值得致敬。

【参考资料】
1、知乎 . 《为什么说谭浩强的书是坑?》
2、佚名 . 《怎样评价谭浩强版<C程序设计>?》
3、佚名 . 《为什么这么多人不喜欢谭浩强的C语言程序设计?》

-END-

推荐阅读

  • EasyLogger——让BUG无处藏身

  • [踩坑]CMOS器件输入管脚不能悬空?

  • [开源]基于STM32F103的疫情监控平台(RT-Thread)

  • [开源]基于Qt+STM32MP1的疫情监控平台

  • [踩坑]STM32外部8M晶体不起振会有什么现象?

电子电路开发学习 单片机点灯小能手,电子行业从业者。开发板评测、嵌入式开源项目分享、学习笔记记录。可能不会经常更新,但每一篇都是精心编写。
评论
  • RDDI-DAP错误通常与调试接口相关,特别是在使用CMSIS-DAP协议进行嵌入式系统开发时。以下是一些可能的原因和解决方法: 1. 硬件连接问题:     检查调试器(如ST-Link)与目标板之间的连接是否牢固。     确保所有必要的引脚都已正确连接,没有松动或短路。 2. 电源问题:     确保目标板和调试器都有足够的电源供应。     检查电源电压是否符合目标板的规格要求。 3. 固件问题: &n
    丙丁先生 2024-12-01 17:37 100浏览
  • 概述 说明(三)探讨的是比较器一般带有滞回(Hysteresis)功能,为了解决输入信号转换速率不够的问题。前文还提到,即便使能滞回(Hysteresis)功能,还是无法解决SiPM读出测试系统需要解决的问题。本文在说明(三)的基础上,继续探讨为SiPM读出测试系统寻求合适的模拟脉冲检出方案。前四代SiPM使用的高速比较器指标缺陷 由于前端模拟信号属于典型的指数脉冲,所以下降沿转换速率(Slew Rate)过慢,导致比较器检出出现不必要的问题。尽管比较器可以使能滞回(Hysteresis)模块功
    coyoo 2024-12-03 12:20 111浏览
  • 当前,智能汽车产业迎来重大变局,随着人工智能、5G、大数据等新一代信息技术的迅猛发展,智能网联汽车正呈现强劲发展势头。11月26日,在2024紫光展锐全球合作伙伴大会汽车电子生态论坛上,紫光展锐与上汽海外出行联合发布搭载紫光展锐A7870的上汽海外MG量产车型,并发布A7710系列UWB数字钥匙解决方案平台,可应用于数字钥匙、活体检测、脚踢雷达、自动泊车等多种智能汽车场景。 联合发布量产车型,推动汽车智能化出海紫光展锐与上汽海外出行达成战略合作,联合发布搭载紫光展锐A7870的量产车型
    紫光展锐 2024-12-03 11:38 101浏览
  • 11-29学习笔记11-29学习笔记习学习笔记&记录学习学习笔记&记录学习学习笔记&记录学习学习笔记&记录学习笔记&记录学习习笔记&记学习学习笔记&记录学习学习笔记&记录学习习笔记&记录学习学习笔记&记录学习学习笔记记录学习学习笔记&记录学习学习笔记&记录学习学习笔记&记录学习学习笔记&记录学习学习笔记&记录学习习笔记&记录学习学习笔记&记录学习学习笔记&记录学习学习笔记&记录学习学习笔记&记录学习学习笔记&记录学习学习笔记&记录学习学习笔记&学习学习笔记&记录学习学习笔记&记录学习学习笔记&记
    youyeye 2024-12-02 23:58 71浏览
  • 作为优秀工程师的你,已身经百战、阅板无数!请先醒醒,新的项目来了,这是一个既要、又要、还要的产品需求,ARM核心板中一个处理器怎么能实现这么丰富的外围接口?踌躇之际,你偶阅此文。于是,“潘多拉”的魔盒打开了!没错,USB资源就是你打开新世界得钥匙,它能做哪些扩展呢?1.1  USB扩网口通用ARM处理器大多带两路网口,如果项目中有多路网路接口的需求,一般会选择在主板外部加交换机/路由器。当然,出于成本考虑,也可以将Switch芯片集成到ARM核心板或底板上,如KSZ9897、
    万象奥科 2024-12-03 10:24 68浏览
  •         温度传感器的精度受哪些因素影响,要先看所用的温度传感器输出哪种信号,不同信号输出的温度传感器影响精度的因素也不同。        现在常用的温度传感器输出信号有以下几种:电阻信号、电流信号、电压信号、数字信号等。以输出电阻信号的温度传感器为例,还细分为正温度系数温度传感器和负温度系数温度传感器,常用的铂电阻PT100/1000温度传感器就是正温度系数,就是说随着温度的升高,输出的电阻值会增大。对于输出
    锦正茂科技 2024-12-03 11:50 109浏览
  • 遇到部分串口工具不支持1500000波特率,这时候就需要进行修改,本文以触觉智能RK3562开发板修改系统波特率为115200为例,介绍瑞芯微方案主板Linux修改系统串口波特率教程。温馨提示:瑞芯微方案主板/开发板串口波特率只支持115200或1500000。修改Loader打印波特率查看对应芯片的MINIALL.ini确定要修改的bin文件#查看对应芯片的MINIALL.ini cat rkbin/RKBOOT/RK3562MINIALL.ini修改uart baudrate参数修改以下目
    Industio_触觉智能 2024-12-03 11:28 84浏览
  • TOF多区传感器: ND06   ND06是一款微型多区高集成度ToF测距传感器,其支持24个区域(6 x 4)同步测距,测距范围远达5m,具有测距范围广、精度高、测距稳定等特点。适用于投影仪的无感自动对焦和梯形校正、AIoT、手势识别、智能面板和智能灯具等多种场景。                 如果用ND06进行手势识别,只需要经过三个步骤: 第一步&
    esad0 2024-12-04 11:20 50浏览
  • 光伏逆变器是一种高效的能量转换设备,它能够将光伏太阳能板(PV)产生的不稳定的直流电压转换成与市电频率同步的交流电。这种转换后的电能不仅可以回馈至商用输电网络,还能供独立电网系统使用。光伏逆变器在商业光伏储能电站和家庭独立储能系统等应用领域中得到了广泛的应用。光耦合器,以其高速信号传输、出色的共模抑制比以及单向信号传输和光电隔离的特性,在光伏逆变器中扮演着至关重要的角色。它确保了系统的安全隔离、干扰的有效隔离以及通信信号的精准传输。光耦合器的使用不仅提高了系统的稳定性和安全性,而且由于其低功耗的
    晶台光耦 2024-12-02 10:40 120浏览
  • 最近几年,新能源汽车愈发受到消费者的青睐,其销量也是一路走高。据中汽协公布的数据显示,2024年10月,新能源汽车产销分别完成146.3万辆和143万辆,同比分别增长48%和49.6%。而结合各家新能源车企所公布的销量数据来看,比亚迪再度夺得了销冠宝座,其10月新能源汽车销量达到了502657辆,同比增长66.53%。众所周知,比亚迪是新能源汽车领域的重要参与者,其一举一动向来为外界所关注。日前,比亚迪汽车旗下品牌方程豹汽车推出了新车方程豹豹8,该款车型一上市就迅速吸引了消费者的目光,成为SUV
    刘旷 2024-12-02 09:32 119浏览
我要评论
0
点击右上角,分享到朋友圈 我知道啦
请使用浏览器分享功能 我知道啦