作者 | 年素清
责编 | 伍杏玲
出品 | 程序人生(ID:coder_life)

Unix之父——肯•汤普森(Ken Thompson)被称作“世界上最杰出的程序员”,他自学编程,26岁创造Unix,改写了计算机操作系统的历史,并在古稀之年成为Go语言的共同开发者之一。

笔者通过本文带你了解这位Unix之父的传奇一生。

喜欢逻辑学,自学编程

1943年,汤普森出生在美国新奥尔良。上小学时,有一堂课讲二进制,喜欢逻辑的他立即被迷住了,他做了很多二进制运算,还借助一台十进制计算器扩展到各种进制。进入中学阶段,汤普森又迷上了电子器件,他曾自己制作无线电、示波器和放大器。

1960年,汤普森考入加州大学柏克莱分校,攻读电气工程专业。大二时,他接触到模拟计算机。他在上面做了很多相关的二进制计算,但他嫌解释程序太慢,不能直接用汇编编程。在暑假里,他想方设法弄到了解释程序的源代码清单,在不懂程序语言的情况下,仔细研读,终于学会了编程,并在学校找到编程的工作。

1965年本科毕业,汤普森留校。有个教授为他申请了硕士,师从著名的信息论和博弈论专家埃尔温•伯利坎普(Elwyn Berlekamp)。伯利坎普问他为什么学编程时,汤普森说:“因为我从小喜欢逻辑学。”

据汤普森回忆,他读硕期间,大部分都是靠自学。从入学到硕士毕业,汤普森仅仅用了一年的时间。

为了玩游戏,动手设计操作系统

1966年,汤普森加入贝尔实验室。1968年,汤普森参与了贝尔实验室与麻省理工学院、通用电气公司联合开发的一个多用户分时操作系统,取名为Multics(多路信息计算系统)。

一年后,贝尔实验室认为Multics系统周期长、成本高、前景不佳,便决定撤出。汤普森非常失落,他自己写的一款叫做“star travel”的游戏就是完全基于Multics的,退出Multics项目意味着他将没有机器可以玩这个游戏了。

于是汤普森决定自己设计一个操作系统来玩游戏,他本来打算向实验室申请在DEC-10上写,然而没有申请到,只能找到了一台废弃已久的老式PDP-7小型机,虽然称为小型机,也有一个房间大。汤普森先在这台机器上重写了游戏,接着他用一周时间设计出操作系统的内核,再用一周时间创造出文件系统,一周时间写编辑器,一周时间写编译程序,最终在一个月内编写完了整个操作系统。汤普森将其命名为UNICS (UNiplexed Information and Computing System)。后面陆续做了一些改动和优化,便有了第一版UNIX操作系统。

这一年,汤普森年仅26岁。

共获图灵奖

Unix的诞生在贝尔实验室并没有惊起多大的波澜,只有一位叫做丹尼斯•里奇(Dennis M. Ritchie)的同事对它表现出了不小的兴趣,主动请求加入进来共同完善这个系统。

1972年,汤普森与里奇共同将Unix移植到了当时最先进的大型机PDP-2上。由于Unix的简洁、稳定与高效,大家纷纷放弃了PDP-2上自带的DEC操作系统,完全改用Unix。

尽管此时的Unix在两人的努力下趋于完善,但外界不为所知。

1973年10月,在IBM举办的操作系统原理专题研讨会上,汤普森与里奇宣读了相关的论文并展示了Unix,整个会场为之轰动,大家都立即涌上来索取这种新型的操作系统的程序。

随后,业界对Unix的需求日益增加,两人决定将Unix进一步改写,以便可以将它移植到各种不同的硬件系统。最终,他们将Unix与C语言完美地结合在一起,产生了新的可移植的Unix系统。正式推出后,改写了计算机的历史。

鉴于Unix的诸多优点,人们将它称为是软件界的“瑞士军刀”。一位贝尔高级主管形容Unix是继晶体管以后的第二个最重要发明。两位发明者谦虚地说:“就其受公众瞩目程度而言,Unix确实是一项重要的开发”。

由于Unix深远影响,1983年美国计算机协会将当年的图灵奖破例颁给了汤普森与里奇,并在当年新设立了一个奖项――ACM Software System Award(软件系统奖),主要颁发给开发出具有长远影响力软件系统的机构或个人,而汤普森与里奇则成了首届获奖者。

