内容简介
你和我,我们程序员掌控世界:跨越半个世纪的编码文明史
在本书中,软件行业传奇人物罗伯特·C.马丁(人称Uncle Bob,鲍勃大叔)携我们步入计算机编程的天地,将我们的目光聚焦在凭借聪明才智与顽强意志改变世界的人物的生命轨迹。从查尔斯·巴贝奇(CharlesBabbage)、阿达·洛芙莱斯(Ada Lovelace),到艾伦·图灵(Alan Turing)、格蕾丝·霍珀(Grace Hopper)与丹尼斯·里奇(Dennis Ritchie),探寻这些为现代计算技术奠定基础的开创性先驱者们的人生故事,描述他们披荆斩棘的求索历程。
这部具有回忆录特质的科技史著作宛如一幅波澜壮阔的历史长卷,蕴含着深邃的技术洞见,深入剖析了在比特和字节层面缔造计算技术的编程突破。本书穿越时空,将技术奇迹与背后的鲜活人物事迹相结合,让读者一窥那些推动技术巨轮滚滚向前的先驱者所经历的奋斗历程。他们的故事并非只有鲜花和掌声,还有至暗时刻的挣扎——资金枯竭、上司的否定、重大失败和患上致命疾病,也曾无情地折磨他们。他们的经历与计算技术本身的演进轨迹交融成画,编程领域也从最初的草创时期发展到如今云计算和AlI兴盛的时代。书中不仅勾勒出计算领域的进化脉络,还探讨了Al技术如何改变编程的未来走向,以及由此衍生出的伦理挑战。
核心议题
了解编程的起源,及其如何塑造了当今的技术格局。
编程先驱者的人文侧写——是什么驱动他们不断前行,他们又跨越了哪些障碍。从汇编语言萌芽到面向对象语言崛起的关键技术突破。
第二次世界大战对推动计算机科学发展的历史性作用。关于Al伦理及编程未来的深刻洞见与前瞻性预测。
精彩书评
“我像Uncle Bob一样,职业生涯的大部分时间都在从事咨询、教学和参加计算机会议中度过。重要的是,本书中提及的许多人物我都遇到过,也曾和他们共进晚餐。所以这本书写的其实就是我职业生涯中的那些朋友,我可以告诉你,这些都是真实的故事。事实上,本书的文字表达非常精妙,研究得也很深入。”
——摘自Tom Gilb为本书撰写的“后记”
“纵观各类相关书籍,除本书之外,我难以想象还有哪本书能如此全面、清晰地讲述计算机编程的早期发展历史。”
——Mark Seeman
“这是一部引人入胜的计算机与编程历史书。精彩呈现众多伟大人物的生活片段,也生动描绘了Uncle Bob作为程序员的职业生涯历程。”
——Jon Kern,《敏捷宣言》的合著者
“在本书中, Bob成功地将多位程序大师的工作经历编织成一个个引人入胜的故事,为我们提供了丰富的历史背景、人性化的事迹以及行业开创者们令人耳目一新的灵感之光,披露了诸多细节。身为这段波澜壮阔的历史的亲历者,Bob巧妙地将自己新颖的观察和见解融入其中。这一次,我们不仅完整欣赏Bob的故事,还了解了他对未来的思考。这是一本饶有趣味的书,读来如春风拂面,轻松惬意。”
——Jeff Langr
目录
第Ⅰ部分 开端
第1章 我们是谁? 3
Ⅱ部分 技术巨擘
第2章 巴贝奇:第一位计算机工程师 11
2.1 生平 11
2.2 数学用表 12
2.2.1 制表之道 12
2.2.2 有限差分法 14
2.3 巴贝奇的远见 17
2.4 差分机 18
2.5 机械的符号系统 19
2.6 派对魔术 20
2.7 差分机的终结 20
2.8 分析机 22
2.9 阿达:洛芙莱斯伯爵夫人 23
2.10 第一位程序员? 26
2.11 未竟之宏愿 27
2.12 结论 29
参考文献 29
第3章 希尔伯特、图灵与冯 · 诺伊曼: 第一代计算机架构师 31
3.1 大卫·希尔伯特 31
3.1.1 哥德尔 33
3.1.2 反犹主义风暴 35
3.2 约翰·冯·诺伊曼 36
3.3 艾伦·图灵 38
3.4 图灵-冯·诺伊曼架构 40
3.4.1 图灵的机器 40
3.4.2 冯·诺伊曼的历程 44
参考文献 49
第4章 格蕾丝 · 霍珀:第一位软件工程师 51
4.1 军旅生涯:1944年夏天 52
4.2 规范:1944—1945年 55
4.3 子程序:1944—1946年 58
4.4 研讨会:1947年 59
4.5 UNIVAC:1949—1951年 60
4.6 排序与编译器的起源 64
4.7 酗酒:大约1949年 64
4.8 编译器:1951—1952年 65
4.9 A类编译器 66
4.10 编程语言:1953—1956年 68
4.11 COBOL:1955—1960年 69
4.12 我对COBOL的吐槽 72
4.13 无可争议的成功 72
参考文献 73
第5章 约翰 · 巴克斯:第一种高级语言 75
5.1 生平 75
5.2 令人着迷的彩色灯光 76
5.3 快速编码与701计算机 78
5.4 对速度的需求 80
5.4.1 分工 84
5.4.2 我对FORTRAN的吐槽 85
5.5 算法语言(Algol)及其他 85
参考文献 87
第6章 艾兹格 · 迪杰斯特拉:第一位计算机科学家 89
6.1 生平 89
6.2 ARRA计算机:1952—1955年 91
6.3 ARMAC计算机:1955—1958年 94
6.4 ALGOL语言与X1计算机:1958—1962年 95
6.5 阴霾如墨渐漫:1962年 98
6.6 计算机科学的崛起:1963—1967年 99
6.6.1 科学性 100
6.6.2 信号量 100
6.6.3 结构化编程 101
6.6.4 数学证明的迷思 101
6.7 数学:1968年 102
6.8 结构化编程:1968年 104
参考文献 107
第7章 尼加德与达尔:第一种面向对象编程语言 109
7.1 克里斯滕·尼加德 109
7.2 奥莱-约翰·达尔 110
7.3 Simula语言与面向对象编程 111
参考文献 119
第8章 约翰 · 凯梅尼:第一种“大众化”编程语言——BASIC 121
8.1 约翰·凯梅尼的生平 121
8.2 托马斯·库尔茨的生平 123
8.3 革命性的想法 123
8.4 看似不可能的任务 124
8.5 BASIC语言 125
8.6 分时系统 126
8.7 操作计算机的青少年 127
8.8 转型 127
8.9 盲目先知 128
8.9.1 共生关系? 128
8.9.2 预言 129
8.10 雾里看花 1
前言/序言
简单敲入五个字符“vim .”,就能启动我最喜欢的编辑器。这可不是普通的编辑器,而是NeoVim。如今的NeoVim具备键绑定、语言服务器协议(LSP)、语法高亮、内置错误诊断等多种功能。经过全面定制后,NeoVim仅需数毫秒即可启动,实现近乎即时的文件编辑。即使项目有数千个文件,LSP也能迅速反馈项目的状态,将错误信息即时加载到快速修复菜单中,以便快速定位。只需要几个按键,我就能构建、启动、运行或测试项目。我的计算机甚至能通过AI将自然语言直接转换为代码!更神奇的是,这个AI还能在我编码时实时协作,瞬间生成大量(虽然质量存疑的)代码。这一切听起来令人惊叹 。NeoVim的体验堪称美妙流畅、疾如闪电。然而,NeoVim却被某些开发者视为古董。“老顽固!”1他们用这样的称呼嘲讽使用NeoVim并花时间配置的人。毕竟,像IntelliJ那样全功能的集成环境 唾手可得,甚至它所支持的功能之丰富已经远超我这个NeoVim用户的想象边界!
我之所以讲述这些,是因为我们正身处技术奇迹之中而不自知。遭此非议,不是因为我坚守“过时”的工具,也不是因为开发者间的理念之争——这些早已司空见惯。真正震撼的是:文本编辑这项人类智慧的结晶,当前在我们眼中竟如此稀松平常。自动补全、语法高亮、动态文档,这些曾经是具有石破天惊效果的功能,如今却成了开发者的空气与水。回溯历史,人类用了30年才从机器码跃升至高级编程语言,又等待半个世纪迎来语法高亮,直到20世纪70年代后期才出现跨语言的智能支持。编辑器的进化史,本就是一部浓缩的人类计算文明史。
比起使用古董编辑器,我更痴迷于聆听往昔的故事。那些“真正的程序员”能根据磁鼓存储器的旋转节奏来优化代码,以达到最佳的读取速度。多希望能亲眼见证大师们在打孔卡片上施展魔法!或许这只是一种浪漫的怀旧,但那个时代的每个突破都重塑了世界。在本书中,我有机会与计算历史中那些缔造过重大飞跃的创造者们并肩走过那段时光。我看到查尔斯·巴贝奇(Charles Babbage)用差分机震撼了维多利亚时代的沙龙,机械巨兽发出的叮叮当当的运转声,所产生的东西在当时看来一定是魔法。那种感受恰似今天我们初见大语言模型或Copilot自动生成代码时的震撼。我敢打赌,在那个时候你一定会在晚宴上听到客人惊呼:“机器真的能思考?”我感受到那时的团队昼夜不停工作的压力,以及在二战关键计算中对更强计算能力的迫切需求,这些计算使得原子弹成为可能。他们没有Herman Miller人体工程办公椅,也没有时尚的站立式办公桌;见鬼,他们甚至都没有显示器或键盘!然而,他们取得了不可思议的成果,改变了人类发展的进程。本书是这段计算历史表述中最引人入胜的讲述之一。
如果一个程序员没听说过Uncle Bob的名号,我会非常惊讶。他在我们行业中绝对是多产的。多年来,我只是通过 Twitter以及他在整洁代码和敏捷开发方面的重要贡献才知道Uncle Bob。在我心中,他一直是一种抽象的存在2,直到某天在Twitter上我与他互动后我的心态才发生了变化。通过电子邮件、电话,甚至播客的交流,我看到一个远比教科书更立体的罗伯特·C. 马丁:他务实,在需要时愿意做出让步。在播客节目中,最一致的评论是“他温文尔雅,笑容满面!”这反映了他豁达的性格和丰富充实的生活经历。他是一个真正的软件工程师,也是我们学习的榜样。
我个人已经厌倦了无数关于空格键、编辑器以及面向对象编程与函数式编程的争论,这些争论在X上激烈地展开着。我感兴趣的是,到底是谁创造了这些引发争论的技术。本书连接起过去的岁月和未来的希望,将更有意义的东西呈现给我们,而Uncle Bob就是讲述这个故事的完美人选。
——ThePrimeagen3
1 原文是“ Luddite!”。 Luddite,即卢德主义者,是 19世纪英国的一个激进主义团体,反对工业革命,主张手工劳动和传统手工艺。——译者注
2 原文是“Avatar of AbstractBuilderFactory”。这个表述是对Uncle Bob的幽默化隐喻,结合了软件工程中的两个经典设计模式:Abstract Factory(抽象工厂模式)和Builder(建造者模式)。前者是创建相关对象家族的接口,隐藏具体实现。后者是分步骤构建复杂对象的模式。将两者合成为“AbstractBuilderFactory”这个虚构概念,其隐喻意义在于:强调Uncle Bob作为软件架构大师的形象,暗示其著作中强调抽象设计和模式应用的特点。——译者注
3 ThePrimeagen是YouTube频道号,主持人Michael Paulson是科技界颇具影响力的人物,以快速使用 vim编辑器、编程直播、技术视频等内容而在Twitch和YouTube上闻名。——译者注
自 序
我即将为你讲述这