管窥C语言入门经典

摘要:用现在流行的句式开场就是:当我说“谭浩强的书特别适合入门”的时候,你在想什么?你也许会想:此人的话不必再往下听了。此 前,谭浩强《C程序设计》一书受人诟病一事虽有耳闻但并未放心上,我是靠它入门的C,当时学得顺手,对其印象一直以来都不错,相信很多朋友想法也同我一 样。可为什么就有那么多人在否定这本教材呢?厌弃者说服不了推崇者,推崇者更不可能劝回厌弃者。

用现在流行的句式开场就是:当我说“谭浩强的书特别适合入门”的时候,你在想什么?你也许会想:此人的话不必再往下听了。此 前,谭浩强《C程序设计》一书受人诟病一事虽有耳闻但并未放心上,我是靠它入门的C,当时学得顺手,对其印象一直以来都不错,相信很多朋友想法也同我一 样。可为什么就有那么多人在否定这本教材呢?厌弃者说服不了推崇者,推崇者更不可能劝回厌弃者。

我想,没有调查就没有发言权,没有 比较怎出优劣。学C,通常看上一两本入门书足矣(水货如我,就看过一本谭浩强),而书之好坏无所谓,怎么都能把你整入门了,而你一入门,便不太可能再去读 一本更好的入门经典。于是我产生了把主流、经典的C入门书籍都撸一遍的念头,比比看,到底哪(些)本最适合入门——专业蛋疼,请勿模仿——一来弥补自己错 过的好书(学习机会),二来供准备学C的朋友参考(少走弯路)。

不管你学什么,入门书就如启蒙老师一样重要,老师不好,你对所学内容都会产 生排斥心理,启蒙好了,这门手艺甚至可能成为你的看家本领。C语言规模并不庞大,但所含知识点比较杂乱,所有教材都这么些内容,就看编者以什么顺序、什么 主次、什么表达方式讲述。私以为一本好的入门书应具备以下两个特点:一是亲和易读,如同一个故事娓娓道来,你翻开的是一个多彩的世界,而不是一本僵硬的字 典;二是分量足够,看完它你就真正入门了,有些书大白话噼里啪啦扯了半天乍感觉挺有意思其实没啥内容,当你真正着手使用时才发现还得再看本别的。国内良莠 不齐的C教程数不胜数,同名如“C程序设计”“C语言程序设计”“C语言程序设计教程”的都多如牛毛,这些不知名的就不予考虑了,要看就看经典。

 

如果你是零基础

 

《明解C语言》(337页)推荐指数:★★★★★

管窥C语言入门经典
《明解C语言》

乍一看还以为是本新书,但原版在1999年就发行了,引进得实在太晚。属于比较严肃的教材,忠诚于专业术语,并未考虑更通俗的表达方 式,并涉及一些算法,适合正儿八经地学C;内容组织很成功(把排序放在结构体部分的做法很神奇),循序渐进,知识点比较浅,并不全面,相对偏僻及细枝末节 的内容没有讲述(也不必要拿来让初学者头大),没有冗余,应该静下心来一字一句地看,一丁点也不容错过。PS:把C历史背景放在附录不失为聪明的做法,毕竟比起发展史什么的,读者可能更关心如何立马写个hello world。

 

《21天学通C语言》(614页)推荐指数:★★★★★

管窥C语言入门经典
《21天学通C语言》

槽点一:这书名也忒俗了吧,这类书一般不都是水货吗?

解释:确实拥有这类书名总是要为人所诟病,但你千万不该因此而错过此书。这是本来自国外的教程,原名还就是“Sams Teach Yourself C in 21 Days”,然其质量是国内那些名字类似的书所难以相比的。

槽点二:614页,也忒厚了吧!完全是学霸级初学者专用啊。

解释:C语言的21天课程其实只占了前431页,后面是C++、Java、C#等附加课程,不在本次自虐活动范围之内,故我也没有看。

本书把C的每一部分都讲解得特别细致,附有例子、经验、注意点、建议等,还详细地介绍了各种你脑中可能会产生的疑问或在实践中可能会遇到的问题。有些教材或多或少显性或隐性地要求读者能够举一反三,而此书不仅介绍了“一”,把“三”也逐一讲解了(比如各知识点的组合运用)。没有死循知识结构安排内容,而是按照读者慢慢适应的学习过程循序渐进。为确保读者理解清楚,提前使用时简要介绍过的知识点会在后续章节重新详解。