惨淡的职业生涯

1980年代,汤普森与C++语言之父Bjarne Stroustrup、图灵奖获得者之一Brian Kernighan等几位计算机大佬合作,为朗讯公司开发Plan 9操作系统,该项目的初衷是希望能够开发出取代Unix的新一代分布式多用户和图形化的操作系统,在1992年、1995年先后发布了两个正式版本。但此时Linux异军突起,很快抢夺了市场,Plan 9的发展也受到了限制。1990年代后期,朗讯公司不得不取消了Plan 9项目。

不久之后,朗讯又启动了Inferno操作系统研究项目,汤普森再次参与其中。

1997年,发布了Inferno第一版,并用在了朗讯的两个产品之中,为此公司还成立了专门的业务部门。然而,此时互联网悄然兴起,Sun公司开发的Java开始占据主流市场。因为失败的营销和运营模式,Inferno并没有在互联网大潮中占得一席之地,三年后,Inferno惨淡收场,知识产权被出售给英国公司Vitanuova。

Go语言的共同创造者

2007年9月,汤普森以优秀工程师的身份加入Google,与之前在贝尔实验室时的老同事罗布•派克(Rob Pike),一起为Google设计基础设施。他的工作内容主要涉及操作系统方面。他在《编程人生》一书中所说,虽然他对Google大规模海量用户的计算环境以及相关的制度还不太适应,他还没有资格提交代码,但他总体上还是很喜欢这里的工作。

2009年11月,汤普森与派克一起公布了他们的工作的第一个成果——Go语言,这是一款带垃圾收集、编译型的并发系统语言,一经问世便引起了广大的关注。

世界上最杰出的程序员

除了Unix和Go语言之外,汤普森还间接地发明了许多计算机编程相关的产物。早在开发Multics的期间,他便创造出了一种叫做“Bon”的编程语。

为了开发Unix,汤普森开发了一种新的语言——B语言,后来成了里奇开发C语言的基础。

受导师伯利坎普的影响,汤普森还曾开发了一个名为Belle的国际象棋专用计算机,据说曾经打遍天下无敌手,他还编写了一个程序扩展象棋残局库。

此外,汤普森在开发编辑器的过程中发明了正则表达式,在开发Plan 9操作系统的过程中发明了UTF-8编码。

因为他的这些成就,一生荣誉颇多。除了1983年被授予图灵奖之外,他在1994年获得由电气和电子工程师协会颁发的计算机学会先锋奖,1998年被授予国家科技奖章,并于1997年入选计算机历史博物馆名人录。

业界对他的评价极高,称他是“世界上最杰出的程序员”。

有意思的是,尽管汤普森在计算机方面成就显赫,但他却建议自己的儿子去读生物而非计算机,理由是计算机发展太慢了。对此,你怎么看?

参考链接:

肯·汤普生、Go语言百科

计算机天才肯·汤普森:为了玩游戏,自己写了一个操作系统

互联网发展史人物篇:肯·汤普森(Ken Thompson)——Unix之父

更多精彩推荐
☞过半中国人是工具类 App 活跃用户,为什么变现却这么难?
☞赠书 | 如何建设数据中台?看这份企业数据能力测评就够了!
☞世上最杰出程序员,B 语言、Unix 之父嫌计算机发展太慢,让孩子学生物?
☞国内厂商 Onyx 违反 GPL 协议,中国开源何去何从?
☞BERT在美团搜索核心排序的探索和实践
☞以太坊创始人V 神:普通人看见现在,天才看见未来
点分享点点赞点在看

