人们对里奇的纪念,远不及对乔布斯铺天盖地的悼念。可是,里奇值得人们那样去做。

  还是有人出来说了句公道话。

  “史蒂夫·乔布斯上周去世引发了巨大的反响,这当然合情合理。即便影响实际上更为广泛,丹尼斯却不为公众所知”,罗伯·派克说。罗伯是一名 在Google工作 的程序员,作为业界的 传奇性人物 ,曾经与里奇在著名的 贝尔实验室 共事20年。

  周三晚间,派克在 Google+上发表消息 称,在与病魔进行长久的抗争后,里奇于上周末在新泽西的家中溘然长逝。虽然在技术圈内引起大量反响,但在 主流媒体 上,里奇却没有得到同巨大影响相称的 悼念 。丹尼斯·里奇作为C语言之父,和贝尔实验室资深研究员肯·汤姆森一起使用C语言开发了Unix,当今世界大量依赖的操作系统,其中包括史蒂夫·乔布斯治下的苹果帝国。

丹尼斯·里奇(站立者)与肯·汤姆森 于1972年于一台PDP-12前合影 (照片来源:贝尔实验室提供)

  “现下互联网基本都在用这两样东西:C语言和UNIX”,派克对《连线》杂志称,“浏览器是用C语言写的。UNIX的内核——基本上是因特网运作的基础——也是用C写的。Web服务器也是用C语言写的,如果不是的话,那就是用Java或者C++写的,两者都是C语言的派生;要不就是Python或者Ruby,用C语言实现的。然后我几乎敢保证,运行这些程序的网络硬件,是用C语言开发的软件驱动的。”

  “几乎很难夸大丹尼斯在信息经济基础设施方面无所不在的影响力。”

  他补充说,Windows曾经也是用C语言编写,而UNIX同时也支撑了苹果桌面操作系统Mac OS X,以及iPhone与iPad的操作系统iOS。“如果说乔布斯是台前之王,那里奇就是幕后之王。”MIT电气工程与计算机系教授Martin Rinard如此评价道。Rinard也是计算机科学与人工智能实验室的成员。

  “乔布斯的过人之处在于其品位独特,打造人们为之着迷并引人注目的产品。而里奇却擅长于开发一些技术人员使用的基础设施,天天被人们使用却不为人知。”

   从B语言到C语言

  为了更好开发UNIX,丹尼斯·里奇而发明了C语言。最初的UNIX内核使用汇编语言编写,之后他们很快决定要用一种高级语言,让他们更好的驾驭操作系统中的复杂数据。1970年左右,他们尝试使用Fortran,不过没有达到预期目标。接着,在汤姆森创立的B语言基础上,里奇提出了一门新语言。

  不管你是从哪里听来的消息,B语言得名于汤姆森的妻子Bonnie,抑或是 BCPL ,一门剑桥于60年代中期开发的语言。

  B语言是一种解释性语言——意味着它由一个运行于CPU之上的中间件解释执行——而C却是一门编译语言。它被翻译成机器代码,在CPU上直接执行。即便如此,C当时被认为是一门高级语言。C语言提供了里奇和汤姆森想要的灵活性,却也很快。

  C语言的第一个版本和现在的样子相差不太多,相对简单点。它可以自定义数据结构和类型并声明变量,里奇和汤姆森就是用它编写了UNIX新内核。“他们发明了C来开发程序”,十年之后加入贝尔实验室的派克说,“而那个程序就是UNIX内核。”

  关于里奇一直流传的一个笑话是:C语言同时拥有了“汇编语言的强大能力以及...汇编语言的便利性”。换句话说,他承认C语言并不完美,并且十分接近硬件层次。如今C语言被认为是一门低级语言而不是高级语言。不过这个笑话并不公平。C语言提供了真正的数据结构概念,从这个角度来说已经足够高级了。

  “当你在编写一个大型程序——比如UNIX——你必须管理好各种各样模块之间的交互:所有用户、文件系统、磁盘、程序执行等等。而有效的管理则需要良好的数据表示,这就是所谓的数据结构”,派克说。

  “在没有数据结构组织的情况下,编写一个与UNIX一样一致和优雅的内核基本上是不可能的。需要一个机制组织好数据,而Fortran却不擅长于此。”

  在那个时候,写一个操作系统并不多见,这也给了里奇和汤姆森机会,在70年代末把操作系统移植到其它平台。“从此UNIX洪水之门被打开”,派克说,“这全都多亏有了C语言。”

   苹果、微软及其他

  与此同时,C语言也开始传播到全世界,从贝尔实验室到全世界的大学,也到了微软,一个在80年代异军突起的软件公司。“C语言的开发是一个重大的飞跃,是个很好的折衷...C语言达到了完美的平衡,让你在较高层次高效率开发的同时,却不失去对每处细节的控制”,NVIDIA和贝尔的首席科学家兼斯坦福大学工程系教授Bill Dally说。“它为之后数十年来软件开发定下了基调。”

  正如派克指出的那样,C语言内置的数据结构后来发展出面向对象范式,被现代编程语言如C++和Java大量采用。

  1973年,里奇发表了关于这门语言的论文,被认为是革命开始的标志。5年后,他和同事布莱恩·克尼汉(Brian Kernighan)发布了C语言的权威著作:《C程序设计语言》。该书最早是克尼汉为C语言编写的教程,后来他拉着丹尼斯一起把书写完。

  当派克还在多伦多大学读本科的时候,在一个因病返家的下午里读到了这本书。“那本参考手册相对于其他的手册而言,简直就是清晰和可读的典范。毋庸置疑是一部经典之作。”,他说,“我生病躺床上翻一翻,没想到竟让我忘记了病痛。”

  和许多大学生一样,Pike那时已经开始使用C语言了。由于贝尔实验室开始分发UNIX源代码,它逐渐风靡大学校园。此外,UNIX还催生了现代开源运动。这并不是什么言过其实,里奇的影响之大怎么说都不为过。即便里奇在1983年获得的图灵奖和1998年获得的国家技术勋章也不能完全彰显他的贡献。

  在克尼汉和派克眼中,里奇是一个少有的孤僻的人。“我和他一同工作了超过20个年头,但还是觉得不是很了解他这个人”,派克说。但这并不是他低调的理由。史蒂夫·乔布斯也是一个孤僻的人,只不过保持低调只使得人们对他的崇拜有增无减。

  里奇所处的时代和工作环境与乔布斯千差万别,这也许是他未得到应得纪念的原因。但是,他留下的遗产总有大佬能够明白。“众所周知牛顿说过他是站在巨人的肩膀上”,克尼汉说,“我们都站在丹尼斯的肩膀上。”