然 而跑上来给的例子并不简单,一股脑儿介绍不少东西,零基础者看着可能会有点头大。还存在一些不严谨的地方,虽谈不上误导,但可能会引起困惑。除去这些瑕 疵,我终究是被它惊艳到了,力荐之。PS:我看的这2012年8月第一次印刷的版本有不少印刷错误,希望后续印版会有校正。

 

《C Primer Plus》(626页)推荐指数:★★★★★

管窥C语言入门经典
《C Primer Plus》

怎么说呢,看得出这样的作者才是真正懂C、爱C的人,对各个版本的C标准了如指掌。好比写文章,没有才华的人生搬硬套才把事情讲清楚, 而浑身才气的人稍微抖一抖,文字就散落成一篇佳作。第一章概览就把我赤裸裸地惊艳到了,同样介绍C的历史及背景,却不是其他书那样死板的陈列,语言精炼意 赅,不需讲的果断不讲,需要讲的一语中的,没有废话,一气呵成。恨自己当初学C看的不是这本。

跑上来一股脑介绍的东西很多,很细,初学者可能见了头大,但你若能耐下性子细细看懂,必会感叹它讲得真棒。行文极其精致、严谨,即使初学者可能体会不到这一点;内容详尽、细致,无愧于书的厚度,常用的不常用的,基础应用高级应用,大庭广众下的犄角旮旯里的应有尽有;全方位多层次实用技巧、注意事项,示例经典,醍醐灌顶,兼具入门书与工具书的气质。

总体上云巅工作室译得还算不错,但你依然会遇到一些拗口的句子,然而毕竟瑕不掩瑜,书的总体质量摆在那里,看引进第六版时能不能译得更好些。

 

《啊哈C!思考快你一步》(191页)推荐指数:★★★★☆

管窥C语言入门经典
《啊哈C!思考快你一步》

这是唯一一本实体书和电子版我都没能接触到的,或许是不够热门,网上找不到完整的pdf,连出版前的草稿版《啊哈C语言》也仅公开了一 半。若是有朋友能搞到完整的电子版,恳请予我共享一份。我这里看的便是只有一半内容的先行版(以及正式版的几十页试读样章),还带着新鲜的错别字和病句, 但版面接近正式版,读起来也是比较舒适的。

不知道啊哈磊(作者)这哥们是何方神圣,也仅是个有想法的普通人吧,书上是这么介绍的:“曾在中 科院玩过单片机。武汉大学历史上第一位以本科生身份加入MSRA的小伙伴,在机器学习组从事搜索引擎方面的研究。发表国际会议论文一篇(IEEE)。全国 青少年信息学奥林匹克金牌教练。”我很喜欢这样年轻一代人写的书,用语随意,带着颜表情,博文style,没有套话,没有代沟,看着很亲近。本书号称是 “小学生坐在马桶上都可以读懂的‘C语言编程’入门书”,你可能不信,大学生都喊着学C枯燥,小学生那点基础和智商就甭提了,可本书还真够小学生看懂,我 甚至觉得有些地方还能写得更萌、更形象些。不过小学生能接受的程度毕竟是有限的,本书定位是如此的低,以至于只介绍了C最浅的那部分知识,更多篇幅用来举例、增加读者的编程兴趣,简直太适合零基础入门了!而啊哈磊自己基于gcc做的啊哈C编译器也非常适合初学者练习编程,就像他自己说的,是简洁得不能再简洁的C语言编程软件,没有工程的概念、没有编译链接的步骤、没有环境配置,各种没有,你一打开连代码框架都已经写好了,是专为初学者制作的良心产品。

管窥C语言入门经典
啊哈C v2.0唯一界面

 

《C程序设计》(第三版378页、第四版390页)推荐指数:★★☆☆☆

管窥C语言入门经典
《C程序设计》

把“发行逾1100万册”的消息印在封面大中央的做法实在太中二了,你就是本指定教材又不是畅销书,全国高校都用你不破千万才怪呢!并 且,千万的销量同时也意味着接受千万读者的检验,稍欠严谨即易被喷。网上有个500多页的word文档(百度“《C程序设计》错误”即可找到),简直太蛋 疼了,他写得完别人也看不完啊!本书确实不够严谨+印刷问题层出+许多地方还存在严重错误,但这份文档有点吹毛求疵,其中不少说法令人难以苟同,500多 页的规模水分太大。

