谭浩强老爷子的《C程序设计》是坑?

2023-11-02 01:20

本文主要是介绍谭浩强老爷子的《C程序设计》是坑?,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

谭浩强老爷子的《C程序设计》是坑?

他,是谁?

谭浩强教授,我国著名计算机教育专家。 在这里插入图片描述

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

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

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

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

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

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

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

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

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

然而,从很久以前开始,他所著的《C程序设计》就一直被吐槽不断。
在这里插入图片描述
这本书几乎是每个程序员必经的“童年”。

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

▍那么这究竟是为什么,大家会说这本书是坑?
1、这本书本身存在很多语法错误,主要是理解或者版本更迭没有及时更新造成,中国大学里面很多教材更迭相对偏慢。

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

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

甚至在网上,你还可以看到诸如《谭浩强<C程序设计>错误不完全汇集》的整整50页的纠正文档。(基于第四版的纠错,第五版已修复大部分)
在这里插入图片描述
还有人整理出了长长的错误列表……
在这里插入图片描述
2、内容过于老旧,甚至有些程序内容都无法运行,当然这是编译器支持不同的C标准造成的。

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

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

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

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

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

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

▍网友们现身说法

一位网友表示,有一位好心学长将谭先生的《C++程序设计》借给了我,这几乎直接导致了我现在还不会编程。
谭书中的错误已有无数人吐槽过了。我自己的一个栗子:当年跟着这本书学的#include “xxxx.c”。
说穿了就是:谭根本沒有C的实际开发经验,只知钻语法的牛角尖。而C恰恰是—门存在着很多“语法上不算错,但实际不能这么写”的语言。谭的书给初学者很多这样的误导。
我觉得,谭浩强书最大的优点就是特别容易懂(刚看有的答主和我的看法完全相反啊。。。),我指的易懂是指看他的书能很容易的自己写出正确的程序(至于代码风格不好,至少不是错误)。
当然,他的书缺点也是很明显的。首先(也是我觉得最主要的问题)就是不讲原理。他能很快教会你怎么去写程序,但不告诉你为什么要这么写(和他前言说的不一样啊。。。)
通过学习他的书,我编程的能力对付一般问题应该没有问题。当时C++考试成绩应该在专业里前三,C++项目实习是第一(实现了很多项目没有要求的功能老师还给附加了分)。
对于喷,我想这是不可避免的,知名度越高,喷的人越多。喷与不喷,那是个人的自由。适合自己最好。
不可否认,他的C语言教材在国内用的最广。既然有那么多人用,那么它就一定有他自己的优点。
等等诸多…

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

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

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

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

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

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

这篇关于谭浩强老爷子的《C程序设计》是坑?的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/327111

相关文章

C语言程序设计(数据类型、运算符与表达式)

一、C的数据类型 C语言提供的数据类型: 二、常量和变量 2.1常量和符号常量 在程序运行过程中,其值不能被改变的量称为常量。 常量区分为不同的类型: 程序中用#define(预处理器指令)命令行定义变量将代表常量,用一个标识符代表一个常量,称为符合常量。 2.2变量 变量代表内存中具有特定属性的一个存储单元,用来存放数据,在程序运行期间,这些值是可以 改变的。 变

C语言程序设计(选择结构程序设计)

一、关系运算符和关系表达式 1.1关系运算符及其优先次序 ①<(小于) ②<=(小于或等于) ③>(大于) ④>=(大于或等于 ) ⑤==(等于) ⑥!=(不等于) 说明: 前4个优先级相同,后2个优先级相同,关系运算符的优先级低于算术运算符,关系运算符的优先级高于赋值运算符 1.2关系表达式 用关系运算符将两个表达式(可以是算术表达式或关系表达式,逻辑表达式,赋值表达式,字符

智能工厂程序设计 之1 智能工厂都本俱的方面(Facet,Aspect和Respect)即智能依赖的基底Substrate 之1

Q1、昨天分别给出了三个智能工厂的 “面face”(里面inter-face,外面outer-face和表面surface) 以及每个“面face” 各自使用的“方”(StringProcessor,CaseFilter和ModeAdapter)  。今天我们将继续说说三个智能工厂的“方面” 。在展开之前先看一下三个单词:面向facing,取向oriented,朝向toword。理解这三个词 和

C语言程序设计 笔记代码梳理 重制版

前言 本篇以笔记为主的C语言详解,全篇一共十章内容,会持续更新基础内容,争取做到更详细。多一句没有,少一句不行!  形而上学者谓之道,形而下学者谓之器 形而上学者谓之道,形而下学者谓之器 第1章 C语言的流程 1.C程序经历的六个阶段 编辑(Edit)预处理(Preprocess)编译(Compile)汇编(Assemble)链接(Link)执行(Execute)  2.

ACM东北地区程序设计大赛

不得不说随着参赛级别的提高,题目真的是越来越难啊,不过队长真是给力啊,在我们三个共同努力之下拿下了地区赛三等奖,哈哈我们可是大一唯一一只获奖队,终于在这次比赛打败了田大神。。。大神是失手了,俺和他差距还是挺大的。。。队友陈彤马上要去服兵役了,他说这是我们送给他最好的离别礼物,希望那家伙在部队好好干,以后谁干揍我!!!东北地区赛结束后,今年已经估计没机会参加亚洲区比赛了,赶紧补高数和线数啊!!别挂了

pta-2024年秋面向对象程序设计实验一-java

文章申明:作者也为初学者,解答仅供参考,不一定是最优解; 一:7-1 sdut-sel-2 汽车超速罚款(选择结构) 答案: import java.util.Scanner;         public class Main { public static void main(String[] arg){         Scanner sc=new Scanner(System

C语言程序设计(算法的概念及其表示)

一、算法的概念 一个程序应包括两个方面的内容: 对数据的描述:数据结构 对操作的描述:算法 著名计算机科学家沃思提出一个公式: 数据结构 +算法 =程序 完整的程序设计应该是: 数据结构+算法+程序设计方法+语言工具 广义地说,为解决一个问题而采取的方法和步骤,就称为“算法”。 对同一个问题,可有不同的解题方法和步骤。为了有效地进行解题,不仅需要保证算法正确,还要考虑算

1--程序设计的灵魂—算法

一:算法 特定问题求解步骤的描述 在计算机中表现为指令的有限序列 算法是独立存在的一种解决问题的方法和思想 对于算法而言,语言不重要,重要的是思想 二:算法特性 输入:有0个或多个输入 输出:至少一个输出 有穷:有限步骤之后自动结束 确定:每一步都有确定的含义 可行:每一步可行 三:算法设计准则 正确性,可读性,健壮性,高性价比 程序=数据结构+算法 四:影

Linux程序设计读书笔记------入门

第一章 入门   1:什么是Unix Unix是Open Group管理的一个商标,它指的是遵循特定规范的计算机操作系统 2:什么是Linux Linux是一个可以自由发布的类Unix内核实现,他是一个操作系统的底层核心 3:Linux应用程序表现为两种特殊类型的文件:可执行文件和脚本文件 4:Linux文本编辑器:Vim,Emacs等 5:库文件   1:静态库:.a   2

JavaScript高级程序设计(第4版) -- -- 观后笔记(篇章二)

一、变量、作用域与内存 1、原始值与引用值 ECMAScript 变量可以包含两种不同类型的数据:原始值和引用值。 在把一个值赋给变量时,JavaScript 引擎必须确定这个值是原始值还是引用值。 原始值(primitive value)就是最简单的数据。 保存原始值的变量是按值(by value)访问的。操作的就是存储在变量中的实际值。 引用值(reference value)则是由多个