C语言之父丹尼斯·里奇:乔布斯脚下的巨人肩膀相关推荐

  1. C语言之父,UNIX之父丹尼斯·里奇去世 享年70岁

    [caption id="attachment_84" align="alignleft" width="278" caption=&quo ...

  2. 纪念C语言之父丹尼斯·里奇离世6周年

    不知不觉, 丹尼斯·里奇离开我们 6 年了.2011 年 10 月 12 日,和里奇共事 20 多年的同事 Rob Pike 从加州到新泽西去拜访他,才发现他已经去世了.由于是独居,当时无法知道准确的 ...

  3. 让乔布斯立足肩上的C语言之父

    2011年,人们对乔布斯的去世记忆深刻,但这一年还有另一位本应获得同样关注的人物也与世长辞,他就是C语言之父丹尼斯·里奇(Dennis Ritchie). 不过,并非所有人都没能正确认识到里奇所曾作出 ...

  4. 【历史上的今天】10 月 12 日:C 语言之父逝世;西门子诞生;乔布斯推出 NeXT 电脑

    整理 | 王启隆 透过「历史上的今天」,从过去看未来,从现在亦可以改变未来. 今天是 2021 年 10 月 12 日,历史上的这一天,哥伦布发现了"新大陆",在他发现的这片美洲上 ...

  5. 历史上的今天:C 语言之父逝世;西门子诞生;乔布斯推出 NeXT 电脑

    整理 | 王启隆 透过「历史上的今天」,从过去看未来,从现在亦可以改变未来. 今天是 2022 年 10 月 12 日,历史上的这一天,哥伦布发现了"新大陆",在他发现的这片美洲上 ...

  6. 不缅怀C语言之父的果粉都不是真果粉

    Unix和 C 语言的发明人,图灵奖获得者,丹尼斯·里奇先生,于2011年10月8日在位于美国新泽西州的家中病逝.可以说,几乎所有的网络产品和操作系统都是基于丹尼斯先生的成就诞生的,我们都站在他的肩膀 ...

  7. java c 语言之父_Java之父评价C语言之父:他是一位天才,c语言撑起了一切

    Java之父詹姆斯·高斯林(James Gosling)曾在C语言之父丹尼斯·里奇(Dennis Ritchie)去世时发布了关于他的讨论的简短博文,大致内容如下:丹尼斯·里奇辞世的新闻如五雷轰顶.过 ...

  8. 程序员必知的编程4大祖师爷,C语言之父堪称编程界的牛顿!

    编程语言哪家好,这是网友们一直争议和调侃的话题. 不过,并不是所有的程序员都知道编程语言的开山鼻祖. 不得不说,正是因为拜在祖师爷门下,才混有今天撸代码这口饭吃. 下面我们就来了解一下编程语言的祖师爷 ...

  9. 丹尼斯·里奇-c语言之父,Unix之父

    丹尼斯·里奇,全名丹尼斯·麦卡利斯泰尔·里奇.C语言之父,UNIX之父.曾担任朗讯科技公司贝尔实验室下属的计算机科学研究中心系统软件研究部的主任一职.1978年与布莱恩·科尔尼干(Brian W. K ...

  10. 缅怀C语言发明人丹尼斯·里奇(Dennis Ritchie )

    缅怀C语言发明人丹尼斯·里奇(Dennis Ritchie ) 2011年的10月,对世界的IT业来说,是一个灰色的10月.两位IT巨星离我们而去,一位是大家耳熟能详的苹果公司CEO乔布斯,而另一位则 ...

最新文章

  1. C#------Entity Framework6的T4模板的使用
  2. 分析USB平台设备模型框架(1)
  3. 【逆向工具】IDA使用5-( string、图形化与视图的切换、图形化显示反汇编地址、自动注释、标签使用)...
  4. 八.使用OpenCv图像平滑操作
  5. 用C++实现二分查找
  6. JS入门之Date对象
  7. float浮动,定位
  8. 【EXLIBRIS】图洛克《收入再分配的经济学》中译本序 【ZZ】
  9. Java8-Stream之数值流
  10. gulp plugins
  11. C# ComBox 垂直滚动条
  12. android小米 市场下载地址,小米手机下载的软件在哪里?小米应用商店下载路径介绍...
  13. Android车载方案公司,你该何去何从?
  14. 走进波分 -- 14.OSN902产品介绍
  15. 普通固定电话机使用与原理简介
  16. wincc 写入mysql,WINCC读写SQL数据库的示例
  17. pimple idiom
  18. java 画图板 锯齿_java绘画中的锯齿问题
  19. 从虚拟光驱启动计算机,手把手教你使用win10/win8自带的”虚拟光驱“(资源管理器)挂载打开ISO镜像文件-系统操作与应用 -亦是美网络...
  20. LLVM指令选择中的模式定义方法

热门文章

  1. matlab传递闭包算法,传递闭包(用关系矩阵求传递闭包怎么求)
  2. 关于Java观察者模式的一点思考
  3. eNSP模拟不同用户无线上网实验(AC+AP)
  4. Java 接口编程题练习_JAVA学习日记每天进步一点点之接口再学习和内部类、编程题练习、异常学习...
  5. 计算机无法添加本地策略组,电脑打不开本地组策略编辑器,求破~!
  6. 电子万年历c语言全教程,单片机c语言电子万年历完整程序-20210414061741.docx-原创力文档...
  7. 大学生搜题软件哪个好?2020搜题软件排行榜
  8. Swift 之横竖屏切换
  9. SCI-HUB 印度被诉、twitter账号被封,是梁上君子还是罗宾汉?
  10. 如何判断绝缘接头质量的好坏?