这本教材,初学者拿来学编程确实较易理解,但对C语言的把握会有一定偏差,慎读。而我们不妨暂且忽略其中 的一些重大问题,重新审视之。作为国内教材中的典范,此书虽然在内容组织上依然中规中矩,但知识点讲解十分通俗,由于通俗,稍显(我是说稍显)啰嗦。做教 材可以,不适合自学,因为你不能确定哪些是次要的。毕竟作为一本国家级教材,该涵括的都得涵括,不仅要领人进门,还得保证读者达到能考试的程度;摆脱不了 应试教育的特点,为了巩固知识点,时不时会冒出(i++)+(i++)+(i++)和a+=a-=a*=a这样神奇的式子。如果你喜欢这种style,千 万不要错过此书,没错,我当年就有点喜欢这种style,乃觉这书不错的原因之一——竟然让我搞懂了这么复杂混乱的玩意(后来才发现实际编程中根本没人这 么做)!

 

如已学过一丢丢

 

《C程序设计语言》(258页)推荐指数:★★★★★

管窥C语言入门经典
《C程序设计语言》

昵称K&R(两位作者姓氏首字母),C语言之父的作品,就好比向别人介绍自己的孩子,不能再精辟,不能再权威,被奉为C语言圣经。在C还没有统一标准的年代,78年K&R的第一版直接被广泛接受为C标准,其他号称是圣经的C语言书用词未免也太想当然了……

圣 经就好比一件标准模板,国内外数不清的C教程都是参照K&R写的,一如大堆的浏览器都使用了IE内核一样。B5的开本短短258页,除去供查阅的 附录仅166页,再除去第8章“Unix系统接口”仅剩148页,这么少的篇幅将C语言讲得清清楚楚,简直是场华丽的艺术!

此书写得非常严 谨,必要之处还提及老版C的情况,可以说学C必看,但并不适合零基础入门,正如其第1版序中所言:“本书并不是一本有关程序设计的入门性手册,它要求读者 熟悉基本的程序设计概念,如变量、赋值语句、循环和函数等。”从头至尾使用的均是书面化的术语,并涉及到逆波兰、二叉树、Unix等专业知识,还时常将C 与Fortran、Pascal语言进行比较,你若不了解这些看着一定头痛,因此K&R并不是入门的最佳选择。

 

《C语言入门经典》(第4版571页、第5版584页)推荐指数:★★★☆☆

管窥C语言入门经典
《C语言入门经典》

一看这霸气的书名就知道它是部经典,当然这是译名,(第4版)原名为“Beginning C: From Novice to Professional”,表达多中肯,没错,form的是novice,首先你得是个novice,前言中果断暗示你最好此前接触过编程这玩意儿。内容是一整块一整块讲的,力争全面、深入,没有轻重缓急,讲完讲透为止,必要时毫不客气地使用后面才细讲的技术,导致一下子有过量知识点展现在读者面前。多数章尾有个程序设计的例子,而这些例子对于初学者来说也明显过于复杂。

最 要命的是,(第4版)我已经看得相当粗略,但依然发现了几处严重的错误,不是笔误也不是印刷问题,为排除翻译出错的可能,特意比照了英文原版,(同时也排 除了C标准版本的因素)确实有错(下面例举两处,尚未学C的朋友请直接跳过)。此外,不少地方讲得不够清楚,我本怀着崇敬之情拜读,结果最终对其印象并不 太好。

错误1(第5版修复)

P267关于realloc()函数:显然,第二个参数的值不应超过以前分配的字节数。否则,新分配的内存将与以前分配的内存区域大小相同。

原版P270:Obviously the value of the second argument should not exceed the number of bytes that was previously allocated. If it is, you will only get a memory area allocated that is equal to the size of the previous memory area.

错误2(第5版未修复)

P462关于流:流是外部数据源或数据目的地的抽象表示,所以键盘、显示器上的命令行和文件都是流。……将数据写入流(即磁盘文件)有两种方式。

原版P468:A stream is an abstract representation of any external source or destination for data, so the keyboard, the command line on your display, and files on disk are all examples of streams....There are two ways of writing data to a stream that is a disk file.

第5版的改动非常小,将第4版九成内容照搬,就最后增加了一章“Advanced and Speciallized Topics”(高级专用主题),介绍Unicode、线程等,讲得也不易理解甚至不知所云。倒是在排版上有所进步,更适于阅读,如果你硬要来上一本,第 5版会更好一些。

 

《嗨翻C语言》(588页)推荐指数:★★★★☆

管窥C语言入门经典
《嗨翻C语言》