世上最杰出程序员,B 语言、Unix 之父为玩游戏,写了个操作系统相关推荐

  1. 世上最杰出程序员,B 语言、Unix 之父嫌计算机发展太慢,让孩子学生物?

    作者 | 年素清 责编 | 伍杏玲 出品 | 程序人生(ID:coder_life) Unix之父--肯•汤普森(Ken Thompson)被称作"世界上最杰出的程序员",他自学编 ...

  2. 黑马程序员C语言基础(第三天)

    黑马程序员C语言基础(一)第三天 https://www.bilibili.com/video/BV15W411K7k6?p=40 文章目录 低级语言与高级语言 c语言优缺点 c语言应用领域 通过gc ...

  3. Java程序员Go语言入门简介

    引用:Java程序员Go语言入门简介 为什么是 Go 语言 类 C 的语法,这意味着 Java.C#.JavaScript 程序员能很快的上手 有自己的垃圾回收机制 跨平台.编译即可执行无需安装依赖环 ...

  4. 程序员的语言“艳遇史”(一)——班长pascal

    程序员的语言"艳遇史"(一) (***以下小说情节纯属虚构,供朋友们在紧张编程后轻松一下,如有雷同纯属巧合,切勿对号入座***) 地狱里,一个曾经的程序员经不过魔鬼们的严刑拷打,终 ...

  5. 黑马程序员——c语言学习心得——函数传递二维数组

    黑马程序员--c语言学习心得--函数传递二维数组 -------Java培训.Android培训.iOS培训..Net培训.期待与您交流! ------- 一.定义指针的时候一定要初始化.    变量 ...

  6. 黑马程序员C语言基础(第八天)复合类型(自定义类型)(结构体)、共用体(联合体)、枚举enum、 typedef

    黑马程序员C语言基础(第一天) 黑马程序员C语言基础(第二天) 黑马程序员C语言基础(第三天) 黑马程序员C语言基础(第四天)数据类型 黑马程序员C语言基础(第五天)运算符与表达式.程序流程结构.数组 ...

  7. 黑马程序员C语言基础(第七天)内存管理

    黑马程序员C语言基础(第一天) 黑马程序员C语言基础(第二天) 黑马程序员C语言基础(第三天) 黑马程序员C语言基础(第四天)数据类型 黑马程序员C语言基础(第五天)运算符与表达式.程序流程结构.数组 ...

  8. 黑马程序员C语言基础(第五天)运算符与表达式、程序流程结构、数组和字符串、函数

    https://www.bilibili.com/video/BV15W411K7k6?p=93&spm_id_from=pageDriver 黑马程序员C语言基础(第五天)运算符与表达式.程 ...

  9. 培养杰出程序员的捷径

    培养杰出程序员的捷径 学习和参加算法竞赛是成为杰出程序员的捷径.ACM-ICPC的冠军被称为"世界上最聪明的人",竞赛的获奖者基本上都成长为杰出的软件工程师,并且有很多人是IT公司 ...

最新文章

  1. java string 占位符_驳《阿里「Java开发手册」中的1个bug》?
  2. MySQL数据库学习【第九篇】索引原理与慢查询优化
  3. 动态规划之等差递减区间个数
  4. JAVA volatile关键字正确使用姿势
  5. airflow零基础入门
  6. 【大会】延迟还能再低点吗?不能,但也能
  7. studio 热重载应用_常用钢材型号、特性、应用范围(总结的太好啦)
  8. 华为成立德国实验室属实 但并非为5G牌照
  9. postgreSQL源码分析——索引的建立与使用——B-Tree索引(2)
  10. Spark 系列(十)—— Spark SQL 外部数据源
  11. 详解基于机器学习的恶意代码检测技术
  12. 2018-2-13-win10-UWP-RSS阅读器
  13. python应用程序无法正常启动0xc0000142_电脑提示应用程序错误无法正常启动0xc0000142的解决办法...
  14. Java LeetCode每日一题-从易到难带你领略算法的魅力(七):Z 字形变换
  15. 软件评测师考试学习计划
  16. 巴比特首发 | 银行卡司法冻结应遵循法治程序
  17. win10关于仅仅只能创建文件夹的问题
  18. 重看张艺谋的《英雄》
  19. 棋盘覆盖算法java_棋盘覆盖问题(算法分析)(Java版)
  20. [源代码]基于D-S证据理论的雷达探测信息融合

热门文章

  1. 计算基因组学工具解析肿瘤与免疫细胞的互作--转载
  2. 漂亮的代码6:增加字符串后的数字
  3. 格而知之11:我所理解的内存管理(2)
  4. 分享17个网页设计中字体排版的优秀示例
  5. C++初学之 3. ASCII数值的应用(大小写变换)
  6. 百度EasyDL-表格数据预测试用示例
  7. [LibTorch] 指定参数不进行学习
  8. Pytorch 手工复现交叉熵损失(Cross Entropy Loss)
  9. ubuntu18.04 ROS安装配置及常见问题得解决
  10. ssm项目之sql查询的问题