贝尔实验室特别人员奖、美国计算机协会(ACM)的图灵奖、汉明勋章、计算机先驱奖、计算机历史博物馆研究员、哈罗德 · 潘德奖……这些成就全都出自一人,那就是编程界无人能超越的传奇人物也是C语言的创造者——丹尼斯·里奇。
C语言之父:丹尼斯·里奇
计算机历史学家Paul E.Ceruzzi说:里奇不被人们之道。他的名字一点都不家喻户晓,但是如果你有一台显微镜,能在电脑里看到他的作品,你会发现处处都是他的作品。
克尼汉也曾如此评价:“牛顿说他是站在巨人的肩膀上,如今,我们都站在里奇的肩膀上。”
01
1941年,丹尼斯 · 里奇出生在纽约布朗克斯区,父亲是是贝尔实验室的交换系统工程师。里奇从小成绩优异,大学顺利进入了哈佛,在受父亲的影响下,丹尼斯也走上了科学研究之路。
在哈佛读书期间,一次偶然的机会改变了里奇的一生。里奇参加了哈佛计算机系统相关的讲座,从此他开始对计算机疯狂着迷,不仅专门学了一期课程。
当时的里奇是一个主修物理的学生,因为对计算机处理的理论和实际问题十分着迷,他在毕业论文中大部分和计算机理论有关(递归函数的层次),这还远远不够,里奇开始花更多的精力在实践上面。
在那个时代,大部分计算机体积十分庞大,占用了整个房间并且还只能进行有限的拨入访问,因此攻克小型台式计算机是当时的工程师们的目标,可是这些计算机没有易于使用的操作系统,于是里奇决定自己做一个。
这一决定立即得到了麻省理工学院Honeywell和General Electric的支持。里奇负责多道处理机BCPL语言和GE650的编译器,它们都是属于GECOS系统的。同时,他还写了ALTRAN语言的代数编译器,那视符号计算机的一种语言和系统。
经过这个项目后,里奇毅然决然的放弃了本专业物理学,并决定将计算机作为他的事业。1967年,他加入了贝尔实验室(Bell Labs)。
在加入贝尔实验室后,里奇开始和实验室的一位名为Ken Thompson(肯·汤普森)的成员合作。这位Ken Thompson也是对Ritchie 职业生涯影响很大的人。
Thompson和Ritchie
20世纪70年代,汤普森和里奇在研究如何让早期小型机变得越来越受欢迎。他们认为,所需要的是各种计算机之间更简单,更可行的交互。因为老型计算机要求用户使用操作系统来复制,删除,编辑和打印数据文件,将数据从磁盘移动到屏幕到打印机并返回磁盘进行存储。除了少数专家之外,一旦没有了操作系统,任何人都无法访问计算机。
为此,他们花了几个月的时间来提出解决方案,他们完成这个解决方案时已经编写好了影响他们一生的Unix操作系统。
里奇在1999年的一次采访中表示:“我觉得Linux发展的现象令人高兴,虽然工作站和大型计算机厂商也在提供不同种类的BSD系统,但是在Unix的直接派生品中,Linux应该是最健全的了。”
C++的开发者和设计师比雅尼 · 斯特劳斯普曾说:“假如里奇决定那十年将他的精力花费在稀奇古怪的数学上,那么Unix将胎死腹中。”
事实上,里奇加入贝尔实验室后,发展了C语言和Unix系统,这在电脑工业史上都占据重要的席位。C语言在发展软件和操作系统时是一个非常常用的电脑语言,而现在的编程语言比如C++、C#、Obijective-C、Java和JavaScript拥有极大的影响。
Univac I
1973年,里奇以B语言为基础发展出C语言,在它的主体设计完成后,他和汤普森就用它来完全重写了Unix。Unix最开始是用汇编语言编写的,里奇和汤普森重写了之后于1974年在ACM上发表,正式向外界披露Unix系统。
随着Unix的发展,C语言也得到了不断地完善。C语言是一门面向过程地、抽象化的编程语言,广泛应用于底层开发。C语言能用简易的方式编译、处理低级存储器。如此简单,简洁,几乎每个计算机制造商都转向了它,且效果显著。
为了利于C语言的全面推广,很多专家学者和硬件产商联合组成了C语言标准委员会。于是在1989年,第一个完备的C标准诞生了,简称“C89”,截至目前,最新的C语言标准为2017年发布的“C17”。
尽管C语言已经如日朝天,但里奇的职业生涯并没没有因此而结束,他于1990年成为朗讯科技计算技术研究部门的领导者。在该职位上,他编写了应用程序并管理已发布的操作系统的增长。
1983年,因为发展了通用操作系统理论并实现了UNIX操作系统,里奇和汤普森二人一起获得了图灵奖。里奇的图灵奖论文题目为《对软件研究的反思》。
1990年,二人因“创造UNIX操作系统和C程序设计语言”而获得了IEEE颁发的IEEE汉明奖,1997年获计算机历史博物馆研究员奖,2005年,美国工业研究院授予里奇 IRI成就奖,以表彰他对计算机科学技术做出的贡献,以及UNIX操作系统对社会的广泛影响。2011年,里奇和汤普森二人共同获得了日本国际奖。
但在2011年10月12日,里奇离开了这个世界,离开了他付出一生的C语言和Unix世界,享年70岁,去往另一个地方开始了他的另一场旅行……
02
从计算机发展以来,编程语言也是层出不穷,但是无论多少“新人”翻涌而出,都无法改变C语言在编程界中德高望重的地位。
C语言到底能做了多少事情?大家经常说的Linux操作系统的内核都是C语言写的,对应的很多嵌入式内核驱动也跑不出C语言范畴,包括大家常用的手机,机顶盒,电视机底层硬件驱动基本上都是C语言完成。
可以毫不夸张的说,如果没有C语言,就没有微软的Windows 10 和 Surface Book,也没有安卓智能手机,更没有乔布斯创造的苹果帝国各种产品MAC、iPad。
C语言最牛的地方,几乎现在所有的上层语言的底层语言绝大部分都是C语言大哥做嫁衣给铺垫完成。深刻理解上层语言底层实现,离不开C语言。而且很多大学的计算机专业都会把C语言作为学生入门编程的第一步。因此,很多程序员都把学习C语言当成程序生涯中最基本的事。
而C 语言为什么能成为最重要、最流行的编程语言之一,这个疑问从斯蒂芬 · 普拉塔在《C Primer Plus第六版》中给我们总结出的C 在众多语言中脱颖而出的优点中就能够得到答案。
设计特性
C语言融合了计算机科学理论和实践的控制特性。C 语言的设计理念让用户能轻松地完成自顶向下的规划、结构化编程和模块化设计。因此,用 C 语言编写的程序更易懂、更可靠。
高效性
在设计上,它充分利用了当前计算机的优势,因此 C 程序相对更紧凑,而且运行速度很快
可移植性
C 是可移植的语言。这意味着,在一种系统中编写的 C 程序稍作修改或不修改就能在其他系统运行。如需修改,也只需简单更改主程序头文件中的少许项即可。
强大而灵活
C 语言功能强大且灵活。功能强大且灵活的 UNIX 操作系统,大部分是用 C 语言写的。C 程序还可以用于解决物理学和工程学的问题,甚至可用于制作电影的动画特效。
面向程序员
C 语言是为了满足程序员的需求而设计的,程序员利用 C 可以访问硬件、操控内存中的位。C 语言有丰富的运算符,能让程序员简洁地表达自己的意图。
03
C语言获得如今的成就离不开无数个“里奇”的付出,除了里奇今天还有给大家介绍另一个伴随C语言成长的老人,他为C语言编写了许多经典著作,为无数程序员搭起了攀上巨人肩膀的长梯。
他就是斯蒂芬 · 普拉塔,他在美国加州肯特菲尔得的马林学院教授天文、物理和计算机科学。他也是《C Primer Plus》的作者。他编写的《New C Primer Plus》获得了计算机出版联合会1990年度最佳How-to计算机图书奖,《C Primer Plus》获得了计算机出版联合会1991年度最佳How-to计算机图书奖提名。
《C Primer Plus》是程序员学习C语言入门到精通的“宝藏”。如果提到C语言学习,很多人想到的第一本书都会是《C Primer Plus》。
《C Primer Plus第六版》
《C++ Primer Plus》
“这本书是我在大二的那个暑假和大三第一个学期时候看的。现在还在我的书柜里珍藏着,回想起来,这本书看的时间真是长啊。这本书有一个特点,每一章都有一些简单的课后题目。题目都是非常简单的,不过真的完成每一个题目需要的代码两也是非常大的,非常适合初学者从简到南的一个过程。”
——豆瓣书友 抛物线
“Primer Plus系列历经了数十年不衰,原因就在于它们能够满足那些渴望通过全面理解相关技术继续深造的程序员和开发者的需要。初学者是真的可以入手的。”
——豆瓣书友 背面
在《C Primer Plus第六版》中,斯蒂芬 · 普拉塔把编写 C 程序的过程分解成 7 个步骤。让C语言的学习更加简洁和有序,同时通俗易懂,读者阅读时很容易明白而且上手。
这7步怎么用呢?斯蒂芬 · 普拉塔也给我们做了详细的解释。
第 1 步:定义程序的目标
主要是说在动手写程序之前,要在脑中有清晰的思路。想要程序去做什么首先自己要明确自己想做什么,思考你的程序需要哪些信息,要进行哪些计算和控制,以及程序应该要报告什么信息。
第 2 步:设计程序
对程序应该完成什么任务有概念性的认识后,就应该考虑如何用程序来完成它。例如,用户界面应该是怎样的?如何组织程序?目标用户是谁?准备花多长时间来完成这个程序?除此之外,还要决定在程序中如何表示数据,以及用什么方法处理数据等。
第 3 步:编写代码
设计好程序后,就可以编写代码来实现它。也就是说,把你设计的程序翻译成 C 语言。一般而言,使用文本编辑器创建源代码文件。该文件中内容就是你翻译的 C 语言代码。
第 4 步:编译
大家应该知道,C 编译器负责把 C 代码翻译成特定的机器语言。此外,C 编译器还将源代码与 C 库的代码合并成最终的程序。其结果是,生成一个用户可以运行的可执行文件,其中包含着计算机能理解的代码。编译器还会检查 C 语言程序是否有效。如果 C 编译器发现错误,就不生成可执行文件并报错。
第 5 步:运行程序
在常见环境中运行程序要输入可执行文件的文件名,而其他环境可能要运行命令或一些其他机制。例如,在 Windows 和 Macintosh 提供的集成开发环境(IDE)中,用户可以在 IDE 中通过选择菜单中的选项或按下特殊键来编辑和执行 C 程序。最终生成的程序可通过单击或双击文件名或图标直接在操作系统中运行。
第 6 步:测试和调试程序
程序能运行是个好迹象,但有时也可能会出现运行错误。接下来,应该检查程序是否按照你所设计的思路运行。你会发现你的程序中有一些bug,可能忽视了输入检查导致程序瘫痪,可能会把圆括号放错地方,可能误用 C 语言或打错字,等等。
第 7 步:维护和修改代码
创建完程序后,你发现程序有错,或者想扩展程序的用途,这时就要修改程序。例如,用户输入以 Zz 开头的姓名时程序出现错误、你想到了一个更好的解决方案、或者要修改程序使其能在不同的计算机系统中运行等等。如果在编写程序时清楚地做了注释并采用了合理的设计方案,这些事情都很简单。
04
在“巨人们”的努力下,C语言在编程界成了无法替代的传奇。如这本伴随着无数C语言伙伴成长的图书也成为编程语言图书中的经典,而斯蒂芬 · 普拉塔却成了年过七旬的老人了。
你们知道斯蒂芬 · 普拉塔与C语言的缘分是怎么开始的吗?其实他最初接近C语言是为了用程序作为技术支撑,便于天文学的研究。他原本就是天文学、物理学的大学教授,是美国天文学会成员,研究计算机语言之后不仅实现了自己的需求,还顺便出版了好几本畅销计算机图书。
更巧合的是,C语言之父丹尼斯 · 里奇其实也是专攻物理学,在哈佛读书期间,偶然参与了计算机系统相关的讲座,从此便迷上了编程这个 “小妖精”,在毕业之后更是决定将计算机作为他的事业。
斯蒂芬 · 普拉塔刚接触C语言的时候,当时的使用率并不高,市面上的教材稀缺,为了让自己热爱的天文事业能够有所发展,便苦心专研,当他逐渐掌握C语言是时,突然想到,世界上还有许多人因为爱好C语言却没有足够的材料支撑,于是他开始创作友好、方便使用、便于自学的指南,从此我们所了解的《C Primer Plus》系列便因此而诞生了!
05
C语言经典书单
入门书如何选?首先它 不能太厚 ,动辄上千页可以垫显示器那种完全会直接把人吓跑。其次 它内容不能过于表面 ,这会让新手整个人都处于一种云雾笼罩的状态,对于那些知识全都是似懂非懂,效果很差。
那么,作为C语言入门图书,小异推荐这本整体内容深入浅出、翔实而不累赘的 《C Primer Plus 第6版 中文版》 。
《C Primer Plus 第6版 中文版》
▲ 百万C语言编程入门必选
作为畅销了40多年的经典C语言入门图书,《C Primer Plus 第6版 中文版》得到了一代又一代的C语言程序员的验证。随着C语言的不断更新,本书也不断再版,以适应新的需求。
国内无数读者选择了这本书之后,便立马抛弃了以前那些老旧落伍的教材,真正在本书的引导下无压力畅游C语言编程。作者使用风趣的语言与简洁的图示与代码把那些“高深莫测”的概念与方法娓娓道来,把它们剖析成一个个简单的内容模块让读者较为轻松地理解和掌握。
而且,作者不仅告诉读者什么是正确的,更告诉读者什么是错误的,把那些错误的操作展示出来,让读者全方位地去认识和理解C语言。为什么正确?为什么错误?错误会带来哪些问题?这些作者都会详细而清楚地讲解出来。
动手是编程最重要和最快的学习方式 ,本书中带有大量的示例代码,并且针对C11进行了更新,读者可以照着示例代码自己键入到编辑器中,得到真实确切的运行结果。在操作的过程中,真正去理解代码的作用与对应的知识内容。
更重要的是,本书还提供了配套的电子版和在线练习实验环境,轻松方便!此之外,本书的所有章节都附带了对应的习题,读者在学完一章内容之后,可以利用习题检验自己的学习进度,看自己对于这部分内容掌握程度如何。
现在,这本书还得到了重大升级!有了书课包的新形式!
▲ 全新升级!书课包一体化学习
使用书课包大家可以一边看书,一边听课程讲解,一边在老师的带领下进行代码实操。多角度地去理解和认识C语言,多个维度进行C语言学习。
《C Primer Plus 第6版 中文版》与本书专门的视频课程《C Primer Plus官方视频解读》有了全面的升级:书、课以一种有效的方式结合,搭配线上编程环境,提供了一个全方位立体的学习环境。
“书课一体”的新模式,不仅仅可以降低读者学习难度,更可以让读者对于书中的知识点有更深的理解,达到事半功倍的学习效果。
这种“书课包”的新形式,提供了更多学习资源,包括:
- 《C Primer Plus 第6版 中文版》纸质书1本;
- 思维导图和源码 1个;
- e 读版电子书 1本;
- 在线编程练习实验环境 1个;
- 《C Primer Plus 》图书解读视频课 1个;
- 电子版附录赠送。
并增加了更多的服务内容:
▲ 服务更多,价格更少!
针对本书的习题,小异也带来了配套的习题解答!
《C Primer Plus 第6版 中文版习题解答》
▲ 配套习题解答,名师讲解
作为《C Primer Plus 第6版 中文版》配套习题解答图书,本书所有章节与原书一致,每章开篇都 用清晰的思维导图模式把本章涵盖的知识点展现 给读者看,并且使用简洁的语言对理论内容进行了提炼。
之后,对于原书每章的练习题进行详细的剖析,然后给出具体的思路与最终的代码。
作为配套的习题解答,本书确保读者在彻底夯实理论基础的同时,可以打开和拓展读者的编程思维,提升编程能力。
读者对于原书的练习题,可以先自己进行思考,使用自己的思路进行解答,最后再与本书的答案进行对比:如果自己错了,通过本书的剖析部分发现自己的错误是如何产生,并且找到解决的方法;如果自己的解题方法与本书不一致,也可以对比各解法的优劣,通过不同的解题方法拓展自己的编程思维。
编程入门, 学与做同样重要,缺一不可 。
当你使用上面两本书真正入门C语言,并且可以熟练地编写C代码之后,就会面对到新的问题——过分依赖if语句,导致代码自己都看不懂;符号使用不规范,找bug半小时后才发现是一个分号用错了等等。
这时候,你就需要这本《C 陷阱与缺陷》的帮助了。
《C陷阱与缺陷》
▲ 避开C语言编程中间的所有障碍
当然,这本书不是在说C不好,或者说它缺点多,而是用以 指导程序员避开在使用C语言进行编程开发过程中容易中的陷阱 。
本书作者安德鲁·凯尼格是世界级C编程大师,他是AT&T公司Shannon实验室大规模编程研究部门中的成员,同时也是C++标准委员会的项目编辑,编程经验超过30年。
在多年的使用C语言过程中,他自己和他人都在遇到过各种陷阱与障碍,针对那些问题,在贝尔实验室的时候他发表过一篇论文。后来,他以这篇论文为基础,结合自己的工作经验扩展了那些问题与解决方法,写成了这本指导C语言程序员避开陷阱与障碍的珍贵指南,成为经典。
在这本书中,读者可以通过阅读和理解作者在词法陷阱、语法陷阱、语义陷阱、链接、库函数、预处理器、可一致性缺陷等方面的问题讲解,看它们是如何在实际编程工作中发生,又该如何解决的。
通过阅读本书,读者可以发现大部分C语言编程过程中可能会遇到的问题,并从书中得到有价值的解决方案。
解决这些问题的同时,很多人会遇到头疼的“指针”。
《C和指针》
在很多C程序员间流传这样一句话: 不会用指针就不会 C 语言 。指针是C语言中精髓!想要学好C语言,指针这关必须要过去。
小异推荐的这本《C和指针》,就是专门为解决指针问题的。
▲ 指针难?一本书解决!
这本书的作者是肯尼斯·里科(Kenneth Reek),他是美国Rochester工业学院计算机系教授,有着20年的C编程教学经验。
作者在书中将各种指针用法都写出来了,甚至连一些堪称奇葩的指针用法也没有放过,以简洁准确的文字、配合贴切的图示来进行讲解,让广大读者对指针和数组有了更加深刻的认识,特别是 多维数组 、 指针的指针 、 指向数组的指针 和 指针的数组 这些平日里让人头疼的知识点。
针对这些问题,作者提供了非常多的编程技巧与提示,帮助程序员把指针的强大功能融入到自己的程序中去,真正地掌握指针。同样的,针对每一个问题,章节后都有丰富的练习题,而练习题的答案就在附录之中。
小异相信,有这本书加持,大家在学习C语言过程中的所有指针问题会迎刃而解!逐渐成为一个真正的C语言程序员!
当然,每一个程序员都不甘平凡,都想有着更为精进的C编程技巧和方法,成为一个真正的C编程专家!这时候,就轮到这本《C专家编程》出场了。
《C专家编程》
▲ 趣话C编程!你也可以是专家
顾名思义,这本书就是为了让你从一个普通C语言程序员成为一个C语言编程专家的。
本书作者彼得·范德林登是一名技术专家和技术作家。他曾在Sun公司和苹果公司工作多年,并曾任摩托罗拉公司首席Android技术布道师、Immersion公司首席Android开发布道师,后在硅谷担任技术顾问。
这本书中充满了各种关于C语言的奇闻轶事,还有曾出现各种匪夷所思的bug,读者在读这本书的时候可以从那些趣事中了解C语言是如何产生并发展的, 从一件件切实好玩的案例中真正认识和理解数组、指针到底该怎么用 。
作者使用幽默的语言和有趣的故事向读者展示了一个充满魅力的C语言世界,认识到学习C语言编程并不是那么枯燥和无聊。作者还从编译器的角度解释C语言的“奇葩设计”,并且把那些先驱和大师在这个过程的探索与抉择描绘得无比精彩生动,读起来非常有意思。
正是以这种非常规形式书写,这本书获得了无数读者的喜爱,在豆瓣上大家对它称赞有加,给予了9.2分的高度评价!
▲ 很多读者喜爱本书作者的风趣幽默
很多读者在读完之后都给出了诸如“作者太有趣了”、“技术八卦很有趣”、“八卦与技术结合,作者俏皮”之类的评价。他们在读这本书的时候同时获得了技术思想的提升和八卦之心的满足,读来毫不费劲、趣味十足。