莫被这厚度吓怕,它的字很大,空白很大,图片很多……如果把一般的专业书比作word文档,那么《嗨翻C语言》就是ppt,各种字体,各种插图(即使多数只意增加趣味而与正式内容关联不大),你会觉得眼前一亮,比如:

右 下那壮汉居然在想(说?):“可我喜欢这一张,上面有小猫咪呢!”诸如此类数不胜数,随便翻开一页都能碰到这样个无厘头的吐槽或疯话,恶搞无极限;知识点 与剧情饱满的故事结合在一起,想忘都难;译者也幽默风趣,做了不少本土化的工作,比如“三位钻石王老五准备参加今天的‘非诚勿扰’”……总体感觉甚至像一 本幼儿园的启蒙画册。(Head First系列都这个无脑样我会乱说?)

在开讲知识点前先引导读者自己思考,猜猜这些东西是干啥的,甚至 时常让你站在编译器或者语言设计者的角度思考问题,这些做法很独特,让你从一开始就从很本质的层面去接触C;同时督促读者动脑,练习题有趣而简短,提示、 答案及讲解也非常到位。然而书里充斥着鲜明的老美风格,很high很激情,可以想象美国学生读了本书极可能做出很实际很创意的东西,而中国的学生读着可能 感觉反而有点混乱。并且它起点不低,相当不低,明确地说,适合学过其他语言(如Python)的人用来学C,后半部分的高级应用更是涉及操作系统和网络的知识,尽管它也做了简单介绍,但我相信没接触过的朋友一下子还是难以接受的。

 

《C语言点滴》(302页)推荐指数:★★★★★

管窥C语言入门经典
《C语言点滴》

看得出作者确实是个有热情有想法的好老师,语言轻松幽默有内涵,跑上来1.1节装备篇大话程序员屌丝着装就能闪瞎你眼。真正意义上的由 浅入深,一开始浅得连水都没有,然后不知不觉就潜到了马里亚纳海沟。内容并不系统,比起其他的C语言书,它不是教材而是教辅,更多的是总结性的东西(使用 技巧注意事项什么的)——作者总结了自己教学过程中常见的问题与经验,参考了一些经典之作,对其中内容进行了二次包装之后以更易理解的方式呈现给读者—— 而与其说是查漏补缺的教辅,其实又更像是心得写得不错的系列博文,无论你对C掌握程度如何,读一下多少会有所收获

那么之于 初学者,相比零基础或学过其他语言,你最好是学过一点C,哪怕只有一丁点。有不少术语是在不解释的情况下出现的,你手头最好还有一本主力教材。本书专打辅 助,但把重难点剖析得十分清楚,对初学者快速、准确地掌握知识点很有帮助。如果你有地方看不明白,不必焦虑,它本来就是“点滴”,暂时漏掉几滴无伤大雅, 日后再补不迟。

PS:全书没啥可吐槽的,唯独1.2节安排不佳:从搜索引擎、e-mail、聊天工具、社交网站、论坛、博客、下载说起,哦 不,是教起,准确地说是零基础教起,虽然说得挺有意思,但其实没有必要,现在只要有点文化水平的,即使是小学生甚至幼儿园的小朋友也都会上网,而没有文化 水平的,不识字的,也根本不会用电脑,更不可能来看C语言,换个角度,学C的读者还不会上网吗,这些东西是写给谁看呢?

 

“谭 浩强的书特别适合入门”,先前在《如何优雅地进入IT世界》一文中,在没有做足功课的前提下写下这句话,是不负责任的行为,在此须向读者致歉。同时我也很 庆幸能有人为此吐槽,尽管这基本上算是种本能,而对我是极有帮助的。没有一篇文章能尽善尽美,更别提菜鸟如我,交流之后才能改得更好,这也是文章要公开发 布而非独自欣赏的意义之一啊!包括此文,即使我翻了十余本书籍,也恐有疏漏,如还有其他入门经典,欢迎补充,优秀者即刻加入文中。

来自:http://jianshu.io/p/158ce6e5b214

扩展阅读

C++必读书籍推荐
C++:后现代的系统编程语言
年度编程语言锁定Objective-C
谈谈网络编程(基于C++语言)
2012年8月编程语言排行榜-C领衔称霸Object-C强势爬升

为您推荐

HTML5/CSS3系列教程:HTML5 区域(Sectioning)的重要性
40 个重要的 HTML5 面试问题及答案
HTML5 中 40 个最重要的技术点
最常见的 20 个 jQuery 面试问题及答案
HTML代码简写法:Emmet和Haml

更多

C语言
软件编程