小C说历史(人物介绍第二篇):Unix之父 C语言之父 伟大的Ken Thompson 肯·汤普森

news2024/11/27 12:51:45

Unix之父 C语言之父 伟大的Ken Thompson 肯·汤普森

Ken Thompson
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年入选计算机历史博物馆名人录。

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

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

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/1342452.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

win10 telnet服务开启教程

win10 telnet服务开启教程 1、打开控制面板,选择【程序和功能】 2、点击【启用或关闭Windows功能】 3、勾选【Telnet 客户端】,然后点击确定。

【译文】IEEE白皮书 6G 太赫兹技术的基本原理 2023版

第一章 简介 太赫兹波是介于微波和光波之间的光谱区域,频率从 0.1THz ~ 10THz 之间,波长在 3mm ~ 30μm 之间。提供大块连续的频带范围以满足对 Tbit/s 内极高数据传输速率的需求,使该区域成为下一代无线通信(6G)的重…

外汇天眼:Valdas Dapkus和Tradewale因零售外汇欺诈计划被判支付280万美元

美国衍生品市场监管机构商品期货交易委员会(CFTC)宣布,美国新泽西地区法院于11月28日发布了对位于伊利诺伊州的Valdas Dapkus的最终裁定默认令。5月4日,法院对Dapkus控制的两家实体——Tradewale LLC和Tradewale Managed Fund发布…

电子工程师如何接私活赚外快?

对电子工程师来说,利用业余时间接私活是个很常见的技术,不仅可以赚取额外收入,也能提升巩固技术,可以说国内十个工程师,必有五个在接私活养家糊口,如果第一次接私活,该如何做? 很多工…

虚拟机迁移技术原理与应用

虚拟机迁移技术主要应用于两种场景: 第一种,随着现在虚拟化的发展,传统it架构的物理机需迁移到虚拟机上,实现负载均衡、资源优化等目的。 第二种,将虚拟机从一个虚拟化平台迁移到另一个虚拟化平台,可以是…

Django 文件上传(十二)

当 Django 处理文件上传时,文件数据最终会被放置在 request.FILES 。 查看文档:文件上传 | Django 文档 | Django Django工程如下: 创建本地存储目录 在static/应用目录下创建uploads目录用于存储接收上传的文件 在settings.py 配置静态目…

Android Context在四大组件及Application中的表现

文章目录 Android Context在四大组件及Application中的表现Context是什么Context源码Activity流程分析Service流程分析BroadcastReceiver流程分析ContentProvider流程分析Application流程分析 Android Context在四大组件及Application中的表现 Context是什么 Context可以理解…

Python-动态柱状图可视化

柱状图 1.基础柱状图1.1通过Bar构建基础柱状图1.2反转x轴,y轴1.3数值标签在右侧1.4总结 2.基础时间柱状图2.1掌握基础的时间线配置动态图表2.2创建时间线2.3自动播放2.4时间线设置主题2.5总结 3.GDP动态柱状图绘制3.1掌握列表的sort方法并配合配合lambda匿名函数完成…

NAS上使用docker+postgresql搭建私有云笔记joplin全终端适配

文章目录 前置条件步骤1:获取joplin的镜像步骤2:配置容器参数2.1 端口设置2.2环境变量设置(配置数据库) 步骤3. 启动服务端步骤4. 配置客户端4.1 下载客户端4.2 配置客户端同步 步骤5. 外网访问插件安装 通常我们都会用到印象笔记…

代码随想录刷题笔记(DAY2)

今日总结:今天在学 vue 做项目,学校还有很多作业要完成,熬到现在写完了三道题,有点太晚了,最后一道题的题解明天早起补上。(补上了) Day 2 01. 有序数组的平方(No. 977)…

C++ //例13.14 将一批数据以二进制形式存放在磁盘文件中。例13.15 将刚才以二进制形式存放在磁盘文件中的数据读入内存并在显示器上显示。

