欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页  >  IT编程

到底该如何看待谭浩强的“C程序设计”

程序员文章站 2022-03-10 15:07:49
谭浩强老师的《c程序设计》据说已经累计发行超过1000万册,然而网上的批评和质疑之声却似乎跟这个销量数字很不相称。很多人认为谭老师的书错漏百出,害人无数。甚至有人认为谭根本就不懂,各种质疑和贬损之声...

谭浩强老师的《c程序设计》据说已经累计发行超过1000万册,然而网上的批评和质疑之声却似乎跟这个销量数字很不相称。很多人认为谭老师的书错漏百出,害人无数。甚至有人认为谭根本就不懂,各种质疑和贬损之声更是不绝于耳。

最近逛知乎,看到一篇文章,我先不负责任的转载了,然后再表表我的看法。
原文作者:林建入 (文章著作权归作者所有)
一些同学学不好c语言,把罪责归于“因为教材是谭浩强写的”实在是很滑稽。

谭浩强老先生 1934 年生,现在已经 80 岁了。他 1958 年从清华大学自动控制系毕业,那年 24 岁。要知道 c 语言那时候都还没诞生,计算机都是大型机,原始又笨重,当时谭浩强学自动化控制这一专业可以说是比较尖端的。光从这一点上,就可以说,他是同时代人里非常非常聪明的那一类人。

现在许多人批评谭浩强的《c 程序设计》的一个重要理由是“不符合c99标准”。但我们要知道 dennis m. ritchie 在 1972 年才推出 c 语言的第一个版本(当时谭浩强 38 岁),那时的 c 语言并不成熟。事实上 c 语言的第一次标准化一直到 1989 年才完成(俗称c89),请注意那时候谭浩强已经 55 岁了!

55 岁,你退休了没?

而更重要的是,1989 年那个时候,互联网的发展即使是在全球来看,也是非常非常初级的,更别说国内。因此信息获取的渠道极其狭窄。举个例子大家就能明白,我们现在浏览网页所用的万维网协议,就是在 1989 年那一年,由当时在欧洲粒子物理实验室的tim berners-lee和他的同事一起发明的。

也就是说,一直到谭浩强 55 岁退休的时候,c 语言才刚刚完成了第一版本的标准化,而整个世界的互联网甚至还不支持通过来浏览!

时间再往后十年,到了 1999 年的时候,c99 标准终于问世。但因为这一标准比较新,大部分编译器还不能支持其中的许多特性。因此大部分沿用的还是 c89 的特性。在这样的背景下,第二年,谭浩强的《c 程序设计》出版了,而这一年,谭浩强已经 66 岁了。

抛开谭浩强 66 岁依然写作这一点不谈,若是站在当时的背景下来看待,事实上这本书也还是可读,可学,有价值的。但软件行业发展飞快,现在高校若继续沿用这一教材,就不合时宜了。

谭浩强的《c 程序设计》这本教材好不好?现在的观点来看当然不好。现在想学习 c 语言的人,不推荐采用他的书。但这主要是因为软件行业发展快速,他的书籍内容较老导致的。我们可以就书论书,但有些不明就里的同学从书出发指责谭浩强“不懂编程,水平低”等等,就是不对的了。

下面是我的一些评论和观点。

首先,1)谭老师的书确实错漏较多,主要的“错漏”在于对c99的标准满足的很不好(有很多网帖专门辑录了这本书里的错误,无需我在这详表)。2)由于谭老师写书的那个年代还没有(或者可能还没有)面向对象或者软件工程之类的概念,所以他的书基本上连变量命名规则都很受诟病。

 

况且,现在资讯这么发达,知识的门槛在现代科技的力量下已经一降再降。各种外版书,内版书层出不穷,读者的选择多了,就连可选的精华也多了。如果说他的书还在售卖,我个人认为这只能说是出版社为了赚钱而做出的不负责任的行为。在市场经济中,也很正常。毕竟“天下熙熙皆为利来,天下攘攘皆为利往”。

 

从以上角度来看,谭老的书确实该退出历史舞台了,广大读者们也不要再去看他的书了。

 

其次,网络上那些对谭老师的贬损之词我确实是不能认同的。这一点我基本认同林建入的看法。我们应该把问题放在特定的历史背景和环境下去看待。如果把时间往回推个近30年,我们绝对不应该抹杀谭老师工作的难能可贵与其卓越的贡献。下面这段话同样引用了知乎上的网友(牟旭东)留言:

“脱离时代背景谈一个时代产物,所得到的评价和结论并不准确。假设时光倒退20年,回到那个没有网络,连外文技术书影印版都没有的年代,我们来到某高校的计算机机房,询问一个盯着286屏幕,使用软盘里的turbo c编写和调试代码的同学,觉得谭浩强口碑如何时,得到的答案可能更加的真实。”

这个我深有感受。我觉得《圣斗士星矢》绝对是一个经典。然后有一次我问一个93年出生(且热爱日漫)的男生,觉得《圣斗士星矢》如何。他的答复是,(当然他说的是动画片)一打开发现画质太差,立马关闭了,完全接受不了。

现在一个大学本科的物理专业学生所掌握的物理知识就已经超过牛顿了。但我们难道能据此蔑视说牛顿水平太差吗?即使是过去持有错误认识的人在当时的历史背景下,我们都不能因为他的某些错误和偏执而否认他的杰出贡献不是吗?毕达哥拉斯就曾完全否定无理数的存在。康托提出集合论的时候,克罗内克也曾针锋相对地反对过康托的观点。但现在人们仍然推崇毕达哥拉斯和克罗内克是人类历史上的伟大数学家。我相信谭老师对于在中国普及计算机编程和推动计算机教育的开展方面是有重大贡献的。至于那些略带人身攻击的贬损之词,大家还是收收,学会用谦虚宽和的心态看待一位八十多岁的老者吧。

总结:谭浩强的《c 程序设计》确实已经不合时宜,但是谭老师的贡献也不可抹杀,他过往的工作仍然值得尊重。