图灵奖系列 · DoggyDad 原创
肯·汤普逊 & 丹尼斯·里奇:他们用Unix和C语言,为数字世界打下了地基
肯·汤普逊 & 丹尼斯·里奇:他们用Unix和C语言,为数字世界打下了地基
ANSWER-FIRST SUMMARY
本文回答什么问题
肯·汤普逊 & 丹尼斯·里奇:他们用Unix和C语言,为数字世界打下了地基
- 主题分类:图灵奖系列
- 关键词:图灵奖、计算机历史、编程语言、算法、数据库、操作系统
- 人物实体:肯·汤普逊 & 丹尼斯·里奇
图灵奖第十八届 | 肯·汤普逊 & 丹尼斯·里奇:他们用Unix和C语言,为数字世界打下了地基
一句话概括:这两位天才联手创造了Unix操作系统和C语言,前者定义了现代操作系统的哲学,后者定义了编写这一切的语言。他们是数字世界的“创世神”。
🏆 获奖简介
1983年的图灵奖,颁给了一个传奇二人组。他们不是凭借一篇论文或一个算法,而是凭借一个完整的、影响至今的生态系统——Unix操作系统和C语言。
- 获奖者:
- 肯·汤普逊(Ken Thompson):Unix的“首席黑客”,一个充满创造力的实践者。
- 丹尼斯·里奇(Dennis M. Ritchie):C语言之父,一个深邃、严谨的语言设计大师。
- 获奖年份:1983年
- 获奖原因:因他们共同开发了通用的操作系统理论,特别是实现了Unix操作系统。
为什么他们是第十八位? 在他们之前,操作系统是庞大、笨重、且与特定硬件深度绑定的“巨兽”。编程语言也往往要么过于抽象,要么过于底层。汤普逊和里奇,以一种近乎艺术的方式,向世界展示了“少即是多”的强大力量。他们创造的不仅仅是工具,更是一种哲学,一种至今仍在指导着无数程序员的思维方式。
🚀 他们的重大贡献
1. Unix操作系统:一种哲学,而非一个系统
简单理解:想象一下,在Unix之前,每个品牌的汽车都有完全不同的驾驶方式,方向盘、油门、刹车的位置和用法都千奇百怪。Unix就像是那个说:“我们来制定一套标准驾驶规则吧!”的人,它提供了一套简洁、通用、可组合的“驾驶组件”。
背景:1960年代末,贝尔实验室退出了一个庞大而复杂的操作系统项目——Multics。汤普逊参与其中,虽项目失败,但他对一个简洁、多任务、交互式系统的渴望并未熄灭。
Unix的诞生:
- 动机:为了能玩一个他自己写的、名为《星际旅行》(Space Travel)的游戏,汤普逊找到了一台废弃的、没人用的PDP-7小型机。
- 创造:在几周之内,他和里奇以及其他同事,从无到有地写出了一个操作系统的原型,这就是Unix的起源。
Unix的核心哲学:
- 一切皆文件(Everything is a file):无论是硬件设备(如打印机、终端)、进程、还是网络连接,在Unix中都被抽象为文件。这使得用同样一套简单的命令(如
read,write)就能操作所有东西,极大地简化了系统设计。 - 小而美的工具(Small, sharp tools):每个程序只做一件事,并做到极致。例如,
grep只负责搜索,sort只负责排序。 - 管道(Pipes)和重定向(Redirection):这是Unix的“神来之笔”。它允许你像连接乐高积木一样,将这些小工具的输出“管道”给另一个工具的输入。例如,
cat file.txt | grep "error" | sort | uniq > result.txt这一条命令就能完成“查看文件、筛选错误、排序、去重、保存结果”的复杂工作流。 - 可移植性(Portability):这是Unix与之前所有系统的根本区别,而实现这一点的关键,就是C语言。
2. C语言:系统编程的“通用语”
简单理解:如果说Unix是那座宏伟的建筑,C语言就是专门为建造它而发明的、既能砌砖(贴近硬件)又能进行结构设计(高级抽象)的“万能工具”。
背景:最初的Unix是用晦涩的汇编语言写的,这意味着它只能在那台PDP-7上运行。为了让Unix能在其他机器上“复活”,汤普逊先是创造了B语言,但B语言功能有限。
C语言的诞生:
- 创造者:丹尼斯·里奇。
- 目的:在B语言的基础上进行改进,创造一种既能高效地操作硬件(如内存地址),又具备高级语言的结构化和可读性的新语言。
- 成就:里奇成功了。C语言诞生了,它:
- 贴近硬件:通过指针,C语言可以直接操作内存,这对于编写操作系统和驱动程序至关重要。
- 高效:C语言编译出的代码运行速度极快,接近汇编语言。
- 可移植:C语言提供了一层标准的抽象,使得为它编写的程序(包括Unix本身)只需少量修改,就能在完全不同的硬件上编译和运行。
3. Unix与C的共生:1 + 1 > 100
Unix和C语言的关系,是技术史上最成功的一段“婚姻”。
- C语言重写Unix:到了1973年,里奇和汤普逊用C语言将Unix内核几乎完全重写。这是一个革命性的举动!从此,Unix摆脱了硬件的束缚,成为了第一个真正意义上的“可移植操作系统”。
- Unix推广C语言:Unix的成功,特别是在学术界的流行,使其成为C语言开发的理想环境。无数学生和研究者在Unix上学习和使用C语言,使其迅速成为系统编程的事实标准。
为什么重要?
- 软件开发模式的革命:这种“操作系统与高级语言”的紧密结合,开创了全新的软件开发模式。
- 开源文化的滥觞:贝尔实验室以极低的价格将Unix源码授权给大学,催生了浓厚的黑客文化和代码共享精神,为后来的开源运动埋下了种子。
🌍 对世界的深远影响
1. 现代操作系统的“始祖”
- Linux:Linus Torvalds创造Linux内核时,深受Unix思想的影响,并使其与POSIX标准(一个类Unix标准)兼容。可以说,没有Unix,就没有今天的Linux。
- macOS & iOS:苹果的macOS和iOS,其底层都是基于Unix的变体(BSD)。你Mac上的终端,就是通往其Unix核心的窗口。
- Android:Android的底层内核是Linux,因此也间接继承了Unix的血脉。
- 互联网服务器:今天支撑着全球互联网运行的绝大多数服务器,都运行着类Unix系统(主要是Linux)。
2. 几乎所有现代编程语言的“祖父”
C语言的影响力无处不在。
- 直接后代:C++(在C的基础上增加了面向对象特性)、Objective-C。
- 语法继承者:Java, C#, JavaScript, Python, PHP, Go… 这些语言的语法(如花括号
{}、if-else、for循环)都深受C语言的影响。学习C语言,就像是学习编程语言的“拉丁语”。
3. 塑造了“黑客文化”与开发者工具链
- 命令行界面(CLI):Unix强大的命令行工具,塑造了程序员高效、自动化的工作方式。
- 开发工具:
make(自动化编译)、awk(文本处理)、sed(流编辑器)等无数经典工具,都源于Unix。 - K&R C《C程序设计语言》:里奇和Brian Kernighan合著的这本书,以其简洁、精准、充满智慧的风格,被誉为程序员的“圣经”。
🏆 获奖理由
ACM官方表彰:表彰他们共同开发了通用的操作系统理论,特别是实现了Unix操作系统。
更通俗的理解:他们为数字世界提供了两样最基础的东西:一套”玩法”(Unix哲学)和一套”语言”(C语言)。他们没有去建造一座具体的、大而全的宫殿,而是给了全世界程序员一套优雅、强大、可无限组合的”数字乐高”。后来的建筑师们,无论是建造互联网、智能手机、还是云计算,他们手中的积木,几乎都源自这两位巨匠的设计。
👤 个人生平与传奇
肯·汤普逊 (Ken Thompson)
- 标签:天才黑客、实践主义者、简洁的信徒。
- 传奇事迹:
- 为了玩游戏,顺手写了个操作系统。
- 创造了
grep命令,其名字源于编辑器命令g/re/p(全局搜索正则表达式并打印)。 - 创造了B语言(C的前身)和Go语言(与人合作)。
- 参与定义了UTF-8编码,解决了全球文字在计算机中的统一问题。
- 著名的“信任之信任”(Trusting Trust)演讲,揭示了软件后门的深层哲学问题,是计算机安全领域的奠基性思考。
丹尼斯·里奇 (Dennis M. Ritchie, dmr)
- 标签:C语言之父、沉默的巨人、理论与实践的完美结合。
- 传奇事迹:
- 几乎以一己之力创造了C语言。
- 与汤普逊并肩作战,用C重写了Unix。
- 合著了程序员圣经 K&R C。
- 他为人极其低调,但他的贡献支撑起了整个软件世界。当他2011年去世时,整个科技界都表达了深切的哀悼,人们称他为“站在我们所有人肩膀上的巨人”。
🧐 轶事趣闻
- Unix名字的由来:Unix最初被命名为Unics(Uniplexed Information and Computing Service),这是一个双关语,一方面是“单路”信息计算服务,另一方面也是对“多路”的Multics的一种戏谑。后来才演变为Unix。
- 消失的第0版:Unix的第一版是用汇编写的,当用C语言重写后,那个C语言的版本成为了“第一版”,而最初的汇编版则被戏称为“第0版”,并逐渐消失在历史中。
- “d”和“m”和“r”:在贝尔实验室的邮件系统中,丹尼斯·里奇的用户名是
dmr,这三个字母后来成为了他在黑客世界中广为人知的代号。
💭 为什么他们值得纪念?
1. 他们是现代软件世界的奠基人
如果说计算机科学是一座大厦,那么冯·诺依曼等人设计了建筑的蓝图,而汤普逊和里奇则实实在在地挖好了地基,烧制了砖块,并教会了所有人如何盖房子。
2. 他们的哲学思想永不过时
“保持简单”、“小即是美”、“组合优于继承”… 这些源于Unix的哲学思想,已经超越了操作系统本身,成为软件工程、产品设计乃至个人工作流程中的黄金法则。
3. 他们代表了贝尔实验室的黄金时代
在那个没有KPI、充满自由探索精神的环境里,少数几位天才的紧密合作,就能爆发出改变世界的力量。汤普逊和里奇的传奇,是那个伟大创新时代最闪亮的徽章。
💡 给开发者的启示
1. 践行Unix哲学:做一件事,做好它
不要试图写一个”瑞士军刀”式的万能程序。设计时问自己:这个工具的单一职责是什么?
# ❌ 不好的设计:一个程序干所有事
./mega-tool --parse --filter --sort --output
# ✅ Unix方式:小工具组合
cat data.txt | grep "error" | sort | uniq > result.txt
在编写函数和模块时也一样:
// ✅ 每个函数只做一件事
int read_file(const char *filename, char **buffer);
int parse_data(const char *buffer, struct data *out);
int filter_errors(const struct data *in, struct data *out);
2. 学习C语言:理解计算机的”心脏”
即使你主要使用Python或JavaScript,学习C语言能让你:
- 理解内存管理:指针、堆栈、内存布局
- 理解性能:为什么某些操作慢?如何优化?
- 阅读底层代码:操作系统内核、数据库引擎、编译器都是C写的
- 调试更深入:能看懂core dump、理解segfault
// C语言中的经典技巧:指针操作
void swap(int *a, int *b) {
int temp = *a;
*a = *b;
*b = temp;
}
// 这种直接操作内存的能力,是高级语言抽象掉的
3. 掌握命令行:现代开发者的必备技能
Unix命令行工具链是每个开发者的”瑞士军刀”:
- 文本处理:
grep,sed,awk - 系统监控:
top,ps,netstat - 版本控制:
git - 自动化:shell脚本、
make
# 实用示例:分析日志文件
# 找出访问最多的10个IP地址
cat access.log | awk '{print $1}' | sort | uniq -c | sort -nr | head -10
# 监控某个进程的内存使用
watch -n 1 'ps aux | grep myapp'
4. 理解”可移植性”的价值
编写代码时,考虑:
- 避免依赖特定平台的特性(除非必要)
- 使用标准库而非平台特定API
- 通过抽象层隔离平台差异
这是Unix+C教给我们的重要一课:好的抽象让代码能跨越时空。
❓ 常见问题
Q: 现在还有必要学习C语言吗?不是有Python、Rust等更现代的语言了吗? A: 非常有必要!C语言是:
- 理解计算机的窗口:学C能让你真正理解程序如何与硬件交互
- 现代语言的基础:Python解释器、Node.js运行时都是C写的
- 系统编程的标准:操作系统、驱动、嵌入式开发仍然首选C
- 面试常考:许多公司仍然考察C/C++,因为它体现了基础功底
Q: Unix哲学在现代开发中还适用吗?微服务、容器不是更先进吗? A: Unix哲学不但没过时,反而在现代架构中得到了升华!
- 微服务:每个服务做一件事(单一职责)
- 容器/Docker:标准化的”管道”机制
- API组合:类似Unix管道,通过REST/gRPC连接服务
Unix哲学是永恒的,只是应用层次从进程提升到了服务。
Q: 为什么说Unix和C语言改变了世界?具体体现在哪里? A: 看看你身边:
- 手机:Android基于Linux(Unix后代),iOS基于BSD(Unix分支)
- 电脑:macOS是Unix认证系统,Linux无处不在
- 服务器:几乎所有互联网服务器运行Linux
- 嵌入式:从路由器到汽车,C语言驱动一切
- 编程语言:Java, Python, Go…都直接或间接受C影响
没有Unix和C,就没有今天的数字世界。
Q: 汤普逊和里奇谁的贡献更大? A: 这是错误的问题!他们的贡献是互补的:
- 汤普逊:实践天才,Unix架构师,B语言、Go语言、UTF-8…
- 里奇:理论+实践的完美结合,C语言之父,Unix核心开发者
没有汤普逊,就没有Unix的诞生和哲学;没有里奇,Unix就无法可移植,C语言就不存在。他们是真正的”黄金搭档”。
Q: 如何开始学习Unix和C语言? A: 循序渐进:
- 入门C语言:
- 读《The C Programming Language》(K&R C)
- 实践:写小程序,理解指针和内存
- 熟悉Unix/Linux:
- 使用Linux发行版(Ubuntu, Fedora)或macOS
- 学习基本命令:
ls,cd,grep,find,awk,sed - 写shell脚本自动化日常任务
- 深入系统编程:
- 读《Unix编程艺术》(The Art of Unix Programming)
- 读《Unix环境高级编程》(APUE)
- 尝试写一个小型Unix工具或Shell
📚 延伸阅读
- 《The C Programming Language》(K&R C) by Kernighan & Ritchie:C语言圣经,必读
- 《Unix编程艺术》by Eric Raymond:深入讲解Unix哲学
- 《Unix环境高级编程》(APUE) by Richard Stevens:系统编程权威指南
- 《The Design of the Unix Operating System》by Maurice Bach:Unix内核设计
- 纪录片《Unix:Making Computers Easier to Use》:贝尔实验室出品,珍贵历史资料
- 论文《The UNIX Time-Sharing System》(1974):汤普逊和里奇的经典论文
- 视频:Brian Kernighan访谈系列:K&R C合著者讲述Unix/C的历史
总结语:肯·汤普逊和丹尼斯·里奇,一个如同鬼斧神工的工匠,一个如同深思熟虑的建筑师。他们共同缔造了我们今天所处数字世界的基础设施。没有Unix的哲学,我们可能还在笨重的、封闭的系统中挣扎;没有C语言,软件世界将失去它的”通用语”。他们是真正的英雄,他们的代码,就是写给世界最美的情诗。
DISCUSSION
评论与补充