C程序设计 (第三版) 谭浩强 例13.14 例13.15 例13.14 将一批数据以二进制形式存放在磁盘文件中。 例13.15 将刚才以二进制形式存放在磁盘文件中的数据读入内存并在显示器上显示。 IDE工具:VS2010 Note: 使用不同的IDE工具可能有部分差异。…

零基础学Java第二天

复习回顾: 1.dos命令 dir 显示当前文件夹下面的所有的文件和文件夹 cd 切换目录的 mkdir 创建文件夹的 rd 删除文件夹的 del 删除文件 D: 切换盘符 cls 清屏 2.书写Java代码换行打印《静夜诗》这首古诗 class Demo1 { …

uniapp路由

1、路由登记 uni-app页面路由为框架统一管理,开发者需要在pages.json里配置每个路由页面的路径及页面样式。 类似小程序在 app.json 中配置页面路由一样。 所以 uni-app 的路由用法与 Vue Router 不同,如仍希望采用 Vue Router 方式管理路由,…

智慧工地云平台源码 支持二次开发、支持源码交付

智慧工地利用移动互联、物联网、云计算、大数据等新一代信息技术,彻底改变传统施工现场各参建方的交互方式、工作方式和管理模式,为建设集团、施工企业、监理单位、设计单位、政府监管部门等提供一揽子工地现场管理信息化解决方案。 通过人员管理、车辆管…

深入浅出图解C#堆与栈 C# Heap(ing) VS Stack(ing) 第四节 参数传递对堆栈的影响 1

深入浅出图解C#堆与栈 C# Heaping VS Stacking 第四节 参数传递对堆栈的影响1 [深入浅出图解C#堆与栈 C# Heap(ing) VS Stack(ing) 第一节 理解堆与栈](https://mp.csdn.net/mdeditor/101021023)[深入浅出图解C#堆与栈 C# Heap(ing) VS Stack(ing) 第二节 栈基本工作原理](http…

o2o生活通全开源尊享版+多城市切换+企业付款+交友IM+平台快报

搭建教程 1.把 pigo2ov282.sql 文件里面的网址 test.souho.net 全部批量替换为你的自己的 2.使用 phpmyadmin 导入 pigo2ov282.sql 到你的数据库(直接访问/phpmyadmin 即可) 3.修改数据库文件/conf/db.php 里的数据库连接信息(请勿使用记事本…

车牌识别技术,如何用python识别车牌号

目录 一.前言 二.运行环境 三.代码 四.识别效果 五.参考 一.前言 车牌识别技术(License Plate Recognition, LPR)在交通计算机视觉(Computer Vision, CV)领域具有非常重要的研究意义。以下是该技术的一些扩展说明&#xff1…

小红书品牌曝光方式有哪些,小红书投放总结!

辛辛苦苦撰写了笔记,却没有人看。不懂平台的曝光策略,就无法获得预期的营销结果。今天就来分享下小红书品牌曝光方式有哪些,小红书投放总结! 第一招,打造账号IP 在小红书平台进行传播,打造账号IP非常重要。…

归并算法:分治而治的高效算法大揭秘(图文详解)

🎬 鸽芷咕:个人主页 🔥 个人专栏: 《数据结构&算法》《粉丝福利》 ⛺️生活的理想,就是为了理想的生活! 📋 前言 归并算法是我们算法中最常见的算法之一,其思想非常巧妙。本身归并是只能归并有序数组…

Mybatis行为配置之Ⅲ—其他行为配置项说明

专栏精选 引入Mybatis Mybatis的快速入门 Mybatis的增删改查扩展功能说明 mapper映射的参数和结果 Mybatis复杂类型的结果映射 Mybatis基于注解的结果映射 Mybatis枚举类型处理和类型处理器 再谈动态SQL Mybatis配置入门 Mybatis行为配置之Ⅰ—缓存 Mybatis行为配置…