分享

48岁的C语言,拥有数百万追随者,辉煌背后是两位巨人一生的故事

 山峰云绕 2020-03-27

贝尔实验室特别人员奖、美国计算机协会(ACM)的图灵奖、汉明勋章、计算机先驱奖、计算机历史博物馆研究员、哈罗德 · 潘德奖……这些成就全都出自一人,那就是编程界无人能超越的传奇人物也是C语言的创造者——丹尼斯·里奇。

48岁的C语言,拥有数百万追随者,辉煌背后是两位巨人一生的故事

C语言之父:丹尼斯·里奇

计算机历史学家Paul E.Ceruzzi说:里奇不被人们之道。他的名字一点都不家喻户晓,但是如果你有一台显微镜,能在电脑里看到他的作品,你会发现处处都是他的作品。

克尼汉也曾如此评价:“牛顿说他是站在巨人的肩膀上,如今,我们都站在里奇的肩膀上。”

01

1941年,丹尼斯 · 里奇出生在纽约布朗克斯区,父亲是是贝尔实验室的交换系统工程师。里奇从小成绩优异,大学顺利进入了哈佛,在受父亲的影响下,丹尼斯也走上了科学研究之路。

在哈佛读书期间,一次偶然的机会改变了里奇的一生。里奇参加了哈佛计算机系统相关的讲座,从此他开始对计算机疯狂着迷,不仅专门学了一期课程。

当时的里奇是一个主修物理的学生,因为对计算机处理的理论和实际问题十分着迷,他在毕业论文中大部分和计算机理论有关(递归函数的层次),这还远远不够,里奇开始花更多的精力在实践上面。

48岁的C语言,拥有数百万追随者,辉煌背后是两位巨人一生的故事

在那个时代,大部分计算机体积十分庞大,占用了整个房间并且还只能进行有限的拨入访问,因此攻克小型台式计算机是当时的工程师们的目标,可是这些计算机没有易于使用的操作系统,于是里奇决定自己做一个。

这一决定立即得到了麻省理工学院Honeywell和General Electric的支持。里奇负责多道处理机BCPL语言和GE650的编译器,它们都是属于GECOS系统的。同时,他还写了ALTRAN语言的代数编译器,那视符号计算机的一种语言和系统。

经过这个项目后,里奇毅然决然的放弃了本专业物理学,并决定将计算机作为他的事业。1967年,他加入了贝尔实验室(Bell Labs)。

在加入贝尔实验室后,里奇开始和实验室的一位名为Ken Thompson(肯·汤普森)的成员合作。这位Ken Thompson也是对Ritchie 职业生涯影响很大的人。

48岁的C语言,拥有数百万追随者,辉煌背后是两位巨人一生的故事

Thompson和Ritchie

20世纪70年代,汤普森和里奇在研究如何让早期小型机变得越来越受欢迎。他们认为,所需要的是各种计算机之间更简单,更可行的交互。因为老型计算机要求用户使用操作系统来复制,删除,编辑和打印数据文件,将数据从磁盘移动到屏幕到打印机并返回磁盘进行存储。除了少数专家之外,一旦没有了操作系统,任何人都无法访问计算机。

为此,他们花了几个月的时间来提出解决方案,他们完成这个解决方案时已经编写好了影响他们一生的Unix操作系统。

里奇在1999年的一次采访中表示:“我觉得Linux发展的现象令人高兴,虽然工作站和大型计算机厂商也在提供不同种类的BSD系统,但是在Unix的直接派生品中,Linux应该是最健全的了。”

48岁的C语言,拥有数百万追随者,辉煌背后是两位巨人一生的故事

C++的开发者和设计师比雅尼 · 斯特劳斯普曾说:“假如里奇决定那十年将他的精力花费在稀奇古怪的数学上,那么Unix将胎死腹中。”

事实上,里奇加入贝尔实验室后,发展了C语言和Unix系统,这在电脑工业史上都占据重要的席位。C语言在发展软件和操作系统时是一个非常常用的电脑语言,而现在的编程语言比如C++、C#、Obijective-C、Java和JavaScript拥有极大的影响。

48岁的C语言,拥有数百万追随者,辉煌背后是两位巨人一生的故事

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年,里奇和汤普森二人共同获得了日本国际奖。

48岁的C语言,拥有数百万追随者,辉煌背后是两位巨人一生的故事

但在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语言当成程序生涯中最基本的事。

48岁的C语言,拥有数百万追随者,辉煌背后是两位巨人一生的故事

而C 语言为什么能成为最重要、最流行的编程语言之一,这个疑问从斯蒂芬 · 普拉塔在《C Primer Plus第六版》中给我们总结出的C 在众多语言中脱颖而出的优点中就能够得到答案。

48岁的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语言学习,很多人想到的第一本书都会是《C Primer Plus》。

48岁的C语言,拥有数百万追随者,辉煌背后是两位巨人一生的故事

《C Primer Plus第六版》

48岁的C语言,拥有数百万追随者,辉煌背后是两位巨人一生的故事

《C++ Primer Plus》

“这本书是我在大二的那个暑假和大三第一个学期时候看的。现在还在我的书柜里珍藏着,回想起来,这本书看的时间真是长啊。这本书有一个特点,每一章都有一些简单的课后题目。题目都是非常简单的,不过真的完成每一个题目需要的代码两也是非常大的,非常适合初学者从简到南的一个过程。”

——豆瓣书友 抛物线

“Primer Plus系列历经了数十年不衰,原因就在于它们能够满足那些渴望通过全面理解相关技术继续深造的程序员和开发者的需要。初学者是真的可以入手的。”

——豆瓣书友 背面

在《C Primer Plus第六版》中,斯蒂芬 · 普拉塔把编写 C 程序的过程分解成 7 个步骤。让C语言的学习更加简洁和有序,同时通俗易懂,读者阅读时很容易明白而且上手。

48岁的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》系列便因此而诞生了!

C语言经典书单

48岁的C语言,拥有数百万追随者,辉煌背后是两位巨人一生的故事

C Primer Plus 第6版 中文版

作者: 【美】Stephen Prata(史蒂芬 普拉达)

译者: 姜佑

书籍简介

本书在上一版本的基础上进行了全面更新,全面讲述了C语言编程的相关概念和知识,并且涵盖了C编程语言最近的变动发展、以及C11标准。

适合人群

适合希望系统学习C语言的读者,也适用于精通其他编程语言并希望进一步掌握和巩固C编程技术的程序员。

48岁的C语言,拥有数百万追随者,辉煌背后是两位巨人一生的故事

C Primer Plus 第6版 中文版习题解答

    本站是提供个人知识管理的网络存储空间,所有内容均由用户发布,不代表本站观点。请注意甄别内容中的联系方式、诱导购买等信息,谨防诈骗。如发现有害或侵权内容,请点击一键举报。
    转藏 分享 献花(0

    0条评论

    发表

    请遵守用户 评论公约

    类似文章 更多