目录
-
引言
-
编程
-
JavaScript
-
谷歌 Chrome 与美国司法部
-
Ruby 编程语言
-
优美的代码
-
元编程 (Metaprogramming)
-
动态类型 (Dynamic typing)
-
扩展性 (Scaling)
-
编程的未来
-
人工智能的未来
-
感觉编程 (Vibe coding)
-
Rails 宣言:优秀编程语言的原则
-
为什么管理者毫无用处
-
小团队
-
杰夫·贝索斯 (Jeff Bezos)
-
为什么会议是有害的
-
反对退休的理由
-
努力工作
-
我们为什么离开云
-
AWS
-
拥有自己的服务器
-
埃隆·马斯克 (Elon Musk)
-
苹果 (Apple)
-
蒂姆·斯威尼 (Tim Sweeney)
-
为人父
-
赛车
-
汽车
-
编程环境配置
-
给初学者的编程语言
-
开源
-
WordPress 的闹剧
-
金钱与幸福
-
希望
正文
引言
Lex Fridman
接下来是与 David Heinemeier Hansen(通常被称为 DHH)的对话。他是编程和科技界的传奇人物,才华横溢、见解深刻,有时也充满争议,但与他交谈总是充满乐趣。他是 Ruby on Rails 的创造者,这是一个极具影响力的 Web 开发框架,支撑着包括 Shopify、GitHub 和 Airbnb 在内的许多拥有数百万用户的网站。他是 37signals 公司的共同所有者和首席技术官,该公司创建了 Basecamp、HEY 和 ONCE。
他与合著者 Jason Fried 共同撰写了四本《纽约时报》畅销书:《Rework》、《Remote》、《Getting Real》和《It Doesn’t Have To Be Crazy At Work》。除此之外,他还是一名赛车手,曾在传奇的勒芒 24 小时耐力赛中获得组别冠军。这里是 Lex Fridman 播客。为了支持本节目,请查看描述中的赞助商并考虑订阅本频道。现在,亲爱的朋友们,让我们欢迎 DHH。
编程
Lex Fridman
对于一个后来成为传奇程序员的人来说,你正式接触编程的时间算是比较晚的。我想这是因为你曾几次尝试学习编程都失败了。所以,你能给我讲讲你学习编程失败的完整传奇经历吗?这其中有 Commodore 64 的影子吗?
DHH
Commodore 64 是我的启蒙。我非常想要一台 Commodore 64,那是我第一次接触到的电脑。当时我五岁,我住的那条街上只有一个孩子有 Commodore 64。其他人都没有电脑,所以我们所有孩子都跑到他家去玩《功夫小子》(Yie Ar Kung-Fu)。我不知道你是否见过那款游戏,它是最早的格斗游戏之一。那是一款非常棒的游戏,我五岁时第一次玩,当时大概有七个孩子挤在那个孩子的卧室里,轮流玩游戏。我发现那东西简直有趣得不可思议。我不断地恳求我爸爸:“我能有台电脑吗?”终于有一天他回家说:“我给你买了台电脑。”我当时心想,太棒了,我自己的 Commodore 64。结果他拿出了一台黑、绿、蓝相间的键盘,是 Amstrad 464。我当时就说:“爸爸,这是什么?”
Lex Fridman
太失望了。
DHH
这不是 Commodore 64。但它终究是一台电脑。所以我在六岁时拥有了我的第一台电脑,那台 Amstrad 464。当然,我最想做的第一件事就是玩电子游戏。我记得那台电脑是他用一台电视和一台立体声录音机换来的,附带了两款游戏。一款是《青蛙过河》(Frogger) 类的游戏,你要从地下逃出来,其实有点黑暗,你控制着一只青蛙,试图让它从地下出来。我玩得很差。我只有那两款游戏,然后我就想要更多的游戏。对于一个没什么钱、买不起很多游戏的小孩来说,一个获得更多游戏的方法就是自己把它们敲进去。在 84、85 年那会儿,杂志真的会在后面刊登源代码,你就可以坐下来把它敲进去。
我试着那么做,把一个游戏敲进 Amstrad 大概要花两个小时,而且我肯定会犯一些拼写错误,导致某些地方无法运行……我的英语也不是很好,我是在丹麦出生的。所以我真的很努力想入门,因为我想要所有那些游戏,但我没钱买。我努力了很长一段时间,但就是没能入门。然后我发现了盗版的魔力,之后我基本上就暂停了学习编程,因为突然之间我能玩到各种各样的游戏了。所以那是第一次尝试,大概在六七岁的时候。有趣的是,我记得一些片段。我记得当时不理解变量的用途。
如果有一个东西,你给它赋了值,为什么还要给它赋另一个值呢?出于某种原因,我能理解常量 (constants),常量对我来说很有意义,但变量 (variables) 就不行。然后大概在我 11 到 12 岁的时候,我接触到了 Amiga。顺便说一句,Amiga 可能至今仍是我心中最喜欢的电脑。你知道,就像人老了会说,“哦,80 年代的音乐太棒了。”对我来说,即便作为一个热爱电脑和新电脑的人,Amiga 也是一台神奇的机器,它和 Commodore 64 是同一家公司生产的。我大概在 87 年得到了 Amiga 500。
Lex Fridman
看看这性感的东西。这真是一台性感的机器。
DHH
顺便说一句,那是一个计算还不像现在这样全球化的时代,不同地区流行的电脑也不同。Amiga 在欧洲非常流行,但据我所知,在美国根本不流行。它在日本也不流行。当时有各种不同的机器。Apple II 在美国很火。80 年代在哥本哈根,我甚至都没听说过苹果。但 Amiga 500 是那台让我再次想尝试编程的机器。有趣的是,我之所以想再试一次,是因为我记得第一次尝试学习时,有一种编程语言名字就叫 EasyAMOS,就像是 AMOS 的简单版。我想,既然叫 EasyAMOS,能有多难呢?我肯定能搞定。
这次我更努力了。我学了条件语句、循环和各种东西,但还是不行。在第二次尝试时,我真的开始觉得,也许我不够聪明。也许是数学太多了。我只是肤浅地喜欢数学,不像我那些可能更 nerdy 的朋友那样深入地喜欢,我非常尊敬他们,但我不是那种人。我不是那种能把所有问题都解决的数学迷。所以在用 EasyAMOS 尝试并失败后,我甚至觉得我连一个最基本的游戏都没完成。我想,编程可能不适合我。我得做点别的。我仍然喜欢电脑,仍然喜欢电子游戏。
实际上,在那个时候,我已经开始和一些会编程的朋友交往了,他们甚至都不是用 EasyAMOS 编程,他们用的是该死的汇编语言。我坐下来看,那些 move、memory、copy 指令,你们是怎么做到的?我甚至不明白你们是怎么从这些指令做出 Amiga 的演示程序 (demos) 的。那是 Amiga 上的大热门。它在欧洲有一个非常棒的演示场景 (demo scene)。在 Amiga 的历史上,那是一个非常有趣的时期,所有这些程序员大多分布在欧洲各地,他们会参加图形竞赛,你可能会带来一些……
Lex Fridman
就用那台机器?
DHH
就用这台机器。他们会制作一些类似音乐视频的小短片,结合一些 MIDI 音乐和炫酷的图形,而且他们会把所有这些东西都塞进 4K 的空间里。是 4 KB (kilobytes),不是 4K 分辨率。是 4 KB 的内存。我觉得那个圈子太酷了。这显然是在互联网出现之前,甚至在某种程度上是在 BBS(电子公告板系统)出现之前。你要和别人交换你的演示软件,就得用邮寄的方式,寄一张 3.5 英寸的软盘。我完全被那个圈子迷住了,被他们能创造出的东西迷住了,我只想成为其中的一员,尽管我好像没有任何可以贡献的技能。就这样,我开始运营 BBS。
我当时没有学习编程,直到很久以后,快 20 岁的时候才学会。电子公告板系统存在于一个有趣的空间里,它们部分是为演示场景服务的,让所有这些演示团队分发他们惊人的演示程序。同时,它也是一个交易盗版软件的地方。我在 14 岁时,在哥本哈根我那小小的卧室里创办了一个这样的 BBS。当时我用的是 Amiga 4000,我的小房间里接了三条电话线。
Lex Fridman
厉害。
DHH
这很有趣,因为当时我才 14 岁。当我安装第三条电话线时,你得找电话公司的人来安装。来的那个人四处张望,心想这是什么情况?为什么一个 14 岁的孩子要在自己小小的卧室里接三条电话线?这里到底发生了什么?为什么所有这些调制解调器 (modems) 都在闪烁着红黑色的灯,还发出奇怪的声音?
Lex Fridman
你父母知道吗?
DHH
他们既知道又不知道。他们知道我有电话线,也知道我有电脑。我想他们并不真正理解我在交易盗版软件,这既是违法的,也伴随着其他各种事情。
Lex Fridman
哦,我们或许应该说,在欧洲,也许你能评论一下,尤其是在东欧,但在整个欧洲,盗版行为的接受度可能比在美国要高。我不知道,也许这只是我成长环境的原因……
DHH
甚至连那样的对话都没有。我在丹麦长大的过程中,从来没有和任何人谈论过……
Lex Fridman
盗版是错误的。
DHH
……任何人对盗版有任何道德上的疑虑。大家完全接受这个事实:你是个孩子,想玩很多游戏,但又没什么钱。你该怎么办?你就去交换。有些人偶尔也会买游戏。比如,我曾经买过一台世嘉 Master System,还买了一盘游戏,因为那是我能负担得起的。我买的是《冲破火网 II》(After Burner II),不知道你玩过没有。它在世嘉 Master System 上的实现其实很糟糕,但它大概要 600 克朗。
我当时靠送报纸赚钱。我得送一个月报纸才能买得起一盘游戏。我太喜欢电子游戏了,等不了一个月才玩到一盘新游戏。所以盗版就是当时的方式,我也是这样开始运营这个 BBS,成为演示场景和某种程度上盗版场景的一员。后来我也意识到,哦,原来这也能赚钱,这笔钱可以用来买更多的电话线、更多的调制解调器和更多的 Amiga。哦,是的,那是一次演示派对。这些活动太棒了。
Lex Fridman
我看到的是什么?
DHH
是不是很神奇?
Lex Fridman
看那些 CRT 显示器。
DHH
所有这些 CRT 显示器。同样,在我 14 岁的时候,我完全不理解为什么我父母会允许这样。我从丹麦的首都哥本哈根,坐火车去了一个叫 [听不清] 的日德兰半岛小镇,和一群十几岁、二十几岁的家伙一起。我才 14 岁,背着我的 14 英寸 CRT 显示器和电脑去参加派对。那就是当时所谓的“派对”,是当时最大的演示场景派对。就像你在那张照片里看到的一样,成千上万的人排着队,带着他们的电脑,整天编程做演示,来回交换这些东西。
Lex Fridman
那还挺酷的,说实话。虽然有点夸张。
DHH
那简直太酷了,我很怀念那种感觉。互联网在某些方面连接了人们,但那种你和另一个人并肩而坐的连接感,他也有自己的 CRT 显示器,为了到这里,他把它从半个国家外拖过来,这种感觉真的很特别,因为它也是一种创造力的爆发。你不断地在人群中穿梭,周围都是在自己领域非常出色的人,他们非常擅长编程。这很有感染力。这也是我当时感到痛苦的一部分原因,我会想:“天啊,为什么我就是搞不懂呢?为什么我连 EasyAMOS 都搞不定?”这挺令人沮丧的。
Lex Fridman
但你的第三次尝试就成功一些了。
DHH
第三次尝试时,我开始入门了。那时候我开始帮忙为互联网做一些东西。大概是在 95 年或 96 年,我发现了互联网。实际上是在九年级,那是我第一次接触。我去了丹麦的一所大学,九年级时我们有一次校外考察,他们让我们坐在一台电脑前,电脑上装的是 Netscape Navigator,第一版,或者甚至是它的前身。他们还提供了一个文本编辑器,然后对我们这些孩子说:“嘿,在互联网上做点东西吧。”当时只有 HTML,你做的第一件事就是,“哦,我只要输入这个标签再保存,就能让文字闪烁?”那一刻,实际上重新点燃了我学习编程的渴望,因为我获得了一次积极的体验。
我之前所有关于编程的经历都是,我花几个小时输入一些东西,点击运行,然后它就不工作了,弹出一个错误信息,无论是在我六七岁还是十二岁的时候,我都看不懂。而现在,我坐在一台连接着互联网的电脑前,我能让文字闪烁,能让它变大,能把它变成 H1 或 H2。我们就在那里玩了一个半小时,突然间我意识到,“哦,我能为互联网制作东西,德国的人也能访问和看到,而且我不需要征求任何人的许可?”这太酷了。我必须多做这个。于是我进入了互联网领域,开始使用 HTML,我还有那些在演示派对上认识的朋友,我和他们一起创建游戏网站。
我更愿意自己买电子游戏,然后写评测。这是另一种获得新电子游戏的好方法,就是走到某家商店说:“嘿,我是记者。”我当时大概十五岁,他们看着我。“你是记者?”“是的,我能借一些游戏吗?”因为当时游戏已经转移到 PlayStation 和其他平台上了,盗版不像以前那么容易了,至少一开始是这样。所以我去了那里,做了所有这些事,这开启了我的互联网之旅。我开始做这些游戏网站,和程序员一起工作,发现我能做点什么,我可以负责 HTML 部分。
这不完全是编程,但感觉有点像。你在和电脑对话,让它在屏幕上显示文字,你在和半个地球外的人交流。所以这成了我重回编程之路的途径,然后我慢慢地学到了越来越多。我参与的第一个动态网站,是和一个来自演示场景的程序员一起做的,用的是 ASP.NET。当时甚至还不叫 .NET。我们是从那个开始的,然后转向了 PHP。当我接触到 PHP 时,我终于明白了,终于开窍了,条件语句、循环、变量所有这些东西对我来说开始变得足够有意义,以至于我认为,我能做到。
Lex Fridman
所以说,没有 PHP 就没有 DHH,因此你所有的成功都归功于 PHP,这样说公平吗?
DHH
百分之百正确。而且还不止于此,因为 PHP 对我来说,不仅是在制作自己的 Web 应用方面给了我一个起点,它实际上还给了我一个标杆。在很多方面,我认为 Web 开发者人体工程学的巅峰就是 90 年代末的 PHP。你写一个脚本,用 FTP 传到服务器上,它就立刻部署好了,立即可用。你修改文件里的任何东西,刷新一下,马上就看到了。没有 Web 服务器,没有配置。只有一个运行着 mod_php 的 Apache。这基本上是让一个动态网页上线运行最简单的方式了,而这也是我职业生涯余下时间里一直在追寻的那种快感。在 90 年代中后期,为互联网制作东西是如此简单。
我们是如何失去了那种让我们不仅能以这种方式工作,还能吸引新人进入这个行业,给予他们像我当年添加一个闪烁标签到 HTML 页面、或者在对框架、配置一无所知的情况下用 FTP 将一个 PHP 页面上传到 Apache Web 服务器那样的成功体验的呢?所有这些东西真的把我们带到了一个有时感觉几乎没有进步的地方。如今的网页和 90 年代末、2000 年代初的网页并没有太大区别。它们仍然只是表单,仍然只是向数据库写入数据。
我想,很多人对于自己本质上只是 CRUD 猴子(crud monkeys)这一事实感到非常不安。他们构建的系统只是在数据库中创建、读取、更新或删除数据行,他们必须通过过度复杂化来弥补这种存在主义的恐惧。当然,这有点夸张了。事情还有更多层面,你也可以从更复杂的思维方式中学到东西,但这里仍然有一个理想,这也是为什么我很高兴你邀请了 Pieter Levels,因为他基本上仍然是这样工作的。我看着他,心想,天啊,这太神奇了。
Lex Fridman
是啊,你在追寻那种快感,而他一直都沉浸其中。
DHH
是的。
Lex Fridman
用 PHP、jQuery 和 SQLite。
DHH
我觉得这很了不起,因为他证明了这不仅仅是一个怀旧的梦想。他真的在这样做,运营着所有这些业务。当然,正如他会首先承认的,其中一部分原因是他只是一个人。当你只是一个人时,你可以做一些不同的事情。当你开始在一个团队中工作时,当我开始和 Jason Fried 一起开发 Basecamp 时,我们最初并没有一起使用版本控制。
我为自己使用版本控制,然后我想,你知道吗?设计师可能不够聪明,搞不定 CVS,所以我当时就说:“不不不,你直接用 FTP 上传就行了。”他们知道怎么用 FTP。结果在我第三次覆盖了他们的修改之后,我说:“该死的,看来我得教 Jason 用 CVS,免得再发生这种事。”但我认为,我们仍然可以在团队环境中像 90 年代那样工作,像 Pieter 今天那样工作,这个观点有更多的道理。我们太愿意把太多的开发者人体工程学交给那些复杂性的商人了。
JavaScript
Lex Fridman
而且你一直在用 Rails 8 追寻那种感觉。那么,你如何将现代框架的所有酷炫功能整合起来,同时又做到“无构建”(no build),让创造和发布东西变得像 90 年代用 PHP 一样简单?对我来说,要超越 Pieter Levels 那种简单直接的方法非常困难……用 PHP 发布一些东西实在是太容易了。
DHH
就应该这样。为什么会比那更难呢?我们今天的电脑比 90 年代快了几乎无限倍。所以我们难道不应该能用更简单的方式工作吗?我们应该回顾 90 年代然后说:“哦,那时候太复杂了。现在我们有了更先进、更快的技术,让我们能用这些更简单易用的方式工作。”但事实并非如此。不过现在你可以看到我在 Ruby on Rails 工作中,尤其是在 Rails 8 中划出的那条线。“无构建”(No build) 对我来说,就是回溯到 90 年代的感觉,然后说,现在我们可以做一些那样的事情,而不用放弃所有的进步。因为我确实认为人会变得过于怀旧,会开始幻想 90 年代的一切都更好。事实并非如此。
我经历过那个时代,有很多糟糕的事情。如果我们能设法将过去 20 年的优势和进步与那种简单的开发者人体工程学结合起来,我们就能赢。“无构建”是对过去 10 到 15 年 Web 开发中我最讨厌的部分——也就是 JavaScript 生态——的一种拒绝。我这么说并不是因为我讨厌 JavaScript。我经常开玩笑说 JavaScript 是我第二喜欢的编程语言。虽然是遥远的第二名,Ruby 遥遥领先是第一名,但我其实喜欢 JavaScript。我不认为它是一门糟糕的语言。它受到了很多抨击。人们把字符串 "2" 和 "1" 相加,得到了一个无厘头的结果,我就会想,是啊,但你为什么要那么做呢?别那么做就行了。这门语言其实很可爱,尤其是现代版本。
ES6 真正为它引入了合适的类语法,所以我可以用许多与我喜爱的 Ruby 相似的方式来使用 JavaScript。这让事情变得好多了。但在 2010 年代初直到不久前,所有的进步都发生在预处理和构建管道中。浏览器无法理解一种令人愉快的 JavaScript 方言,所以每个人都开始预编译他们的 JavaScript,以便能够在一个被认为停留在古老 JavaScript 版本的浏览器上使用更现代的编程方式,而那个版本没人真正想用。这对我来说有道理,但过程也深感不快。我记得在那个时期,也就是我所说的 JavaScript 的黑暗时代,我心想,这不可能是最终的目的地。我们不可能把互联网变成一个如此不愉快的工作场所,以至于我开始用 Webpack 和所有这些依赖项来开发一个 JavaScript 项目,放下它仅仅五分钟,它就无法再编译了。
在 2010 年到 2020 年的十年间,JavaScript 社区,尤其是其框架和工具链,所经历的变动量是荒谬的。你必须被困在那个疯人院里,才能不意识到我们陷入了一个何等荒谬的境地。为什么所有东西总是坏掉?我的意思是,不仅仅是软件会坏掉,这会让我个人感到烦恼。然后我会上 Hacker News,看到某个关于最新 JavaScript 框架发布的帖子,帖子里会有人问:“我们不是还在用三个月前的东西吗?”然后人们会说:“那东西太老土了。那是三个月前的事了。你得跟上新潮流,我们正在为了[听不清]次完全重写所有东西,你在上一个框架上学到的任何东西都毫无用处。你得把所有东西都扔掉,重新开始。你为什么还不这么做,你这个蠢货?”
Lex Fridman
你认为那是一种席卷了开发者社区的群体性歇斯底里吗?就是你必须不断创造新的框架,然后又创造新的框架,我们现在走出那个黑暗时代了吗?
DHH
我想我们正在走出来,我们能走出来是因为浏览器变得好太多了。浏览器技术曾一度停滞不前。其中一些是 IE5 遗留下来的问题。IE5 基本上把整个互联网开发体验带入了一个深度冰冻期,因为微软在 21 世纪中期赢得了浏览器战争,然后他们基本上解散了他们的浏览器开发团队,因为他们觉得:“好了,任务完成了,我们不需要在互联网上再有任何创新了。既然我们控制了一切,我们能不能回去写 Windows Forms 之类的东西?”直到 Firefox 燃起了一点星星之火,然后 Chrome 进入市场,谷歌开始认真推动 Web 向前发展,你才看到一丝希望,也许浏览器可以变得更好。也许浏览器并没有停留在 2005 年的时间里。也许浏览器可以像它本身就是一个开发平台那样不断进化。但后来发生的是,大量聪明的人涌入了 Web 领域,因为 Web 最终成为了有史以来最伟大的应用开发平台。这里是所有财富被创造的地方,所有亿万富翁诞生的地方。Facebook 等公司就是在这里崛起的。所以有这么多智慧投入到如何使用 Web 的问题上,其中一些非常聪明的人,带着一些我确信很好的想法,但他们的首要动机并不是程序员的幸福感。他们有其他的优先事项,而这些优先事项让他们忽视甚至合理化了他们到处注入的复杂性。其中一些复杂性来自于组织结构。当你有一个像 Facebook 这样的公司,它依赖于 Web 并希望推动其发展,但却把开发岗位切分成了这些微小的细分领域……“我是一个前端 glob 管道配置员。”
“哦,是吗,我是一个前端 XXX 工程师。”突然之间,Web 开发者不再是一个人,而是 15 个不同的角色。这本身就注入了大量的复杂性。但我也想为这种复杂性辩护,那就是其中一些复杂性是达到我们今天这个地步所必需的,这种复杂性是一座桥梁。它不是目的地,但我们必须跨过这座桥才能到达今天,浏览器已经变得非常不可思议。你现在可以在一个文本文件中编写 JavaScript,然后把它放到一个 Web 服务器上供浏览器读取,这种体验太棒了。这实际上是一种非常好的体验。你不需要任何预处理。你可以直接写文本文件,发送给浏览器,就能获得一个令人难以置信的开发……
Lex Fridman
我们还应该说,它在某种程度上可以被破坏,至少 HTML 是这样,甚至 JavaScript 也可以有点问题,但它还是能用。也许是勉强能用,但浏览器需要处理的那些杂乱、糟糕的代码量简直是疯了。
DHH
这是当今计算领域最棘手的问题之一,就是解析整个互联网。因为,对我们 Web 开发者来说是幸运的,但对浏览器开发者来说可能就不是了,除了 Flash 短暂流行过的那段时间,所有曾经创建的网页至今仍然可以运行。我在九年级做的那个网页,30 年后的今天,仍然可以在现代浏览器上渲染出来。
Lex Fridman
那太疯狂了。
DHH
当你想到 Web 已经经历了多少演变,我们把它变得多么好,浏览器采纳了多少新标准,这简直是完全疯狂的。今天,要创建一个新的浏览器,基本上相当于一个阿波罗计划,这就是为什么这种事不常发生,这也是为什么即使像微软这样的公司也不得不认输,说:“我们做不到。”现在,我其实不认为这对 Web 是好事。如果我们只有一个浏览器引擎来运行所有东西,就会有单一文化的危险,我们正处于这种危险之中。我很高兴 Ladybird 项目正在尝试从头开始制作一个新的浏览器引擎。我支持那个项目,也鼓励大家去了解一下。这真是一件很棒的事情。它由一群曾在其他浏览器项目工作过的人员组成。
Lex Fridman
一个真正独立的 Web 浏览器。
DHH
我们真的需要这个。但我可以同时持有这个想法,也持有另一个想法,那就是谷歌 Chrome 对于 Web 作为首要的 Web 开发平台能够存活下来至关重要。如果不是谷歌以及他们整个业务都依赖于一个繁荣开放的 Web,我想苹果和微软会很乐意看到 Web 消失,变成只是为他们完全控制的原生移动应用和原生桌面应用服务的东西。所以,我对谷歌有很多意见,但 Chrome 不在其中。Chrome 对全世界的 Web 开发者、对 Web 这个开发平台来说,完全是一份礼物,我认为他们为此应获得巨大的赞誉。即使这与他们的商业模式纠缠不清,Chrome 中有一半的代码是在监视你或为定向广告服务,以及一些我并不喜欢的其他东西,我也可以将这一点与这样一个事实分开来看:我们需要在 Web 的阵营里有这样的拥护者,他们的市值有数万亿美元是建立在开放 Web 之上的。
谷歌 Chrome 与美国司法部
Lex Fridman
我们要在一个接一个的岔路上越走越远了。所以我们来谈谈 Chrome。我认为 Chrome 对人类的积极影响是无法估量的,原因就是你刚才描述的那些。在技术方面,它所带来的功能和它创造的竞争,激发了 Web 技术的蓬勃发展。但无论如何,我必须问你关于最近美国司法部 (DOJ) 试图拆分 Chrome 和谷歌的事情。你认为这是个好主意吗?你觉得这会造成伤害吗?
DHH
这是一场灾难。我这么说,是作为一个一直对反垄断斗争抱有同情态度的人,因为我确实认为我们在技术领域存在反垄断问题,但基本上,我们在浏览器领域,在我们用来访问开放网络的工具上,并不存在这些问题。首先,我们有 Firefox。现在,Firefox 的表现不是很好,而且多年来一直由谷歌支持,以避免现在司法部正在发生的事情,即他们是市场上唯一的玩家。苹果有 Safari。我对苹果也有一堆意见,但我喜欢 Safari。我喜欢这样一个事实:我们有一个运行在顶级操作系统上的顶级浏览器,人们无法将网络变成纯粹的 Chrome 体验。但我也认为,开放网络需要这个万亿美元级别的拥护者,或者至少能从中受益。
也许它不是必需的,但肯定能从中受益。在技术领域所有关于垄断形成的问题中,Chrome 是最不应该被关注的,这也是为什么我有时对反垄断斗争感到如此沮丧,因为存在真正的问题,我们应该首先关注最重要的问题,比如我们手机上的收费站。有比这大得多的问题。问题不在于开放网络,也不在于我们用来访问开放网络的工具。如果我不想用 Chrome,如果我的企业客户不想用 Chrome,他们不必用。我们从来没有被强迫使用它。开放的互联网仍然是开放的。所以,我认为司法部选择以这种方式追究谷歌,实在是一件憾事。我确实认为还有其他事情可以追究谷歌,比如他们的广告垄断,或者他们在控制广告供需两端所做的手脚。
这些是问题。Chrome 不是问题。而你最终会让网络变得更糟。这是我们在考虑立法、考虑反垄断斗争时必须永远记住的事情:你可能不喜欢今天的样子,你可能想做点什么,但你也可能让事情变得更糟。欧洲 GDPR 背后的良好意图,目前带来了什么?带来了全网人人都讨厌的 Cookie 横幅,它对任何人都没有任何帮助,没有提高任何效率,没有以任何方式保护隐私,完全是一个浪费时间和金钱的项目,只让律师、会计师和官僚们发了财。
Lex Fridman
是啊,你说过 Cookie 横幅是欧洲在科技领域表现最差的纪念碑。
DHH
它是善意直通地狱的纪念碑,而欧洲在善意直通地狱这方面是世界级的。
Lex Fridman
所以地狱就是那个“接受所有 Cookie”的按钮,你必须接受所有 Cookie。地狱就是那个样子。一遍又一遍,你永远也到不了那个网页……
DHH
只是在一个……
Lex Fridman
……一遍又一遍。你永远也到不了那个网页。
DHH
从人的角度来看,试着想象一下每天有多少小时浪费在点击那个按钮上,我们又因为它们对网络这个人们喜爱的平台造成了多大的伤害。互联网变得丑陋,部分原因就是 Cookie 横幅。Cookie 横幅本应把我们从广告中拯救出来,而广告确实能让网络变得丑陋。这方面的例子很多,但 Cookie 横幅一下子就让整个互联网变得丑陋,这完全是一场悲剧。但更糟糕的是,这也是为什么我称它为欧盟所有错误做法的纪念碑,那就是我们知道这一点已经有十年了。任何一个严肃的人都不会相信 Cookie 横幅对任何人有任何好处,但我们却无法摆脱它。
有一项立法,现在我想已经有 10 或 12 年了。它在任何可以想象的指标上都是彻底的失败。所有人都普遍讨厌它,但我们似乎对此无能为力。对于任何一个声称或意图为不仅是公民,而且是全世界人民改善事物的官僚机构来说,这都是一份破产声明。关于 Cookie 横幅,真正让我恼火的也是这一点。这不仅仅是欧盟的问题,而是全世界的问题。在这个星球上,你无处可躲。就算你坐着埃隆的火箭去了该死的火星,试图访问一个网页,你还是会看到 Cookie 横幅。宇宙中没有人能幸免于这种无稽之谈。
Lex Fridman
可能火箭上的界面也是。
DHH
那会更慢。你基本上有 150 秒的 ping 延迟,所以从火星上光是通过 Cookie 横幅就要花 45 秒。
Lex Fridman
好吧,让我们回到我们一直在进行的这个递归式岔路的话题栈上。所以 Chrome,我们应该说,至少在我看来,它的胜利不是不公平的。它是通过做得更好而公平获胜的。
DHH
是的。如果我只是为另一方辩护半秒钟,人们会说,嗯,也许是的,大多数人都有点不情愿地承认 Chrome 是一个相当不错的浏览器。但他们会说,它之所以能占据主导地位,是因为分发渠道,而它能获得分发渠道是因为谷歌也控制着 Android,因此可以把 Chrome 设为所有这些手机上的默认浏览器。
现在,我不买这个账,我不买账的原因是,在 Android 上,你实际上是允许搭载一个不同于 Chrome 的浏览器引擎的浏览器的。而不像在 iOS 上,如果你想发布一个浏览器,比如 Chrome for iOS,它其实不是 Chrome,而是披着 Chrome 外衣的 Safari,iOS 上的每一个替代浏览器都必须使用 Safari 的 Web 引擎。那不是竞争。那不是在 Android 上发生的事情。
再说一次,我认为这里面有一些细微的差别,但如果你放大视野,看看我们在大型科技公司方面遇到的所有问题,Chrome 并不在其中。Chrome 是靠实力取胜的。我最终也勉强地转用了 Chrome,仅仅是基于这个认识。作为一名 Web 开发者,我就是更喜欢它。我在很多方面都喜欢 Firefox,我喜欢它的精神,但 Chrome 就是比 Firefox 更好的浏览器,句号。
Lex Fridman
顺便说一句,我们从来没提过 Edge。Edge 也是一个不错的浏览器。
DHH
因为它也是披着外衣的 Chrome。
Lex Fridman
但它从来没有得到过应有的喜爱。我想我从来没用过必应 (Bing),但我肯定必应也很好。
DHH
也许你用过,因为你知道什么东西是披着必应外衣的吗?
Lex Fridman
什么?
DHH
DuckDuckGo。
Lex Fridman
什么?
DHH
这其实是我用的搜索引擎。DuckDuckGo 的搜索结果来自必应,或者至少以前是。如果他们改了,那对我来说就是新闻了。
Lex Fridman
嗯,也许所有东西都只是一层包装或者一件外衣。所有东西下面都穿着另一件衣服。还有其他的乌龟……
DHH
确实有那么点意思。
Ruby 编程语言
Lex Fridman
乌龟,那件衣服一直穿到底。好吧,我们刚才在谈什么?我们是从 JavaScript 和你学习编程的经历聊到这里的。所以最终,当你用 PHP 做了很多东西并真正开始交付产品时,你获得了巨大的成功。
DHH
是的。
Lex Fridman
然后 Ruby 的故事就开始了。你对编程的热爱就从那里开始了。所以,你能带我回到那个时候吗?Ruby 是什么?给我讲讲 Ruby 的故事。给我解释一下 Ruby。
DHH
PHP 是那个把我从一个只会摆弄 HTML、做几个网页的人,转变成一个能够自己制作 Web 应用程序的人的语言。所以,在这方面我非常感谢 PHP。但我从未把 PHP 看作是一种使命。我不是那种会说:“我是一个写 PHP 的专业程序员,这就是我的身份,这就是我做的事。”我把 PHP 看作是我需要用来敲打电脑,直到它产出我想要的 Web 应用程序的工具。它很大程度上是达到目的的手段。我没有爱上 PHP。我很感激它教会了我编程的基础,也很感激它为我设定了人体工程学的标准。但直到接触了 Ruby,我才开始把自己看作一个程序员。事情是这样的,我第一次作为专业程序员被雇佣来写代码,实际上是 Jason Fried,他现在仍然是我的商业伙伴。
那是在 2001 年,当时我已经用 PHP 做了大约 18 个月的游戏网站。在那方面,还没有人付钱让我写代码。我通过一封从丹麦哥本哈根发往伊利诺伊州芝加哥的邮件联系上了 Jason Fried,而他当时并不知道我是谁。我只是主动提供了建议。Jason 在网上问了一个问题,我发给了他答案,他问的是 PHP,我给了他那个问题的答案,然后我们开始交谈,接着就开始合作了。顺便说一句,这是互联网所能带来的奇迹。一个在哥本哈根的孩子,怎么能和一个在芝加哥从未谋面的人,仅仅通过邮件就联系上并开始合作?顺便说一句,我们现在,24 年后,仍然在合作。这太不可思议了。但我们开始合作,开始做一些客户项目。
Jason 负责设计,37signals 负责设计,我负责编程,用的是 PHP。在我们用 PHP 合作了大概两三个客户项目后,我们总是遇到同一个问题:当你和客户合作时,项目总是从一封邮件开始,“哦,好的,我们合作吧。这是我们要做的东西。”然后你们开始交换越来越多的邮件,几周过去后,你需要把新人加到项目里。他们没有之前的邮件,没有上下文。你发给他们,“最新的文件在哪?”“哦,我上传到 FTP 上了,文件名是‘最终版_最终版_V06_2.0’。”对吧?就是那个。这简直是一团糟,虽然在某些方面也是一种美丽的混乱。至今,绝大多数项目仍然是这样运行的。电子邮件是最低的共同标准,这很棒。
但我们有几次在客户面前犯了严重的错误,我们觉得我们可以做得更好。我们知道如何制作 Web 应用。我们难道不能做一个比电子邮件更好的项目管理系统吗?应该不会那么难吧。我们做过博客,做过待办事项列表。让我们把这些东西组合起来,做一个系统,让所有参与项目的人需要的一切都在一个页面上。而且它必须足够简单,我不需要办个研讨会来教你怎么用这个系统。我只要给你登录信息,你就能直接上手。那就是 Basecamp。当我们开始开发 Basecamp 时,我第一次在和 Jason 的合作中拥有了技术选择的自由。没有客户告诉我:“嗯,PHP 听起来不错。我们懂 PHP。你能用 PHP 来做吗?”
我有了完全的自由。那时我一直在读《IEEE Magazine》和其他一些 2000 年代初的杂志,Dave Thomas 和 Martin Fowler 一直在上面写关于编程模式和如何写出更好代码的文章。这两位尤其都用 Ruby 来解释他们的概念,因为 Ruby 看起来就像伪代码。无论你是用 C、Java 还是 PHP 编程,这三类人都能看懂 Ruby,因为它基本上读起来就像英语。所以他们用 Ruby 来描述概念,我首先会为了他们解释的概念去读这些文章,然后我会想:“这是什么编程语言?”我的意思是,我喜欢你解释的概念,但我也想看看这门编程语言。我怎么没听说过这个?
所以我开始研究 Ruby,我意识到在那个时候,Ruby 可能还不为人知,但它实际上已经存在了很长时间。Ruby 的日本创造者 Matz 早在 93 年就开始研究 Ruby 了,那时互联网甚至还没出现。而我是在 2003 年,十年后,发现了这个似乎被埋没在默默无闻中的隐藏瑰宝。但 Dave Thomas 和 Martin Fowler,我认为他们成功地让我和少数其他人走上了一条探索一门在西方使用不多但潜力巨大的编程语言的道路。所以我接触了 Ruby,心想,这很不一样。首先,分号都去哪儿了?我一直在用 PHP、ASP 编程,甚至还做过一些 Pascal,看过一些 C。到处都是分号。
这是第一件让我震惊的事情,那些该死的分号去哪儿了?我开始思考,其实,我们为什么在编程中有分号?它们是用来告诉解释器这是一条新的指令行,但我作为人类并不需要它们。哦,有人在这里是为人类着想,而不是为机器。这真的让我产生了兴趣。然后我对自己说,你知道吗?我 PHP 挺熟的。我不是一个了不起的程序员,我从事编程的时间也不长,但也许我能搞定。我给自己两周时间。我要写一个概念验证,和数据库对话,取出一些记录,稍微格式化一下,然后在一个 HTML 页面上显示出来。我能在几周内搞定这个吗?结果大概只用了一个周末,我完全被迷住了。我完全被震撼了,因为 Ruby 就像是为我的大脑量身定做的手套,而且是一个我素未谋面的人做的。这怎么可能?
优美的代码
Lex Fridman
我们或许应该描绘一下 Ruby 所具备的某些特质,甚至可以和 PHP 比较一下。我们还应该提到,PHP 里有一个我习以为常却又很荒谬的东西,那就是到处都是美元符号。
DHH
是的。
Lex Fridman
PHP。我的意思是……
DHH
是的,那是行噪声 (line noise)。
Lex Fridman
行噪声。
DHH
我喜欢这么叫它。
Lex Fridman
行噪声。行噪声。这个词太美了。所以有很多看起来像程序的东西,而用 Ruby,虽然和 Python 有些相似之处,它看起来就像自然语言。你可以正常地阅读它。
DHH
这是一个可以循环五次的 while 循环。你可以直接输入数字 5,然后一个点,现在我正在调用数字 5 上的一个方法。顺便说一句,这是 Ruby 最美的方面之一,像整数这样的基本类型也是对象,你可以调用 5.times,然后加上括号。现在你就在括号里的代码上迭代了五次。就是这样。
Lex Fridman
哦,那不错。
DHH
这不仅仅是不错,这是卓越。据我所知,没有任何其他编程语言能像这样,将一个五次迭代的代码块中几乎所有其他编程语言都会注入的行噪声给剔除掉。
Lex Fridman
哇。这真是个很棒的……嗯,谢谢你举这个例子。这是个很美的例子。哇,我想不出有哪门编程语言能做到这一点。这真的很好。
DHH
Ruby 充满了这样的例子。让我举几个例子,因为我真的认为这有助于描绘出这幅图景,并且让我先声明一下,我其实喜欢 Python 的精神。我认为 Ruby 和 Python 社区有很多相似之处。它们都是动态解释型语言,都专注于即时性、生产力和易用性等多个方面,但它们在许多其他方面又非常不同。其中一个很大的不同之处在于审美。
对我来说,Python……我希望不要太冒犯人,我以前也说过,它就是丑。它的丑陋是根源性的,因为它充满了多余的指令,这些指令是 Guido 在 87 年创造 Python 时的历史遗留问题,到了 2025 年还在这里,我的大脑无法接受。让我举个基本的例子。当你在 Python 中创建一个类时,初始化方法,也就是起始方法,是 def,好的,这和 Ruby 一样。D-E-F 是方法的定义。然后是 __init__,不是一个下划线,是两个,然后是 __,括号开始,self,逗号,然后是第一个参数。
Lex Fridman
是啊,那个 self 的东西。是的。
DHH
我看着这个就想,“对不起,我受不了了。我做不到。”它的每一个方面都从根本上冒犯了我的审美。所有新对象或类都必须实现的最重要的方法,居然是我见过的最不美观的 initialize 写法之一,而你们居然能接受?
Lex Fridman
嘿,你搞得我……你知道吗,你这像是在谈论我的婚姻,而我一直没意识到自己处在一段有毒的关系中。我已经习惯了。
DHH
对我来说,顺便说一句,那正是 Ruby 的魔力所在。
Lex Fridman
问题就在这。
DHH
它让我看到了程序可以有多美。我以前不知道。我一直在用 ASP,一直在用 PHP。我甚至没有“美学”、“优美的代码”是可以优化的东西这个概念。我们可以追求它,甚至可以把它置于其他目标之上。Ruby 之所以如此优美,不是偶然,也不容易。Ruby 本身是用 C 实现的。解析 Ruby 代码非常困难,因为 Ruby 是为人类编写的,而人类是复杂的生物。他们喜欢事情恰到好处。我无法完全解释为什么 __init__ 让我反感,但它就是让我反感。而当我看到 Ruby 的替代方案时,就非常有启发性。它也是 def,同样的部分,D-E-F 空格,initialize,括号,如果你不需要在参数中调用它,甚至连括号都没有。
这本身也是一个主要的部分。如果人类不需要额外的字符,我们就不会仅仅因为这样对计算机解析更友好而加上它们。我们要去掉分号,去掉括号,去掉下划线,去掉所有那些丑陋的东西,所有那些行噪声,把它精炼到最纯粹的本质。同时,我们也不做缩写。这也是 Ruby 和 Python 在美学上的一个关键区别。init 打字更短,只有五个字符。initialize 要长得多,但看起来好得多,而且你不会经常打它,所以你应该看一些漂亮的东西。如果你不必一直做这件事,那么长一点也无妨。
这类审美评估在 Ruby 语言中随处可见。但让我给你一个更好的例子。if 条件语句,这是所有编程语言的基石。它们都有 if 条件语句。如果你看大多数编程语言,它们会有 if,这在几乎所有语言中都基本相同,空格,左括号,我们都这么做。然后你可能会有,比如说,你在调用一个叫 user 的对象的 is_admin 方法,右括号,右括号,左花括号,然后是如果用户是管理员我们要做的事情,对吧?那是一种常规的编程语言。Ruby 不这么做。Ruby 几乎把所有这些都精简掉了。我们从 if 开始。好的,那是一样的,不需要括号,因为对人类来说没有歧义来区分下一部分只是一个单一的语句。所以你写 if 空格 user.admin?,没有左花括号,没有括号,什么都没有。下一行,就是你的条件语句。
那个问号对电脑来说没有任何意义,但对人类来说有意义。Ruby 引入这种谓词方法风格,纯粹是作为人类之间的一种交流工具。实际上,解释器要能看到这个问号,需要做更多的工作。为什么这里会有这个问号?因为它读起来太舒服了。if user.admin?,这是一个非常人性化的短语,但还有更好的。你可以把这个反过来。你可以把要执行的语句放在条件语句之前。你可以写 user.upgrade,比如说你在调用一个用户的升级方法,空格,if,空格,user.admin?。我们做这件事,如果那件事是真的,而不是说如果那件事是真的,就做这件事。但还有更好的。这就是为什么我喜欢这个条件语句的例子,因为你可以不断深入。让我们把它反过来。user.downgrade if !user.admin,这是一种典型的写法。Ruby 认为那个感叹号是行噪声。为什么我们有 if 然后又有一个感叹号,这太丑了?我们可以写 user.downgrade unless user.admin?。
Lex Fridman
那太棒了。
DHH
对我来说,这 encapsulates (封装) 了 Ruby 通过一种只为服务于人类读者和作者的模糊性所带来的不可思议的美。我们刚刚讨论的所有这些语句,对电脑来说都是一样的。它会编译成相同的 C 代码,编译成相同的汇编代码。没有任何区别。事实上,这只会让编写解释器变得更难。但对于能够选择语句在条件语句之前还是谓词方法在之后的人类来说,这简直太不可思议了。它有时读起来就像诗歌。
Lex Fridman
同样不可思议的是,一个语言设计者创造了这一切。Guido van Rossum 也是。就像一个人要做这些极其困难的决定,因为你必须考虑所有这些如何被解析,你必须考虑成千上万,如果是一种流行语言,那就是数百万使用它的人,以及他们的感受,那个 if 语句的问号对用户来说感觉如何。
DHH
Matz 就是这么想的,因为他开始他的整个使命就基于一个与我听过的几乎所有编程语言设计者所阐述的愿景都不同的前提,那就是他的首要目标是程序员的幸福感。他的首要目标是提供一种便利,让程序员不仅能正确地执行代码,还能在编写和阅读代码时感到愉悦。这个愿景是基于一种对人性根本不同的看法。Matz 和 Java 的设计者 James Gosling 之间形成了鲜明的对比。我想听 James 谈论 Java 的设计。为什么它是那样的?为什么它如此僵硬?他非常直白地回答了,顺便说一句,我真的很欣赏这一点,而且我认为 Gosling 在 Java 上做得非常出色,但他对人性的看法相当黑暗。
他的人性观是,程序员平均来说是愚蠢的生物。他们不能被信任使用复杂的编程语言,因为他们会搬起石头砸自己的脚或手。而对于一家中等保险公司的区域开发办公室来说,编写需要持续 20 年的代码,这会有点不方便。现在,这实际上是一种非常 Thomas Sowell 式的关于人类能力有限的观点,我在晚年才开始欣赏。但这也是一种对程序员非常令人沮丧的看法,即有些程序员就是太笨了,无法欣赏代码的诗意。他们太无知了,学不会如何写好它。我们需要给他们一个沙盒,让他们在里面不会伤到自己太多。
Matz 走了完全相反的道路。他相信人性,相信程序员有无限的学习和进步的能力,以至于他愿意把陌生人放在与自己同等的水平上。这是我真正欣赏 Ruby 的第二部分。Ruby 允许你扩展基类。你知道我们刚才谈到 5.times 是一种迭代语句五次的方式。那个 5 显然是一个基类,一个数字。你知道吗?你可以在上面添加自己的方法。我大量地这么做了。在 Rails 中,我们有一个叫做 Active Support 的东西,它基本上是我用来编程 Web 应用的 Ruby 方言。我给你举个例子。我给数字添加了一个叫做 days 的方法。所以如果你写 5.days,你就会得到五天的秒数,因为秒数是我们设置缓存过期时间等东西的方式。所以你可以说缓存 expires in 5.days,然后你就会得到……
Lex Fridman
那不错。
DHH
……五乘以 24 乘以 60 乘以 60 的结果,或者不管数学是怎么算的,对吧?非常人性化可读。在一种常规的编程语言中,你会写出秒数,然后在上面加一行小注释说“这代表五天”。在 Ruby 中,你可以写 5.days。但更棒的是,Matz 并没有想出这个。Matz 不需要 5.days。我需要,因为我需要让缓存过期。Matz 允许我用我自己的章节来扩展他的故事,而且是平等的地位,以至于一个 Ruby 读者无法区分 Matz 写的代码和我写的代码。
他信任我这个来自丹麦、他素未谋面的陌生人,去摆弄他美丽的故事。这种信任程度基本上是闻所未闻的。我知道有其他编程语言允许用宏 (macros) 等方式做类似的事情,但没有一个能像 Ruby 那样。没有一个能像 Matz 那样,带着对人性的明确愿景和信任来做这件事。这与 Java 的理念是完全对立的。
Lex Fridman
是的,从我的审美角度来说,你描述 5.days 的方式对我来说真的非常愉快。我可以想象自己一个人,睡眠不足,就写着那个。这很简单。你可以用带注释的长方式写,可以写多行,你可以……现在有了 AI,我肯定它能正确生成,但那种简单中有一种非常愉快的东西。我不确定那是什么,但你说得对。那里有一种美好的感觉。我想我们还会从各种哲学角度谈论幸福,但那正是幸福的组成部分。那一点点美好的感觉。
DHH
没错。这就是将一个概念压缩到其纯粹本质时产生的美好感觉。你无法从那个语句中拿走任何多余的东西。
Lex Fridman
但是,我也想稍微反驳一下,因为这不……因为我也写过很多 Perl,只是为了装酷。所以这不完全是关于压缩。
DHH
不,你可以压缩得太过分。Perl golf 就是一种把程序变成人类无法阅读的东西。Perl 的伟大之处在于它比 Ruby 更早出现。Matz 是 Wall 的好学生,是 Perl 的好学生,是 Python、Smalltalk 和 Lisp 的好学生。他从所有这些先前创造优秀编程语言的尝试中汲取灵感,并真正地将最好的部分编辑整理出来。所以他能够从教训中学习。但我发现 Ruby 的不可思议之处在于,现在是 2025 年,Ruby 已经被开发了 30 多年,而基本上最初的草稿仍然是我们现在使用的 90%。
无论 Matz 在哪里写下 Ruby 的初始版本,那里似乎都有一种神圣的灵感,它超越了时间,以至于至今无人能及。这是我总是觉得很有趣的另一件事。我普遍相信有效市场理论,即如果有人想出了更好的捕鼠器或更好的主意,其他人最终会模仿他们,以至于原来的捕鼠器可能甚至不再被记住。但没有人能够复制 Ruby 的那种精髓。他们借鉴了一些元素,这完全没问题,但 Ruby 在这些指标上,在这种对人性和程序员的信任上,仍然比其他所有人都高出一筹。
Lex Fridman
我们还应该说,完美的编程语言也许是那个指标,但成功的语言又是另一回事,这两者往往不同。Brendan Eich 创造 JavaScript 的故事有一种奇妙之处。JavaScript 征服世界的方式有一种真正的美感。我最近有机会去亚马逊丛林,我最喜欢做的事情之一就是看着蚂蚁占领任何东西,所有东西。那就像一个很好的分布式系统。它很混乱,看起来没有秩序,但它就是能工作,以及它的运行机制。
DHH
“差即是好”(Worse is Better)。这实际上是软件开发和其他领域的一种模式的名称,也是 Linux 的模式。Linux 在当时质量上明显比 Minix 要差,后者更像是大教堂式的,而不是那种奇怪的集市式的,但它仍然赢了。这其中有某种东西,不完美有时能帮助事物前进。这实际上是我研究过的一个技巧,以至于我现在几乎在我所有的开源项目中都采用了它。我确保在我发布任何新东西的第一个版本时,它都有点问题。
Lex Fridman
是啊,那太棒了。
DHH
但 Ruby 在某种程度上,或者至少曾经是,有点不同。并非在所有方面。Matz 对语言的精神和设计把握得恰到好处。但 Ruby 的最初几个版本非常慢。Ruby 能既美观又高效且快速,是花了数百年的人力年才达到的。
元编程 (Metaprogramming)
Lex Fridman
我们应该说,让你爱上这门特别的编程语言的东西是元编程 (Metaprogramming)。
DHH
是的。那将我们刚才谈到的所有元素都提升到了一个全新的高度。我来简单解释一下元编程。
Lex Fridman
好的,请讲。
DHH
元编程本质上是 5.days 的一个版本。你可以在语言中添加关键词。Active Record 是 Rails 中与数据库通信的部分。这是一个系统,其中数据库中的每个表都由一个类来表示。所以,如果我们再次以用户为例,你写 class User < ActiveRecord::Base,然后你可以写的第一行是这个:我希望我的用户有很多帖子或者有很多评论。让我们这样做。我们正在做一个用户可以发表评论的系统。下一行就是 has_many :comments。
现在你已经在用户和评论之间建立了一种依赖关系,这将为你提供一系列的访问和工厂方法,让用户能够拥有评论、创建评论、更新评论。仅凭那一行,has_many 看起来就像一个关键词。它看起来就像是 Ruby 语言的一部分。这就是元编程。当 Rails 能够在你定义一个类的方式中添加这些元素,然后那段代码会运行并给用户类添加一堆方法时,那就是元编程。
当元编程以这种方式使用时,我们称之为领域特定语言 (domain-specific languages)。你拿一种像 Ruby 这样的通用语言,然后为某个特定领域量身定做,比如在对象层面描述数据库中的关系。这是一个早期的例子,你可以写 user has_many :comments,belongs_to :account。现在你建立了一个一对一的关系,而之前我们建立的是一对多的关系。Rails 中充满了各种这样的领域特定语言,有时候它甚至看起来不像 Ruby。你无法识别出 Ruby 的关键词,你只能识别出看起来像是它自己编程语言中的关键词。现在,我再次强调,我知道 Lisp 和其他语言也做这些事情。它们只是用能塞进一门编程语言中的最大量的行噪声来做这件事,而 Ruby 做到了一种你无法区分我的元编程和 Matz 的关键词的程度,而且没有任何行噪声。
Lex Fridman
是啊,我应该说我的初恋是 Lisp。所以有一滴你看不见的眼泪正在慢慢滑落。
DHH
我其实自己从来没写过任何真正的 Lisp。
Lex Fridman
那你怎么能对它评价得这么苛刻呢?
DHH
因为我有两只眼睛,我能看代码,我的审美不允许我走得更远,我知道这是一种局限。我其实应该深入研究 Lisp,因为我发现仅仅是深入研究编程语言的过去,我就学到了很多东西。比如 Smalltalk,我认为 Smalltalk 是一个令人难以置信的实验,它也成功了,但不适合今天的编程环境。
动态类型 (Dynamic typing)
Lex Fridman
我很高兴我们能谈这么多关于 Ruby 的话题,关于什么是优美的代码,什么是优美的编程语言。所以,有一件事,我认为在你刚才的描述中可能是隐含的,也许你也明确指出了,那就是 Ruby 是动态类型 (dynamic typing) 而不是严格类型 (strict typing)。你不仅说过这是一件好事,而且你会为动态类型辩护至死。那种自由是一种需要维护的强大自由。
DHH
这正是 Ruby 之所以为 Ruby 的精髓。这也是为什么我完全不理解为什么有人呼吁 Ruby 增加静态类型,因为对我来说,这是它的基石。你为什么要把它最美丽的语言之一变成一个丑陋得多的东西?这是我对静态类型的主要反对意见之一。它不仅在某些方面限制了你,还让元编程变得更难。我写了很多元编程,我见过在 TypeScript 中做元编程需要付出什么。这实际上是让我下定决心把我参与的一些项目中的 TypeScript 移除的原因之一。
我们把 TypeScript 从 Turbo 中移除了,Turbo 是我们前端框架之一,因为我尝试在 TypeScript 中编写元编程,结果被彻底激怒了。我不想要那种体验,但从审美的角度我也不想要。我讨厌重复。我们刚刚谈到我多么喜欢 Ruby 将所有这些表达式精炼到其本质。
……关于我多么喜欢 Ruby 将所有这些表达式精炼到其本质。你无法移除一个点,无法移除一个字符而不失去某些东西。一旦你选择静态类型,你至少要声明……我知道有办法做隐式类型等等,但让我们就拿一个典型的例子来说。大写的 User,我正在声明变量的类型。小写的 user,我现在正在命名我的变量,等于大写的 User 或者 new User。我已经重复了 user 三次。我没时间搞这个。我的审美也容不下这个。我不想我的 Ruby 被这个污染。现在,我理解人们喜欢静态类型的所有论点。其中一个主要论点是它让工具变得更容易。例如,它让编辑器里的自动补全更容易。它让发现某些类型的 bug 更容易,因为也许你正在调用一个对象上不存在的方法,编辑器可以在你运行之前就捕捉到那个 bug。我不在乎。
首先,我不是用工具写代码,我是用文本编辑器写代码。我是用我的双手把它们从屏幕上凿出来的。我不自动补全。这就是为什么我如此热爱 Ruby,也是为什么我继续迷恋文本编辑器而不是 IDE。我不要 IDE。我希望我的手指必须单独敲出每一个元素,因为这会迫使我留在 Ruby 美丽的世界里。因为一旦输入大量样板代码变得容易,你猜会怎样?你就会有大量样板代码。基本上每一种有很好工具支持的语言,对样板代码的容忍度都高得多,因为想法是,“反正你又不是自己打的,你只是自动补全的。”我完全不想要那个。我想要的是我工作的基础只是一份文本文件,没有其他任何东西。所以这些东西是相互关联的。有审美部分,有工具部分,有元编程部分。
还有,Ruby 的“鸭子类型”(duck typing) 理念……我不知道你是否听过这个词。它本质上不是关于“如果一个对象是某个类的实例,我能调用这个方法吗?”而是关于“如果这个方法有响应,我能调用它吗?”这方面很像 Smalltalk。你实际上不检查那个类是否有这个方法,这允许你在运行时动态添加方法,做各种非常有趣的事情,这些都是我们在 Ruby 中做的所有美丽的元编程的基础。我不想失去任何这些,我也不在乎那些好处。我看到被反复吹捧的好处之一是,它更容易写出正确的软件。你的 bug 会更少。你的空指针异常会更少,所有这些东西都会更少。是的,但我没有遇到这些问题。这根本就不是我标准操作模式中会出现的事情。我不是说我没有 bug,当然有,但我用单元测试、集成测试来捕捉那些 bug。
这些预防措施可以捕捉到逻辑错误,即那些可以编译但却是错误的 bug,以及那些无法编译的东西。所以我从未被吸引到这个世界,部分原因是我从事的是某一类系统的工作。我完全接受这一点。如果你在写有五百万、一千万、五千万行代码的系统,有成百上千甚至上万的程序员在工作,我完全接受你需要不同的方法。我反对的是这样一种观点:对于一个有一千万行代码、十万个程序员在上面工作的代码库来说是正确的东西,也应该是我在我的卧室里用来创建 Basecamp 的东西,因为我只是一个人。这完全是无稽之谈。在现实世界中,我们会知道这毫无道理。就像你不会开着你的帕加尼去 Costco 买菜。那是一辆不适合干这个活的车。它就是没有空间,你也不想弄脏那些漂亮的座椅。你不想做任何那些事。
我们知道,在某些领域非常好的东西并不适用于所有领域。在编程语言方面,我们似乎忘记了这一点。现在,公平地说,我也可能有一点忘记这一点的名声。当我第一次学习 Ruby 时,我对这门编程语言爱得神魂颠倒,以至于我几乎无法想象会有人选择任何其他编程语言来写 Web 应用。我当时以一种十字军东征的精神参与了 Ruby on Rails 的布道,就像是,“我只需要教给你福音。我只需要给你看我们刚才谈到的那个条件代码,你就会在尖锐的论证下皈依。”现在,我明白了那不是正确的方式,部分原因在于程序员的思维方式不同。我们的大脑构造不同。我的大脑完美地适配于 Ruby,完美地适配于一种动态鸭子类型的语言,一种我可以用文本编辑器凿出代码的语言。
扩展性 (Scaling)
其他人需要 IDE 的安全感。他们想要那种除非你正确调用方法否则类就无法编译的安全感。我已经开始接受这一点了,但大多数程序员并没有。他们仍然停留在“我喜欢静态类型。因此,静态类型是创建可靠、正确系统的唯一途径”的思维定势中。坦率地说,面对堆积如山的相反证据,说出这样的话简直是令人难以置信的愚蠢。这也是我如此喜爱 Shopify 作为 Ruby on Rails 旗舰应用的原因之一。Shopify 的规模是大多数程序员永远无法企及的。在黑色星期五,我想 Shopify 每秒处理了一百万个请求。那不是一百万个图片请求,而是动态请求,它们流经商业管道。我的意思是,Shopify 运行着该死的互联网上大约 30% 的电子商务商店。所有商业活动中的很大一部分都通过 Shopify 运行,而它运行在 Ruby on Rails 上。所以 Ruby on Rails 能够扩展到那个级别,而没有在其所有功能中使用静态类型。
现在,我知道他们在某些方面做过一些实验,因为他们确实遇到了一些动态类型会遇到的限制。顺便说一句,其中一些你用动态类型遇到的限制,其实只是你在写了 500 万行代码时会遇到的限制。我想 Shopify 的单体应用大约有 500 万行代码。在那种规模下,任何东西都会出问题,因为你正处于人类使用编程语言能力的极限。部分区别在于 Ruby 是一种非常简洁的语言,那 500 万行代码,如果用 Go 或者 Java 写,可能会是 5000 万或者 2500 万。现在,这可能会缓解一些你在大型系统上与许多程序员一起工作时遇到的问题,但它肯定也会加剧这些问题;试着去理解 2500 万行代码吧。
Lex Fridman
所以说这东西确实能扩展。它不能扩展是一个持续存在的迷思,Shopify 和其他公司,但我觉得 Shopify 是个很好的例子。顺便说一句,我爱 Shopify,我也爱 Toby。
DHH
你得请 Toby 来上节目。我今天早上刚和他聊过。
Lex Fridman
当然。他是个很聪明的人……我有机会在沙漠里和他待过一段时间,我忘了,是在犹他州。他真是个很聪明的人。
长期以来一直在支持这个播客。我想 Toby 可能都不知道他们赞助了这个播客。我的意思是,这是一家大公司,对吧?
DHH
这是一家巨大的公司。我想大概有不到 10,000 名员工,市值 1200 亿美元,每个季度的商品交易总额 (GMV) 达到 2500 亿美元。
Lex Fridman
但他还是很关注细节。
DHH
他非常关注。关于 Toby 有个有趣的故事,Toby 在 2000 年代中期是 Rails 核心团队的成员。Toby 自己……
Lex Fridman
真的吗?
DHH
……写了 Active Merchant,这是一个创建商店的框架。他写了 Shopify 至今仍在使用的 Liquid 模板语言。他对 Rails 生态系统做出了巨大的贡献,而且他还是公司的 CEO。这对我来说非常鼓舞人心,因为它与我喜欢做的事情截然相反。我喜欢大部分时间都用自己的双手凿代码,而他管理着一个近万人的公司。那是一个毫不夸张地说,世界商业都依赖于它的重要性,我甚至无法开始理解。然而,我们可以在计算机科学和程序开发的许多基本问题上达成共识。这是一种动态范围,能够涵盖 Rails,它既是刚起步的一个开发者的绝佳工具……他甚至不完全了解所有事情,正处于那种 PHP 在 90 年代末会很适合的水平。因为,是啊,我大概能把东西上传到 FTP 服务器之类的。
Rails 的复杂性确实比那更高,但它的发展空间也大得多。这条跑道一直延伸到该死的 Shopify。这大概是我能为动态范围提出的最有说服力的论据了,我们能做到很多。即便如此,Shopify 当然也是个例外。我在写 Rails 时,并不会把 Shopify 看作主要目标,我想的是单个开发者。实际上,我确实会考虑 Shopify,但不是现在的 Shopify。我想的是 Toby 当时在写 Snow Devil 时的 Shopify,那是他创建的第一个销售滑雪板的电子商务商店。那是 Shopify 出现之前的 Shopify,他完全靠自己创建的。而那之所以成为可能,是因为 Ruby on Rails 不仅仅是关于优美的代码,它同样也关乎生产力。它同样关乎单个程序员所能产生的影响。
他们可以构建一个能将整个系统装在自己脑海里并能推动其前进的系统,以至于你可以从一个开发者坐下来开发某个东西……而那个东西就是 Shopify,然后它变成了今天的样子。当我们谈论和比较编程语言时,我们常常在很晚的阶段进行比较。比如,对于 2009 年的 Twitter 来说,当它已经取得巨大成功时,哪种编程语言更好?Twitter 最初是在 Ruby on Rails 上启动的。后来他们遇到了一些扩展性问题,当时闹得沸沸扬扬。我想他们最终用其他语言重写了它,顺便说一句,我认为这对于 Ruby on Rails 来说是最好的广告,因为在他们转换之后,基本上十年内什么都没发生,几乎是零创新。部分原因在于他们正在进行一个漫长的转换过程,而所有早期的成功,部分是因为他们有快速改变和适应的敏捷性。这就是创业公司所需要的。这就是 Shopify 所需要的,也是 Twitter 所需要的。
这就是每个人都需要的,也是 Ruby on Rails 的首要任务,确保我们不失去这一点。因为当开发工具和编程语言由大公司驱动时,经常会发生的情况是,它们会反映出这些公司的组织结构图。React 和使用它所需的一切,在某种程度上反映了 Meta 是如何构建 Facebook 的。因为当然是这样,因为它当然是那个过程的产物。我不是说 React 不是一个好工具,不能被小团队使用,当然可以,但它诞生的背景与像 Ruby on Rails 这样的东西非常不同。
Lex Fridman
让我插一句……因为我想我们可能会经常回到 Shopify 并赞美它,只是一个个人说明。这个播客的赞助商,以及想成为赞助商的,远比我可能有的要多。对我来说,不去在乎这些,能够赞美人们,是非常非常重要的。我赞美人,我赞美公司,我不在乎他们是否是赞助商。我真的不在乎。我只是想把这一点说得很明确,因为我们会继续说关于 Shopify 的好话。我不在乎,停止赞助,这对我来说真的不重要。是的,我只是想明确这一点。但回到关于 Twitter 和 Shopify 的扩展性问题上,你能给我解释一下 Shopify 在 JIT 方面做了什么吗?他们为了扩展这个东西,必须尝试做什么,因为那是一个相当不可思议的故事,对吧?
DHH
是的。Shopify 对整个 Ruby 生态系统,不仅是 Rails,尤其是 Rails,做出的巨大贡献之一就是 YJIT。YJIT 是他们为 Ruby 开发的编译器,它让所有东西都变得更有效率。在 Shopify 的规模下,即使是挤出 5%、10% 的 Ruby 开销和执行时间改进,也是一件大事。现在,Shopify 并不需要 YJIT。Shopify 已经运行在 Ruby 的初始版本上,那个版本比我们今天的版本慢 10 倍,如果你回顾一下 Toby 可能开始使用的 Ruby 1.8.6,就像我开始使用的一样。那足以推动 Shopify 发展到今天的规模。很多关于扩展性的讨论都迷失在一个未能区分两件事的失败中。扩展性是我们谈论的一个整体,但实际上它内部有多个部分。一个是运行时性能、延迟,即你执行单个请求的速度有多快?它能否快到用户注意不到?如果你的 Rails 请求需要一秒半来执行,用户就会注意到。你的应用会感觉又慢又卡。
你必须把响应时间降到,比如说,至少 300 毫秒以下。我喜欢把 100 毫秒作为我的延迟目标。那种性能,即你能从单个 CPU 核心中挤出多少那种延迟的性能?这告诉你单个请求的成本会是多少。但是,你是否能处理每秒一百万个请求,就像 Shopify 现在正在做的那样,如果你有一台机器能做每秒一千个请求,你只需要 X 台机器就能达到一百万。你实际上会发现,当涉及到编程语言时,它们在这方面都是一样的。它们都可以在很大程度上,优美地水平扩展,你只需要增加更多的机器。扩展一个 Shopify 的难点通常不在于编程语言,而在于数据库。这实际上是 Shopify 现在面临的挑战之一,即如何处理他们运营规模下的 MySQL?什么时候你需要迁移到其他数据库以获得全球性能?所有这些事情。关于扩展 Ruby 的问题是经济问题。
如果我们花这么多钱在应用服务器上,如果我们能从 Ruby 中多挤出 5% 的性能,那么我们就可以省下 5% 的服务器,这就可以体现在预算中。现在,这种分析基本上可以得出一个结论:Ruby 是一种奢侈的语言。它是一种奢侈品,在我看来是最高级的奢侈品。它是编程语言中的可可·香奈儿 (Coco Chanel),不是每个人都买得起的,我这是以最好的方式说的。互联网上有些应用,每个请求的价值非常低,你负担不起使用像 Ruby 这样奢侈的语言来编程。你只能用 C、Go 或其他一些低级语言,或者 Rust——说到行噪声——来凑合。
Lex Fridman
那就像是语言中的二手店。
DHH
正是如此。你需要的,你需要一个非常低的层次来做这件事。你负担不起用一种奢侈的语言来构建它。但 Shopify 不是这样。即使在 2004 年的 Basecamp 也不是这样。99% 的 Web 应用也都不是这样,因为 99% 的 Web 应用的主要成本构成,不是 CPU 核心,而是 Web 核心,是人力核心。是人类理解和参与系统的能力,是他们的个人生产力。有一次有人第 400 次说,“哦,如果你从 Ruby 换成更快的语言,你就能省一大笔钱。”我计算了一下,当时……我想我上次做这个计算是差不多十年前了,我们大约 15% 的运营预算花在了 Ruby 应用服务器上。所以对我来说,要想把我的业务成本降低七个百分点,我得选择一个快两倍的东西。那相当难。
相比之下,如果 Ruby 和 Ruby on Rails 比其他东西的生产力哪怕只高出 10%,我能带来的改变就会大得多,因为提高单个程序员的生产力实际上要重要得多。这就是为什么人们对 AI 如此兴奋。这就是为什么他们对硅谷一个年薪 30 万美元的程序员现在能做三到五个人的工作而感到震惊,至少理论上是这样。我实际上还没有在实践中完全看到这一点。但我们假设这个理论是正确的,如果不是现在,那么在六个月后,那将是一件大事。这比你是否能从 CPU 中多挤出几个周期要重要得多,当涉及到这类商业应用时。如果你在做像 Tim Sweeney(你请过的嘉宾)那样的虚幻引擎渲染工作,是的,他需要非常仔细地考虑所有这些细节。Nanite 引擎不能在 Ruby 上运行。它永远不会,它也不是为此而设计的,没关系。这类商业应用绝对可以。
而且,人们现在对 AI 感到兴奋的一切,那种额外做更多事情的能力,正是我们在 2000 年代初对 Ruby 感到兴奋的原因。那是因为我看到,如果我们能把人类程序员的生产力哪怕提高 10%,我们就能用少得多的成本做多得多的事情。
编程的未来
Lex Fridman
我们可能会为此争论,但我真的很喜欢和 AI 一起工作,和 AI 合作。我认为你想让 AI 生成的代码是人类可读、人类可解释的。如果它生成的是那种 Perl golf 式的代码,那就不是合作了。所以它必须说人类的语言……这不仅仅是你在用英语写提示,你也希望用人类可解释的语言,比如 Ruby,来阅读它的回应,对吧?所以这对 AI 实际上也是有益的。因为你说过,对于你这个雕塑家,这个精英的可可·香奈儿 (Coco Chanel) 式的雕塑家,你希望用你那花哨的键盘,用你自己的手指,亲自敲下每一个字母。但 Ruby 的好处也体现在,一旦代码是由 AI 写成的,而你实际上是用自己的手指在做编辑部分,因为它是人类可解释的,所以你能和它互动。
DHH
我非常喜欢这个范式,实际上是 Elon 在你的一个节目中说的,当时你们在讨论 Neuralink,他说 Neuralink 增加了你和机器之间的带宽。语言,无论是口头的还是书面的,都是非常低带宽的。如果你要计算我们坐在这里能交换多少比特,那是非常慢的。Ruby 有更高的通信带宽,每个字符所揭示、传达的概念比大多数其他编程语言要多得多。所以当你和 AI 合作时,你想要非常高的带宽。你希望它能和你一起生产程序,无论你是否让它写代码,你们俩都能很快地理解。而且你可以把一个宏大的概念、一个宏大的系统压缩成少得多的部分,你们俩都能理解。现在,我实际上也喜欢和 AI 合作。我喜欢凿我的代码,我使用 AI 的方式是在一个单独的窗口里。我不让它驱动我的代码。我试过。我试过 Cursors 和 Windsurfs,但我不喜欢那种写作方式。
我不喜欢那种写作方式的原因之一是,我能真切地感觉到能力正从我的指尖流失。那种与材料的直接接触感消失了。我感受最深的一次是,当我切换到 Linux 时,我做了一个叫做 Omakub 的 Ubuntu 定制版。它全是用 Bash 写的。我以前从来没有用 Bash 写过任何像样的代码,所以我用 AI 合作,和我一起写了很多 Bash,因为我需要所有这些。我知道我想要什么,我可以用 Ruby 表达出来,但我认为通过 Bash 来过滤它是一个有趣的挑战。因为我当时在做的是设置一台 Linux 机器,这基本上就是 Bash 的设计初衷。这是一个很好的限制。但我发现自己一遍又一遍地向 AI 索要同一种表达条件语句的方式,比如在 Bash 中。因为不亲自打字,我就学不会。我在使用它,我得到了我想要的表达方式,但我没有学会它。我有点害怕了。
我有点害怕,这是学习的终结吗?如果我不打字,我还会学习吗?对我来说,我重新审视这个问题的方式是,我不想放弃 AI。作为一名程序员,查阅 API、获得第二意见、起草初稿,这是一种好得多的体验,但我必须自己打字,因为你是用手指学习的。如果你在学弹吉他,你可以看任意多的 YouTube 视频,但你学不会吉他。你必须把手指放在琴弦上,才能真正学会那些动作。我认为这和编程有相似之处,编程的一部分必须通过实际打字来学习。
Lex Fridman
我真的觉得这很有趣。听着,我大脑的一部分百分之百同意你,另一部分不同意。我认为 AI 应该在学习的循环中。现在的系统做不到这一点,但我认为 Cursor 完全有可能做到,基本上强迫你输入某些东西。所以如果你设置了学习模式……我不想放弃 AI。我认为“感觉编程”(vibe coding) 是一种技能,所以对于有经验的程序员来说,很容易把“感觉编程”看作是一种不值一提的东西。
DHH
我同意,我不会轻视它。
Lex Fridman
但我认为你需要开始培养这种技能,并开始弄清楚,如何防止能力从你的指尖和大脑中溜走?你如何与另一种技能并行发展这种技能?我不知道。但我认为这是一个有趣的谜题。我认识太多非常厉害的程序员,他们就是不碰 AI,因为它目前还有点笨。
DHH
是的。它有点太慢了,这其实是我的主要问题。它在某些方面有点笨,但在另一些方面有点太慢了。当我使用 Claude's Code,也就是 Claude 的终端版本……这其实是我更喜欢的使用方式,我会变得不耐烦。感觉就像回到了代码需要编译的时代,我得去做点别的事情,比如烧点茶,等着代码编译。嗯,我用 Ruby 已经 20 年了,我再也受不了编译等待了,所以有这方面的原因。但我认为对我来说更关键的方面是,我真的很在乎能力。我见过即使是优秀的程序员,一旦他们放下键盘会发生什么,因为即使在 AI 出现之前,这种情况也会在人们升职后发生。大多数在大公司工作的优秀程序员,都会停止每天写代码,因为他们有太多的会议要参加,有太多的其他事情要做,他们不可避免地会与编程脱节。
这并不意味着他们会忘记一切,但如果你不亲自动手,你就会与它脱节。没有别的办法。我不想要那样,因为我太喜欢编程了。这不仅仅是关于结果。这是理解的关键,对于喜欢编码的程序员来说,编程不仅仅是为了得到程序。那可能是经济价值。但不是唯一的人类价值。人类价值同样在于表达。当有人坐下来用吉他弹奏《通往天堂的阶梯》(Stairways to Heaven) 时,那首歌已经有了完美的录音,可以永世流传。你可以直接在 Spotify 上播放,你实际上不需要自己弹。乐趣在于自己驾驭吉他。一个程序员,我作为一个程序员的乐趣,在于自己敲代码。如果我提升自己,让自己脱离编程,我就会把自己变成一个项目经理,一个我前几天写的“一群 AI 乌鸦”的项目经理。如果我不在乎自己写代码,只想要结果,我整个职业生涯都可以成为一个项目经理。
如果我不在乎自己写代码,只想要结果,我早在 20 年前就可以成为项目经理了。我最初接触编程就是因为我只想要结果。然后我爱上了编程,现在我宁愿退休也不愿放弃它。当然,这并不意味着你不能鱼与熊掌兼得。我做过一些“感觉编程”(vibe coding),当时我并不在乎是不是我自己在演奏。我只是想看看我脑海中的一个想法。我想看到一些东西,那没关系。我也整天都在用 AI。事实上,我已经到了这种地步,如果你把它从我身边拿走,我就会觉得,“天啊,我们现在还怎么在网上查东西?Stack Overflow 还在吗?论坛还是个东西吗?我整天遇到的这些问题,我怎么找答案?”我不想放弃 AI。事实上,我想说,我喜欢使用 AI 的方式,让我每天都变得更聪明,因为我用 AI 来让它给我解释事情。
即使是那些我有点不好意思在谷歌上搜索的愚蠢问题,AI 也非常愿意给我一个“给五岁小孩解释”(ELI5) 某个我早就该知道但实际上不知道的 Unix 命令的解释。对不起,你能给我解释一下吗?现在我知道了。所以,在我整天和 AI 一起工作的一天结束时,我变得更聪明了一点,大概 5%。抱歉,不是 5%,也许是半个百分点,这会随着时间复利。但当我在 Omakub 项目上工作,并试图让 AI 为我驾驶时,我也看到了,我感觉在一天结束时我可能变笨了半个百分点。
Lex Fridman
好的,你说了许多有趣的事情。首先,让我们从最基本的事实说起,那就是问愚蠢的问题。如果你去 Stack Overflow 问一个愚蠢的问题,或者读别人的愚蠢问题及其答案,那里充满了评判。AI,有时甚至到了过分的程度,毫无评判。它通常会说:“哦,这是个很好的问题。”
DHH
简直是过分了。
Lex Fridman
是啊。哦,那太棒了。是的。我的意思是,这对学习太有帮助了。它是一个极好的学习工具,我也会想念它的。它基本上是一个很棒的搜索引擎,可以帮你了解一门特定编程语言的各种细微之处,尤其是当你不太熟悉它的时候。或者你可以加载 API 文档,它对学习真的很有帮助。对我个人而言,我的意思是,从幸福感的角度来说,它让我对编程更有热情了。我不知道具体是什么原因。部分原因是……我真的很抱明,Stack Overflow 是一个不可思议的网站,但那里有一种负面情绪。有一种评判。能有一个啦啦队长在我身边,对我说:“是啊,那是个好主意。”这很令人兴奋。我会说:“不,那不对。”我会纠正 AI。AI 会说:“你完全正确,我怎么没想到呢?你准备好了。”我心想:“天啊,我这就像有一个非常积极、非常聪明、并且能挑战我思考的朋友。”
而且,即使我从不使用它生成的代码,我也已经是一个更好的程序员了。但实际上更深层次的是,出于某种原因,我玩得更开心了。这是一件非常非常重要的事情。
DHH
我喜欢把它看作一个结对程序员,正是因为这个原因。结对编程 (Pair programming) 在 2000 年代开始流行,你会看到两个程序员坐在一台机器前,互相传递键盘。一个程序员在驾驶,负责输入。另一个程序员基本上就是坐着看代码,提出改进建议,查阅资料。那是一种非常有趣的动态。不幸的是,我是一个内向的人,所以那种事我大概只能做五分钟就想跳桥了。所以对我来说,把它当作全职工作是行不通的,但 AI 让我能够一直拥有这种体验中最好的部分。现在,我认为你说的它让事情变得更有趣这一点很有意思。我之前没有想过,但它让我觉得再次成为一个初学者变得更有趣了。它让第一次成功地学习 Bash 变得更有趣了。
当然,我走了弯路,让它为我写了所有代码,然后意识到我学到的东西远没有我希望的那么多。一旦我开始自己把它敲出来,情况就不一样了。但它给了我信心,让我觉得,你知道吗?如果我需要自己做一些 iOS 编程……我大概有六年没碰过了,上次涉足还是六年前。我从来没有真正构建过任何实际的东西。我现在非常有信心,我可以和 AI 坐下来,一周之内就能在应用商店里上架一个东西。如果没有 AI 这样一个结对编程的伙伴,我不会有这种信心。我实际上不怎么用它来写 Ruby 代码。我偶尔试一下,会感到印象深刻,比如,“哦,它把这个东西做对了,这真是了不起,而且做得相当不错。”然后我再问两个问题,我就会想,“哦,好吧,如果你是我的初级程序员,我就会开始敲手指说,‘你得加把劲了。’”
当然,最棒的是,我们只需要再等五分钟。Anthropic 的 CEO 似乎认为,到今年年底,90% 的代码都将由 AI 编写。我对这一点持相当大的怀疑态度,但我对编程可能最终会变成一种“骑马”的前景持开放态度。一种我们为了娱乐而做的事情,不再是洛杉矶的交通工具。你不会再骑马上马鞍去杂货店,用马鞍袋从 Whole Foods 买东西。那已经不是现在的事情了。这可能是编程的未来,完全有可能。我也不在乎。尽管我们有所有最好歌曲的精彩演绎,正如我所说,仍有数百万人喜欢弹吉他。它可能不再像以前那样有那么大的经济价值。我认为这一点我相当确信,我们可能已经见证了它的顶峰。
现在,我理解这个悖论,当某物的价格下降时,实际上它的总使用量会上升,用于该活动的总支出也会上升。这也可能发生。但我们现在看到的是,很多大公司,很多大公司,都不像五年前那样招聘了。他们不预期会需要更多的程序员。有争议的是,Toby 实际上在 Shopify 内部发布了一份备忘录,要求每个考虑招聘的人都问一个问题:“这能由 AI 完成吗?”现在,他在这件事上比我走得更远。我看着一些代码和……我会想:“我很乐意更多地使用 AI,我也看到它如何让我们更有效率。但它还没有达到那种程度,让我可以直接说:‘哦,我们有这个项目,让我把它交给 AI 代理,它就会自己去做了。’”
Lex Fridman
但我们得老实说,你就像一个克林特·伊斯特伍德 (Clint Eastwood) 式的牛仔角色,骑在马上看着汽车来来往往。你会说:“嗯……”
DHH
这确实是一部分原因。我认为保持这种谦逊很重要,即你所擅长的东西可能不再是社会所看重的。这在历史上发生过无数次……你可能曾经在制作马鞍方面非常出色。那曾经是很多人关心的事情,因为每个人都骑马。然后突然之间,骑马变成了一种小众爱好,只有少数人关心,远不如以前那么多。这没关系。现在,另一件事是,我有幸做了将近 30 年的程序员。这是一段很棒的经历。我试着这样看待生活,我已经有幸拥有了几十年经济上可行、非常有价值的方式,将我在工作世界中最喜欢的事情——写 Ruby 代码——转化出来。这非常有价值,以至于我能靠它赚取数百万美元,如果明天这一切都结束了,我不应该带着遗憾看待它,而应该带着感激。
Lex Fridman
但你也是一个经验丰富、才华横溢、观点鲜明的人……
Lex Fridman
……才华横溢、观点鲜明的人。所以听你对“马”的未来的看法非常有趣,因为有很多年轻人正在听这个,他们热爱编程,或者对用软件、用 Ruby on Rails 这样的语言创造东西的可能性感到兴奋,现在又有了新的可能。
DHH
但它还能成为一个职业吗?
Lex Fridman
它还能成为一个职业吗?如果一个人真的可以在 AI 的帮助下创造越来越多的东西,他们该如何学习这项技能?这是一项值得学习的技能吗?我的意思是,这对我来说是真正的谜团,因为我认为目前你仍然绝对需要从头开始学习编程,但你如何平衡这两种技能?因为我也有同感,正如我现在所想,有一种可怕的技能流失,在处理某段特定代码时,真的几分钟内就会发生。这很可怕,而驾驶时,当你让汽车为你驾驶时,技能流失得没有那么快。所以这真的让我害怕。当有人走过来问我如何学习编程时,我不知道该给什么建议,因为我认为仅仅使用 Cursor 或 Copilot 来生成代码是不够的。
DHH
这绝对不够。如果你想学习,如果你想变得更好,那就不够。如果你只是变成一个按键猴子,也许你在一秒钟内就能提高生产力,但然后你必须意识到,如果这就是我们整天坐着做的事情,就是不停地按“是,是,是,是,是”,那任何人都能做到吗?是的,那不是一项有市场价值的技能。现在,我总是先对自己,也对别人说,第一条规则是,没人他妈的知道任何事。没有人能预测哪怕六个月后的事情。
人工智能的未来
现在,我们可能正处于 AI 未来炒作的顶峰,因为我们看到了所有的希望,因为其中很多是真实的,很多人都亲身体验过。这种令人难以置信的事情,即硅基物质以一种诡异地让人联想到人类的方式在思考。我实际上想说,对我来说,最大的冲击甚至不是 ChatGPT,甚至不是 Claude,而是 DeepSeek。在本地运行 DeepSeek,看到那个“思考框”,它在其中与自己对话,讨论如何组织回应。我几乎想,这是不是一个噱头?它是不是为了我的利益在表演?但那实际上不是它的思考方式。如果这真的是它的思考方式。好吧,我有点害怕了。它以这种方式思考,简直是不可思议地像人类,但这会走向何方呢?所以在 95 年,我最喜欢的电影之一,我最喜欢的 B 级片之一上映了,《割草人》(The Lawnmower Man)。
Lex Fridman
很棒的电影。
DHH
一部关于虚拟现实的不可思议的电影。成为一个化身 (avatar) 并在 VR 中生活,故事一团糟,但美学、它构建的世界令人难以置信,我当时想,我们离那只有五年了。我现在就要活在 VR 里了。我就会四处漂浮。我就会成为一个化身。这将是大多数人度过大部分时间的地方。那没有发生。30 年过去了,VR 仍然没有到来。它在游戏领域实现了,在一些专门的应用中实现了。我的大儿子喜欢玩《猩猩跑酷》(Gorilla Tag)。我不知道你试过没有。那基本上是最火的 VR 游戏。很棒。它很棒。预测未来真的很难,因为我们就是不知道。然后当你把 AI 考虑进来,即使是最聪明的人也会说:“我不认为我们完全理解这是如何工作的。”
Lex Fridman
但另一方面,摩尔定律似乎在很多很多年里都有效,比如在减小晶体管尺寸方面。Flash 没有占领互联网,但摩尔定律奏效了,所以我们不知道 AI 会是哪一种。
DHH
它就是它。这也是我发现如此迷人的地方,我忘了是谁做的那个演讲,但 Web 社区里有人做了一个关于飞机历史的精彩演讲。从莱特兄弟在 1903 年左右飞行,到 40 年后你有了喷气式飞机,短短四十年里取得了令人难以置信的进步。然后到了 56 年,我想是,波音 747 的前身设计就完成了,然后基本上从那以后就没什么变化了。自 50 年代以来,飞行体验只有一些微小的调整和改进。不知何故,如果你要预测飞行的未来,你坐在 42 年,你见过莱特兄弟在 03 年飞行,你看到喷气式发动机出现,你会想:“再过二十年我们就要飞向星辰了。”
我们会发明超超音速飞行器,两小时就能环游地球,然后那没有发生。它到顶了。这就是预测未来如此困难的原因。我们可以在当下感到非常兴奋,因为我们正在一张图表上画一条穿过早期几个点的线,看起来那些早期的点就是一路向右上方去的,但有时它就是会趋于平缓。这也是其中一件事,我们有很多关键基础设施,比如,仍然运行在 COBOL 上,全世界大概只有五个人真正深入地理解它,以至于社会有可能失去它仍然需要的能力,因为它在追逐未来。
COBOL 至今仍在。这是我想到编程时的一件事。Ruby on Rails 现在已经达到了这样一个水平,50 年后,极有可能仍然有大量的 Ruby on Rails 系统在运行。现在,很难预测那个确切的世界会是什么样子,但昨天的天气告诉我们,如果 70 年代的 COBOL 代码今天仍在运行着社会保障系统,而我们还没有找到一个干净利落的方法来转换它,更不用说理解它了,我们当然应该在预测未来时保持谦逊。
我不认为任何在 70 年代写那些 COBOL 代码的程序员会想到,在 2025 年,支票仍然是根据他们当时编码的业务逻辑开出的。但这让我得出了一个关于年轻程序员应该做什么的结论。你无法预测未来。没有人能预测未来。如果你喜欢编程,你就应该学习编程。现在,这会是一个长久的职业吗?我不知道,但什么会是一个长久的职业呢?谁知道呢?不久前我们还以为是蓝领劳动会被抽象化。首先是机器人会接管。然后生成式 AI 出现了,然后所有的艺术家突然都觉得,“天啊,现在所有动画都要由这个来做了吗?所有音乐都要由这个来做了吗?”
他们真的害怕了,现在我看到最新的特斯拉机器人,我想:“哦,也许现在又轮到蓝领工人有麻烦了,因为它如果能那样跳舞,它大概也能修马桶了。”所以没人知道任何事,你必须以这样一种方式为未来定位,即你选择一个职业或道路,即使最终你必须重新学习、重新培训,你也不会后悔你所走的路。这是一个普遍的人生原则。对我来说,我如何看待我参与的所有事业,就是我希望对所有结果都感到满意。
当我们在 37 Signals 开始开发一个新产品时,我会为自己设定一个成功的心理模型,然后想:“你知道吗?就算没人想要这个,我也会有另一次机会去写优美的 Ruby 代码,去探索一个全新的领域,去学习新东西,去构建一个我自己想要的系统,即使别人不想要。”这是何等的幸事,何等的特权。如果很多人想要,那太好了。我们可以支付一些薪水,我们可以让公司继续运营下去。如果它大获成功,那就太棒了。我能影响很多人。
感觉编程 (Vibe coding)
Lex Fridman
我认为一个很大的悬而未决的问题是,你能通过“感觉编程”(vibe coding) 走多远,一个年轻开发者是应该把大部分时间投入到“感觉编程”上,还是从头开始写代码。“感觉编程”,我这里有点顺着这个梗说,但它的意思是,你生成代码,你有一个你想创造的东西的想法,你生成代码,然后你用自然语言提示和手动的方式来修复它。这就是学习过程。你如何修复生成的代码,或者你从头开始写代码,然后让大语言模型帮你补全代码,你应该侧重哪一部分?我认为,为了安全起见,你应该在两者中都找到美、艺术性和技巧,对吧?从零开始,所以你应该花一部分时间完全从零开始写,一部分时间做“感觉编程”。
DHH
如果你有兴趣学习如何编程,你应该花更多的时间从头开始写。不幸的是,你不可能通过看健身视频来变得健康。你不可能通过看 YouTube 吉他视频来学会弹吉他。你必须亲自去弹。你必须亲自做仰卧起坐。编程、理解、学习几乎任何东西都需要你亲自动手。人类不是被设计成仅仅通过远观他人就能将信息吸收并转化为技能的。具有讽刺意味的是,AI 似乎很擅长这一点,但人类不是。如果你想成为一个有能力的程序员,你必须编程。这真的不难理解。现在,我理解这种诱惑,诱惑之所以存在,是因为“感觉编程”可以在当下,特别是在你不熟悉的新领域,用你不熟悉的工具,产生比你做得更好的东西,或者能让你更快地达到目的,但你什么也学不到。
你会以一种肤浅的方式学习,感觉像是在学习,但实际上完全是空洞的卡路里。其次,如果你能通过“感觉编程”来完成,那你就不算是一个程序员了。那样的话,任何人都能做到,这也许是件好事。这基本上和 Access 数据库、和 Excel 发生的事情一样。它让会计师有能力成为软件开发者,因为工具变得对他们如此触手可及,以至于他们可以构建一个模型来预测公司下周的表现,而在 Excel 出现之前,这需要一个程序员。现在,不需要了,因为他们可以自己做。通过编程,非程序员能够以一种我觉得非常棒的方式探索他们的想法,但这并不能让你成为一个程序员。
Lex Fridman
我同意你的看法,但我想为我们俩都可能是错的留出空间。例如,“感觉编程”(vibe coding) 实际上可能是一种技能,如果你训练它,并且我们把修正的步骤,即迭代修正,也包含在内,那么如果你在这方面变得非常出色,你可能会超越那些从头开始写代码的人,你可能会想出真正创新的东西,尤其是在历史的这个时刻,当大语言模型还不够聪明,无法创造出超级新颖的东西和完整的产品,但它们正在逐渐接近那个水平。所以,如果你现在投入时间成为一个非常优秀的“感觉编程”者,也许这是正确的选择。如果它确实是一种技能,我们有点把“感觉编程”当成一个梗,就像坐享其成一样,但如果你认真对待它,成为一个有竞争力的“感觉编程”者,并擅长驾驭 AI 的浪潮,擅长编辑代码的技能,而不是从头开始写代码,那么从长远来看,你实际上可能会走得更远。
也许编辑和从头开始写是根本不同的任务,如果你认真地将其作为一种技能来发展。我明白了。对我来说,这是一个悬而未决的问题。我只是觉得,我个人,当然你在另一个层次上,但就我个人而言,我不太擅长编辑不是我写的代码。那是一个不同的……
DHH
没人擅长。
Lex Fridman
这一代人没人擅长,但也许那是一种技能。也许如果你能和 AI 保持同步,因为 AI 有一种一致性。它就像一个风格和结构都一致的结对程序员。再加上你自己的提示,你可以控制你写的代码的类型。我的意思是,这完全可能是一种技能。
DHH
那是提示工程师 (prompt engineer) 的梦想。我认为那完全是痴人说梦。我不认为存在不擅长写作的优秀编辑。我写过几本书,也和几位专业编辑合作过。他们并非都写出了自己的伟大著作,但他们在某些方面都是优秀的作家。如果你自己不知道怎么做,你就无法给别人指点。对于一个编辑来说,如果他们自己无法解决问题,就很难发现问题所在。成为一名优秀编辑的能力,是你成为一名优秀实践者的回报。你必须先成为一个实践者。现在,这并不是说“感觉编程”、提示工程无法产生完全成型、令人惊叹的系统,甚至很快就能做到。我认为这完全有可能,但那样的话,就不再有任何技能可言了,这也许是最大的回报。
那不正是 AI 的全部承诺吗?就是一切都是自然语言,即使是我笨拙地提出一个问题,也能得到一个优美简洁的回答。这对我来说实际上是一个更有吸引力的愿景,即会有这些特殊的提示工程奇才,他们知道如何恰到好处地“挠痒”AI,让它产生他们想要的东西。AI 的美妙之处在于,一个对 AI 实际工作原理一无所知的人,能够表达出他的想法和愿望,然后 AI 能以某种方式把那一堆杂乱的想法,生产出人们想要的东西。
这实际上一直以来就是编程。通常都是那些不知道如何编程的人,想要程序,然后他们雇佣程序员,给他们一堆乱七八糟的需求描述,然后当程序员交付回来时,他们又说:“哦,不,其实我不是那个意思。我想要别的。”AI 也许能够提供那个循环,如果它能做到极致的话,是的,程序员的数量就不会那么多了,但可以推测,至少在可预见的未来,仍然需要有人去理解 AI 产生的东西是否真的有效。
Lex Fridman
作为一个有趣的案例研究,或者说一个思想实验,如果我想用“感觉编程”的方式来做 Basecamp 或者 HEY,就是你们做的一些产品,瓶颈会是什么?我会在哪个环节失败?
DHH
当我在尝试用“感觉编程”(vibe coding) 来构建真实的东西时,我发现你其实很早就失败了。在目前这个阶段,“感觉编程”能够构建出一个看起来能用的表层,但它在各种方面都有缺陷。有那些显而易见的、被当成梗的方面,比如它会泄露你所有的 API 密钥,用明文存储你的密码。我认为这些最终是可以解决的。它会搞定的,或者至少在这方面会变得更好,但它迷失在自己迷宫中的能力现在非常强。你让它写一些代码,然后你想修改一些东西,很快就会变成一个打地鼠的游戏。
Pieter Levels,他一直在做那个很棒的飞行模拟器,就谈到过,当规模达到一定程度时,它就会不断地自相矛盾。你想修复一个问题,结果却破坏了其他五个地方,我认为这其实是独一无二的人类行为,因为大多数差劲的程序员在面对一定复杂度的领域时就是这样。他们无法在不破坏其他三件事的情况下修复一件事,所以从这个角度看,我实际上觉得这几乎是一个积极的信号。AI 会搞定这个的,因为它现在正走在一条极其人性化的轨迹上。它犯的错误和初级程序员经常犯的错误是一样的。
Rails 宣言:优秀编程语言的原则
Lex Fridman
是的。我们能把视野放大,看看 Rails 的愿景、宣言和信条吗?有哪些东西让一门编程语言、一个框架变得伟大,尤其是在 Web 开发领域?我们谈到了幸福感。
DHH
是的。
Lex Fridman
Ruby 的基本目标。还有什么?
DHH
你看到的是我在 2012 年写下的九条原则。在我们深入探讨之前,我想说,我写下它们的原因是,如果你想让一个社区长久存在,你必须记录下它的价值观和实践。如果你不这样做,最终会有足够多的新人带着他们自己对这个东西应该走向何方的想法进来,如果我们没有一个指引我们做决定的灯塔,我们就会开始摇摆不定,甚至会分崩离析。我认为这是各种机构开始瓦解的关键原因之一。我们忘记了“切斯特顿的栅栏”(Chesterton's fence) 为何存在。我们只是说:“为什么那里有个栅栏?”然后把它拔掉。“哦,原来是用来挡狼的。现在我们都死了。”
糟糕。所以我想把这些东西写下来。如果我们快速地逐一看一下,你谈到了“为程序员的幸福感而优化”。我把这个放在第一位,是为了向 Matz 致敬,这很大程度上是关于接受这样一个事实:在编写优美的代码和我们希望从系统中获得的其他东西之间,偶尔会有权衡。可能会有运行时的权衡,可能会有性能的权衡,但我们仍然会这样做。我们也会允许某种程度的模糊性,而很多程序员默认对此感到不舒服。我在这里举的例子是,在交互式 Ruby Shell 中,你可以玩转这门语言,甚至可以与你的领域模型互动。你至少有两种我发现的方式可以退出。你可以输入 exit。砰,你就退出了程序。你也可以输入 quit。砰,你也退出了程序。
它们做的是同一件事。我们只是同时写了 exit 和 quit,或者说制作那个工具的人同时写了这两个,因为他们知道人们很可能会选择其中一个。Python 是一个完美的对比。在 Python 的交互式协议中,如果你输入 exit,它不会退出。它会给你上一堂该死的课。它基本上会告诉你去读该死的手册。它会说:“使用 exit() 或 Ctrl+D(即文件结束符)来退出。”我觉得,一个是很有温度的,另一个则是很工程师的,我这么说都是从最好的角度出发。Python 是迂腐的。Python 从一开始就声明的价值观是,做某件事最好只有一种,而且是唯一一种方式。Ruby 则完全相反。不,我们想要那种能适应不同人大脑的完整表达方式,以至于这门语言似乎总能猜到他们想要什么。
Lex Fridman
这其中也包含了你所描述的“最少意外原则”(principle of the least surprise),这是一个很难在语言工程中实现的原则,因为它是一个主观的东西。
DHH
这就是为什么你不能用一种方式来做这件事,这也是为什么我用了 exit 和 quit 的例子。对于一些人来说,“最少意外原则”就是,“哦,exit。这就是我退出提示符的方式。”而对于另一些人来说,则是 quit。我们为什么不两个都做呢?
Lex Fridman
好的,那么“约定优于配置”(convention over configuration) 呢?那是一个很重要的原则。
DHH
那是一个很重要的原则,非常重要。它源于我早期对,尤其是 Java 框架的挫败感。当时,当你为 Java 设置一个 Web 应用框架时,写上成百上千行的 XML 配置文件是常有的事。“哦,我需要这个。我希望数据库用 post_id 作为外键。”“不不不,我希望是 postId。”“哦,不不不,你应该用大写的 PID。”有各种各样的方式可以配置数据库中外键关系的工作方式,但它们都不重要。我们只需要选择一种,然后就可以了。如果我们选择了一种,并且可以依赖它,它就成了一种约定 (convention)。如果它是一种约定,我们就不必去配置 (configure) 它。如果我们不必配置它,你就可以更快地开始做你真正关心的事情。
“约定优于配置”本质上就是采纳这样一个理念:系统应该预先组装好。我不是只给你一盒该死的乐高积木,然后让你去拼一个千年隼号。我给你的是一个成品玩具。你可以编辑,可以修改它。它仍然是用乐高拼出来的。你仍然可以拆下一些部件,换上另一些部件,但我给你的是最终产品。这与大多数程序员喜欢的东西背道而驰。他们喜欢一盒乐高积木。他们喜欢从头开始把所有东西都拼起来。他们喜欢做所有那些根本不重要的小细节决定,而我想把这个层次提升一下,就是,嘿,我不是想剥夺你的决定权。我只是想让你专注于那些真正重要、你真正关心的决定。没有人关心外键是 post_id 还是 postId 或者是 PID。
Lex Fridman
是啊,好的默认值。
DHH
是的。
Lex Fridman
这真是太棒了。你有很多抱负,想用这些积木搭建出某种定制的、前所未有的最美丽的乐高城堡,但在现实中,大多数情况下,为了提高效率,你只需要搭建出基础的东西,然后你的创造力才是在此之上发挥的。
DHH
完全正确,我认为这是信条的一部分,很多使用 Ruby on Rails 的程序员即使不情愿,也会承认这是一件好事。即使他们不真的喜欢,也很难抗拒从头开始用乐高搭建的吸引力。这就是我们程序员的本性。这就是我们当初成为程序员的原因,因为我们喜欢把这些小部件拼凑在一起,但我们可以将这种本能引向技术栈中更有成效的一端。
Lex Fridman
好的。还有哪些其他的原则?
DHH
“菜单是 Omakase (主厨发办)”。这实际上也源于同一个原则,即好的默认值非常重要。如果你看看现在 JavaScript 生态系统中所有错误的地方,你会发现,没有人负责这个菜单。有十亿种不同的菜品,你可以配置出你量身定做的特定组合,但没有人去确保它们都能很好地协同工作。所以你在 JavaScript 生态系统中会遇到各种独特的问题,比如,光是做控制器层就有大概 25 种主流方式,然后与数据库交互的方式也同样多。所以你得到了一个 N 乘以 N 乘以 N 的排列组合,结果就是没有人用同样的东西。
而且如果他们用了同样的东西,也只是用了大概五分钟,所以我们没有积累下任何智慧,没有建立起任何持久的技能。Rails 走了完全相反的道路,它说:“你知道吗?Rails 不仅仅是一个 Web 框架。它是解决 Web 问题的完整尝试。它是解决构建一个优秀 Web 应用所需一切的完整尝试,而这个谜题的每一块,理想情况下都应该在盒子里预先配置好、预先组装好。”
如果你想稍后更换其中的一些部件,那很好,但在第一天,你会得到一份由一位真正关心每一种食材的厨师设计的完整菜单,你会享受它的。这又是那种许多程序员会觉得,“我知道得更清楚”的事情,而他们在某些非常局部的意义上确实知道得更清楚。每个程序员都知道得更清楚。这就是 Ruby 的基础,即每个程序员在他们的特定情况下都知道得更清楚。也许他们能做一些危险的事情,也许他们认为自己知道得更清楚,然后他们就搬起石头砸了自己的脚,然后他们就真的会知道得更清楚了,因为他们已经砸过一次脚,不会再犯了。但“菜单是 Omakase”就是这个意思。
Lex Fridman
所以你总的来说是看重单体应用 (monolith) 的价值的?
DHH
是的。集成系统 (integrated system)。
Lex Fridman
集成的……
DHH
……有人考虑过整个问题。这也是我自从“微服务”(microservices) 这个词被创造出来就一直反对它的原因之一。微服务本质上源于一个好想法。当你在 Netflix 的规模下,有成千上万的工程师在处理数百万行代码时,你该怎么办?没有人能一次性把整个系统装在脑子里。你必须把它分解。在 Netflix 的规模下,微服务可以是一种合理的方式。当你把这个模式应用到一个 20 个程序员、处理 50 万行代码的团队时,你就是个傻瓜。你根本不需要把方法调用变成网络调用。这是分布式编程的第一法则:不要分布式你的编程。它让所有事情都变得更难。作为程序员,你必须考虑的所有失败情况,在涉及网络电缆时,都会变得无限困难,所以我讨厌过早分解的想法,而微服务正是如此。
单体应用 (monolith) 的理念是,让我们专注于构建一个单一的人类能够真正理解的完整系统,并通过压缩所有概念来将这个范式推向极致,这样更多的东西就能装进一个操作的人类的记忆中,然后我们就可以拥有一个我能真正理解所有 Basecamp、所有 HEY 的系统。这两个系统的代码量都刚过十万行。我见过有人做到这个规模的两倍、三倍,然后就开始出问题了。一旦你超过了五十万行代码,肯定没有哪个人能搞定了,那时你可能就需要某种程度的微服务了。
Lex Fridman
Basecamp 和 HEY 都是十万行代码?
DHH
十万行代码。
Lex Fridman
哇。那很小。
DHH
考虑到 Basecamp 我想大概有 420 个不同的界面和配置,这确实很小。
Lex Fridman
你把前端也算进去了吗?
DHH
不,那是 Ruby 代码。嗯,从某种意义上说它是前端,因为其中一些 Ruby 代码对前端有好处,但它不是 JavaScript,比如说。现在,另一件我们稍后可能会谈到的事是,我们实际上为我们所有的应用写的 JavaScript 都非常少。HEY,一个 Gmail 的竞争对手。Gmail 大概有 28MB 未压缩的 JavaScript。如果压缩一下,我想大概是 6MB,28MB。想想那有多少行代码。
HEY 推出时,我们只用了 40 KB。它试图解决的是同一个问题。你可以用 28 MB 未压缩的 JavaScript 来解决邮件客户端问题,或者用 40 KB,如果你用不同的方式来做。但这本质上是同一个问题。这就是为什么我激烈地反对把前端和后端分开。在我看来,这是对 Web 开发犯下的最大罪行之一,我们至今仍在为其赎罪。我们分离和分割了本应是一个统一的问题解决机制。当你同时负责前端和后端时,你了解整个系统,你就不会陷入那些分化阵营,最终搞出像 GraphQL 这样的东西。
Lex Fridman
好的。让我们快速过一下信条的其余部分。“没有单一范式”(No one paradigm)。
DHH
“没有单一范式”指的是,Ruby 在其核心是一门强烈的面向对象编程语言,但它也是一门函数式编程语言。我告诉你的那个 5.times,你基本上可以做这些匿名函数调用,并且可以把它们链接在一起,非常符合真正的函数式编程语言的工作方式。Ruby 甚至通过让字符串不可变而更接近函数式编程的范畴。来自软件开发所有不同学科和范式的思想都可以融合在一起。例如,Smalltalk 只是面向对象的,就是这样。Ruby 试图主要面向对象,但也借鉴了一些函数式编程、一些命令式编程,能够做到所有这些。Rails 也试图做同样的事情。我们不只是选择一个范式然后贯穿所有东西。
面向对象是其核心,但邀请所有其他学科进来是可以的。受到启发是可以的。重新混合是可以的。我实际上认为 Rails 的主要好处之一就是它是一个混搭。我没有发明所有这些想法。我没有想出 ActiveRecord。我没有想出 MVC 这种划分应用的方式。我把我从各个不同阵营学到和领悟到的所有伟大想法都汇集了起来。不是因为会有一个包罗万象的“万物理论”,而是因为我会有一个融合了各地精华的凝聚体。
Lex Fridman
这个想法是否与单体系统 (monolith) 的美感有些矛盾?
DHH
我认为单体应用 (monolith) 可以被看作是相当宽敞的,像一个大帐篷。单体应用实际上需要借鉴一些函数式编程,来解决那些该学科擅长解决的问题,那个范式擅长解决的问题。如果你也想让面向对象成为核心,我实际上认为,当我看函数式编程语言时,有很多值得喜爱的地方,然后我看到它们在解决问题的某一部分需要改变某些东西时,不得不经历一些疯狂的扭曲,你会想:“天啊,这对于 90% 的问题来说是一个很棒的范式,但当你试图解决最后 10% 的问题时,你完全把自己搞得一团糟。”
Lex Fridman
哦,“推崇优美的代码”(Exalt beautiful code) 是下一个。
DHH
我们已经详细讨论过这个了,这里有一个很好的例子,它很好地总结了 Ruby on Rails 的领域特定语言 (domain-specific language) 特质,即你可以让代码的编写和阅读变得愉快。这对我来说真的很有趣,因为正如我们谈到的,当我开始学习编程时,这甚至都不在考虑范围之内。我甚至不知道那可以是前提的一部分,可以是解决方案的一部分,即写代码可以感觉像写一首诗一样美好。
Lex Fridman
class Project < ApplicationRecord
belongs_to :account
has_many :participants, class_name: "Person"
validates_presence_of :name
end
DHH
看,你能读出来。你甚至没有改变任何东西。
Lex Fridman
就像一首俳句。
DHH
对。是不是很美?
Lex Fridman
是的,很好。真的很好。它有一种直观的特性。好的,我在这里有具体的问题。我的意思是,ActiveRecord,就拿这个岔路来说,那一定是你的最爱功能。
DHH
它是 Rails 的皇冠上的明珠。确实是。它是使用 Ruby on Rails 的决定性特征。而且它的诞生还带有一点争议,因为它实际上使用了一个 Martin Fowler 在《企业应用架构模式》(Patterns of Enterprise Application Architecture) 中描述过的模式。这是任何从事商业系统开发的人必读的最伟大的书籍之一,如果你还没读过,必须马上买一本。《企业应用架构模式》,我想是 2001 年出版的。这是我读过很多遍的为数不多的几本编程书籍之一。它非常了不起。在书中,Martin 描述了一系列关于如何构建商业系统的不同模式。而 ActiveRecord 在其中只是一个不起眼的小注脚。那个模式的名字就叫 ActiveRecord。你可以查一下。它的名字就叫 ActiveRecord。我甚至都懒得自己想个名字。但它允许以一种很多程序员觉得有点反感的方式,将数据库和面向对象结合起来。
他们实际上不想用 SQL 来污染面向对象编程那种美丽的本质。前几天 Uncle Bob 就有一篇咆哮,说 SQL 是有史以来最糟糕的东西。好吧,随便吧,我不在乎。这很实用。我们做的是 CRUD 应用。你从 HTML 表单里拿东西,然后塞进数据库。没那么复杂。你在这两个极端之间放的抽象越多,你越是在自欺欺人。这就是我们做的事。我们在和 SQL 数据库打交道。
顺便说一句,SQL 是那些经受住了 NoSQL 数据库、结构化列表数据长达十年的猛攻,并仍然占据主导地位的东西之一。学习 SQL 是一个很好的投资。每个使用 Web 的程序员都应该对 SQL 有相当程度的了解,即使他们在使用像 ActiveRecord 这样的 ORM(对象关系映射器),你仍然需要理解 SQL。ActiveRecord 所做的,与其说是试图用一种不同的范式来抽象掉 SQL,不如说是让编写 SQL 不那么繁琐,让它更适合在其他领域模型之上构建领域模型,因为你不需要手动编写每一条 SQL 语句。
Lex Fridman
我们得说一下,ActiveRecord 是一个 ORM,它是一个层,让与数据库的通信变得直观和易于人类理解。
DHH
甚至比那更简单。它把表 (tables) 变成类 (classes),把行 (rows) 变成对象 (objects)。我实际上认为 SQL 大部分都很容易理解。你也可以写一些非常难懂的 SQL golf,但 SQL 的基础,以及很多对 SQL 的批评,都是因为它当初是为人类消费而写的。它实际上相当冗长,特别是如果你在反复做像插入这样的事情。它相当冗长。INSERT INTO table (column1, column2, ...),然后 VALUES (value1, value2, ...)。
……在你要插入的每一列里,VALUES,括号,每一个与那一列匹配的值,手动写 SQL 会变得很乏味,但它实际上非常易于人类阅读。ActiveRecord 只是去除了那种乏味,它让以一种人类可描述的语言无法做到的方式组合事物成为可能。它把事物组合成方法,你可以组合这些方法,你可以在它们周围构建结构。我不讨厌 SQL,我只是像在编程中做很多事情一样,试图摆脱它们。SQL 并不是其中之一,我只是觉得,“我不想一遍又一遍地写同样的东西。”那是一种,“我们能更简洁一点吗?我们能让它与面向对象稍微匹配得更好一点,而又不试图隐藏我们正在把这些对象持久化到数据库中的事实吗?”
我认为很多 ORM 错就错在这里。它们试图生活在纯粹的对象世界里,从不考虑那些对象必须被持久化到一个 SQL 数据库中,然后它们就想出了一些复杂的来回转换的方式。ActiveRecord 说:“你知道吗?接受现实吧。”这个记录,这个对象,不会被保存到某个 NoSQL 数据库里,它会被保存到一个 SQL 数据库里,所以就把整个东西都围绕着这个来构建。它会有属性,那些属性会对应数据库里的列。没那么复杂,别把它搞得那么复杂。
Lex Fridman
是的,但我要说,我个人很喜欢 SQL,因为我是个算法爱好者,所以我喜欢优化,我喜欢知道数据库的实际工作原理,这样我就可以匹配 SQL 查询和表的设计,从而从表中挤出最佳性能。好的。基于那张表的实际使用方式。我认为这正说明了理解 SQL 的价值。我想知道,因为我开始看 ActiveRecord,它看起来真的很棒。那会让你变懒吗?不是你,而是一个刚开始使用 Rails 的人,你可能可以不真正学习 SQL 就混过去,对吧?
DHH
只要你想停留在能力的入门级别就行。这实际上是我对 Rails 的 overarching 使命,就是把入门门槛降到足够低,让某人可以在基本上什么都不懂的情况下开始在浏览器上看到东西。他们可以运行 rails new blog,运行几个生成器,他们就有了一个完整的系统……他们什么都不懂,但这是一个学习更多的邀请。让我感到兴奋的,这也和 AI 的讨论有关,是当这被变成一种 meme,即程序员不再需要有能力。“AI 会搞定,生成器会搞定。我不需要懂 SQL,ActiveRecord 会帮我抽象掉。”不不不。朋友,停一下。这里的道路是通往能力的。我是在教你东西。
我理解我不可能在五分钟内教你所有东西。任何在有价值的事情上做得好的人,都不可能在五分钟内学会所有东西。如果你想成为一个全面发展的应用开发者,那需要数年时间,但你实际上可以在几天内变得有些生产力,你可以在几天内找到乐趣。当然,你会在几分钟、几小时内找到乐趣,然后随着时间的推移,我可以教你更多。ActiveRecord 就像是说:“是的,是的。好的,从这里开始,然后,下周,我们上一堂 SQL 课。”
Lex Fridman
实际上,你有一个我很喜欢的优美表达。那就是一个伟大的编程语言,比如 Ruby,有一个平缓的坡道,但这个坡道可以通向无限。
DHH
完全正确。
Lex Fridman
是啊。它非常容易上手,非常容易开始……
DHH
而且它永无止境。
Lex Fridman
是啊。
DHH
总有更多的东西要学。这也是我仍然觉得编程很有趣的原因之一,我仍然在学习新东西,我仍然可以融入新东西。Web 作为一个领域足够深,你永远也学不完。
Lex Fridman
“提供锋利的刀”(Provide sharp knives)。
DHH
这是个很好的原则,因为换一种说法……相反的说法,Java 的说法是,“不要提供会伤到脚的枪”(Do not provide foot guns),对吧?
Lex Fridman
是啊。
DHH
我不想给你一把锋利的刀。你是个孩子,你驾驭不了一把锋利的刀。这是一把钝的黄油刀,去切你的牛排吧,对吧?那是一种非常令人沮丧的体验。你想要一把锋利的刀,即使你可能会割伤自己。我信任人类,就像数学信任人类一样。也许你会切掉一根手指。好吧,你不会再那么做了。谢天谢地,如果那是一根虚拟手指,它会长回来的。你的能力会增长,用锋利的工具工作更有趣。
Lex Fridman
这实际上有助于那条通向无限的坡道。
DHH
是的,有助于学习。
Lex Fridman
“重视集成系统”(Value-integrated systems)。
DHH
我们已经谈到那个了。Rails 试图解决整个 Web 问题,而不仅仅是一个小组件。它不是留给你一堆需要自己拼凑的零件。
Lex Fridman
“进步优于稳定”(Progress over stability)。
DHH
你知道吗?如果有一条原则过时了,可能就是这一条了。在现阶段,Rails 已经在很多代版本中都非常稳定。最新的主要版本 Rails 8,对于任何运行 Rails 7 的人来说,基本上是一次无操作的升级。Rails 7 对于任何运行 Rails 6 的人来说,也几乎是一次无操作的升级。我曾经认为,为了获得进步、为了保持在新事物的前沿,需要更多的变动,我写这个的时候还没有经历过 2010 年代 JavaScript 社区的屈辱,在那里,稳定似乎不仅不受重视,实际上还被鄙视。变动本身就是我们应该追求的价值。如果你三个月后还在用同一个框架,那你就是个傻瓜,我看到那个后实际上退缩了。如果我今天要写信条,我会写得不一样。我不会说,“进步优于稳定。”
Lex Fridman
也许这也与编程语言的年龄有关。
DHH
也许吧,或者说对问题有了更深的理解。我认为技术领域一个非常迷人的地方在于,我们有一种感觉,就是一切都在不断地快速变化。不,不是的。一切都以冰川般的速度在变化。偶尔会有一个范式转变,就像现在 AI 发生的事情一样,就像 2007 年 iPhone 推出时发生的事情一样,就像 95 年互联网出现时发生的事情一样。这基本上是我职业生涯的总和,三件事改变了。其他一切都只是增量式的小改进。你能认出 2003 年写的 Rails 应用。我知道,因为我当时写的那个 Basecamp 至今仍在运行,每年创造数百万美元的 ARR,为客户提供服务,使用的是当时推出的初始版本,而且它看起来,如果我眯着眼看,和我今天写的 Rails 代码很像。大多数事情都没有变,即使在计算领域,这其实是一件好事。我们在 JavaScript 生态系统中看到了,当所有人都对不断的变动感到疯狂时会发生什么。事情并没有那么频繁地改变。
Lex Fridman
顺便说一句,在这个小岔路上,你刚才明显地、口头上改变了你 15 年前的想法?
DHH
是的。
为什么管理者毫无用处
Lex Fridman
这很有趣。你有没有注意到这些年来你改变了很多想法?
DHH
我会说:“哦,是的。”然后也会说:“哦,不。”意思是,有些关于人性、机构、编程、商业的根本性问题,我确实改变了想法。然后我也经历过一些甚至更有趣的事情,就是我以为我改变了想法,尝试了一种新的方式,结果意识到我最初为什么会有那个观点,然后又回去了。这两种情况都有。后一种情况的一个例子,比如 37 Signals 的管理者。很长一段时间里,我会抨击工程经理,认为他们对于一个小甚至中等规模的公司来说是不必要的负担。有一次,我甚至开始有点怀疑自己了。我开始想:“你知道吗?也许所有程序员真的都需要每周和他们的工程经理进行一次一对一的心理治疗,才能成为一个完整的个体。”
我们试了几年,雇了一些非常好的工程经理,他们按照你应该做的方式来做工程管理,就像到处都在做的那样。在那之后,我想:“不。不,我当初是对的。这才是正确的,我们不应该有经理。”不是每个程序员都需要每周和工程经理进行一次心理治疗,我们不需要这些没完没了的预定碰头会,我们不需要所有这些会议。我们只需要让人们安安静静地,在长时间不被打扰的时间里,去解决他们喜欢的问题。幸福感就在这里找到,生产力也在这里找到,如果你能做到这一点,你绝对应该这么做。当这种情况被打破时,工程管理就成了一种必要的恶。
Lex Fridman
那么,支持管理者的理由是什么呢?
DHH
支持管理者的理由是,如果你确实有很多员工,就会有很多工作自然而然地出现。一对一是其中一个例子,程序员需要有人定期沟通。还有一个理想化的版本是,需要有人来指导初级员工的职业发展,给他们提供修正性的反馈,以及所有这些其他的事情。并不是说,在抽象层面上我不认同其中一些事情,但在实践中,我发现它们常常创造的问题比解决的要多。一个很好的例子是,你能从一个在你的工作上不如你的人那里得到反馈吗?你能得到一些反馈,你能得到关于你在工作中的表现的反馈。你对他人是否礼貌?你是不是一个好的沟通者?好的,是的,但你无法得到关于你工作的反馈,而那更重要。
更重要的是,如果你希望在职业上进步,你应该在比你更擅长你的工作的人手下和身边工作,而我合作过的每一个程序员,都远比对学习中层管理者能教他们的那些小技巧更感兴趣于在那个指标上提升自己的职业生涯,即提升自己的技艺。这并不是说那些没有价值,也不是说成为一个更好的人或更好的沟通者没有价值。当然,所有这些都有价值,但如果我必须二选一,我更看重能力。再说一次,我强调这一点无数次,因为我知道人们有时会听到什么,他们会听到“天才混蛋”也没关系,那很好,你应该原谅各种恶意行为,只要某人真的擅长他们做的事。
我完全不是那个意思。我想说的是,能力的历史就是向比你更优秀的人学习的历史,而这种关系应该优先于其他一切。当引入工程经理时,这种关系在某种程度上就被搁置了。现在,有趣的是,这个对话又回到了我们之前谈论的话题。大多数工程经理实际上以前都是程序员。他们至少在某种程度上懂编程,但我一次又一次地看到,他们很快就会失去对编程的感觉和手感,很快就变成那种只会检查进度的尖头老板。“只是看看我们在项目 A 上的进展,如果你需要什么的话,”或者,“我们真的要交付了吗?”好的,是的。也,不。闭嘴,让我一个人待着。让我编程,然后我再上来透口气。
我会和其他程序员交流,我们可以切磋,可以学到东西,我可以和他们一起琢磨问题,然后我们就能前进。如果你回顾一下计算机行业的历史,所有伟大的创新,都是由没有工程经理的小团队完成的。都是由技术高超的个体组成的。你请过 John Carmack 来这里。我曾经非常敬佩他的软件,不仅因为我喜欢《雷神之锤》(Quake),不仅因为我喜欢他们做的事情,还因为他分享了一些关于公司如何运作的信息。那里没有经理,或者也许他们有一个商务人员做一些商务上的事情,但那只是为了拿到钱。其他一切基本上都只有设计师和程序员,他们大概有八个人,就创造了该死的《雷神之锤 2》。你为什么又需要所有这些人呢?
你为什么又需要所有这些经理呢?我想,再强调一次,在一定的规模下,这种模式确实会失效。让十万个程序员在没有任何产品妈妈或爸爸告诉他们该做什么的情况下自由奔放是很难的。我理解这一点。然后即使我这么说,我也不完全理解,因为如果你看看像 Gmail 这样的东西,那就像是 Buchheit 当时在谷歌做的一个副业项目。即使是所有这些大公司,它们很多经久不衰的长期价值,都是由那些没有该死的经理的人创造的,而这并非偶然。这是一种直接的因果关系。多年来,我在某种程度上对管理这个概念变得更加激进,至少对我自己而言,知道我是谁以及我想如何工作,因为另一部分是我不想成为一个经理,也许这只是我作为一个内向的人,不喜欢每周都和人进行一对一通话的投射,但它也概括了我如何能够在我的职业生涯中取得进步。
我直到有了一扇可以关上的门,并且六个小时内没人能打扰我,才真正地在 Ruby 或其他方面达到了一个新的水平。
Lex Fridman
在公司里,一个可能的原因是招聘经理非常容易,而且经理也能从你这里分担责任,所以如果你只有一群程序员在到处跑,你的责任……处理每个问题的基本原则是需要脑力劳动的。
DHH
是的。
Lex Fridman
经理就像是,“你可以放松了,一切都会被照顾好的。”但他们接着又会雇佣自己的经理,然后就这样成倍地增加。我很希望我们美国的一些大公司能有一个额外的分支,我们可以一直运行……也许物理学家可以想出如何分割这个模拟,让那个分支里所有的经理都被移除。就在那个分支里,公关和传播人员也移除,甚至律师也移除。只留下工程师,让我们看看会发生什么,然后再把它合并回来。
DHH
我有种感觉,你已经在 37 signals 运行那个分支 20 年了。我尝试过分叉到另一边,我尝试过全职聘请律师,我尝试过聘请工程经理,我可以告诉你,在 50、60 人的规模下,当那些个体或者那些角色都不存在时,生活要好得多……这从来不是关于个体,而是关于角色。当那些角色不在你的组织里全职存在时。偶尔,你需要一个经理。偶尔,你需要一个律师。我可以偶尔扮演经理的角色,没问题,然后我可以再把它降为零。这几乎就像一个云服务。我想要一个经理服务,我可以在这周调用它七个小时,然后在接下来的三个月里把它降为零。
Lex Fridman
是啊,我读到过,不知道现在还是不是这样,Basecamp 是一个 LLC,而且没有 CFO,就是没有全职的会计。是这样吗?
DHH
现在我们确实有了一位财务主管。但在公司成立的前 19 年里,我想是没有的。我们基本上只靠一个会计来做账,就像你开一家小冰淇淋店一样,只不过随着时间的推移,我们的收入达到了数亿美元。这个规模显得有点古怪,而且有时候你也会爱上自己的古怪,以至于达到一种不健康的程度,我肯定也曾这样做过,我们应该早一点更勤奋地算账。这部分也是因为我们一直利润丰厚,销售的软件基本上可以有无限的利润率,这让你可以在很多事情上侥幸过关,而你或许本不应该这样做。部分让我吸取这个教训的是,当我们意识到我们没有在我们有业务关联的美国不同州份收取销售税时,我们花了大约两年时间和 500 万美元的和解金和清理费才摆脱那个烂摊子。在那之后,我想:“好吧,好吧,我们可以雇一个财务人员了。”
Lex Fridman
好的。
DHH
我们现在有一个很棒的财务人员,Ron,他实际上最终替代了我们以前有的另一个职位。我们以前有一个全职的数据分析人员,他会做各种各样的洞察挖掘,比如“人们为什么会注册这个东西?”我们这样做了 10 年,然后意识到,“你知道吗?如果我可以在数据分析人员和会计之间选择一个,我选会计。”
小团队
Lex Fridman
我非常喜欢这个,从很多层面上。我们能不能稍微深入一下你给的那个建议,即小团队更好?我认为那真的更少……少即是多。你之前怎么说的?“差即是好”?哦,抱歉。
DHH
“差即是好”(Worse is better) 在技术采纳上很多时候是这样。
Lex Fridman
是啊。
DHH
我认为这实际上源于同一件事。它源于这样一个事实:许多伟大的突破都是由,甚至不只是小团队,而是由个人创造的,由个人写出来的东西。一个人写的某些东西,在某些参数上,他们做的东西更差。当然,当一个人必须做出一个大公司有成百上千开发者可以投入去解决的问题时,他们的东西会更差,但在许多其他参数上,那种“差”就是价值,那种“少”就是价值。在《Getting Real》这本书中,我们早在 2006 年就写过,我们谈到了“更少的软件”这个概念。当我们在 2004 年刚开始做 Basecamp 时,人们总是问我们:“你们不害怕微软吗?他们有更多的资源,更多的程序员。如果他们看上了你们这个小众领域,然后派一千个程序员来解决这个问题怎么办?”
我的回答,部分原因可能是我当时才 24 岁,首先是:“不,一点也不担心。”但真正的答案是,他们不会做出同样的东西。你不可能用一个一千人的团队做出 Basecamp 这样的软件。你会做出的是一千人团队会做出的软件,而那根本不是一回事。无论是最终用户系统,还是开源系统和基础系统,很多主要的突破都是由个人或非常小的团队完成的。即使是所有那些关于苹果的经典历史,也总是说,嗯,有一个大的组织,但真正做出突破的团队,是四个人,是八个人,从来不是 200 人。
Lex Fridman
大团队似乎会拖慢事情的进度。
DHH
是的。
Lex Fridman
这太有趣了,部分原因是经理的问题。
DHH
因为人类无法扩展,人类之间的沟通当然也无法扩展。你基本上会得到网络成本效应。每当你增加一个新节点,成本就会呈指数级上升。这也许是我如此喜欢在 Basecamp 没有经理的关键原因,因为我们默认的团队规模是两个人。一个程序员,一个设计师,一个功能。当你在那种规模下运作时,你不需要复杂性,你不需要先进的方法论,你不需要多层管理,因为你可以直接去做。小团队的魔力在于他们就是去做。他们不需要争论,因为我们不需要设定方向,我们不需要担心路线图。我们可以坐下来做点东西,然后看看它好不好。当你可以只管做东西的时候,你就不需要计划,如果你可以摆脱计划,你就可以追随从代码、从产品、从你正在做的东西中浮现出的真相。
当你落后一步时,你更清楚下一步该怎么走,而不是提前 18 个月去规划所有的步骤。“我们如何从这里走到很远的地方?”你知道吗?这很难提前想象,因为人类在这方面很差。也许有一天 AI 会比我们好得多,但人类可以一步一个脚印地走。那不难,那能让你摆脱所有那些复杂性。过程变得简单得多,你需要的人少得多,这会产生连锁反应,你需要的流程少得多,你需要在会议上浪费的时间也少得多。你可以花那些漫长而美好的日子和星期,不受打扰地解决你关心且有价值的真正问题,然后你会发现那正是市场真正想要的。
大多数时候,没有人会因为某物背后有一个大公司而购买它。他们购买某物是因为它好,而你得到好东西的方式不是坐下来开会讨论,而是去尝试,去创造。
Lex Fridman
一个人,说实话,一个人在 100 个小时的深度工作、专注工作中能做的事情,真是不可思议。甚至更少。
DHH
我告诉你,我精确地记录了我在 Basecamp 第一个版本上花费的小时数。我之所以这样做,是因为当时我是以合同工的身份为 Jason 工作的。他付我……我刚要说每小时 15 美元,那是我刚开始工作时的报酬。我想他把我的工资提高到了光荣的 25 美元,但我当时是按小时计费的,我知道 Basecamp 第一个版本的发票是 400 个小时。这就是 2004 年一个独立的个体,创造一个完整的系统所花费的时间,这个系统后来创造了数亿美元的收入,并且至今仍然表现出色。一个人,只有我一个人设置所有东西。这个故事的一部分是 Ruby,一部分是 Rails,但很大一部分也是我加上 Jason 加上 Ryan 加上 Matt。
那是当时整个公司的人员,我们能用这么小的团队创造出具有持久价值的东西,正是因为我们是一个小团队,而不是尽管我们是一个小团队。“小”不是一个垫脚石。这是人们脑海中的另一个误区,也是我们《Rework》这本书的一个重要主题,它给了创业者们拥抱小团队的许可,不是把它当作一个中转站,不是“我正在努力变成一个千人公司”。不,我其实喜欢作为一个小团队。小团队更有趣。如果你问几乎任何人,我相信 Toby 也会这么说,即使在他那样的规模下,创造东西的纯粹乐趣也在于和一小群人一起创造的乐趣。现在,当你有一个大公司时,你可以在不同的规模上产生影响,我完全承认这一点,我也看到了它的吸引力,但在实际创造东西的过程中,永远都是小团队。永远。
杰夫·贝索斯 (Jeff Bezos)
Lex Fridman
你如何保护小团队?Basecamp 成功地保持了小规模。你必须击退的恶龙是什么?基本上,你赚了很多钱,就会有增长的诱惑,那么你如何不增长呢?
DHH
不要拿风险投资。
Lex Fridman
好的,那是第一步。
DHH
那是第一点。
Lex Fridman
首先……
DHH
第二点是……
Lex Fridman
……每个人都拿风险投资,所以你已经走了。
DHH
这在很长一段时间里都是答案,因为问题不仅仅是风险投资,而是别人的钱。一旦你拿了别人的钱,完全可以理解,他们想要回报,而且他们更希望获得尽可能大的回报,因为不是他们坐在那里写代码,不是他们从创造东西中获得日常的满足感,从编辑器里凿出优美的代码诗篇,对吧?他们没有那种满足感。他们可能会从看到一个好东西被创造出来中获得满足感,这很公平,但他们肯定也会从更高的回报中获得满足感。有一种感觉,尤其是在风险投资领域,明确表示,你拿钱的全部目的就是为了达到 10 亿美元或更多。
现在,通往那条路的路径通常是遵循既定的 playbook,而当涉及到软件时,企业销售 playbook 就是那个 playbook。如果你做 B2B 软件 SaaS,你会尝试找到产品市场契合点,一旦你找到了,你就会放弃你的中小型客户,用庞大的销售团队去追逐那些大客户,到那时,你就有了 1000 人,生活也就变得糟糕了。
Lex Fridman
话虽如此,人们只是对此感到好奇。你有机会认识了杰夫·贝索斯。他投资了 Basecamp,但不是控股……
DHH
他买的是二级市场的股份。有趣的是,当……投资有两个含义。通常人们想到投资,会认为是投入增长资本,因为你希望企业雇佣更多的人,做更多的研发,以便能发展得更大。贝索斯实际上没有那么做。他直接从我和 Jason 手中购买了所有权股份,那次购买的全部收益都进入了我和 Jason 的个人银行账户。是个人银行账户。没有一分钱进入公司的账户,因为我们不需要钱来增长。我们所需要的,或者说我们当然很享受的,在某种程度上也许是那份信任票,但更多的是,把一些东西变现所带来的安全感,让我们敢于拒绝风险投资的大笔资金。
这基本上是一种疫苗,防止我们想从那些想把公司带到一个我们不想去的地方的人那里拿更大的支票。Jeff 给了 Jason 和我足够的钱,让我们能安心地拒绝所有这些人,而不会在六个月后公司倒闭时,我们还在自责,说:“我们曾经有过价值数百万的东西,现在什么都没有了,还得担心房租和生活费。”
Lex Fridman
这是一张信任票。我很想听听 Jeff 对这个故事的看法,因为他并不需要钱。我想,这可能只是相信人,希望世界上能有酷炫的东西被创造出来,并从中赚钱,但不是那种……
DHH
百分之百,Jeff 的动机不是为了回报,因为他实际上有一个团队,他的私人办公室,负责管理这些投资,他们对我们给他的投资方案做了计算,那个方案荒谬到 Jason 和我写下我们的指标时都笑得前仰后合。我说:“没人会付这个价的。没人会给我们这么高的收入倍数,这没关系。”我的意思是,我们接那个电话基本上是出于对 Jeff Bezos 甚至想看我们一眼的敬畏。“你知道吗?我们不想要风险投资,我们不需要别人的钱,但我们就给他一个任何理智的人都不会同意的 bullshit 数字,然后我们就可以各走各的路了。”
他的投资团队说:“Jeff,不行。这根本不符合经济逻辑,他们的收入那么少,要价却那么高。”Jeff 只是说:“我不在乎,我想投资这个人。”因为对他来说,在当时,那只是小钱。Jason 和我每人拿了几百万美元,那天日元和美元之间的汇率波动,可能对他的净资产的影响比我们的投资大十倍。Jeff 似乎真心有兴趣和有趣的人、有趣的公司在一起,帮助别人走得更远。我实际上带着某种程度的遗憾回顾那段关系,因为我把那份信任票理所当然地接受了,以至于我有点惭愧。这些年来,我对亚马逊做的一些事情批评得更多了,我现在觉得这是合理的。
那只是处理这件事的一部分,但在经济意义上,他给了我们那种信心。他给了我们经济上的信心,但他也给了我们一位首席执行官的信心,他当时可能管理着美国最重要的互联网业务,他会参加我们每年一次的电话会议,然后基本上就是说:“是的,你们在做很棒的事情。你们应该继续做很棒的事情。我读了你们的书,很棒。你们推出的这个东西,很棒。你们就应该多做这些。我其实不知道怎么运营你们的业务,你们自己知道。”
Lex Fridman
书已经出版了。从一个粉丝的角度,我很好奇 Jeff Bezos 是如何能够看到……因为对我来说,你和 Jason 在科技领域是特别的人,而 Jeff 能够看到这一点,对吧?看到这一点有多难?
DHH
他确实很早就看到了,我认为这是 Jeff 比几乎任何人都做得更好的地方。他在其他人甚至还没睁开眼之前就发现了那个机会,或者说,他肯定比任何人都更早、更坚决地愿意下注,而且他一次又一次地被证明是正确的。我们不是他做的唯一一笔投资,而且当然,亚马逊有一个非常长期的愿景,远比我曾经有勇气保持的要长……我把自己看作一个长期思考者,但和 Jeff 玩的游戏相比,我玩的只是小孩子的游戏。当我回顾亚马逊在互联网泡沫破灭前后的经济状况时,它们看起来很荒谬。他们亏损了那么多钱,被市场那么讨厌。没有人相信它会变成现在的样子,但 Jeff 相信,那种程度的信念,我真的渴望拥有。
我想那是我从那段关系中学到的主要东西之一,就是你可以 просто相信自己。在那种逆境下,达到那种程度?那太荒谬了。他在我们这个级别上做了那么多次,如果我还在怀疑自己,那就太可悲了。
Lex Fridman
是啊。我认为亚马逊是那种公司。这些年来它受到了很多批评。这是人类我不太欣赏的一点,我们很快就把一件事带来的好处视为理所当然,然后就开始批评那件事。就像飞机上的 Wi-Fi。
DHH
正是如此。
Lex Fridman
我认为亚马逊,可以说亚马逊是过去 100 年来最伟大的公司之一。
DHH
当然,我认为这个论点很容易成立。我还认为,成为过去 100 年来最伟大的公司之一所付出的代价,就是大量的诋毁者、大量的反对和大量的批评。这实际上是宇宙恢复了秩序。我在互联网上这么久以来,最喜欢的老师之一是 Kathy Sierra。我不知道你是否知道她的作品,但在残酷的互联网把她赶走之前,她只活跃了短短几年,但她写了一个名为《创造热情的用户》(Creating Passionate Users) 的博客,她在我的脑海里刻下了这个关于宇宙平衡的概念。如果你在创造一个很多人都喜欢的有价值的东西,你必须创造一股与之相等且相反的仇恨力量。你不可能在拥有喜欢你所做之事的人的同时,却没有讨厌你所做之事的人。
唯一的出路就是平庸。如果你无聊到、无趣到没有人关心你是否存在,是的,你不会有仇恨者,但你也不会有那些真正享受你工作的人所带来的影响。我认为亚马逊就是这种现象的大规模体现,对吧?他们给技术、给商业带来了如此多的价值和改变,以至于他们必须拥有一个黑洞大小的仇恨者群体。否则,宇宙就会直接倾覆。
Lex Fridman
让我问问你关于小团队的事情。你多次提到 Jason,Jason Fried。你们合作了很长很长时间。也许可以说他更多地是负责设计和商业方面,而你是技术、工程方面的奇才。这么多年来,你们创造了这么多令人惊叹的产品,是怎么做到没有互相残杀的?这是一个很棒的合作故事。你能谈谈合作吗?你能说说你喜欢 Jason 的什么,从他身上学到了什么?为什么这能行得通?
DHH
首先,我要说的是,这些年来我们确实有好几次想杀了对方,但我想在过去十年里少了很多。在早期,我们的产品讨论非常激烈,以至于当我们在办公室里讨论,周围还有其他员工时,他们中的一些人真的会担心公司要散架了,因为房间里传出的音量会非常大,听起来非常尖刻,他们真的会担心整个公司会分崩离析。有趣的是,在当时,我们从来没有那样的感觉。我们总是觉得那只是在激烈地寻找更好的东西,我们之所以能够忍受在想法上的那种程度的对立,是因为那是关于想法的。那不是关于个人的,也从来没有真正变得个人化。不是从来没有,是真的没有变得个人化。不是像,“Jason,你这个混蛋。”而是像,“Jason,你这个傻瓜,你这个傻瓜是因为你看待这个问题的方式错了,让我告诉你正确的方式。”
Lex Fridman
作为一个小岔路,我想说,有些人说过,我们可能会回到这个话题,说你有时候在网上会发脾气等等。我从来不这么看,因为那是一样的东西。也许我没有看到你发脾气的真正痕迹,但通常都是关于想法的,只是一个兴奋、充满激情的人。
DHH
我正是这么想的。它并不总是以那种方式呈现出来,我能理解为什么旁观者有时会看到一些看起来像是我在攻击人而不是在讨论问题的事情。我确实认为我一直在努力改进这一点,但在我和……的关系中……
DHH
我确实认为我一直在努力改进这一点,但在我和 Jason 的关系中,我认为之所以能如此顺利,是因为我们各自有独特的专长领域,我们在这些领域完全信任对方。Jason 信任我做出正确的技术决策。我信任他做出正确的设计和产品方向决策,然后我们可以在商业、市场营销、写作和其他方面进行重叠和分享。所以这是一件事,如果你和一个与你做完全相同事情的人一起创业,并且你们不断地争论谁更有能力,我认为那会困难得多,也更不稳定。所以如果你创业,你们俩都是程序员,而且你们都做同一种编程,祝你好运。我认为那很难。
我试着选择一条更容易的路,和一位设计师合作,我知道至少有一半的时间我可以直接委托给他的经验和能力,然后说:“你知道吗?我可能有意见。我随时都有关于设计的意见,但我不需要赢得争论,因为我信任你。”现在,偶尔我们会在商业或方向上有重叠,我们都觉得自己在其中有很强的利害关系,我们都声称自己在那方面有能力,但出于某种原因,我们也都有一种长远的眼光,我会说:“你知道吗?我认为我们在这里错了,但正如我从 Jeff Bezos 那里学到的,顺便说一句,我会‘不同意但承诺执行’。”那是他早期教给我们的一个绝对关键的教训,甚至可能对确保 Jason 和我能合作四分之一个世纪起到了决定性作用。“不同意但承诺执行”(Disagree and commit) 是 Jeff Bezos 的经典名言之一。
Lex Fridman
我只是很惊讶,小野洋子 (Yoko Ono) 还没有出现。你知道我的意思吗?这个世界上有太多的小野洋子了。
DHH
如果没有部分原因是我们不是整天黏在一起,这可能已经发生了。我们职业生涯的大部分时间,我们甚至都不在同一个城市。我搬到美国后,在芝加哥住了几年,那时我们刚起步,但在 2005 年之后,我搬到了马里布,然后住在西班牙,然后又住在哥本哈根。Jason 和我,从我们关系的建立之初,就学会了一种非常高效的合作方式,我们实际上不需要太多交谈。在任何一个星期里,如果 Jason 和我直接交流沟通的时间超过两个小时,我都会感到惊讶。
Lex Fridman
是啊。有时候,就是那些基本的人类摩擦,会随着时间的推移不断累积。
DHH
是的。我想,如果你和另一个人靠得太近,那个人最好是你的配偶,如果时间太长、太频繁的话。
Lex Fridman
是啊。但即使是那样,新冠疫情也真的考验了这种关系。看着很有趣。
DHH
是的,我认为保持一些距离是……这有点反直觉,因为我想很多人认为合作越多越好。点子越多碰撞越好。但 Jason 和我,出于某种原因,在职业生涯早期就得出了一个结论:绝对不是。那完全是胡扯。这就是为什么我们是远程工作的坚定支持者。这就是为什么我喜欢在我的家庭办公室工作,我可以关上门,六个小时不见到另一个人。我不想一直和你碰撞想法。我想偶尔和你碰撞想法,然后我想自己去实现那些想法。
有太多的“碰撞”,却没有足够的“得分”,不够的“灌篮”,我认为这是高管角色的一大陷阱。一旦一个创始人把自己提升到高管的位置,他所做的只是告诉别人该做什么,那就是他们 24/7 生活的领域。他们只生活在想法的领域。“哦,我可以告诉更多的人,做更多的事情,我们就可以看着它发生。”如果你真的必须参与到执行中去,你就会放慢你的马。你知道吗?我上周有个好主意。我要把剩下的好主意留到下个月。
为什么会议是有害的
Lex Fridman
经理和高管层有一种做事的冲动,而那种“做事”通常意味着开会。所以这就是为什么你说……
DHH
是的。他们的工作就是告诉别人该做什么。
Lex Fridman
是的。还有会议,所以这是你强烈反对的事情之一就是会议……
DHH
会议是有害的。我认为这与 Jason 和我的关系紧密相关。如果我必须计算一下我们 24 年合作中开过的会议总数,就是我们亲自面对面坐下来讨论一个话题的次数,可能比一家大型科技公司三个月的会议还要少。我们真的没有做过那么多。我们没有把它消耗殆尽。特朗普有一次提出了一个有趣的比喻,说一个人一生中能走的步数是有限的。这是长寿的论点。你能做的活动就那么多,然后你就用完了。
这个想法的核心可以应用到人际关系上。我们之间能有的交流是有限的。我们能在一起的时间也是有限的,你会把它消耗殆尽。Jason 和我都很小心,不去消耗彼此。我认为这对于我们关系的持久性绝对是关键,再加上那种信任,以及我们真的喜欢工作本身这个事实。我们不只是喜欢头脑风暴,那种我们只是想出好点子的地方。不,我们喜欢去实现那些点子,我们喜欢亲自成为那个过程的一部分。我喜欢编程,他喜欢做设计。我们可以各自去做自己的小事情,很长时间。偶尔我们会聚在一起说:“嘿,我们来发布一个很棒的产品吧。”
Lex Fridman
这可能听起来像是我在让你做心理治疗,但我发现我自己有时会想要或渴望开会,因为我感到孤独。远程工作就是一个人坐着,我不知道,长时间下来会变得非常孤独。
DHH
我给你个建议。找个妻子。
Lex Fridman
是的。该死的。
DHH
生几个孩子。
Lex Fridman
好吧。
DHH
家庭真的是孤独的良药,我尽可能真诚地这么说。我职业生涯早期远程工作时,确实有过你描述的那种感觉,当时我就是一个人住在一套公寓里,一个典型的刻板印象,我刚搬到芝加哥时,地板上只有一个床垫。然后我买了一台大电视,甚至都没挂起来,然后我有一堆 DVD。我基本上就是,工作很长时间,然后回家就那样,那并不好。真的不好。我确实认为人需要人。如果你在工作中得不到,而我实际上有点不希望在工作中得到,至少我不希望每周 40 个小时都那样。那不是我喜欢的。
你需要别的东西。你生活中需要其他的关系,如果你能找到一个你真心想花很多时间在一起的人,那就没有比这更深厚的关系了。这很关键,我认为对 Jason 和我来说都很关键,我们都有家庭很长时间了,这让你以一种方式脚踏实地,创业公司的冲刺可以换成持久公司的马拉松,你会以一种方式安定下来。我们刚才简短地谈到,我有时会激动起来。我的意思是,很多时候,也许是大多数时候,我对某些话题会激动起来,但现在我激动的方式和 24 岁时不一样了。我仍然对想法充满激情,努力寻找正确的东西,但拥有一个家庭,遇到我的妻子,围绕着它建立一个生活,以一种完全陈词滥调的方式让一切都变得平和了,但我认为这实际上是关键。
我认为,如果我们能让更多的年轻人,甚至更年轻的人,不要等到三十多岁甚至四十出头才和某人结婚,我们会过得更好,我们的商业关系也会更稳定,因为人们会在别处得到那种滋养的人际关系。现在,当我说这些的时候,我也承认,这些年来有很多伟大的企业不是远程建立的,而是由一群流氓在办公室里长时间工作建立起来的。
我的意思是,John Carmack 和 Tim Sweeney 都在 90 年代的职业生涯中谈到过,那基本上就是工作、睡觉、和办公室的伙计们混在一起,对吧?完全公平。那从来没有吸引过我。Jason 和我对于每周工作 40 小时就足够了这一点看法一致,如果我们想走得更远,不仅仅是为了建立一个风投案例然后退出的那五到七年,而是可能 10 年、20 年甚至更久,我们就需要成为完整的人,因为只有那种完整的人性才能走得更远,这包括在工作之外建立友谊,有爱好,找到伴侣并拥有家庭。而整个这种存在,即工作不是生活中唯一的事情这个支撑,与我们已经存在了 25 年这个事实完全相关。有太多的,尤其是在美国,是错误的权衡。哦,你想建立一个成功的企业?那么你可以在金钱、享受、家庭或健康中选一个。
什么?我们为什么必须放弃所有这些?现在,再说一次,我不是说,在某些时刻,某些人生阶段,你可以冲刺,但我想说的是,如果那个冲刺变成了十年,你会为此付出代价的。而且你会以我一次又一次看到的方式付出代价,那看起来是一个非常糟糕的交易,即使它成功了。顺便说一句,大多数时候它并不成功。大多数时候创业公司都会倒闭。大多数时候人们花五、七年时间做一些没有结果的事情,他们也得不到回报。然后他们就坐着后悔,说:“我 20 多岁的时候到底发生了什么?”很早以前,Jason 和我基本上就达成了协议,我们一起工作不会导致那种后悔,我们会允许自己和对方在工作之外建立一个完整的生活。而这行得通这个事实,我觉得几乎像是禁忌知识。
当然,在美国的技术圈里,这是我们 20 年来一直试图倡导的事情,但我们仍然因此受到抨셔。就在两天前,我又和某人在推特上吵了一架,他说:“哦,好吧,也许那行得通,但你们没有变成 Atlassian,所以你们是失败的。Basecamp 不是 Jira,所以你们还费什么劲呢?”这是一种非常有趣的赢家通吃的心态,除非你在所有方面都主宰了其他所有人,否则你就输了。而生活中的很多事情远比这更开放,允许多个赢家,我们可以最终拥有一个多年来赚取了数亿美元的企业,我们保留了其中的大部分,可以做任何我们想做的事情,这就足够了。这很好。这很棒。这实际上是值得追求的东西。当然,这应该是某人可以考虑选择的道路,而不是那种主导一切的风险投资独角兽或破产的心态。
反对退休的观点
Lex Fridman
是的。我很想问问你关于这次交流的看法,你可以给我解释一下整个事件的来龙去脉。但我想先稍微延伸一下,我认为科技界创始人的成功有一种普遍观念,那就是拼命工作几年,然后退出,以数亿美元的价格卖掉公司。这被视为成功。但现实中,当你观察像你这样真正聪明、有创造力的人,了解他们的本质和幸福的含义时,你会发现,幸福实际上意味着一生都在工作。因为你真心热爱编程,热爱创造,热爱设计,你并不想退出。关于这一点,你曾有过非常精彩的论述。所以,你实际上是想创造一种生活,在这种生活中,你总是在创造,同时又不会让工作完全占据你的生活。
DHH
所谓的“莫吉托岛” (Mojito Island) 只是一个幻象,一直都是。对于有抱负的人来说,根本不存在退休这回事。你不可能真的坐在沙滩上喝着莫吉托,过上两周就心满意足了。在那之前,你可能就快要疯了,迫不及待地想重新投身于行动之中。大多数有能力实现这种“退出”的人,最终都会面临这样的情况。我几乎从未见过有谁能真正做到这一点,但许多人却以为这就是他们奋斗的目标。他们牺牲一切,就是因为觉得只要到达终点线,一切就都圆满了,就可以退休,高枕无忧,尽情放松。但你最终会发现,那种放松其实是地狱。对于有创造力的人来说,浪费上帝赋予的创造力和才能,简直就是一种折磨。我很幸运,在早期就读了米哈里·契克森米哈赖 (Mihaly Csikszentmihalyi) 的《心流》(Flow) 这本书。
Lex Fridman
哇,发音很标准。
DHH
你知道吗?为了准备这次访谈,我这几天特意用 AI 练习了他的名字发音,因为我知道我会引用他,而我之前念错过好几次。所以是 AI 教会了我如何相对准确地念出这个名字。在他整个职业生涯中,他的主要工作基本上就是围绕“心流”这个概念,这源于他对幸福的探索。为什么有些人快乐?他们什么时候快乐?他的发现非常有启发性。他发现,人们在“莫吉托岛”上并不快乐,在摆脱所有义务和责任时也不快乐。不,他们的快乐来自于那些挑战自我、将能力拓展到超越现有水平的时刻。在那些心流状态下,他们可以忘记时间和空间。他们可以坐在键盘前,解决一个棘手的编程问题,感觉只过了 20 分钟,结果却发现已经过去了三个小时。
他们会以极大的喜悦回顾那些时刻,而那正是幸福的巅峰。如果你剥夺了对这类问题的追求,如果你消除了生活中的所有难题,你会变得沮丧,生活也不会愉快。当然,有些人可以做到,但他们和创建这类公司的人不是同一类人。所以你必须接受自己是什么样的人。如果你走在这条路上,别自欺欺人。不要骗自己说,我只是暂时牺牲一切——我的健康、家庭、爱好、朋友——但 10 年后我都会弥补回来,因为到那时我就有能力这么做了。
事情从来都不是这样发展的。无论从哪个角度看,这条路都走不通。如果你成功卖掉了公司,这条路走不通,因为退休两周后你就会无聊得要死。如果公司失败了,你为过去 10 年的徒劳无功而后悔,这条路也走不通。如果一切顺利,你继续留在公司,这条路同样走不通,因为事情永远不会变得更容易。所以,如果你认为生活中只有工作,没有其他,那么你在所有方面都会失败。我不想那样。我想要心流带来的幸福。我明白那个洞见是正确的,但我想以一种能够持续 40 或 50 年的方式去追求它。
Lex Fridman
我听你说过另一个有趣的观点,就是如果你真的退出了,卖掉了公司,但又想继续创业,再开一家公司,通常不会像第一次那样有成就感,因为你的第一个“孩子”……
DHH
你无法再来一次,或者说大多数人都无法再来一次。首先,他们的第二个想法通常不如第一个好。像我们用 Basecamp 抓住的那种机遇,真的是千载难逢。我从经验中知道这一点,因为我们后来也尝试做过很多其他业务,其中一些取得了中等甚至不错的成功,但没有一个能达到 Basecamp 的高度。想再次成功真的很难。但创始人都是些自大的家伙,包括我自己,我们总觉得自己的成功很大程度上是因为我们太牛了,比所有人都强。在某些方面,某些时候,这或许是对的,但你也可能只是在某个热门时期,恰好擅长一件重要的事情。那扇门打开了,然后又关上了。现在你仍然擅长那件事,但已经不重要了,没人在乎了。
这是一方面。另一方面,第一次的体验只有一次,你无法重来。我不知道自己是否还有精力再去经历一遍创业初期的那些破事。我说“破事”是带着最亲切的感情说的。经历这一切当然很棒,但我知道的太多了。这也是为什么每次有人问我,“如果你能对年轻的自己说些什么,你会说什么?”我的回答是,我他妈什么都不会说。我不会剥夺年轻的自己因对世界运作方式的无知而获得的那些宝贵的人生体验。积累关于世界如何运作的智慧本身就是一种乐趣,你必须一点一滴地去构建。
如果直接把所有结果都告诉你,就像是,“嘿,要不要看这部电影?结局是这样的。”那我就不想看了,你剧透了。我不想你剧透我的创业经历,也不想你破坏我的任何一份无知。很多时候,当你开始新事物时,最大的幸运在于:一,你不知道它会有多难;二,你不知道自己不知道什么。冒险本身就是回报,责任本身也是回报。这是乔丹·彼得森 (Jordan Peterson) 教会我如何清晰表达的一点:责任是意义的关键。
维克多·弗兰克尔 (Viktor Frankl) 在《活出生命的意义》(Man's Search for Meaning) 中也谈到这一点,即只要有理由,我们就能忍受任何苦难。当然,他谈论的是在集中营里那种真正改变人生的经历,但你也可以把它应用到更小的、不那么危急的日常生活中。创立公司过程中的所有艰辛,都是你主动承担的责任。你之所以愿意承担,部分原因在于你并不完全了解它意味着什么。如果一开始就知道会有多艰难,路上会有多少挫折,如果你在开始前就听到了这样的故事,我可能会想,“呃,也许我还是去找份工作吧。”
努力工作
Lex Fridman
你刚才说了很多有智慧的话。只挑一点来说,有趣的是,有时候那些给出建议、分享智慧的人,自己已经经历过所有的“破事”,所以从某种程度上说,你确实需要自己去犯错。因此,我仍然会给出这样的建议:你应该在人生的某个阶段过度努力地工作,即使最终失败了。我认为,除了亲身经历,你无法真正学到为什么那是个坏主意。在某种程度上,是的,但你当然不希望……
DHH
我认为你应该挑战极限,但不确定是否需要为此花费十年。
Lex Fridman
是的,十年确实是个问题。20 多岁是一个特殊的时期。
DHH
这代价太大了。你的 20 岁、30 岁、40 岁都一去不复返。如果我没有在 20 多岁时做其他事情,我会后悔的。如果我没有享受应有的乐趣,没有结交那些朋友,没有培养那些爱好,没有在足够年轻的时候开始赛车并真正擅长它,如果我当时只是一门心思扑在事业上,结果可能还是一样的。这是 Derek Sivers 教给我的。他有一篇很棒的文章,讲他去骑自行车,他可以全力以赴,用 19 分钟完成,也可以享受过程,放慢 5% 的速度,用 21 分钟完成,最终发现只差了两分钟。
我要么一直全力以赴,不顾其他,到达终点时筋疲力尽;要么我走同样的路程,可能晚到两分钟,但能欣赏风景,聆听鸟鸣,闻闻花香。这段旅程本身也很有价值。当然,我这么说的同时,也承认并赞赏这样一种观点:如果你想在某件事上成为世界第一,你就必须牺牲一切,必须全身心投入。没有任何一个世界顶尖的人不是完全痴迷于他们所做的事情。我不需要在任何事情上都做到最好。这是我早期就拥有的一种罕见的谦逊,我觉得:“你知道吗?我没那么聪明,没那么优秀,也没那么有才华。我可以通过结合我所知的不同方面和元素来做一些有趣的事情,但我不会在任何领域都成为最顶尖的。”
这让我从那种单一的执念中解脱出来,不再想着“我要成为世界上最好的程序员”。我知道我不是。在我还没搞懂条件语句如何工作之前,我就已经失败了两次。我没有那么聪明,无法在任何事情上做到最好,也没有足够的毅力去做到。这在某种程度上是一种幸运。我认为,作为一个社会,我们既要赞美顶尖的卓越,也要赞美达到那种境界所需的极致投入。同时,我们也要认识到,并非所有人都需要成为迈克尔·乔丹 (Michael Jordan),因为那样的人只有一个。
Lex Fridman
嗯,我们应该说,有些追求确实需要单一的执念。篮球就是其中之一。顺便说一句,赛车可能也是。如果你想成为世界顶尖的 F1 赛车手……
DHH
如果你想成为塞纳 (Senna),你就必须是个疯子。
Lex Fridman
但我认为,大多数领域,比如编程,如果你想成为所谓的“最好”,无论那意味着什么,我认为那是在你生命尽头时才会被评判的。通常,如果你审视那条道路,它会是非线性的。它不会像一个只专注于一件事的奥运选手的生涯。在你的 20 多岁时可能会有一些迷幻的经历,或者有一些弯路。对于真正的伟人来说,总会有弯路,有时这些弯路不像史蒂夫·乔布斯 (Steve Jobs) 那样的迷幻经历。它们可能只是你在不同公司工作的经历,或者你为不同事业付出的努力。但它会是非线性的,不会是单一的专注。
DHH
我有时会这样想:我希望在学习上找到一个好的平衡点。我可以在我定义为“擅长”的任何事情上,轻松进入前 5% 的行列。要进入前 5% 可能比进入前 0.1% 容易 20 倍,甚至 100 倍。后者几乎是不可能完成的任务。但如果我满足于只做到前 5%,我就可以同时在五件事情上都达到这个水平。我可以写作写得很好,赛车开得还不错,编程也相当在行,我还可以经营一家公司,拥有一个家庭。
我可以同时做很多事情,这给了我一种多样性,这几乎是理想化的。卡尔·马克思 (Karl Marx) 有个想法,哦,我早上钓鱼,晚上打铁,周末画画,对吧?对我来说,至少有一种感觉,他关于异化的诊断是正确的,那种隧道般的视野,只专注于一件事,会让我感到一种无法忍受的疏离感。
当我深度投入编程时,有时会持续几周,甚至在少数情况下会长达数月,之后我必须浮出水面,换口气,去做点别的事情。比如,好了,今年的编程任务完成了,我的部分做完了。然后我会去写作,或者在网上“惹惹”人,或者开几圈赛车,做点别的事。这样,明年我才能再次全力以赴地投入编程。
我们为何离开云端
Lex Fridman
说到在网上惹人,你得给我解释一下这个风波。好的,就是那个人说:“想象一下,输给了 Jira,却还吹嘘自己每年有几百万美元的利润。”这与那个几乎已经成为一个梗的决定有关——离开云端。DHH 离开了云端。我认为这简直成了一个梗,但同时也是一个非常有趣的决定。你能详细讲讲 DHH 离开云端、离开 AWS、节省开支以及那个人现在所持观点的整个故事吗?
DHH
他的意思是,我们浪费了时间去优化一个本可以大 100 倍的业务,如果我们当初选择“奔向月球” (gone for the moon) 的话。
Lex Fridman
“奔向月球”包括什么?
DHH
包括风险投资,包括其他一些事情,比如不关心成本。
Lex Fridman
但也因为通用人工智能 (AGI) 即将到来,你们本应该投资于 AI,对吗?这只是其中一部分吗?
DHH
有点这个意思。我认为这个论点有点模糊,但如果我们从其最理想化的角度来看,我其实认为这是一个合理的观点:你可能会因为过于专注于计算几分钱而忽略了去赚取几百块钱。我通过退出云服务优化了我们的基础设施开销,这花了一些时间。我本可以用这些时间去开发更多功能以吸引更多客户,或者花更多时间在 AI 上,或者做其他事情。机会成本是真实存在的,我并不否认。我反对的是这样一种观点:对于我们这样规模的公司来说,每年在基础设施上节省 200 万美元——其中大约一半到三分之二直接计入利润,也就是说这笔钱会作为所有者回报给 Jason 和我,并作为利润分享计划的一部分分给我们的员工——这样做是完全值得的。
成本不重要的想法是一种非常硅谷式的思维方式,我再次表示,在某种规模下我能理解,但我也认为这在美学上并不令人愉悦。一个低效的企业,就像一个充满冗余代码的程序一样,让我感到头疼。我讨厌看费用报告,看到那些不成比例的浪费。几年前,当我审视 37signals 的开支时,我看到了一些不合理的账单。我记得在云时代之前我们在基础设施上的花费,而现在看到的数字与我们的需求不成比例。随着时间的推移,计算机变得越来越快,难道成本不应该越来越低吗?为什么我们在服务更多客户的同时,花费却越来越多?是的,客户变多了,但计算机也快了很多。摩尔定律 (Moore's law) 应该会降低成本,但现实却恰恰相反。为什么会这样?这开启了一段探索之旅,去揭示为什么云服务并不像人们想象的那么划算。
AWS
Lex Fridman
是的。我们能看看具体的细节吗?这样不了解这个故事的人也能明白,然后我们再把它推广到云在科技行业中的角色。具体来说,你们之前用的是 AWS S3。
DHH
我们之前所有东西都用 AWS。HEY.com 是一个完全基于云的应用,完全构建在 AWS 之上,包括计算、数据库等所有服务。我们按照最佳实践使用了所有系统。我们在 AWS 上的总开销,包括 Basecamp,峰值时大概是 320 万或 340 万美元。这可是一大笔钱,340 万。虽然我们有很多用户和客户,但这仍然让我觉得不合理。之所以觉得不合理,是因为云服务的宣传语还在我耳边回响:嘿,这会更快、更容易、更便宜。你为什么要自己发电?你有自己的发电厂吗?为什么要这么做?把计算机交给超大规模云服务商 (hyperscalers) 吧,他们在这方面做得更好。
我当时觉得这个宣传很有说服力。我信了好几年,心想:“你知道吗?我再也不想拥有任何一台服务器了。”我们就租用计算能力,亚马逊 (Amazon) 能以比我们自己购买便宜得多的价格提供服务,因为他们有规模经济。我当时还想着杰夫·贝索斯 (Jeff Bezos) 的那句话:“我竞争对手的利润就是我的机会。”他就是用这句话来驱动 amazon.com 的,只要他能赚 2%,而对手想赚 4%,他最终就能赢得所有市场,靠量取胜。
我以为这也是 AWS 的运营理念。但事实并非如此。顺便说一句,AWS 的利润率接近 40%。仅这一点就暗示了竞争对手无法做到我们所期望的资本主义竞争——即降低成本。所以,在我看来,云服务的宣传从根本上就是虚假的。首先,它并没有变得更容易。我不知道你最近用过 AWS 没有,它非常复杂。如果你觉得 Linux 很难,那你肯定没试过为 AWS 设置 IAM 规则或访问参数之类的东西。
Lex Fridman
AWS 一直都很难。它一直都……
DHH
嗯,我认为它变得更难了,但确实如此。当然,部分原因是它功能强大,你可以随时调用大量计算能力,这些理由我并不认为足以解释整个系统为何变得如此复杂。但可以肯定的是,它不再更容易。使用 AWS 并不比运营自己的机器更容易,这一点我们在撤出云端、并且没有多雇佣一个人的情况下就验证了。即使我们自己运营所有硬件,团队规模也完全没变。所以,你有这样一个三方面的宣传:它会更容易、更便宜。它肯定不便宜,我们通过将基础设施开销削减一半到三分之二已经证明了这一点。最后是它会更快。这一点是真的,但太多人高估了这种速度的价值。
如果你需要在接下来的 15 分钟内上线一千台计算机,没有什么比云更快了。你怎么可能采购到这么多?如果我们只需要再增加 20 台服务器,那也需要一到两周的时间才能把机器装箱、用托盘运到数据中心、拆包、上架。但我们有多频繁地需要这样做呢?如果我们购买这些服务器要便宜得多,从而用同样的钱获得更多的计算能力,那么我们有多频繁地需要这样做呢?我们是否可以 einfach 多买些服务器,而不用去关心计算资源的超优化,不用依赖自动伸缩 (automatic scaling) 来降低成本?是的,我们可以。所以,我们在 2023 年初经历了这个认识过程,当时我终于受够了我们的账单。
我想摆脱它们。我想花更少的钱,把更多的钱留给自己。在短短六个多月的时间里,我们把七个主要应用的计算、缓存、数据库等服务,都从云端迁移到了我们自己的服务器上。这是一批崭新、漂亮、光荣的服务器,从服务器之王迈克尔·戴尔 (Michael Dell) 那里买的。顺便说一句,他也是我的偶像之一。我看到他刚刚庆祝了公司成立 41 周年。41 年,这个人一直在卖我们整个公司都在用的超棒服务器。总之,这些服务器在几周内运到,我们把它们上架、启动,至少计算部分就这样搞定了。然后,我们还有一个长达数年的 S3 承诺,因为在云端获得合理价格的唯一方法,不是按天购买,不是按天租用,而是签订多年合同。计算服务通常是一年,我们当时就是这样。
而存储服务则是四年。我们签了一份为期四年的合同,将我们 PB 级别的客户文件存储在云端,才能获得一个还算过得去的价格。所以,所有这些项目最终都指向一个结论:我们现在每年实实在在地节省了数百万美元,预计五年内能省下大约 1000 万美元。当然,具体的账目和总拥有成本 (TOC) 很难精确计算,但确实是数百万美元。但这不仅仅是钱的问题,退出云端也意味着回归到一种更原始的互联网理念。互联网的设计初衷并不是让三台计算机掌控一切,它是一个分布式网络,即使个别节点消失,整个网络依然能正常运行。DARPA 的设计初衷是,即使俄罗斯摧毁了华盛顿,他们依然可以从纽约反击,整个通信基础设施不会因为没有中心辐射型结构 (hub and spoke) 而瘫痪。它是一个网络。我一直觉得这是一个非常美的愿景。
一个无比美好的愿景,你可以拥有这样一个辉煌的互联网,没有任何一个单一节点能够控制一切。而现在,随着这些超大规模云服务商的出现,我们又回到了一个更倾向于由单一节点控制一切的模式。当 AWS 的主要和最初的区域 US-East-1 宕机时——这在过去几年里发生过不止一次——似乎整个互联网的三分之一都瘫痪了。这本身就是对 DARPA 设计的侮辱。这并不否认 AWS 所构建的东西是了不起的。我认为云技术在很多方面推动了进步,尤其是在虚拟化、自动化、配置等方面。正是系统管理领域的这些巨大飞跃,让我们现在能够以一种闻起来和感觉上都像云的方式在本地 (on-prem) 运行,但成本只有一半甚至更低,并且拥有自主权和拥有硬件的满足感。
我不知道你上一次看到一台真实的服务器,拆开它,看看里面是什么时候了。这些东西太漂亮了。我在数据中心发布了几张我们机架的照片,人们总是为之疯狂,因为在这个云时代,我们已经与底层的金属硬件脱节太久了,大多数人根本不知道。他们不知道现代 CPU 有多强大,不知道一个 1U 的机架里能塞下多少内存。计算领域的进步一直很激动人心,尤其是在过去四五年里,台积电 (TSMC) 在苹果的帮助下真正推动了技术的发展。我们曾经停滞了一段时间,当时英特尔 (Intel) 停滞不前,然后台积电在苹果的推动下,真正地向前迈进,现在服务器又变得令人兴奋了。你每年都能看到 15%、20% 的性能提升,而不是我们曾经停滞的个位数增长。这一切都意味着,拥有自己的硬件比以往任何时候都更加可行,你只需要更少的机器就能运行更多的服务。而且,更多的人应该这样做,因为尽管我非常喜欢杰夫 (Jeff Bezos) 和亚马逊,但他并不需要在我购买的所有用于运营我们业务的技术产品上再赚取那额外的 40% 的利润。
我一直关注这件事,既有出于对 DARPA 原始设计的敬意,也有出于运营我们自己硬件的实用性考虑,看看我们能用最新的机器把性能推到多快,然后还能省钱。做这件事既令人愉快,又对很多人来说是反直觉的。因为我认为,对于行业里的很多人来说,我们似乎已经达成共识,不再购买计算机了,这件事情就交给 AWS、Azure 和 Google Cloud,我们不再需要拥有这些东西。所以,当有人,比如我们,站出来说:“啊,你知道吗?也许你应该有台自己的电脑”,这让一些人感到有点措手不及。
拥有自己的服务器
Lex Fridman
运行自己的服务器有什么痛点吗?
DHH
哦,多得很。操作各种计算机都有痛点。你最近用过个人电脑吗?一半的时候,当我的孩子或妻子遇到问题时,我都会说:“你试过关机再重启吗?”计算机对人类来说本身就是痛苦的。不过,拥有自己的计算机让其中一些痛苦变得值得。真正拥有硬件带来的责任感,至少对我来说,让操作硬件的负担变得稍微愉快一些。当然,有些东西你必须学习,尤其是在我们这样的规模下。我们不只是买一台电脑然后插上网线,我们有成排的机架,需要设置网络布线,这其中有一些专业知识。但这并非造核火箭那样的技术,也不是什么稀缺的知识。
毫不夸张地说,整个互联网就是建立在人们知道如何将电脑连接到互联网的基础上的。哦,网线插这里,电源线插这里,然后启动 Linux。在云服务接管一切之前的 10 到 12 年里,所有人都是这样把东西放到网上的。所以,这些专业知识是存在的,可以被重新发现。你也可以学会如何操作一台 Linux 电脑。
Lex Fridman
是的。当你拥有一堆服务器时,会有一堆闪烁的 LED 灯,那真是太令人兴奋了。
DHH
嗯,那是一种美丽、平静、令人惊叹的感觉。计算机真的很有趣。在我们搬出云端之后,我甚至更深入地研究了这一点。现在,我的下一个想法是,如果你能搬出云端,你是否也能搬出数据中心?个人服务器已经变得非常高效,而个人互联网连接的速度可以媲美一二十年前数据中心的连接速度。所以,有一个围绕“家庭实验室”(homelabbing) 概念的社区,他们基本上是在自己的公寓里安装服务器硬件,连接到互联网,并直接向公众开放。这让人回想起 90 年代那些辉煌的日子,当时人们为互联网构建网站,就是把网站托管在自己壁橱里的真实电脑上。
我对这个想法非常兴奋,正在做一些实验,已经为我的公寓订购了一批家用服务器。我惊叹于现在我能获得 5 Gbps 的光纤连接。你想想,5 Gbps,这在当时可以让 Basecamp 达到数百万的月度经常性收入 (MRR)。那时候,我用 2004 年的技术,在一台机器上,可能用的是 100 Mbps 的网线,就支撑了整个业务。我们现在所能获得的计算和连接能力,是人们还没有重新适应的。这种情况在技术领域时有发生,进步会在不经意间悄然而至,就像固态硬盘 (SSD) 那样。我非常喜欢这个例子。
我们设计的许多技术、存储方法和数据库,都是围绕着有特定寻道率的旋转金属磁盘。然后我们过渡到了 NVMe 和 SSD,人们花了相当长的时间才意识到,系统现在需要从根本上进行不同的构建。当你不必再用一个小小的磁头去读取旋转的金属盘片时,内存和磁盘之间的差异就小多了,你基本上是在处理另一种类型的内存。我认为,在新的企业能够从你的卧室里诞生这方面,我们正处于一个类似的阶段。
Lex Fridman
所以,通过家庭实验室 (homelabbing),即使用户群很大,你也可以走得很远。
DHH
绝对可以。
Lex Fridman
这太令人兴奋了。这就像是回归传统。这真的太令人兴奋了,对吧?
DHH
这让“车库创业”在字面意义上回归了。当然,其中一部分问题是,我们是否真的需要这样做?如果你需求不大,可以获得相对便宜的云服务。
Lex Fridman
当然需要!自己动手,看着自己家里的 LED 灯闪烁,那种感觉是无与伦比的。
DHH
这其中有一种美感,我完全沉迷于此,并且想努力推动它。但这和离开云端会是一回事吗?我不确定。我们离开云端并不是离开数据中心。我们基本上只是购买了硬件,然后运送到一个专业管理的数据中心,我们甚至没有亲手接触过这些硬件。这是人们对搬出云端的另一个误解,以为我们有一群人 постоянно 往数据中心跑,去安装新机器、更换坏掉的内存。现代世界根本不是这样的。我们合作的公司叫 Summit,以前叫 Deft,我们称之为“白手套”(white gloves) 服务,他们在数据中心工作。
当我们有需求时,比如,“嘿,Deft,能下去把 6 号机器里坏掉的 SSD 换一下吗?”他们就会去做。我们看到的,和使用云服务的人看到的差不多。你看到 IP 地址上线,看到硬盘上线,并没有太大区别,但在我们的运营规模下,这要便宜得多。当然了,如果你需要长期使用某样东西,拥有它肯定比租用它要便宜。在其他任何领域,我们都不会混淆这两件事:长期来看,拥有比租用更划算。
Lex Fridman
这里面有一些灰色地带。我最近有机会和 XAI 团队有过很多接触,可能很快会再去孟菲斯,为 Grok 的发布做一个大型播客。那些人为了实现快速搭建集群,并解决一些与 GPU 训练相关的新问题,他们必须亲自动手,而不是完全依赖“白手套”服务。
DHH
哦,我喜欢这样。他们正在处理一个前沿问题,而且他们不是从他们的主要竞争对手那里高价租用一堆 GPU,而是说:“不,去他的。我们要在我们自己的帐篷里放上 10 万个 GPU,并且以绝对创纪录的速度建好。”所以,我认为,这恰恰证明了拥有硬件可以在小型、中型,甚至在计算领域的先锋级别上都给你带来优势。
埃隆·马斯克 (Elon Musk)
Lex Fridman
顺便说一句,说到团队,XAI 和特斯拉 (Tesla) 都是大公司,但所有这些人……我不知道怎么回事。你说杰夫 (Jeff Bezos) 很擅长发现人才,能看到人的优点。埃隆 (Elon Musk) 也是……我不知道那是什么。实际上,我从未见过,也许你能谈谈,他很擅长发现卓越的人才。
DHH
我认为他不是在“发现”,而是在“吸引”。他吸引人才,是因为他有大胆的目标和使命,以及他清晰的表达方式。他不必满世界去寻找最优秀的人,最优秀的人会主动来找他。因为埃隆,是这个宇宙中为数不多的、同时拥有最多憎恨者和热爱者的、最具活力的角色之一。他的影响如此之大,以至于当然会有数百万人认为他是世界上最坏的人,同时也会有数百万人认为他是对人类最伟大的馈赠。我自己的看法每天都在变化,但总的来说,我更倾向于认为他是“最伟大的馈赠”,而不是另一端。我认为这确实能激励人们,我们几乎忘记了那种大胆是如此罕见,以至于当我们看到它时,我们甚至不知道该如何分析。
我们认为埃隆 (Elon Musk) 擅长发现优秀人才,我确信他在这方面也很出色,但我也认为,他所树立的使命灯塔本身就极具吸引力。我们要去火星,要把交通工具转变为电力驱动,要用互联网覆盖整个地球。这些目标如此宏大,以至于有时我醒来会想:“我整天在这些待办事项上忙活个什么劲儿?”天啊,我是不是也该去参与那样的事业?
Lex Fridman
是的。
DHH
那听起来令人振奋,就像我只能想象一个 1050 年的维京人会说:“我们要不要去诺曼底?路上可能会死,但天啊,那听起来真是一场伟大的旅程和冒险。”
Lex Fridman
这其中有几个因素。一个绝对是这种超越现实的使命感,并且是真正相信它。他每句话都离不开火星,是真心相信的,根本不在乎别人的看法、批评,他有一个非常专注的宏大目标。但我也认为,这还与许多其他因素有关,比如一旦人才被吸引来,如何能很好地雇佣他们。我见过一些人,他们的简历上不一定有出色的履历,但现在已经成为了传奇人物。他基本上是把领导的重任交给了他们,看到了他们身上的闪光点,给予他们自主权,然后他们就放手去干。这种情况在各个层面都会发生,这是一种真正的任人唯贤。
在这些会议中,在这些团队合作中,你可以看到人类智慧的蓬勃发展,那种能量是 palpable。对我来说,身处其中就非常激动人心,因为我很少在其他公司看到这种情况。当一个公司变得成功和庞大时,它往往会扼杀那种在初创公司早期阶段能看到的活力。但在一个能够实现规模化的大公司里看到这种活力,真的很酷。
DHH
我认为其中的一个秘诀是,埃隆 (Elon Musk) 是真的懂行。当你懂行的时候,你就能评估工作产品的质量。当你能评估工作产品的质量时,你就能很快分辨出谁是夸夸其谈,谁能真正带你上火星。然后你就可以解雇那些夸夸其谈的人,把赌注押在能带我们上火星的人身上。这种直接评估个人能力的能力其实有点罕见,在管理者和招聘经理中并不普遍。这不是一件可以轻易委托给那些对工作本身不那么精通的人的事情。而埃隆显然对很多领域都了如指掌,他能嗅出谁是真正的行家。
在我们这样的小公司里,我也试图以同样的方式去做。比如,当我们招聘程序员时——现在有了 AI 这个新挑战会变得更有趣——但在此之前,能否被录用的关键点不是你的简历,不是你的学历,不是你的成绩,也不是你的出身,而是你在两件事上的表现。一,你的求职信,因为我只能和写作能力强的人远程合作。所以,如果你连一封像样的求职信都写不出来,或者懒得花心思为我们专门写一封,那你就不行。二,你的编程能力必须非常出色,以至于我看到你的代码会想:“是的,我想和这个人一起工作。”不仅如此,我甚至愿意在五年后修复某个该死的 bug 时,再次面对这个人的代码。
所以,我们会给你一个模拟我们真实工作方式的编程测试,看看你的表现。我一次又一次地感到惊讶,有时我觉得某个候选人肯定没问题,他们听起来很合适,简历也很完美,但当他们交上来的代码时,我会想:“绝对不行,我们绝对不能雇这个人。”反之亦然。有时我会想:“这个人我不太确定,呃,不知道。”然后他们交上了代码,我会想:“天啊,这个人能不能明天就加入我的团队?”评估工作产品的能力,在招聘时是一项超能力。
Lex Fridman
我看到埃隆 (Elon) 做得非常好的一步是,他能站出来说,这件事可以做得更简单。
DHH
是的。
Lex Fridman
但他知道自己在说什么。然后工程师的第一反应,你可以看出来,几乎就像你父母告诉你什么事时你翻白眼一样,你会想,不,我为这个已经工作了一个月了,你不懂……但当你深入交流后,你会意识到,不,确实可以做得更简单,去找到方法。所以,这是一种很好的……当两个工程师在交谈时,其中一个可能信息不全,但如果资深工程师有身经百战的直觉,他就可以说“简化”,而这真的会带来简化。
DHH
我认为这是真正伟人的标志,他们不仅对完成工作所需具备深刻的洞察力,还拥有超越工程师或程序员所能做到的卓越远见。如果我们审视这些罕见的人物,显然,史蒂夫·乔布斯 (Steve Jobs) 的神话也是如此。尽管他在很多方面可能没有埃隆 (Elon Musk) 那么懂技术,但他同样有能力走进一个产品团队,真正挑战他们去更深入地寻求简化,或者以一种会让执行者感到难以置信的方式让产品变得更伟大。他们会想,这家伙疯了,我们永远做不到……然后,两个月后,他们做到了。
所以,这其中需要远见,需要有对可能性、对物理学、对软件有足够了解的现实基础,这样你才不会只是在构建空中楼阁。有很多人可以对一群工程师说:“不,只要做得更快就行了,”但这并不是一种技能。它必须植根于真实的东西。但它也必须植根于对结果的热情——这是一个用滥了的词——热情到如果工作做得不好,你会感到个人受到了侮辱。这就是我最近写关于苹果 (Apple) 的文章时所说的,他们失去了一个会站出来告诉工程师他们做得不够好的混蛋。这种方式或许会在当下让他们感到有些渺小,但会激发他们真正去修正的热情。现在他们有一个非常擅长采购零部件和安排生产甘特图 (Gantt charts) 的后勤人员,但你再也得不到那种魔力了。
有趣的是,在整个情景中,我其实觉得蒂姆·库克 (Tim Cook) 把苹果管理得很好,这么多年来一直如此,以至于我想,也许我们错了,也许我们误判了史蒂夫·乔布斯对整个使命的关键性,也许没有他也行。但我认为,代价只是来得晚了一些,而现在它来了。苹果正在以各种方式失败,这正是一个会吹捧史蒂夫·乔布斯并极力赞美他的人会说的话:“看,这就是现在发生的事情。”所以,这里的另一件事当然是,你不可能将自己对系统关键部分的看法与由无数活动部件构成的混乱现实分离开来,你应该时刻对自己的分析和论点保持怀疑。
苹果 (Apple)
Lex Fridman
既然你提到了苹果 (Apple),我必须问一下,网上有人提交了这个问题。问题是:DHH 还讨厌苹果吗?据我所知,有一段时间 Basecamp 和苹果因为 30% 的抽成问题而开战。你能讲讲那场战斗的始末吗?
DHH
可以,但首先我要告诉你我是如何爱上苹果的,那要追溯到 2000 年代初。当时微软 (Microsoft) 统治着整个行业,就像我们现在看到苹果和谷歌 (Google) 统治手机市场一样。在个人电脑领域,微软无处不在。我真的很不喜欢 90 年代的微软。那时的微软是那种会切断网景 (Netscape) 氧气供给的角色,是比尔·盖茨 (Bill Gates) 在司法部 (DOJ) 的听证会上,面对“什么是‘是’” (what the definition of what is) 这种问题时,态度强硬、总体上令人不快的形象。你可以尊重他们的成就,但我肯定不喜欢。正如我们之前谈到的,在 Commodore 破产后,我无法继续使用 Amiga,所以我是不情愿地转向个人电脑的,因此我对个人电脑本就有些不满。
但在 2000 年代初,苹果凭借其新一代基于 Unix 内核的 Mac 电脑,成为了一个可靠的替代选择,这让我得以逃离微软。突然之间,我成了苹果最大的拥护者之一。在哥本哈根商学院的毕业班里,我从第一台白色 iBook 开始,是第一个使用 Mac 的人。到我们毕业时,我基本上已经把半个班的同学都变成了苹果用户,因为我极力宣传,展示它们,做了一个超级粉丝会做的一切。这项工作我持续了很多年。
Jason 和我实际上在 2004 年、2005 年左右为苹果做过一则广告,他们把它发布在了开发者网站上。广告里我们大谈苹果对我们所做的一切是多么不可或缺,我们多么敬仰他们,从他们身上获得灵感。这种热爱关系持续了很长时间,我基本上成了一个 20 年的 Mac 用户。我甚至不在乎 PC,微软在做什么对我来说似乎无关紧-要,这感觉像是一种解脱,因为在 90 年代,我觉得自己无法摆脱微软,而现在我终于找到了出路。我选择了苹果,一切都很美好,他们与我的许多感性和审美观都相符,他们不断突破,有很多值得骄傲和敬仰的地方。
但随着 iPhone 的出现,这一切开始改变,这很奇怪,因为 iPhone 正是现代苹果的缔造者。2007 年,我和 Jason 一起排了五个小时的队,就为了买第一代 iPhone。当时你走出商店时,苹果的员工还会为你鼓掌,我不知道你还记不记得。那是一整套仪式,也是苹果神话、神秘和威严的一部分。所以,我当时并没有考虑其他的电脑,也没有考虑其他的计算机理念,我以为自己可能会一直用 Mac 直到世界末日。但当苹果发现,运营一个收费站是座金矿——你不需要创新,甚至不需要制造任何东西,只需从别人的业务中拿走 30%——一种腐朽便悄悄侵入了苹果的根基。这一切始于应用商店 (App Store) 最初推出的时候。
但我想我们当时并没有看到,我当时没有意识到,手机对于整个计算领域会变得如此关键。当 iPhone 刚出来时,我想:“哦,这就像一个手机,我从 90 年代初就用手机了。”但它不仅仅是一个手机,它是一台移动计算机。更重要的是,它将成为全世界大多数人最重要的计算机。这意味着,如果你想制作软件并卖给人们,你就必须通过那台计算机。而如果通过那台计算机就意味着要通过苹果的收费站,并且不仅仅是要征得他们的许可——这本身就是一种侮辱。当你习惯了互联网,在那里你不需要征求任何人的许可,你买个域名就能开创事业,如果客户来了,你就成功了,如果他们不来,你就失败了。
现在,在你甚至还没开始之前,就得先请求苹果的许可?这总让我觉得不对劲。但直到 2021 年我们推出 HEY 时,我才看到了已经悄悄侵入苹果这颗“苹果”的腐朽的全貌。
Lex Fridman
对于不了解的人,我们待会儿会谈到,HEY 是一个了不起的尝试,旨在解决电子邮件问题。
DHH
是的。我喜欢把它描述为,如果 Gmail 在 20 年后吸取了所有教训并能真正发布,它会是什么样子。Gmail 在 2004 年推出时非常了不起,至今仍是一款很棒的产品,但它也受困于其最初的成功。你今天无法重新设计 Gmail,它的用户太多了。所以,如果你想对电子邮件有新的思考,我就需要构建自己的电子邮件系统。而且不仅仅是我自己的邮件客户端,那是很多人多年来一直在做的事情,他们为 Gmail 构建一个客户端,但如果你不控制邮件服务器,你会受到严重限制。如果你真的想在电子邮件领域取得进展,你必须同时控制服务器和客户端,这就是我们用 HEY 设定的宏伟任务。
有趣的是,我当时认为我们主要的障碍会是 Gmail,它是电子邮件领域的 800 磅大猩猩。在美国,大约 70% 的邮件是通过 Gmail 发送的,我想它在全球的比例也差不多,它的体量绝对是巨大的。而试图挑战这样一个庞大、成熟、实际上仍然被很多人喜爱且免费的竞争对手,看起来像是一项自杀任务。我们之所以愿意接受这项任务,只是因为在运营 Basecamp 20 年后,我们变得足够有雄心,认为自己可以解决这个问题。所以,我当时想,嘿,这很蠢,我不会建议任何人去和 Gmail 正面对抗,那看起来像自杀。但我们还是要去尝试,因为你知道吗,就算我们失败了,也没关系,我们只是为我自己、Jason、公司的员工和我们的猫,打造一个更好的电子邮件体验。这也可以接受,因为我们负担得起。
但当我们准备发布时,在花了两年时间、投入了数百万美元来构建这个产品后,我们显然需要移动应用。如果你没有手机应用,你就无法在电子邮件领域成为一个 серьезный 竞争者,而且你需要一个原生客户端。所以,我们为 iOS 和 Android 都构建了出色的原生客户端。当我们准备发布时,我们把它们都提交到了应用商店,我想,iOS 应用是在周五下午获得了批准,然后我们在周一正式上线,我们非常兴奋。嘿,世界,我们一直在做这个新东西,希望大家来看看。当然,就像任何新产品发布时一样,总会有一些 bug,所以我们很快在 iOS 客户端里发现了一些,并向苹果提交了一个新版本。嘿,这是我们的 bug 修复,请更新。然后,地狱之门就打开了。
他们不仅不批准我们的更新,还说:“哦,等等,我们允许你们进入应用商店,但对不起,那是个错误。我们发现你们没有使用我们的应用内支付系统,这意味着我们拿不到你们业务的 30%,你们必须纠正这一点,否则就不能留在应用商店。”起初我想,嗯,它已经被批准了,我们的模式和我们十年来在应用商店里运营 Basecamp 的模式一样,如果用户不是通过应用注册,而是我们自己在网站上注册客户,他们只是去应用商店下载配套应用,我们应该没问题。这在当时是事实,对吧?这也是为什么我以前对应用商店没那么激动。即使苹果开始收紧政策,我想:“我的生意没问题。”
但现在,突然之间,我的生意出问题了。如果我们不同意将通过 iOS 应用注册的所有收入的 30% 交给他们,苹果就准备摧毁 HEY。这不仅仅是 30% 的问题,还关乎到我们不再能与客户建立直接关系。当你在应用商店销售应用时,你不是把应用卖给客户,你是把应用卖给苹果的库存,然后苹果再把应用卖给那个客户。那个客户与苹果有购买关系。所以,如果你想提供折扣或退款之类的,简直是地狱。如果你想轻松支持多平台,那也是地狱。如果有人在他们的 iPhone 上注册了 HEY,然后想换到 Android,但那个账单关系是和苹果绑定的,那简直是地狱。出于一百万个理由,我不想把我的业务交给苹果,我不想把我们 30% 的收入交给苹果,所以我们决定做一件苹果似乎从未听说过的事情:我们说了“不”。
我们不准备添加应用内支付。我不在乎你们威胁我们,这不公平,这不合理,请批准。当然,他们没有批准,事情升级了。几天后,我们意识到,这不是一个错误,这不会自己消失,如果他们坚持下去,我们就死定了。如果我们不屈服,不给他们 30%,他们就会把我们踢出去,除非我们制造足够大的声势,让他们后悔。而这正是后来发生的事情。我们很幸运,HEY 的发布时间恰好在苹果全球开发者大会 (WWDC) 的前一周,苹果喜欢在那个舞台上大谈他们为开发者做了多少,他们有多爱开发者,以及为什么你应该为他们的新设备开发应用等等。
然后,我们恰好在互联网上有一个平台,这在你需要与一个 3 万亿美元的公司开战时非常方便。于是,我开始大声抗议……
Lex Fridman
哦,天啊。
DHH
…基本上把斗争的音量开到了 11,公开了我们被应用商店拒绝的事情。这演变成了一场与苹果长达两周的战斗,最终以我们作为大卫对抗歌利亚所能得到的最好结果告终,那就是一种休战。我们不需要把 30% 交给苹果,他们也不会把我们踢出应用商店,但我们必须创建一些虚假的“傻瓜账户”,这样应用在下载后至少能做点什么。这是菲尔·席勒 (Phil Schiller) 在媒体第五次追问为什么我们不能进入应用商店,而其他上百万个配套应用都可以时,似乎是临时想出来的一条规则。但我们恰好能给苹果制造足够的痛苦和噪音,以至于让他们觉得让我们留下比继续战斗更容易。
蒂姆·斯威尼 (Tim Sweeney)
Lex Fridman
你对蒂姆·斯威尼 (Tim Sweeney) 领导的 Epic 战胜苹果 (Apple) 有什么看法?
DHH
我认为这太不可思议了。整个开发者生态系统,不仅是 iOS,也包括 Android,都欠 Epic、蒂姆·斯威尼和马克·雷恩 (Mark Rein) 一份巨大的感激之情。他们发起的这场战斗,是唯一一次在这场垄断执法的肮脏运动中,给苹果造成重创的战斗。蒂姆最近透露,为了与苹果打这场官司,他们花费了超过 1 亿美元的法律费用。当我们被威胁要被踢出应用商店时,我们曾短暂考虑过起诉苹果。我们和几家律师事务所探讨了这个案子,他们当然会告诉我们我们有很好的胜算——他们毕竟是在推销产品——但他们也告诉我们,这至少要花费 1000 万美元,并且整个上诉过程需要五到七年。
现在我们知道,实际的费用是这个数字的 10 倍。Epic 花了超过 1 亿美元。在法律领域挑战苹果会彻底摧毁我们,只有像 Epic 这样的公司才能做到。也只有像蒂姆和马克这样的创始人经营的公司,才能以他们那种方式冒着业务风险去战斗。他们当初挑起这场战斗的胆识,我认为简直不可思议,并且他们能长期坚持下来。任何董事会都不会批准一个职业 CEO 提起这样的诉讼,绝对不可能。所以,他们能够以一种最滑稽的方式击败苹果,我认为这太了不起了。因为,请记住,他们最初的胜利其实算不上什么大胜利。案子里大约有 11 项指控,苹果基本上赢了 10 项,法官只判给 Epic 一项小小的胜利,那就是苹果不能阻止他们链接到互联网进行支付处理。
所以,他们只赢了这么一点点。而苹果,没有选择接受 10/11 的胜利,说:“好吧,你们可以有你们的小链接,但其他所有规则都保持不变。”而是选择犯下现在被移交起诉的“藐视法庭罪”,并激怒了法官,以至于现在美国的法律规定是,你可以在应用商店里发布应用,不必使用应用内支付,但你可以在收取信用卡信息时链接到开放的互联网,然后再跳回应用,从而与客户建立直接的账单关系。而我们所有这一切,都要感谢蒂姆和马克,感谢 Epic。我们准备随时推出新的应用,我希望实际上就在下周,来利用这一点,改造 HEY 应用,这样从苹果应用商店下载 HEY 的人就可以在应用内注册,然后使用网页输入他们的信用卡信息,这样我们就不必……
这样他们就可以使用网页输入信用卡信息,我们就不用支付 30% 的费用。我们与客户建立了直接的账单关系,他们也可以毫无障碍地将这个订阅带到 Android、PC 等任何平台。这一切都要感谢蒂姆 (Tim) 和马克 (Mark)。
Lex Fridman
是的,蒂姆……我是说,就像你说的,是创始人,但也是特定类型的创始人,因为我认为……也许你可以给我解释一下,但蒂姆是那种至今仍然坚持着不合理的原则的人。
DHH
是的,这就是我喜欢的地方。
Lex Fridman
我想,有时候即使是创始人,也可能会被磨平棱角。毕竟公司很大。
DHH
是的。
Lex Fridman
身边有很多聪明的“人”,律师,他们会一直在你耳边低语,久而久之,你就会想,“嗯,还是理性一点吧。”而要坚持……我是说,史蒂夫·乔布斯 (Steve Jobs) 就做到了这一点。仍然是那个混蛋。
DHH
是的。
Lex Fridman
他会说:“不,整个公司,我宁愿把整个该死的公司都沉了,也要坚持这一点。”
DHH
这基本上就是我在我们最初的抗争中使用的语言。我宁愿烧掉这个公司,也不会把 30% 的业务交给苹果。那种愤慨,那种真正的愤怒,是我会小心翼翼去触碰的东西,因为它有点像一种不稳定的化合物。因为,我有很多员工,我们有很多客户。如果 37signals 在 25 年后的旅程因为与苹果的这场斗争而终结,那将是非常可悲的,无论是苹果烧毁我们,还是我烧毁公司。但我认为,你也需要那种程度的信念,才能推动日常的决策。
另一个苹果的例子是……我知道我们在这里有点在抨击苹果,但我其实并不恨他们。我真的不恨。我只是对这段本不必为这么点小利而出卖的关系感到极度失望。现在我明白,应用商店的收费站确实是一笔大生意,有数十亿美元,但苹果是一家万亿美元的公司。我认为,从历史的角度看,这将被证明是一个巨大的错误,而且我认为它已经开始显现出是一个巨大的错误了。Vision Pro 的失败,部分原因就是苹果得罪了所有其他开发者。
没有人渴望为他们的新硬件开发那种或许能使其成功的内容体验。所以,当你身居高位,手握所有好牌时,你可能会自欺欺人地认为,你可以随时随地 dictate 所有条款,而且不会有长期后果。苹果终于开始学到,长期后果是存在的,开发者对苹果的业务实际上是重要的,这种关系并非完全是单向的。我们的生存并不完全归功于苹果。我们已经建立了自己的客户群。
苹果对行业是有益的。我很高兴 iPhone 的存在,等等。这并不是说这种关系不是双向的,但苹果希望它只是单向的。我认为这是一个错误,一个本可以避免的错误。这令人失望,对我来说当然是失望的。我花了 20 年的时间来宣传这玩意儿,对吧?我花了那么多钱买苹果的硬件,为他们多年来做的很多事情辩解,结果呢?就因为你想要我创造的东西的 30%,而且是以一种最不合理的方式。我们难道找不到更好的方式吗?我认为他们会被迫找到一种更好的方式。但你是否也必须经历被指控藐视法庭并被移交起诉的屈辱?这似乎太有失苹果的身份了,但也似乎与那些由“职业经理人”而非创始人和不讲理的人经营的大公司所发生的事情完全一致。
Lex Fridman
嗯,我们或许也应该说,你喜欢苹果的那些东西,苹果的伟大精神,我认为仍然存在。而且有一种说法是,这个 30% 的事情只是公司的一个特定部分,而不是公司的决定性特征。苹果在它制造的硬件和许多其他产品方面仍然处于顶尖地位。这可能只是一个伟大公司漫长历史中的一个小插曲,它为人类做了很多了不起的事情。所以,苹果是一家真正特别的公司。我们提到了亚马逊 (Amazon),但没有公司像苹果一样。
DHH
我同意。这就是为什么失望感会更强烈。
Lex Fridman
是的,是的。
DHH
因为我们对苹果曾寄予如此高的期望,认为他们是山巅之城,以无数积极的方式引领着行业。我想,正如我们之前谈到的,硬件再次变得令人兴奋,很大程度上是因为苹果收购了 PA Semi,并执行了一项几乎不可能完成的任务,将 ARM 提升到今天的水平。我们现在有了这些令人难以置信的 M 系列芯片,正是因为这个。苹果带给我们的设计感性是无与伦比的。没有人在硬件层面上能有苹果那样的品味。即使在软件层面,我也会说苹果还保留着很多品味,但现在也有一些真正的坏品味。
所以,我认为他们必须先洗掉那些污点,才能找回自己的路。但苹果以前也曾陷入过困境。我是说,沃兹尼亚克 (Wozniak) 和史蒂夫·乔布斯 (Steve Jobs) 在车库里创办了这家公司,凭借 Apple II 取得了巨大成功。然后他把公司交给了一个卖糖水的销售员,结果在 90 年代把公司搞得一团糟。他没有吸取教训,接下来的 20 年里建立起这家了不起的公司,然后又把公司交给了一个后勤人员。这个人或许比他第一次任命的人有更多可取之处,但最终还是把公司引向了歧途。
现在这已经成了常态。伟大的公司不会永远存在,这是常态。在历史的长河中,几乎没有公司能永存。一百年前就在的公司已经很少了,两百年前的更少,而一千年历史的公司几乎没有,除了一些日本的刀匠之类的,对吧?所以,当你身处其中,看到它们如此庞大时,你可能会被迷惑,认为某些东西是永恒的。
苹果绝对有可能跌倒,而且我认为他们现在比以往任何时候都更有理由跌倒。他们在 AI 上落后了,严重落后。他们的软件质量在很多方面都在下降。竞争对手在硬件方面正在追赶,部分原因在于台积电 (TSMC) 不是苹果的子公司,而是一家为 AMD、英伟达 (Nvidia) 等公司服务的代工厂,这些公司现在也能使用同样先进的工艺。这是我在很长时间不关注 PC 硬件后学到的东西,天啊,AMD 制造的 CPU 实际上和苹果的一样快,甚至更快。它们在能效上还稍有差距,因为 ARM 相对于 x86 有一些根本性的效率优势,但它们仍然相当不错。
所以苹果应该有理由担心。苹果的股东应该有理由担忧,不仅是因为这些挫折,还因为苹果是由一群老年人经营的。苹果董事会的平均年龄,我记得是 75 岁。他们的整个高管团队都在 60 岁以上。现在,这听起来像是严重的年龄歧视。在某种程度上,确实有点,就像我对自己也有年龄歧视一样。我现在 45 岁了,我必须强迫自己真正投入到 AI 中,因为这是一个巨大的范式转变。很多人到了某个年龄,就满足于自己所知的,他们不想再回到初学者的状态,不想重新学习一切。我觉得这对我 45 岁来说都有些困难,那你 75 岁时又该如何做到呢?
为人父的体验
Lex Fridman
我必须回到这个话题。你之前提到了,你是一个父亲。你能谈谈成为父亲对你生活的影响吗?
DHH
我觉得为人父的有趣之处在于,对我来说,我甚至不确定这是不是我想要的事情。是遇到了对的人,并让她说服我这是一个好主意,我们才开始的。在我 20 多岁末,甚至 30 多岁初,组建自己的家庭并不在我的优先事项清单上。这真的是因为遇到了我的妻子 Jamie,她告诉我:“这就是我想要的。我想要一个家庭,想结婚,想有孩子。我想要三个。”我当时愣了一下,想:“哇,哇,哇。”然后,“好吧,那就这么做吧。”我认为这是一种幸福的意外。我生活中的某些部分是目标驱动的,我知道我想要什么,如何去争取,以及回报会是什么。但对于拥有一个家庭,那一直是一个非常模糊、抽象的想法,觉得,嗯,也许某一天吧。然后,因为我遇到了一个知道自己想要什么的女人,它变得非常具体。
现在回想起来,这几乎有点疯狂,就像现实中有一个岔路口,如果那没有发生,如果我现在坐在这里,不是一个父亲,没有家庭,那么以我现在对拥有家庭的快乐的了解,那种遗憾将是存在主义级别的。我不知道那会不会是毁灭性的。我认为男性追求这些事情的时间窗口比女性要长一些。这只是一些生物学上的事实。但最终拥有我现在这个家庭,拥有我的三个儿子,这简直是一种变革性的经历。你会发现,有些东西原来是最重要的,而这其实是一个公开的秘密,甚至不是秘密,是贯穿整个历史的公开真理。
你听任何有过孩子的人说,他们都会说:“我的孩子对我来说最重要。”但不知何机,这种智慧在你亲身经历之前,就是无法真正内化。我发现那些无法用语言真正传达的真理非常有趣。我可以告诉你:“嘿,Lex,你还在等什么?找个妻子,生几个孩子,赶紧行动吧。”但这些只是言语,它们无法传达亲身经历那种体验的重量。你无法在没有亲身经历的情况下真正学到它。
当然,你会被影响,我们都可以互相帮助,一些小火花、小种子可以在你的脑海里生根发芽,但它最终还是需要发生。现在我身处这种情况,每天都能感受到纯粹的喜悦。你以为你的生活满意度是在 1 到 10 的范围内。
Lex Fridman
是的。
DHH
然后,当你看到你的孩子理解了某件事,完成了某件事,学到了某件事,做了某件事,或者仅仅是存在着,那种满足感会让你觉得,哦我的天,这个尺度不是从 1 到 10,而是从 1 到 100。而我 এতদিন 都在 1 到 10 的范围内玩耍,原来还有 1 到 100。这让我感到谦卑,而这种谦卑本身就很有影响力。我曾以为自己在 30 岁出头时对生活的边界有了一个相当清晰的认识,比如生活到底是什么?我已经在这个地球上活了这么久,总该知道点什么吧。
然后你意识到,“我不知道。”我真的不知道。我不知道那个尺度原来要宽广得多。我经常谈论有孩子的乐趣,看到自己的 DNA 传承下去,这对我来说非常了不起,因为从人类诞生之初,这 literally 就是人类的追求。我今天能坐在这里,是因为,比如说 3 万年前,某个尼安德特人也有了同样的想法,我应该繁衍后代,延续我的血脉。而这一切最终造就了现在的我。但在遇到对的女人之前,这对我来说并不是一个实际的现实。我认为,这有时在我们的讨论中被忽略了,那就是西方世界目前人们配对的方式出了点问题。
Lex Fridman
是的。
DHH
这也是我们生育率不足的根源,因为没有足够的伴侣,没有足够的婚姻,没有足够的这些传统价值观。而在 50、60、70 年前,这些都是理所当然的。我们正在进行一个宏大的实验,看看如果我们移除一系列制度会发生什么?如果我们不再把婚姻视为值得追求的东西会发生什么?如果为人父母现在在某些圈子里被视为奇怪,甚至与你的自我表达相悖,会发生什么?这是一个宏大的实验,我很好奇结果会如何。我更愿意把它当成一部电影来看,就像《人类之子》(The Children of Men) 那样,那是一部好片子。我希望那不是现实,但我们正在眼睁睁看着现实上演,而我则坐在这里,身处一个非常传统的、充满爱的双亲家庭,有三个孩子,并且觉得:“这现在是第一位的。”
我一生中做过很多事。我开发过软件,创建过公司,开过赛车,做过各种各样的事情。为了我的孩子,我可以毫不犹豫地放弃所有这些。这是一种非常迷人的人类体验,那种纽带的深度,在你拥有它之前是无法体会的。但我也认为,我们有责任去宣传它,因为我们 постоянно 被各种不这么做的理由轰炸。哦,太贵了。
你可能会离婚,然后可能会失去一半财产。总有各种声音在不断阐述反对婚姻、反对生孩子的理由。因此,我们这些选择走传统道路、结婚生子的人,有义务去多谈谈它的好处。这在 50 年前看来会很可笑,你居然需要去宣传这么根本的事情。
但在某种意义上,我现在觉得有义务这样做,去宣传它,去说:“你知道吗?你可以看看我做过的所有事情,如果你喜欢其中的某些部分,请意识到,对我来说,在目前的情况下,孩子、家庭、妻子比所有这一切都重要。”这听起来像一句陈词滥调,因为你已经听过一千遍了。正因为它成了陈词滥调,你可能开始觉得它不是真的,只是人们说说而已。但它就是现实。
我认识的父母中,几乎没有谁不把自己的孩子视为生命中最重要的事情。
Lex Fridman
你说的很有趣。首先,这似乎是真的……我认识很多父母,更有趣的是,我认识很多非常成功的父母,他们真的很爱自己的孩子,并且说孩子甚至帮助他们变得更成功。现在,有趣的是,正如你所说,对我们人类来说,表达负面因素似乎更容易,因为它们是具体的、实际的。成本更高,需要时间。他们可能会到处哭闹。他们就像是到处跑的小小自恋狂,等等。
DHH
顺便说一句,这些都是真的。
Lex Fridman
是的,到处拉屎之类的。但是,要表达你所说的那种感觉——有一个你爱得胜过一切的小生命——很难用语言来描述。你必须亲身体验。但我相信这一点,我也想体验。我相信,仅仅从科学方法的角度来看,我见过很多并不太有爱心的人,却完全爱上了自己的孩子。
DHH
是的。
Lex Fridman
非常……怎么说呢,就是那种工程师,非常像“哔哔啵啵”的那种。
DHH
是的。
Lex Fridman
他们就是爱上了孩子,然后你会觉得,好吧。就像你说的,有些人并不真正在乎或者考虑要孩子,但一旦有了,一切都变了。但这很难用语言来表达。
DHH
我认为其中一个困难的原因是……我是说,我喜欢孩子,不是说我主动讨厌他们,但当我和别人的孩子在一起时,我并没有什么情感反应。有些女人会,她们看到一个婴儿就会说,“哦。”我从来没有那种情绪。我是说,我能理解,我为你感到高兴你有孩子。但这在我内心并没有激起任何波澜。而当我看着自己的孩子时,我内心激起的情感,和那个完全不在一个宇宙里。所以你没有一个完整的参照系,或者说至少很多男人,或者至少我,没有一个框架来理解,有自己的孩子会是什么样。
然后你经历了它。就像“砰”的一声。而且发生得很快。这是我发现最迷人的地方。在那个小生命甚至还不会用语言回应你之前,这一切就发生了。你对一个婴儿产生的爱,发生得相当快,不一定是一瞬间。我不知道,不同的人有不同的经历,但我花了一点时间。但一旦那种感觉来了,就像被马踢了一样猛烈。我喜欢的是,这也是一种普世的体验。你可以是世界上最成功的人,也可以是世界上最贫穷的人,你可以在中间,但我们都分享着这种体验:对于大多数人来说,为人父母是他们生命中最重要的事情。
Lex Fridman
但和对的伴侣一起经历这种体验真的很好。但我想,因为我是一个共情能力很强的人,找错伴侣的代价对我来说很高。但后来我也意识到,天啊……我有个朋友,他离婚了,过得很开心,他仍然非常爱他的孩子们,这依然很美好。虽然有点乱,但所有的爱都还在,你只需要努力让它运转下去。只是,我不知道,那种离婚会摧毁我。
DHH
你应该听听《人生学校》(The School of Life)。他在 YouTube 上有一个很棒的片段,讲的是“你会嫁给错误的人”。如果你一开始就接受你会嫁给错误的人,即任何你可能嫁的潜在对象,在某个维度上都会是错误的人——他们会让你烦恼,在某些方面不如你所愿——那么,那种认为一切都完美无瑕的浪漫理想,其实并不利于现实中组建家庭、生儿育女。因为正如你刚才所说,即使事情搞砸了,我发现我个人认识的大多数人,即使他们的关系破裂了,也绝对不会说:“我后悔了。我宁愿我的孩子不存在,因为一段关系变糟了。”我的意思是,你应该非常努力,而且我认为这也是那些我们没有完全理解的“围栏”之一。当我们拆掉它们,庆祝离婚变得多么容易时,我们没有意识到这会带来一些负面后果。
我不是说你不应该离婚,也不是说要回到过去。但我想说的是,几千年来,文明发展出了某些技术,以确保其自身制度和生命的延续,而我们或许没有充分认识到这些技术的价值。我是说,在这方面,乔丹·彼得森 (Jordan Peterson) 和其他人讲得远比我清楚,我也从中学到了很多,用来分析我自己的处境。为什么把一个你带到这个世界的生命抚养成人这个难以置信的重担,同时也是存在中最有回报的部分?这很奇怪。在我听到彼得森阐述承担你能承受的最大重担的价值之前,我总是把重担看作是负面的东西。我为什么要承担养育孩子的重担?我可能会搞砸。我可能是一个糟糕的父母。他们可能会有不好的……所有这些,对吧?所有你不应该做的理由。而 articulating 为什么你应该做的声音却那么少。
Lex Fridman
是的,但我也应该补充一点,你刚才提到的,目前在西方,配对的过程……
DHH
已经坏掉了。
Lex Fridman
……已经坏掉了,而技术让它变得更糟。这很奇怪,这个问题一直没被解决。所以,招聘优秀团队,这可能是配对问题中解决得最好的。
DHH
对。
Lex Fridman
其次,找到好朋友。这个问题也没被解决。
DHH
而且还在恶化。
Lex Fridman
是的,还在恶化。第三是恋爱关系中的配对。那是做得最差的。实际上,技术让它变得更糟了。
DHH
是的。
Lex Fridman
这太奇怪了。
DHH
是的。这又是一个很好的例子,说明了所有最美好的意图,最终还是把我们直接带向了地狱。我非常欣赏路易斯·佩里 (Louise Perry) 对性革命并非绝对好事所做的分析,这是在她阐述之前我从未想过的。当然,女性应该有自由、自决权和堕胎权,所有这些。路易斯·佩里当然也不是在反对这些。但存在一些我们当时没有意识到的次级效应,而且我们可能没有现成的解决方案。这很有趣。
你在一百万个方面改善了生活,但我们最终却变得更痛苦。为什么会这样?为什么人类在苦难中找到意义?我认为其中一部分原因是,这是一个很难用科学回答的问题。彼得森也很好地阐述了这一点,你必须通过艺术、通过作家、通过不同的……我正要说“认知模式”,然后及时打住了,因为那听起来像是胡说八道。但确实有不同的方式来获取那些深刻的教训,是书本无法告诉你的。
Lex Fridman
我是说,这一点也适用于宗教。如果你从社会中移除宗教这个“软件”,你最好有一个好的替代品。
DHH
而我们在过去几十年里,有过很多糟糕的替代品。宗教是我纠结了很久的一个问题,因为我不信教,但我希望我信。我现在能完全理解拥有那样一个“操作系统”所带来的巨大价值,不仅是在个人层面,更是在社会层面。而且,答案是什么,一点也不清楚。我认为我们在替代品方面尝试了很多死胡同,人们用一百万种不同的方式填补那个空缺,但这些方式似乎比所有宗教——尽管它们在无数方面都有缺陷——所能提供的都要糟糕。
Lex Fridman
是的,宗教就像是 COBOL 代码。它就是……
DHH
是的。它们是那种我们不完全理解其规则、为什么存在、以及移除它们会发生什么的制度。其中一些对我来说显而易见是时代的胡说八道。哦,你应该需要,比如说,贝类,因为在世界的那个地区,有什么什么原因。好吧,行。但还有很多其他的东西,对于维持社会长期运转至关重要,而我们并不完全理解哪个是哪个。什么是胡说八道,什么是社会的承重柱?
Lex Fridman
你能谈谈孩子对生产力的影响吗?他们是提高了你的生产力,还是降低了?或者说,问这个问题本身就是错的?
DHH
我认为这是有抱负的人常常害怕生孩子的原因之一,因为他们觉得我还有那么多事要做,现在的时间都不够用。如果再多一个孩子,我怎么可能完成我想做的事?首先,我们一直都是每周工作 40 小时,而不是 80、100 或 120 小时。我认为这很有好处。其次,孩子并不是孤立地进入你的生活。希望你有一个伴侣。在我的生活中,我娶了一位了不起的女人,她在我们在一起后辞去了她的公司工作,并承担了那份责任的很大一部分。
我刚才差点说成“负担”,我认为这正是它经常被呈现的方式,尤其是在女权主义的视角下,即照顾自己的孩子是一种无偿劳动,必须以某种特定的方式得到补偿,而不仅仅是把生命带到这个世界、抚养出优秀的人类所带来的回报。这种分析有些扭曲,我实际上认为现代的“传统主义”(trad) 运动正是对此的一种回应。他们是否拥有所有答案,我当然也不确定,但那种认为孩子是一种负担,如果女性选择在家带孩子,就是女权主义抱负的某种失败模式的分析,是不对的。我认为那完全是一个死胡同。当然,不同的人,不同的情况。我只能就我的生活而言,我娶了一位了不起的女人,她决定在家带孩子,至少在他们年幼的时候,并承担了很多那些责任。但这并不意味着我不需要参与,不需要分担,但它让我可以继续像以前一样每周工作 40 个小时。但这让这 40 个小时变得更严格了。我有一个时间表,比如我早上 6:30 起床,我们必须在 8:00 前出门。我通常要和我最小的孩子,有时是中间那个孩子,玩一两局《堡垒之夜》(Fortnite)。
然后送孩子们去学校,到公司,大概 8:30 或 9:00 开始工作,一直工作到 5:00、5:30,有时到 6:00,但之后就是晚餐时间,我必须在场,然后我还要给孩子们读书。等这些都做完,我就不想再回去工作了。所以我的工作时间基本上就是 9:00 到 5:00,或者 9:00 到 6:00,取决于当时的情况。有时会有紧急情况,你必须处理,但总的来说,这让我的工作更有条理了,我发现这其中有好处,也提高了我的生产力。我不能再像以前那样闲逛了,因为一天大约在 5:30 左右就会结束。如果我今天没完成我想做的事,到了那个时间,就结束了,我得明天再试。而在有家庭、有孩子之前,我可以 просто 不做,晚上再补上。
所以从这个角度来说,它让我变得更有条理,但并没有真正改变我的工作量。我工作的时间还是差不多。而且,顺便说一句,这已经足够了。这是我们在最新写的书《工作何必疯狂》(It Doesn't Have to Be Crazy at Work) 中提出的一个关键观点:时间是足够的。每周 40 个小时其实很多,如果你不浪费掉的话。但大多数人都在浪费时间。他们在会议中浪费时间,在不重要的事情上浪费时间。而实际上,每天只要有三四个小时专注、不被打扰的时间,就能在他们真正关心的目标上取得巨大进展。
Lex Fridman
我认为孩子确实能以这种方式提高那些需要它的人的生产力,尤其是我这样的人,他们创造了紧迫感。
DHH
是的。
Lex Fridman
如果你必须在 5 点前完成工作,这可能是一个反直觉的概念,但对于像我这样喜欢工作的人来说,你真的可以用一些无关紧要的工作来填满一天。而如果你必须在 5 点前完成,你就必须进行深度工作,把它做完,真正地专注。然后你就会切断所有的……
DHH
这让你保持诚实。它让你保持诚实,因为你可以浪费一天,你可以浪费两天,但如果我浪费了一整个星期,我会感觉很糟糕。这只是我内心的一种驱动力,如果我做了有意义的事情,我就会感到满足和充实。如果我能回顾这一周,然后想:“这一周过得不错。”真的,我们前进了。也许我们没有完成所有事情,但我们前进了,一切都变得更好了。我认为孩子真的能在这方面帮助你规划时间。很多人需要这个,因为我发现那种对过度工作的吹捧是如此令人厌烦。哦,我每周工作 60 小时,或者 80 小时,100 小时,我就想,首先,不,你没有。你没有。
那 80 个小时里充满了各种你称之为“工作”的无关紧要的事情,但如果是我,或者大多数人,或者你自己,如果你真的分析一下那些时间都去哪儿了,你会觉得可笑。大多数重要的事情都是在这些不被打扰的两小时、四小时或五小时的时间块里完成的。困难的部分是确保你能完整地获得这些时间块。所以别跟我说那个。时间是足够的。而且,有什么事情重要到能排在延续你的血脉之上呢?我认为,这把椅子上坐着的这个 DNA,旅行了 3 万年才到这里,而你就要为了多发几封邮件而浪费掉这一切,这其中有一种古老的荣誉感。
Lex Fridman
有些东西也确实很难用语言来表达,就是那种仅仅和孩子们一起玩就能获得的乐趣。我不知道,表面上看,好像我一个人玩电子游戏也能获得那种乐趣,但实际上不是。那里面有一种魔力,对吧?
DHH
我在《堡垒之夜》(Fortnite) 里有上千个小时的游戏记录,从 2019 年开始,我想,全都是和我的孩子们一起玩的。如果不是为了我的孩子,我根本不会玩《堡垒之夜》。嗯,我不知道是不是“根本不会”,但肯定不会玩一千个小时。对我来说,乐趣在于和他们一起做一些我也恰好喜欢的事情。我真的很喜欢《堡垒之夜》,它是一款非常棒的游戏。我不需要强迫自己和他们一起玩。我经常会问:“嘿,想玩《堡垒之夜》吗?”但这仍然是一种我可以和他们分享的活动,一种我可以和他们分享的热情。我已经开始和我大儿子一起开卡丁车了。我开赛车已经很久了,现在他们也开始接触卡丁车了。仅仅是在卡丁车赛道上,看着他们一圈圈地跑,看着他们越来越快,看着他们学习那项技能,你就会想,我还能用我的生命做什么别的事情呢?在我这个年纪,45 岁,我站在这里,真正地享受着我带到这个世界上的生命。在这个阶段,还有什么别的事情如此重要,值得我花时间去做呢?
…在这个阶段,还有什么别的事情如此重要,值得我花时间去做呢?
赛车
Lex Fridman
好的。就像你提到的,你喜欢赛车,而且是在世界级的竞技水平上,这太不可思议了。你是怎么开始的?赛车吸引你的地方是什么?你喜欢它的什么?
DHH
有趣的是,我直到 25 岁才拿到驾照。我在丹麦哥本哈根长大,那里的汽车税基本上超过 200%。所以你付三辆车的钱,只能得到一辆。我连一辆车的钱都付不起,更不用说三辆了。所以,我从小就买不起车。我们家也没有车。但哥本哈根是一个很好的城市,可以骑自行车、坐公交车,或者像我曾经很长一段时间那样,穿溜冰鞋到处走。
但当我 25 岁时,我意识到我想在美国待更多时间。当时我还不确定是否会搬到那里,后来确实搬了。但我知道,如果我想在美国待着,我需要有驾照。如果我不会开车,会很不方便。
所以,我 25 岁时拿到了驾照。那年晚些时候,我最终搬到了美国。我一直很喜欢玩电子游戏,尤其是赛车游戏。Dreamcast 上的《Metropolitan Street Racer》是那种真正吸引我的游戏之一……它是《Project Gotham》的前身,而《Project Gotham》基本上又是《Forza Horizon》的前身,我想是这样。
Lex Fridman
哦,好的。
DHH
我想这个系列就是这样发展的。这是一款很棒的游戏。我几周前刚在一个模拟器上重新玩了一下,它在某种程度上仍然不过时,因为它有足够真实的汽车动态,闻起来有点像开真车。它不仅仅是像《世嘉拉力》(Sega Rally) 那样的街机赛车游戏。但我一直很喜欢这个。
然后我 25 岁拿了驾照,搬到了美国。两年后,我在芝加哥认识的一个朋友带我去了芝加哥奥特朋乡村俱乐部 (Chicago Autobahn Country Club),那是一个离芝加哥大约 45 分钟车程的很棒的赛道。我坐进了一辆赛车,第一次开赛车。我当时有了一种类似宗教体验的感觉,就像我刚开始用 Ruby 编程时一样。我在那辆基本上是马自达的赛车里跑了大概 20 圈,我想是 90 年代左右的车,一辆相当便宜但却是真正的赛车。单座,手动变速箱,但有外露的光头胎 (slick wheels),应有尽有。
有了那次经历之后,首先,那简直是世界上最棒的事情。开赛车的身体感觉非常独特。我想,如果你开过快车,你可能只体验到了其中的 2%。在单座赛车里,尤其是我开的那种,你的头实际上是暴露在外的,你可以看到每一个轮子,那种速度感要高得多,完全是另一个层次。
Lex Fridman
所以你能具体说说吗?即使是在那辆马自达里,你能感觉到……什么,你能感觉到赛道的震动吗?你感觉到抓地力了吗?
DHH
哦,是的。你不仅能看到颠簸,因为你 literally 直视着轮子,你还能感觉到所有的颠簸,因为你用的是光头胎,而且悬挂非常硬。这和你开一辆速度快的街车在赛道上跑几圈是完全不同的体验。
Lex Fridman
所以你能感觉到打滑、牵引力吗?
DHH
是的,你能感觉到打滑。这是开赛车最大的乐趣之一,就是在我们所说的“附着力边缘”(edge of adhesion) 驾驶,也就是车子实际上在轻微滑动。几度的滑移角 (slip angle) 是开赛车最快的方式。你不想滑得太多,那看起来很酷,浓烟滚滚,但速度不快。
你想驾驶的方式是恰好在附着力的极限,你尽可能地让车子旋转,达到轮胎能承受的极限,然后再稍微多一点点。并且保持在那个水平。因为当你处于附着力极限时,你基本上离失控打转只有一线之隔。我是说,不需要太多,车子就开始旋转。一旦开始旋转,你就会失去抓地力,然后就会撞墙。
那种危险与技巧的平衡感,是如此令人陶醉,而且比玩赛车游戏要好得多,因为关键性被提升了两个档次。我常常想到那些真正喜欢赌博的人,我会想:“你不就是在玩扑克吗?”不,重点不是扑克。扑克可能只是其中一部分,但重点是“我可能会输掉我的房子”。对吧?那是某些人对赌博上瘾的原因,因为有真实的东西在赌桌上。
当你在赛车里时,有非常真实的东西在赌桌上。如果你搞砸了,最起码你会打转,然后可能撞墙,那会很昂贵。最坏的情况是,你可能无法活着出来。即使现代赛车比以前安全多了,那种危险因素仍然是真实存在的,仍然有人在赛车里受重伤,甚至丧生。
与 60 年代那些疯子们参加 F1 比赛时相比,现在这种情况已经非常罕见了。当时,大概有 13% 的车手无法活到赛季结束,他们会在一团熊熊烈火中丧生。但现在仍然有那么一点危险存在。
我认为,那种有东西在赌桌上的感觉确实有贡献,但远不止于此。这不仅仅是一种身体上的感觉,它调动了你所有的感官。还有心流,我认为这真正巩固了我上瘾的原因。因为我喜欢从编程中获得的心流,但从编程中获得心流是一个非常不稳定的过程。
我不能 просто 坐在键盘前说:“好了,让心流开始吧。”事情不是那样的。问题必须恰到好处,必须在恰当的时刻与我的技能相匹配。这有点像抽奖。
而在赛车里,完全不是抽奖。你坐进那辆车,打着火,开上赛道,我几乎可以保证进入心流状态。因为你需要,或者说至少我需要,我 100% 的大脑处理能力,才能以我现在的速度行驶而不撞车。所以没有时间去想今晚吃什么,或者下周的会议,或者产品发布。这完全是禅宗 (zen) 意义上的,真正的禅宗。
我想,一个真正擅长冥想的人,大概也会进入那种状态,就是头脑清晰,你活在当下,除了你和下一个弯道,别无他物。那是一种非常令人上瘾的体验。
所以,在那次经历之后,我简直欲罢不能。我一有机会就去赛道。大约四年里,每个周末我都会去赛道。到那时,我终于积累了足够的技巧和公司带来的成功,可以负担得起去参加“真正的比赛”。
于是我开始这么做。我开始开保时捷 (Porsche),然后一旦我进入那个领域,进入“真正的竞争”,我就想:“我想知道这能走多远?”没过多久,我就决定:“你知道吗?我能一直走到顶峰。”
我在赛车界的伟大偶像是汤姆·克里斯滕森 (Tom Kristensen),一位丹麦同胞。他被称为“勒芒先生”(Mr. Le Mans),在世界上最伟大的耐力赛——勒芒 24 小时耐力赛 (24 Hours of Le Mans) 中,他的获胜次数比任何人都多。他赢了九次。所以汤姆真的让我对勒芒产生了浓厚的兴趣。我从 80 年代就开始看勒芒比赛了,我想。我最早的记忆就是看电视上的比赛。这项赛事从 20 年代就开始了,我想,但在 80 年代我开始有点入迷。
然后在 90 年代末、2000 年代初,当汤姆开始赢的时候,我,就像几乎所有其他丹麦人一样,开始近乎虔诚地观看这场比赛。所以我想:“你知道吗?我想去勒芒。”
这就是赛车的魔力所在。如果我开始打篮球,我不能不切实际地期望自己能打进 NBA,或者进入总决赛。如果我开始打网球,我也不能期望自己能去温布尔登 (Wimbledon) 比赛。那根本不可能。但赛车在这方面很特别,因为维持这些赛车的运行需要相当多的钱,非常昂贵,就像经营一家小公司一样。你需要带着一堆人飞到世界各地,购买昂贵的设备等等。所以你需要很多资本,而我通过公司的成功有了一些,所以我可以做到。这意味着我可以去勒芒。
所以,我把这定为我的目标:“我想去勒芒。”我从 2009 年开始参加真正的比赛,三年后的 2012 年,我第一次站在了勒芒的起跑线上。
Lex Fridman
我们应该说明一下,勒芒,24 小时耐力赛。我是说,这太疯狂了。
DHH
提醒一下,是有三位车手。所以不是一个人连续开 24 小时。但即便如此,这仍然是一场相当艰苦的比赛,无论是身体上还是精神上,尤其是精神上。当你清醒了 24 小时以上,你的头脑就不如刚醒时那么敏锐了。
关于勒芒,有趣的是,比赛通常在下午 4 点左右开始,所以比赛开始时你已经醒了半天了,然后还有 24 小时要跑,直到结束。你在车里的时间通常是从一个半小时到最多四个小时不等。规定是六个小时内最多能开四个小时。
我在勒芒的一次驾驶中最长可能开了两个半小时。这相当耗费体力。你在一些弯道上要以每小时 200 英里的速度行驶,赛道上还有另外 60 辆车。当我在我通常的组别,也就是 LMP2 组别时,我要超过像法拉利 (Ferrari) 和保时捷 (Porsche) 这样的 GT 赛车,然后还有那些超跑 (hyper cars)——也就是顶级组别的赛车——在超过我。
所以你要处理很多事情,并且必须保持两个半小时的专注才能做到。这是一种保证能获得长时间、强烈心流体验的方式。这就是你为什么会对它上瘾。这也是我为什么会上瘾的原因。
Lex Fridman
你得给我讲讲这个视频,这个你在 LMP2 赛车里的视频。
DHH
哦,是的。
Lex Fridman
这个太酷了……太酷了。
DHH
是的,这可能是我职业生涯中最喜欢的一场对决。
Speaker 1
汉森 (Heinemeier Hansson) 已经超过了,增加了五个……
DHH
是的,这是我在上海国际赛车场和尼科·穆勒 (Nico Müller) 对决。
Lex Fridman
你是在外侧吗?
DHH
我在外侧,开着蓝白相间的车。我们几乎绕了整个赛道,彼此之间只有一张纸的距离。看,在这条后直道上,我离他非常近,因为我想把他挤到赛道的另一边,这样他就不能 просто 把我困住。到这个时候,我们已经连续战斗了将近 40 分钟了。
我成功地把这位职业车手挡在身后 40 分钟,他最终超过了我,但我们整场比赛都在继续战斗。这真的展示了这两种赛车,勒芒原型车 (Le Mans Prototypes) 的特点。我们实际上从未触碰过。我们之间的距离大约只有一英寸,并一直这样绕着上海赛道……
Lex Fridman
你是怎么变得这么厉害的?我是说,这是一个很有趣的故事,对吧,你能变得这么厉害?
DHH
对于我这种被称为“绅士车手”(gentleman driver) 的车手来说,我已经相当不错了,这意味着我不是职业车手。和许多优秀的绅士车手一样,当我们在最佳状态时,我们甚至可以与那些一生都在从事这项运动的职业车手相媲美。
我们和职业车手之间的区别是,职业车手几乎每次都能做到,或者说绝大多数时候都能做到。所以我不可能一直都这么出色。当一切都恰到好处时,我可以和职业车手竞争,但这不是你赢得冠军的方式,也不是你从车厂拿到薪水去开车的方式。你必须每次出场都表现出色。
所以这是一个巨大的区别。但其中一部分原因也只是,我真的用心去做了。当我意识到赛车是我想要认真对待的爱好时,我投入了数千个小时。
Lex Fridman
你撞过车吗?最严重的一次是怎样的?
DHH
我撞过很多次车,但谢天谢地,(敲木头)我没有受过很严重的伤。
Lex Fridman
你把车撞毁过吗?
DHH
哦,是的。哦,是的。我撞毁过很多车。
Lex Fridman
那是什么感觉?撞毁一辆车?你怎么……
DHH
如果你在一场真正的比赛中,并且其他人还指望着你,那感觉糟透了。甚至不是车的问题,尽管有时这些车修理起来很贵,这很糟糕,撞毁这些车会让你觉得很浪费。但更重要的是那种让团队失望的感觉。
耐力赛是一项团队运动。你不仅有你的技师,通常还有你的队友。所以当我撞车时,我就会想:“该死,我本可以避免这个的。”
Lex Fridman
是的,但你也可能会死。
DHH
你知道有趣的是什么吗?我从来不考虑那个。我认为你不能考虑,因为一旦你开始思考死亡的可能性,你就无法做到,你无法开得快。
Lex Fridman
嗯,我相信,不是要扯到卡尔·荣格 (Carl Jung) 和弗洛伊德 (Freud),但我相信那肯定在你脑海的某个角落,你只是没有把它浮现到表面。
DHH
从某种意义上说,是的,它是吸引力的一部分。它是有东西在赌桌上的感觉的一部分,这不是虚拟的。我不能 просто 按下重置、重启、重新启动。如果我撞了这辆车,我们就会出局,或者我们会处于劣势,或者它会被毁掉,或者我可能会受伤。
我受过几次轻伤。实际上,在我们赢得勒芒 24 小时耐力赛我们那个组别冠军的那一年,我一直在用一辆 3.5 升方程式赛车训练。那是一辆非常快的车,做这个练习很好,但它没有动力转向。所以有些赛车,尤其是开放式座舱的,没有动力转向,这意味着方向盘基本上是直接连接到前轮的。
所以,如果你撞了那种车,前轮突然转向,如果你不把手从方向盘上拿开,你的手就会受重伤。我开那种车的经验还不够多,不知道必须把手拿开,或者说还没有养成那种本能,所以我没有拿开,结果手受了重伤。
这大概是在勒芒 24 小时耐力赛前一个月。所以我想:“哦,天啊,我今年要错过了。”我没有打石膏,只是严重扭伤了。然后,奇迹般地,在比赛前一周,我就觉得:“哦,是的,实际上现在好了。”所以,就去参加了。
如果我看到我的团队最终赢得了比赛,而我只能在场边观战,那将是极大的遗憾。但我确实非常幸运,因为我的大多数撞车事故都只是代价昂贵或者在比赛上造成了不便。它们从来没有让我受过重伤,但我见过很多人受过重伤。
事实上,我今年的队友,也是多年来的队友,皮耶特罗·菲蒂帕尔迪 (Pietro Fittipaldi) 在斯帕 (Spa) 赛道开赛车时出过事。斯帕是有史以来最伟大的赛道之一,它有一个标志性的弯道叫做 Eau Rouge,这可能是所有赛车运动中最著名的弯道,在上坡前有一个很大的下压力。
这是一个极快、极难的弯道。就在他下压时,他的车基本上熄火了,他失去了动力转向,然后径直撞上了墙,双腿骨折,基本上,面临着职业生涯可能就此结束的前景。我还有其他队友和认识的人受过重伤,对他们造成了很大的伤害。
但有趣的是,正如你所说,你可能会认为这会让你印象深刻。2014 年,也就是我们获胜的前一年,在勒芒,我参加的那场比赛中,同一辆车里有一位丹麦车手,他去世了。当时赛道上有点雨,他失去了对车的控制,不幸的是,赛道的设计非常糟糕,护栏后面就有一棵大树。他全速撞上了那棵树,承受了 90 Gs 的冲击力,当场死亡。这是一次极其糟糕的经历。
那年我获得了第二名,本应是值得庆祝的,但它被一个事实玷污了:不仅有一位车手去世,还是一位丹麦同胞,一个我认识的人。那真的很艰难。
Lex Fridman
所以,在需要考虑的因素中,还要加上天气条件,就像你提到的赛道是干是湿。
DHH
这是很大一部分。就在去年的勒芒,下雨了,我出去了,自从我 2012 年第一次参加勒芒比赛以来,我就没有犯过严重错误。那次比赛,我在还剩四小时的时候把车开进了沙地。我们被拖出来时损失了几圈,但这并没有改变我们的最终成绩,因为当时场上的差距就是那样。
这些年来我犯过一些小错误,但没有真正影响到我们的。而在去年的比赛中,下着雨,我先是在赛道湿滑的部分做了一个过于激进的超车,没能及时刹住,撞上了一辆福特野马 (Ford Mustang)。然后当我坐在砂石坑里,知道我们的比赛已经结束了,感觉糟透了。那是一场我们非常有竞争力的比赛。
你不是每年都能幸运地拥有一辆有竞争力的赛车、一个有竞争力的团队和有竞争力的调校。我知道那有多难得。所以,知道我们那年有机会,而我却把它搞砸了,感觉真的很糟糕。但当我回到赛道,勉强又跑了一段后,情况变得更糟了。当进入保时捷弯 (Porsche Curves) 的入口时又开始下雨,我又把车开进了砂石坑。
所以,这也是为什么赛车如此令人上瘾的部分原因,因为高潮时非常非常高。当你赢得像勒芒 24 小时耐力赛这样的比赛时,感觉简直不可思议,充满了各种情感。但如果你搞砸了,低谷时也非常非常低。
Lex Fridman
你开车时会注意哪些东西?有哪些参数?你会加载什么信息?是感受抓地力吗?你基本上是不断提高速度,然后观察它对抓地力的即时反馈,并试图管理这个反馈,找到那个最佳的滑移角吗?
你是在用眼睛观察周围吗?你在闻什么吗?你在听吗,只是感受风,还是也在观察场上的情况?你是怎么做到完全不撞到那个人的?你们之间的距离只有几英寸,对吧?所以你必须也注意那个。
DHH
关于那场我们相距只有几英寸的特定对决,这很有趣。我无法完全解释,但人类可以发展出一种令人难以置信的空间感。我看不见我车尾的边缘,但我能确切地知道它在哪里。我脑海里有一个心智模型,能给我这辆车确切的尺寸,这样我就可以在离对手车几英寸或离墙几英寸的距离内行驶,只要一切顺利,就不会撞到任何一个。
这辆车大约两米宽,很长,五米,你不可能看到所有东西。后视镜其实很差。这些车里没有后视镜,你看不到后面。你只能通过两个侧后视镜看。但当你足够熟练时,你会形成这种直觉性的心智模型。
但我实际上最关注的是,我运行一个程序。当我到一个赛道时,我试着为每一个弯道加载我所知道的最好的程序。我的刹车点是什么?我的加速点是什么?我的循迹刹车 (brake trailing) 曲线是什么?我试图通过自己摸索和看我能开多快来找到这个程序。但更重要的是,通过模仿我的职业竞争对手,或者说不是竞争对手,是我的队友。
所以我通常总是和一个职业车手一起比赛。现代赛车会产生海量的数据,你可以在每次出车后分析所有这些数据。你可以看到你踩刹车踏板的精确轨迹,你做了多少转向输入,你什么时候踩油门。你失去的每一毫秒,在那些图表里都一目了然。
所以,我试着去看图表,然后试着把那个加载到脑子里,那就是我要做的。“哦,在这个 17 号弯,我的刹车力度要轻 10 bar。”所以我就试着加载那个程序,然后试着重复它。
当然,还有所有会变化的东西。你的轮胎变化很大。这些轮胎在很多情况下只能用 40 分钟。有时在勒芒我们可以用更久,但在一些赛道上,它们可能只用 40 分钟就真的不行了。所以你必须管理这一点,抓地力在不断变化,所以你的程序必须适应这些变化。
然后在耐力赛中,你不断地和其他赛车互动,因为你要超过慢的组别,或者被快的组别超过。所以这也是等式的一部分。然后你还要试着让赛车在附着力的极限上跳舞。
所以你要同时处理所有这些因素。但对我来说,最重要的是努力成为一个机器人。我如何能在两个半小时内,一模一样地重复这套步骤,而不犯下价值 100 毫秒的错误?
Lex Fridman
是的,低延迟算法。
DHH
这实际上是很大一部分。你的延迟在捕捉到赛车开始打滑时非常重要。你的身体会感觉到 G 力有点不对,滑移角有点不对,然后你必须反打方向盘。
很明显,最好的赛车手感觉就像是一种直觉。我有一些直觉,但不是全部,所以我偶尔也会让车打转,但这就是挑战所在。
Lex Fridman
根据你所学和所理解的一切,要想在赛车领域达到精通需要什么?成为世界上最好的赛车手需要什么?
DHH
痴迷是其中一部分。当我读到和听到关于塞纳 (Senna) 和其他伟大车手的故事时,他们都是非常专注的。马克斯·维斯塔潘 (Max Verstappen) 是现任世界冠军,他也属于那种类型。观察马克斯的成长过程非常有趣。我是说,他是一位了不起的赛车手,但他基本上不做任何其他事情。当他不在赛道上时,他在玩模拟赛车。他 literally 在不在比赛的时候,就在玩电子游戏,进行更多的赛车练习。
Lex Fridman
在所有的痴迷中,他们是否有一项让你觉得超乎常人的特殊技能?是一系列因素,还是他们真的能够,就像你说的,发展出一种感觉?是他们能够达到滑移的极限吗?
DHH
他们能够发展出对赛车滑动时非常精细的感知能力。他们能感觉到底盘上那些微小的瞬间或移动,这些感觉通常通过他们的臀部传递上来。这就是为什么我们称之为“屁股仪表盘”(butt meter),它会传递上来,让你感觉到车子不稳定了,或者你感觉快要锁死了。你真的可以磨练那种调校。
另一件事是,你必须有非常好的反应时间。当你观察伟大的 F1 车手时,他们通常能有不到 200 毫秒的反应时间,这非常厉害,即使是 10 毫秒的差异也会产生巨大的影响。
你可以在 F1 的起跑线上看到这一点,比如他们做静止起步时,你会看到五个红灯亮起。当最后一盏灯熄灭时,他们应该松开离合器出发,他们可以精确地计时。所以你可以看到谁的反应时间最快。
即使是慢了 20 毫秒,也可能决定你在第一个弯道时是领先还是落后。
Lex Fridman
获胜在多大程度上也取决于争夺位置的策略?
DHH
有那么一部分,还有一部分就是胆量。谁更想赢?这正是危险感发挥作用的时候。费尔南多·阿隆索 (Fernando Alonso) 有一句很棒的名言,当时他在铃鹿赛道 (Suzuka) 和舒马赫 (Schumacher) 对决,我想。
他们正接近一个极快的弯道,非常危险。阿隆索基本上是说:“我准备超车,因为我知道他家里有老婆孩子。”
Lex Fridman
这太霸气了。
DHH
简直是冷酷无情,对吧?
Lex Fridman
是的。哇。
DHH
“我知道他比我更珍惜生命。”所以,这其中有时有点像玩扑克,看谁先让步。在这方面有点像“胆小鬼游戏”(chicken race)。有时它不起作用,没人让步,你们俩都撞车了。但很多时候,会有一个人先眨眼。
Lex Fridman
超车可以在内侧也可以在外侧吗,还是说……
DHH
只要你的车有一小部分还在赛道上,你想在哪里超车都行。
Lex Fridman
然后你就即兴发挥,承担风险。这真是一项运动。当然,塞纳 (Senna) 是一个传奇的冒险家。
DHH
是的。甚至在他之前也是。到……我是说,他是在 90 年代去世的,但到 90 年代,赛车已经比尼基·劳达 (Niki Lauda) 在 60 年代比赛时安全多了。那种程度的危险已经不复存在了。现在只剩下一点点残留,仍然很危险,但和那时完全不同了。
要跨时代比较谁是史上最伟大的车手有点困难。我认为有充分的理由说塞纳 (Senna) 是,但我们没有数据。我们不知道他当时的对手是谁。如果把他和今天的马克斯·维斯塔潘 (Max Verstappen) 对比,他会怎么样?
我有时确实认为,人们对历史上的伟人会有一种怀旧情结,但世界在前进,新的记录在不断被创造,专业水平也在不断提高,有时这反而对这项运动不利,我认为。
有很多职业车手不仅驾驶技术非常出色,而且也非常擅长担任企业发言人。而过去则大不相同。过去赛车界有更多有个性的人物,他们被允许展现自己的个性,因为没有那么多赞助商在背后,他们不用担心会失去赞助。
汽车
Lex Fridman
一个有点离谱的问题,有史以来最伟大的汽车是哪一辆?或者说,开起来最有趣的汽车是哪一辆?
DHH
对我来说,有史以来最伟大的汽车是帕加尼 Zonda (Pagani Zonda)。
Lex Fridman
好的,我查一下,帕加尼 Zonda。
DHH
帕加尼 Zonda 是由一位出色的阿根廷人奥拉西欧·帕加尼 (Horacio Pagani) 制造的。
Lex Fridman
天啊,这车太美了。哇。
DHH
它是一辆非常华丽的车。你可以查查我的那辆,是帕加尼 Zonda HH。是的。那是我 2010 年在参观了摩德纳 (Modena) 的工厂后定制的一辆车。纯属意外地拥有了这辆车,但它基本上成了我最喜欢的车。我记得在 2005 年看了一集《Top Gear》,其中一位主持人在开帕加尼 Zonda F,我当时就想:“那是世界上最漂亮的车,声音最动听的车。如果有一天我有机会,这就是我想要的。”
然后在 2010 年,我有了这个机会。从那时起我就拥有这辆车,我永远不会卖掉它。它是一件真正经得起时间考验的杰作。历史上有很多伟大的汽车,在它们那个时代被公认为伟大。而这辆车,至今仍然伟大。
Lex Fridman
你把它开上赛道过吗?
DHH
开过。它在那方面表现很糟糕。但我也不能说它很糟糕,那不是它的设计用途。它是为公路设计的,这正是它的伟大之处。有很多快车都是介于赛车和公路车之间。你其实不想要一辆公路赛车。公路赛车开起来简直是折磨。它太硬了,太吵了,太不舒服了。你根本没法开着它去公路旅行。
Lex Fridman
所以这辆车在普通道路上开起来感觉很好?
DHH
哦,完全是,完全是。
Lex Fridman
你当然总是遵守限速?
DHH
总是。这就是为什么我喜欢在西班牙开这辆车,因为他们那里要宽松一些。不是完全放松,但比很多地方要宽松。在丹麦,我不是开玩笑,如果你在高速公路上超速超过限速的一倍,他们会没收你的车,并且不会还给你。他们甚至不管车是不是你的。如果你借了我的车,超速了一倍,车就没了。
所以他们在西班牙不这么做。我是说,除了德国的高速公路 (Autobahn),大多数地方如果你超速一倍,他们都会不高兴,这有很多合理的理由。我不是在提倡你应该超速很多,但确实有一些特殊的道路,你可以放开速度,而且不会危及任何人,那是一种难以置信的感觉。我确实认为,有些限速规定其实有点傻,我不是凭空这么说。
在德国,他们有光荣的高速公路 (Autobahn),在很多路段是没有限速的。他们对不限速的高速公路是如此执着,这对于德国人来说其实很奇怪。他们通常很喜欢规则,做事非常精确,但他们却有这个叫做高速公路的光荣之物。
几年前有一个很棒的案例,一个人开着布加迪 Chiron (Bugatti Chiron) 在高速公路上跑到了时速 400 公里,他还拍了视频发到 YouTube 上。结果有人起诉他,因为即使没有限速,他们也有规定说不能鲁莽驾驶。最终他赢了官司,他没有鲁莽驾驶,只是开得非常非常快。
我开过几次高速公路。2009 年,我和我妻子在欧洲进行了一次公路旅行,我把我们开的兰博基尼 Gallardo (Lamborghini Gallardo) 开到了时速 200 英里。我以前在赛道上开到过或者接近过时速 200 英里,那是一种感觉。而在公共道路上开时速 200 英里,感觉真的非常非常快。
Lex Fridman
害怕吗?
DHH
实际上有点害怕,是的,因为你总是在想,在赛道上你了解路况,了解路面。大多数时候你可以走一遍赛道,可以知道哪里有坑洼。但在公共道路上,你不知道会不会突然出现一个坑。想必德国高速公路上不会有坑,但确实感觉有点害怕,但也令人振奋。
速度本身就很有趣。我带出去的开快车的人,我几乎没见过不喜欢的……嗯,实际上我认识几个。我带出去的大多数人,开快车时他们都会咧嘴笑。这是人类在高速行驶时的一种本能反应。
Lex Fridman
你知道你开过的最快速度是多少吗?
DHH
可能是在勒芒。我想,当 LMP2 赛车达到最大功率,拥有 600 马力,轮胎抓地力很强的时候,我们能开到每小时 340 公里,也就是略高于每小时 200 英里。那感觉确实很快。
有趣的是,关于速度,从 150 英里/小时加速到 160 英里/小时,那 10 英里/小时的增量感觉并不那么明显。但从 190 英里/小时加速到 200 英里/小时,感觉快得离谱。从百分比变化来看,这实际上比从 150 到 160 的增量要小,但一旦你达到那些极限速度,就会有一种指数级增长的感觉,完全是另一个层次。
Lex Fridman
是的,因为对我来说,110、120 英里/小时就已经感觉很快了。200,那太疯狂了。
DHH
那真的太疯狂了。
编程环境配置
Lex Fridman
我得问问你编程环境的细节,IDE 什么的。让我们描绘一下完美的编程环境。你有自己喜欢的编程环境吗?你很灵活吗?多少个显示器?什么样的键盘?什么样的椅子?什么样的桌子?
DHH
这很有趣,因为如果你一年半前问我,我的答案会和过去 20 年里给任何人的答案一样。我想要一台 Mac。我喜欢妙控键盘 (Magic Keyboard)。我喜欢单显示器。苹果做了一款很棒的 6K、32 英寸的 XDR 屏幕,我至今没发现有谁能超越它,所以我还在用。尽管我换掉了苹果电脑,我仍然用他们的显示器,因为它太棒了。但我一直都是单屏党。
我喜欢大屏幕,但我不想要多个屏幕。我从来不觉得那样对我来说很有效。我希望能专注于一件事情。我不希望所有东西都乱七八糟地摆着,我一直用多个虚拟桌面,并且能在它们之间来回切换。
但我今天的配置是 Linux。一年多以前,我终于受够了苹果,实在用不下去了,就换了。然后我用的是一款叫做 Lofree Flow84 的薄型机械键盘,那简直是……
…Flow84,那简直是我听过的声音最悦耳的键盘。我知道有很多机械键盘的鉴赏家可能会反驳我,说这个太“thocky”,那个太“clicky”或者太“clacky”之类的。但对我来说,Lofree Flow84 简直是一种我以前都不知道存在的享受,这很奇怪,因为我编程很久了,机械键盘也存在很久了。
这个键盘,你这样看它,它看起来很普通,不花哨。但你按下那些键时得到的触感,键帽敲击底板时发出的“thocky”声,简直是 sublime。我真后悔自己待在 Mac 的那个小圈子里那么久,以至于我甚至都没想过去找这样的东西。
我知道机械键盘的存在,但坦白说,我以为那是一种只有比我更“nerd”的真正的“nerd”才会关心的东西。然后我走出了苹果的圈子,突然之间,我必须重新找到所有东西。我得找新鼠标,新键盘,所有东西。我想,“好吧,让我试试机械键盘吧。”我试了不少。
Keychron 是那个领域的大品牌之一,我一点也不喜欢。我还试了很多其他键盘。然后我终于找到了这个键盘,我简直就像……天使在歌唱。你这辈子都去哪儿了?作为程序员,我们花了那么多时间与那些按键互动,它真的很重要。
在某种程度上,我以前没有完全意识到。我过去常常为苹果的妙控键盘 (Magic Keyboard) 辩护,说:“嘿,它很棒,它真的是一个很棒的键盘。”我认为,对于它那样的超薄、超短键程的键盘来说,它确实是一个很好的键盘。但一旦你试过长键程的机械键盘,你就回不去了。
Lex Fridman
你确实要记住,在很多方面,无论是软件还是硬件,你确实花了很多小时……
DHH
是的。
Lex Fridman
…在电脑前。值得……
DHH
值得投资。
Lex Fridman
也值得探索,直到你找到那个让天使歌唱的东西,无论是什么。
DHH
完全正确。我确实有点后悔,尤其是对这个该死的键盘。我本可以听着这些美妙的“thocky”声好几年了。但有时你得被彻底激怒,才会睁开眼睛看到其他东西的存在。
我对 Linux 也有同样的感觉。我从 90 年代末开始就在服务器上使用 Linux。那时我们就在 Linux 上运行服务器。我从来没有认真考虑过把它作为桌面操作系统。我以前从未直接自己运行过 Linux。我总是想:“你知道吗?我想专注于编程。我没时间去搞那些配置文件、那些设置的破事等等。苹果已经足够接近了,它建立在 Unix 的基础上。我为什么还要费心去用 Linux?”
同样,这也是其中一件事。我需要尝试新事物,尝试别的东西,才能意识到除了苹果之外还有其他选择。再说一次,这并不是因为我讨厌苹果。我认为他们仍然制造好的电脑,很多软件也仍然不错。但我逐渐意识到,作为一名 Web 开发者,Linux 就是更好。
Lex Fridman
是的。
DHH
Linux 就是更好。它更接近我部署的环境。工具链实际上非常出色。如果你花点时间设置它,你可以记录下一个可复现的环境。我现在用我做的这个 Omakub 概念或者说项目已经做到了,我可以在不到 30 分钟内设置好一台新的 Linux 机器,而且是完美的。
不是“还不错”,不是“我还得再花两个小时”。是完美的。因为你可以把开发环境的所有方面都编码进去。我以前不知道,说实话,我甚至不知道 Linux 可以看起来那么好。
如果你看一个原生的 Ubuntu 或 Fedora 启动界面,我是说,不是说它丑,但我肯定会选 Mac。你看看 Omakub,我是说,我这里当然有偏见,因为我是用我自己的审美观来构建它的,但我看着它会想:“这个更好。这个很美。”
然后你再看看那些真正的 Linux 美化 (ricing) 配置,人们在所有方面都做得非常极致。你就会想:“哦,是的,我记得以前电脑也曾这么有趣过。”那时有个性,有自己的设置,而不是千篇一律的乏味。我认为这有时是像苹果这样的东西的另一面,他们有非常强烈的观点,非常好的观点,非常有品味,看起来很漂亮,但也看起来完全一样。
而 Linux 有更多的多样性、质感和风味,当然有时也有烦人的地方、bug 等等。但我现在用 Linux。它是基于 Ubuntu 的,上面加了 Omakub 的东西,用 Lofree 的键盘。我用的是罗技 (Logitech),叫什么来着?MX 3 鼠标,我喜欢它在我手里的感觉,但不喜欢它的外观。
我其实曾经很长一段时间是妙控鼠标 (Magic Mouse) 的支持者。我曾认为苹果把触控板集成到鼠标里是天才之举,我也一直用它。我总觉得人们只是因为它充电时必须翻过来就抨击它,这很可笑,因为电池能用三个月,然后你只要充半个小时。
我认为那完全符合我的审美观。我不介意为了一些美观而放弃一点便利,那款妙控鼠标很美。但它在 Linux 上用不了,所以我找了别的东西。MX 3 不错,但我有时确实希望妙控鼠标……那个相当不错。
Lex Fridman
是的。Linux 在自定义所有东西方面真的很棒,比如平铺窗口、宏命令等等。我在 Windows 上也用 AutoHotKey 做同样的事情,就是把整个系统都自定义成你的偏好。
DHH
如果你是开发者,你应该学会用键盘来控制你的环境。那样更快、更流畅。我认为我从我的 Omakub 设置中真正体会到的一个看似微不足道的好处是,我可以在刷新屏幕所需的时间内,大概 5 毫秒,从一个虚拟桌面切换到另一个。
即使在 Windows 上,你也无法做到那么流畅。你可以接近,但做不到那么流畅。在 macOS 上,出于某种原因,苹果坚持在你切换虚拟桌面时有一个令人恼火的动画,这让你 просто 不想用。你不想运行全屏应用,因为在虚拟桌面之间切换太麻烦了。而一个出色的 Linux 设置在这方面能带给你的那种即时性,简直是另一个层次。
Lex Fridman
是的。这似乎是一件很微妙的事情,但切换虚拟桌面时毫秒级的延迟差异,我不知道,它改变了……
DHH
它改变了你使用电脑的方式。真的。
Lex Fridman
和 VR 里的情况类似,对吧?如果有什么延迟,它会完全让你出戏。是的。
DHH
这很有趣。我实际上是看了……我想是 YouTube 上的 ThePrimeagen,当他展示他的设置时,我看到他切换虚拟桌面的速度有多快。我一直用虚拟桌面,但因为那个延迟,我不太喜欢频繁切换。然后我就想:“哦,Linux 上可以那样做?哦,那太酷了。”
Lex Fridman
是的。
DHH
所以我用那个。然后我现在选择的编辑器是 Neovim。
Lex Fridman
哦,好的。好了,我们的时间到了。不,开玩笑。你确实很多年都用,那个叫什么?TextMate。
DHH
是的。
Lex Fridman
TextMate。
DHH
TextMate。那是我离开苹果的主要障碍。其他所有东西,我都觉得:“你知道吗?我能应付。”但 TextMate 曾经是,现在也是一个很棒的编辑器,一个我帮助催生到这个世界上的编辑器。它的程序员,Allan Odgaard,是我的好朋友,我们从当初一起扛着电脑参加派对的时候就认识了。
Lex Fridman
酷。
DHH
他是一个忠实的 Mac 用户。2005 年,他正在写这个编辑器,我帮助他进行项目管理,让他保持进度,保持专注,最终发布了产品,因为我自己非常想要它。我当时以为这是最后一个编辑器了,我以为我永远不会换了。
Lex Fridman
恕我无知,这个编辑器功能有多丰富?
DHH
它功能相当丰富,但在某些方面它是一个由图形用户界面 (GUI) 驱动的编辑器。它很早就支持录制宏、拥有复杂的语法高亮等功能,它开创了很多先河。而且它的编辑体验非常愉快。
我想现在很多人会直接用 VS Code。VS Code 在某些方面和 TextMate 处于同一个宇宙。实际上,我认为它与最初的 TextMate bundles、最初的 TextMate 格式是兼容的。所以它确实开辟了一条道路,但它也没有继续发展。
现在,很多人认为这是一个巨大的问题。他们觉得:“哦,它需要更多功能,需要所有这些东西。”而我则觉得,我对这个文本编辑器很满意,自从 Allan 停止开发它十多年来,它基本上没有任何变化。我不需要任何其他东西。因为正如我们最初讨论的,我不要 IDE。我不想让编辑器为我写代码。我想要一个文本编辑器,我想要直接与字符互动。
Neovim 在某些方面让我能比 TextMate 更好地做到这一点,而我爱 TextMate。但是 Vi,你知道,一旦你学会了那些命令,而且听起来……我有时觉得 Vi 的粉丝过分夸大了学习的难度,因为这或许能让他们显得更厉害。其实没那么难。在我看来,也不需要很长时间就能学会足够多的组合操作,让你体验到那种“天啊,我在任何其他编辑器里都做不到这个”的快感。
Lex Fridman
你花了多长时间?顺便说一句,我不知道。我还没有……嗯,我理智上知道,但就像对孩子一样,我还没有完全投入。我还没用过 Vim。
DHH
那你可有福了。嗯,我大概是在一年前换的,前三天我一直在咒骂,觉得这简直太糟糕了,永远不可能成功。然后我又烦恼了三天。但到了第二周,我就觉得:“这太棒了。我哪儿也不去了。”
Lex Fridman
哦,哇。
DHH
但我也有点基础。大约 20 年前,在 2000 年代初,我试过一个夏天的 Vim,但没坚持下来。不知为何,当时我并不喜欢它。但 Neovim 真的很好。
Neovim 的关键在于,你要意识到你不必自己构建整个编辑器。所以很多 Neovim 的支持者会说:“这是如何从零开始写配置。”然后分 17 集,要花你三个星期。我没那么在乎。
我喜欢一个好的编辑器,我喜欢稍微定制一下,但没到那个程度。所以你得把 Neovim 和一个叫做 LazyVim 的东西搭配起来。LazyVim.org 是 Neovim 的一个发行版,它把所有让你获得一个开箱即用的、超棒的编辑器体验的苦差事都解决了。
Lex Fridman
一个有点离谱的问题。我们谈了很多编程语言。你告诉我们你有多喜欢 JavaScript,它是你第二喜欢的编程语言。那么 TypeScript 会是第三吗?
DHH
TypeScript 甚至都不会在这个宇宙里。我有多喜欢 JavaScript,就有多讨厌 TypeScript。
Lex Fridman
你讨厌……哦,天啊。我的智商不足以理解这个数学。好吧。在我问其他编程语言之前,如果你能把你对 TypeScript 的憎恨浓缩成人类可以理解的东西,理由是什么?
DHH
JavaScript 在某些元编程 (metaprogramming) 方面闻起来很像 Ruby,而 TypeScript 在你尝试写那种代码时,把事情复杂化到了令人发指的程度。即使你只是在写普通代码,那些喜欢它的人所获得的好处,比如自动补全 (auto-completion),都不是我关心的。我不关心自动补全,因为我不用 IDE。
现在,我理解这是区别所在,也是为什么我看不到好处的原因。我只看到了成本。我看到了额外的输入,我看到了有时必须做的类型体操 (type gymnastics),而很多人在这种情况下就放弃了,直接用 any,对吧?他们实际上并没有使用类型系统,因为用起来太令人沮丧了。
所以,我只感受到了 TypeScript 的挫败感和它在代码中造成的混淆,而没有得到任何回报。再说一次,我理解它有回报,但我不想要那个回报。所以就我的情况而言,我不愿意做这个交易,我不愿意把一种底层像 Ruby 一样动态的语言,然后把它变成一个假装是静态类型的语言。我觉得这在智力上是一种侮辱。
Lex Fridman
你认为它会,以及你认为它应该消亡吗,TypeScript?
DHH
我不想从喜欢它的人那里夺走什么。所以,如果你喜欢 TypeScript,那就尽情使用吧。但如果你用 TypeScript 是因为你认为一个专业的程序员就应该这么做,那么我给你一个许可:你不是非用 TypeScript 不可。
Lex Fridman
像你这样才华横溢的程序员 DHH 说脏话,有一种深刻的乐趣。这是我生活中最喜欢的事情之一。如果你要对一个初学者说,每个人都应该学习的前三种编程语言是什么?
给初学者的编程语言
DHH
我 100% 会从 Ruby 开始。对于初学者来说,它在理解条件、循环等核心概念方面简直是魔法,因为它让一切变得非常简单。即使你只是写一个输出到终端的 shell 程序,在 Ruby 里运行“hello-world”基本上就是 puts,P-U-T-S,空格,引号,“Hello world”,引号,就完成了,对吧?没有任何多余的东西,没有任何需要包裹它的东西。
还有其他语言也能做到这一点,尤其是 Perl 或 Python 会很相似,但 Go 不行,Java 也不行。还有很多其他语言有更多的仪式感和样板代码。Ruby 完全没有。所以它是一门很棒的入门语言。
有一本叫《学习编程》(Learn to Program) 的书,作者是 Pine,它基本上就是用 Ruby 来教基础的编程原理,我看到很多人强烈推荐。所以那是一门很棒的语言。
Lex Fridman
你会多快转向 Rails?
DHH
这取决于你想做什么。如果你想构建 Web 应用,就立刻转向 Rails,边学 Rails 边学 Ruby。因为我认为,真正能帮助你坚持学编程的,是去构建你想要的程序。对吧?如果你只是抽象地学习,很难激励自己去把它学好。
有些人学习语言只是为了好玩,但大多数人不是。大多数人学习它是因为他们有任务在身;他们想构建一个程序,他们想成为一名程序员。所以你必须把它用在真实的东西上。我实际上发现那样学习编程也更容易,因为它驱动了你的学习过程。
你不可能一开始就把所有东西都学会。你不可能坐下来读完语言规范,然后就像 Neo 一样,“哦,现在我会功夫了。现在我会 Ruby 了。”知识不是那样下载的。你必须在一个真实的项目上,带着情绪地把它敲出来。
Lex Fridman
是的。是的,当然。
DHH
所以我会从那里开始。但第二名大概会是 JavaScript,因为如果你想从事 Web 开发,JavaScript 就是你必须知道的语言。而 Web,如果你是在做商业软件或协作软件这类东西,它是有史以来最伟大的应用平台。
如果你是在做电子游戏,你可能应该去学 C++ 或 C 或者其他类似的语言。但如果你是在 Web 应用领域,你必须学 JavaScript。不管你学了什么别的,你都得学 JavaScript。
Lex Fridman
所以,如果你在学习 Ruby,Ruby 在编程概念方面缺少什么,以至于你需要其他语言来补充?
DHH
我不知道是否缺少任何概念,但它没有构建一个 3D 游戏引擎所需的速度或对内存操作的底层访问能力……
Lex Fridman
当然。
DHH
…那是你需要的。没人会用 Ruby 去构建那个。在 Web 技术方面,你可以用 Ruby 构建相当底层的东西,但在某个点上,你会达到极限,你应该用别的东西。
我不是那种主张所有东西都用 Ruby 的人。一旦你达到了 Web 应用所涉及的抽象层次,Ruby 是非常出色的。但如果你在写,比如说,一个 HTTP 代理,Go 就很适合。我们公司最近因为各种原因写了不少 HTTP 代理,包括我们退出云服务等等。
和我一起工作的程序员之一,Kevin,他所有的这些都用 Go 写。Go 恰好有做这件事所需的 primitives、节奏和速度,做得非常好。我强烈推荐。如果你在写一个通用的 HTTP 代理,用 Go 做。那是一门很棒的语言。但别用 Go 写你的业务逻辑。我知道有人这么做,但我看不出有什么意义。
Lex Fridman
所以你会说哪三种?Go、Ruby 加 Rails、JavaScript。
DHH
是的。如果你对 Web 开发感兴趣,我大概会选这三种。Go、Ruby 和 JavaScript。
Lex Fridman
Go、Ruby 和 JavaScript。好的。函数式语言。
DHH
总有人提到 OCaml。
Lex Fridman
他们总是会出现。肯定有什么 OCaml 产业联合体之类的,但他们总是说:“提一下 OCaml。”
DHH
我喜欢有人能那么热爱函数式语言。那些人不是我。我一点也不在乎。我关心的是函数式原则,当它们在某些孤立的情况下,比其他任何方式都更好的时候。但从根本上说,我是一个面向对象的人。那就是我思考程序的方式,我喜欢那样思考程序。那就是我如何把一个大的问题空间划分成主要的语言。对象是我的菜。
Lex Fridman
是的,我也是。我为 AI 应用写了很多 Lisp,用于基本的……比如,奥赛罗、国际象棋引擎之类的。我也试过 OCaml,就是强迫自己写一个非常基础的生命游戏 (Game of Life),一个小小的模拟。Lisp 到处都是括号,实际上根本不可读。
DHH
这就是我对 Lisp 的问题。
Lex Fridman
OCaml 非常直观,非常可读。它很好。
DHH
我真的应该在某个时候学一门那样的语言。我编程的时间够长了,以至于我没有用一门纯函数式编程语言真正地、认真地做过任何东西,这有点尴尬。
Lex Fridman
是的。但我必须想出一个,我相信有答案的,我能做什么对我有用,而且是我真正想构建的?
DHH
是的。那是我的问题。
Lex Fridman
一个函数式语言更适合做的东西。
DHH
是的。
Lex Fridman
因为我真的想正确地体验这门语言。
DHH
是的。
Lex Fridman
是的。因为到目前为止,我的思维已经非常面向对象了。
DHH
是的。
Lex Fridman
是的。
DHH
这也是我的问题。我对计算机科学中那些底层问题不那么感兴趣。我关心的是高层次的。我关心的是写软件。我关心的是那个与 Web 应用和业务逻辑非常契合的抽象层。
我已经接受了自己是这样的人,尽管,正如我们谈到的,我小时候真的很想成为一名游戏程序员。然后我看到了写一个碰撞检测引擎需要什么,我就想:“是的,那根本不适合我。”我永远不会对向量矩阵操作或任何那些东西感兴趣。那太多数学了。而我更像一个写作的人,而不是一个数学的人。
Lex Fridman
我是说,就你今天说话的方式来看,你对编程有一种诗意的、文学性的方法。
DHH
是的。
Lex Fridman
是的。这很有趣。
DHH
这实际上完全正确。我 10 年前在 RailsConf 上做过一个主题演讲,我称自己为“软件作家”(software writer)。我是说,我不是第一个这么说的人。“软件作家”这个词在行话里已经存在很久了。
但现代程序员在试图表现得专业时,大多采用的身份是“软件工程师”,我拒绝那个标签。我不是工程师。偶尔,我会涉足一些工程,但绝大多数时候,我是一个软件作家。我写软件是为了人类消费,也是为了我自己的愉悦。
我能这么做,是因为我用的是像 Ruby 这样的高级语言,做的是协作软件、待办事项列表和所有其他的东西。再说一次,如果我试图用我的才能去写 3D 游戏引擎,不,那不是正确的心态,不是正确的身份。
但我发现,“软件工程师”这个身份有点把事情扁平化了。我更愿意认为,我们有软件作家和软件数学家,比如说,这些实际上比“工程师”更能丰富地描述你工作的抽象层次。
Lex Fridman
是的。而且我想,如果 AI 变得越来越成功,我想我们会越来越需要软件作家的技能,因为感觉那是……因为不仅仅是作家。你必须做软件,你必须是一个懂计算机的人,但有一种更……我不知道。我只是不想把它浪漫化,但它更诗意,更文学。它更像是写一篇好的博客文章,而不是……
DHH
我其实希望 AI 对写作的标准能高一点。我觉得它接受我那些草率、不完整的句子有点冒犯。我希望 AI 有一个严格模式,如果我只是给它输入关键词,它会打我的手指,说:“好好说话。注意发音,注意标点。”因为我喜欢那样。我喜欢精心打磨一个恰到好处的句子,它没有被精简到没有血肉,没有个性。它简洁,但不过分华丽。它恰到好处。
那个写作阶段对我来说简直是上瘾的。我发现,当编程达到最佳状态时,它几乎和那个完全一样。你也要解决一个问题。你不仅仅是在传达一个解决方案,你还得弄清楚你到底想说什么。但即使是写作也有那个过程。
一半的时候,当我开始写一篇博客文章时,我并不知道我具体要用哪些论点;它们是在写作过程中形成的。写软件也是这样。你大致知道你要解决什么样的问题,但你不知道具体要怎么解决。当你开始打字时,解决方案就浮现了。
Lex Fridman
实际上,据我所知,你和 Jason 正在写一本新书,主题大概就是这个。我想他说过……他在推特上说,书名大概是《我们一开始并不知道自己在做什么》之类的。就是那个主题,你边做边想。
DHH
那是很大一部分;试图给予更多人许可,去相信他们自己的直觉和感觉,并意识到,培养你肚子里的那台超级计算机,实际上是整个职业生涯的工作,你不应该为了……或者甚至不是复杂的;为了分析、为了理智,而抛弃那些感觉。
很多时候,当我们回顾我们必须做出的重大决定时,它们都来自直觉,你无法完全阐明为什么你认为这是对的。嗯,因为我从事这个行业 20 年了,我见过很多事情,我和很多人谈过,这些都在发酵,最终告诉我这是正确的答案。
很多人在商业上对此非常怀疑,或者无法相信它,因为他们觉得他们无法理性地解释。我们为什么要这么做?嗯,因为我觉得该这么做,该死。这是一个作为自给自足、独立的创始人的巨大特权,你不必为别人而经营你的生意,也不必为了产生回报而经营。因为我觉得,很多废话都是在你试图向别人解释你为什么做你所做的事情,为什么做你所做的决定时悄悄潜入的。
如果你不需要向任何人负责,你就可以自由地跟随你的直觉,那是一种非常愉快的工作方式,而且很多时候也是正确的工作方式。你的直觉知道很多。你无法说清楚,但它十有八九是准确的。
Lex Fridman
是的。必须制定计划可能是一件令人瘫痪的事情。我想有不同类型的大脑。首先,我迫不及待地想读那本书,如果它能成书的话。
我常常觉得,在我生命中做的更有趣的事情上,我真的不知道自己一开始在做什么。我想我身边有很多关心我的人,他们真的希望我知道自己在做什么。他们会说:“计划是什么?你为什么要做这件疯狂的事?”
如果我必须等到有计划了再做,我就不会去做了。在这方面,人们有不同的大脑。有些人真的是计划者,这可能会激励他们。但我认为,大多数创造性的追求,大多数真正有趣的、新颖的追求,你都得先跳出去,然后边走边看。
DHH
我在《重来》(Rework) 中最喜欢的一篇文章是最后一篇,标题是“灵感是易逝的”。我认为这抓住了很多精髓,即如果你花时间去做一个详细的计划,很可能等你做完计划时,灵感已经消失了。
如果你在那一刻追随灵感,相信你的直觉,相信你自己的能力,相信你能搞定,你会得到更多回报。你会踏上你本不会踏上的冒险之旅,无论是商业决策还是人生决策。你必须抓住那个灵感。
有一套很棒的儿童读物,是一位日本作家写的,讲的是追逐一个想法并试图抓住它。书中用精美的插图把想法描绘成一个漂浮的东西,一个你必须捕捉并抓住的东西。我真的觉得这抓住了“灵感是易逝的”这个概念;它会消失。如果你 просто 把它放回架子上,说:“嗯,我必须认真对待这件事,我得制定一个计划,”你可能会耗尽精力,然后就没有动力继续前进了。
开源
Lex Fridman
我必须问你关于开源的问题。要运营一个成功的开源项目需要什么?你曾说过,认为开源是民主的,这是一个误解。它实际上是精英领导的 (meritocratic)。这是一个很美的说法。所以通常会有一个仁慈的独裁者 (benevolent dictator) 在顶端。你能就此谈谈吗?毕竟你自己运营过成功的开源项目,自己也是一个仁慈的独裁者。
DHH
这会是一个有点偏颇的证据,但是……
Lex Fridman
为什么君主制是最好的。
DHH
它很棒。我们绝对应该有独裁者,他们应该控制一切,尤其是在独裁者是我的情况下。嗯,我想我很早就学到了,在开源领域,一个快速让你精疲力尽的方法是,把它当作一门生意来对待,把你的用户当作客户,认为他们对你的时间、你的注意力和你的方向有合法的要求。
因为我几乎在发布 Ruby on Rails 后立刻就遇到了这个问题。一经发布,就有上百万人对它应该走向何方有各种各样的意见。而且不只是意见,实际上是要求。“除非你实现一个 Oracle 数据库适配器,否则这永远都只是一个玩具。”基本上就是这样一个确切的要求,促使我在一次早期的 Rails 会议上的幻灯片里直接写上:“去你的。”
Lex Fridman
是的,我看到了。
DHH
我不会按你说的去做。我在这里是作为一个礼物的赠与者。我分享的是我用自己的时间、出于自己的意愿写的代码。你不需要说谢谢。我是说,如果你说了,我会很高兴。你可以拿走代码,做任何你想做的事,如果你愿意,也可以贡献回来,但你不能告诉我该做什么,或者该往哪里走,或者该怎么做。
我不是一个供应商。这是开源用户偶尔会陷入的一个根本性误解,因为他们习惯了从那些真正关心他们业务的公司那里购买软件。我关心人们使用我的软件,我认为这很好,但我们没有交易关系。当你告诉我该做什么时,我除了得到烦恼之外,什么也得不到,而我不想那样,所以你可以保留你的意见。
所以,我从一开始的开源哲学就是,我必须主要为我自己做这件事。我很高兴别人能从我的开源项目中受益,但这并不是我的主要动机。我不是主要为别人做,我是主要为我自己和我的目标做。
因为正如亚当·斯密 (Adam Smith) 所说,我们期望每天能有肉吃,不是出于屠夫的仁慈,而是出于他的自利。我实际上觉得这是一个很美的想法,当我们都追求自己的自利时,我们的公共资源 (commons) 的价值就会增加,在开源领域尤其如此。
这也是为什么我拒绝那种认为开源正处于某种危机中,认为存在资金危机,我们必须投入更多的观点。不,我们不需要。开源从未像现在这样好过。开源从未像现在这样在软件领域占据主导地位。没有危机。
只是有一些做开源的人和很多用开源的人有一个误解,认为开源主要像商业软件;是你买的东西,然后你可以作为顾客提出要求,而且顾客永远是对的。顾客并不总是对的,即使在商业上也不是,在开源领域当然更不是。
在开源领域,所谓的顾客,是礼物的接收者。我们是在进行礼物交换。我出现,给你我的代码。如果你喜欢,你可以用。如果你有一些代码,符合我正在做的方向,我很乐意收到那些回赠的礼物。我们可以继续这样交换。
我给你更多礼物,你给我一些你的礼物。我们一起把所有的礼物汇集起来,这样新来的人就能得到一大堆礼物。这就是开源的魔力,当我们都追求自己的自利时,它增加了公共资源的总价值。
所以,我为 Rails 构建我需要的东西。你知道吗?你也希望我这么做。你绝对不希望我为别人去构建我不需要的东西,因为那样我会做得一团糟。当我能通过自己的使用来评估软件的质量时,我构建的软件会好得多。
我需要这个功能。我会构建一个这个功能的好版本,而且我只会构建刚好够我用的。所以我不会让它变得臃肿。我不是在试图吸引客户。我不是在试图寻找什么角度。我只是在构建我需要的东西。如果你带着这种心态去做开源,即你是在为你自己构建,其他的一切都是附赠的,我认为你就具备了走得长远的所有要素。
我认为,在开源领域精疲力尽的人,是那些一开始就想着:“我做了所有这些礼物。我自己其实并不需要,但我希望别人需要,也许他们还会给我一些钱。”这是一个注定失败的提议。基本上从来行不通。
如果你想用你的软件赚钱,你就应该直接卖掉它。我们有一个非常好的商业软件模式,人们可以制作那种软件,然后卖掉。但我发现,很多开源贡献者存在很多困惑,我们就客气地这么说吧,他们想鱼与熊掌兼得。
他们喜欢开源的工作模式,他们甚至可能喜欢开源带来的地位,但他们也想通过做开源来谋生。因此,他们偶尔会产生那种在工作中感到不被赏识的人会有的不满,当别人没有足够地认可他们的巨大贡献时。
Lex Fridman
然后他们可能会离开。我希望能更深入地了解那些运营这些项目的人的内心世界,他们是否感到悲伤,或者是否需要更多钱。这就像一个黑匣子。
DHH
可能是。
Lex Fridman
我是说,当然,有一些交流,但我只是遗憾地看到,他们常常就这么走开了。
DHH
是的。我认为这实际上是开源之美的一部分。
Lex Fridman
离开是美的一部分。
DHH
你没有义务永远维护这段代码。你的义务是,只要你想做,就做下去。这基本上是你对自己的义务。
Lex Fridman
好的,所以你可能会批评这一点并反驳。你确实写过一篇关于“直到互联网的尽头”的博客文章。这其中有一种美,而且你找到了一个很好的平衡点。但我不知道,你用你创造的东西给人们带来了那么多快乐。这不是一种义务,但照顾好你创造的东西有一种真正的美。
DHH
是的。
Lex Fridman
而且不要忘记……我认为开源创作者没有充分看到的是,你让多少人的生活变得更好了。有些软件我就是……
…让生活变得更好。有些软件我就是默默地用了很多,它们给我的生活带来了快乐,我希望能很好地传达这一点。有一些捐赠的方式,但效率不高。通常很难捐赠。
DHH
是的。对某些人来说,有一些方式让事情变得更容易了。GitHub 捐赠是其中一种方式。我也会给一些人捐款,尽管我并不喜欢这种模式。我也接受我们可以有多种模式。我接受我可以用一套动机来做开源,而其他人可以用另一套动机来做。我们不必都用同样的方式。但我确实想反驳一种误解,即认为开源正处于某种危机中,除非我们都开始为开源付费。那种模式已经存在了,它就是商业软件。它运作得很好,很多伟大的公司都是建立在它的基础上的,而且期望非常明确。我付给你这个数额,我得到这个软件。
开源,一旦你把钱混进去,事情就会变得非常混乱,很多混乱都源于那些错位的期望。如果你觉得自己作为一个开源开发者像个饥饿的艺术家,并且因为你的软件很受欢迎,你就应该得到 X 数量的钱,那你是在妄想,你需要停止这种想法。回到正轨上,认识到你是在向世界赠送礼物,如果你在金钱上得到了一些回报,好吧,那是个 bonus。但如果你需要那笔钱作为回报,那就直接为软件收费,或者去一家软件公司工作,他们会雇你去做开源。这样的公司有很多。这可能实际上是当今世界开源软件开发的主要模式。商业公司制作他们自己需要的开源软件,然后再贡献回来。
WordPress 的风波
Lex Fridman
所以我很高兴你划清了一些界限。现在是个好时机,可以提一下我认为可能是史上最伟大的开源项目之一,WordPress。你在 10 月 24 日就 WordPress 创始人马特·穆伦维格 (Matt Mullenweg) 最近的一些事情发表了看法,在一篇题为“开源皇室与疯狂的国王”(Open source royalty and mad kings) 的博客文章中,那是一篇关于“终身仁慈独裁者”(Benevolent Dictators For Life, BDFL) 这个开源项目模式的很好的文章。其基本含义是,马特作为 WordPress 的 BDFL,在与 WP Engine 的这场斗争中有点迷失了方向。我应该说,我真的很喜欢 WordPress,它给我带来了快乐。我认为它是开源可以成为的样子的一座灯塔。我认为它让互联网变得更好了,让很多人能够创建出色的网站。而且我也认为,现在你可能不同意这一点,但从我所看到的一切来看,WP Engine 给我一种不好的感觉。
我认为他们不是这场争斗中的好人。我不喜欢。我理解那种挫败感,我理解所有这一切,但我不认为这能成为那种行为的借口。这里有点……这和你刚才说的有点矛盾,就是当你有一个那么大规模的开源项目时,你确实有一点……当你是一个那么大的王国的国王时,你有一点责任。总之,你能不能谈谈你对马特的同情和你的批评?也许可以为他和 WordPress 指明一条重回胜利的道路。
DHH
首先,我赞同你对 WordPress 成功的评价,这确实是一件了不起的事情。在开源世界乃至整个世界,很少有项目能像 WordPress 一样对互联网产生如此巨大的影响。他为此付出的努力值得高度赞扬。所以,这基本上是我的出发点。你知道吗?我非常尊重马特 (Matt) 用 WordPress 所建立的一切,以及整个生态系统围绕它所建立的一切。这真是一个奇迹。但有些原则比我个人对相关角色的同情更重要。我同意,与 WP Engine 合作的 Silver Lake 私募股权公司不是我的天然盟友。我也不是私募股权公司利用 WP Engine 玩弄资本游戏的天然盟友。我对这个案子的兴趣不在于此。我的兴趣在于一套原则。原则就是,如果你以开源形式发布了某样东西,人们就可以自由地按照他们认为合适的方式使用它,他们也可以自由地向社区捐赠代码、资源或金钱。
你可能会不同意他们做得是否足够,是否应该做得更多,但你不能在把免费软件作为礼物送给世界之后,又回过头来说:“既然你用了这个礼物,你现在实际上欠我你业务的一大块,因为你用我免费给你的东西太成功了。”你不能把礼物要回去。这就是我们有开源许可证的原因。它们明确规定了等式两边的义务。开源的用户不能要求开源的创造者做什么、怎么做,而开源的创造者也不能突然拿着一张勒索信出现,对用户说:“实际上,你因为各种各样的使用而欠我钱。”我对这种互动方式 100% 过敏。我认为马特 (Matt) 不幸的是,出于某种原因,他太执着于他认为自己应得的东西,以至于他没有意识到他正在摧毁什么。WordPress 和 Automatic 已经赚了很多钱。
这是 WordPress 的奇妙之处。这是一个能产生数亿美元收入的项目,但马特 (Matt) 却觉得他得到的还不够。兄弟,这不是一个好理由。你不能就这么违反这些开源许可证的精神和文字,开始拿着要求信出现,即使是对那些不那么值得同情的角色。这触及了我对整个开源的理解的根源。GPL 是一个特殊的许可证,它实际上在某些情况下要求使用它的人提供代码。我从来都不喜欢 GPL。我不要你那糟糕的代码。如果你不想给我,我能拿它做什么?一些你……我完全不赞同斯托曼 (Stallman) 愿景的那一部分。我喜欢 MIT 许可证。对我来说,那是完美的许可证,因为它短得无情。
我想它只有两三段,非常短。它基本上是说:“这是一些软件。它没有任何保证。你不能告我。你不能要求任何东西,但你可以用它做任何你想做的事。祝你生活愉快。”在我看来,那是一次完美的开源互动,而那个许可证需要被维护。这些许可证,总的来说,即使是 GPL,即使我不喜欢它,我们也必须遵守。因为如果我们只是因为一时觉得某件事有点不公平,就把那些许可证搁置一边,我们就失去了一切。我们失去了整个让开源得以繁荣、让开源成为商业中如此重要一部分的框架。我是说,当开源最初站稳脚跟时,它是在与商业软件作斗争。斯托曼 (Stallman) 一直在与商业软件作斗争。
比尔·盖茨 (Bill Gates) 反过来也曾与开源斗争了很长时间。正是开源许可证及其提供的清晰性,让我们结束了那场战争。今天,商业软件和开源软件可以和平共存。我做商业软件,我卖 Basecamp,我卖 HEY,然后我也做很多开源软件,作为免费礼物送出去。如果我们开始违反这些合同,这一切就不可能发生。没有商业公司会说:“让我把下一个项目建立在这款开源软件上吧”,如果他们同时还要承担这样的风险:某个叫 Matt 的创造者七年后会突然出现,要求我给他们 5000 万美元。那样的环境不利于商业合作或任何其他事情,而且基本上是错误的。我认为有一种分析完全是关于这件事的实际后果,我认为那很糟糕。
还有一个论点仅仅是关于道德的。这是不对的。你不能事后出现,然后要求什么。在我看来,这和我们之前谈到的整个苹果 (Apple) 的事情没有太大区别,苹果 просто 出现,然后觉得他们有权拿走每个人业务的 30%。不,那是不对的,那不公平。所以,我认为马特 (Matt) 不幸的是,在他认为自己所受到的不公待遇上钻了牛角尖,因为 BP Engine 制造了一个好产品,赚了很多钱,但在马特看来,他们回馈得不够多。 Tough cookie (自作自受)。
Lex Fridman
我认为,也许是我过度解读了,但可能还有一些个人因素。不仅仅是回馈不够,可能还隐含地承诺过会回馈,然后在他看来,他们利用了这一点。就像人际交往中,然后你就会在人际关系上感到沮丧。
DHH
我理解。
Lex Fridman
你忘记了更宏大的道德层面。就像一个人一直承诺会做什么,然后一两年后你某天醒来,发现:“等等,我一直被骗了”,我甚至不知道这是否关乎金钱。
DHH
我也会生气。当人们让你失望时,生气是完全正常的。但这不能成为颠覆几十年来开源许可证和我们围绕它建立的实际判例法的理由。这就是我选择对此发表意见的原因,因为我喜欢 WordPress。我不使用 WordPress,我不是那个社区的一员,我在这场斗争中实际上没有利害关系。如果说有偏见的话,我更倾向于马特 (Matt),因为我也是一个 BDFL。我希望他能处理好这件事。但我也认为,这里有一些更重要的原则。我不希望 Rails 突然因为它是开源的而被玷污,公司是否可以依赖它、在它之上建立业务,因为等等,也许有一天我也会变成马特,变成“马特国王”,然后拿着一封勒索信出现。不,去他的。我们有更多需要保护的东西。这里有比你和某人的个人恩怨,或者你认为自己应得的东西的委屈感,更重要的事情。
Lex Fridman
你会建议什么?你认为他应该做什么,可以做什么,来挽回局面,来治愈?
DHH
决定。这是件奇怪的事。他可以决定放弃。对于有野心、有抱负的人来说,承认自己错了,放弃,放下武器,是非常非常困难的。所以,我早期曾希望这有可能。但我没有看到任何证据表明马特 (Matt) 对此感兴趣,我觉得这非常遗憾,但那是他的特权。当他违反开源的精神和道德时,我会继续发声,但我希望他能 просто 接受这是一个非常糟糕的想法。他下了一个错误的赌注,我想他以为他能轻易得手,他们会 просто 付钱,他可以施加压力。
我是说,我知道那种诱惑。当你坐镇一个非常重要的项目的负责人位置时,你知道那伴随着巨大的权力,你需要极大的自律来约束它,而不是在每一步感到委屈时都行使那种权力。在 Ruby on Rails 的 20 多年里,我感到委屈过一百万次。我真的非常努力地不让那些,有时是琐碎的,有时是重大的委屈,随着时间的推移渗入生态系统的根基,冒着毁掉一切的风险。
金钱与幸福
Lex Fridman
作为 Rails 王国的国王,这些年来权力是否让你冲昏了头脑?
DHH
我肯定有。我是说,谁不会呢?
Lex Fridman
你会在你的房间里踱步吗?……
DHH
我偶尔会。我确实惊叹于已经建立的一切,已经实现的一切。据我所见的一个估计,已经有超过一百万个应用是用 Ruby on Rails 制作的。像 Shopify、GitHub 和其他上百万家公司都是建立在我开创的东西之上的。这非常令人满足。但你真的必须小心,不要太自我陶醉,也必须同样小心,不要太听信憎恨者,也不要太听信超级粉丝。你应该根据你所努力的目标本身的价值和原则,根据你自己的记分牌来评估它。我试着把那些都屏蔽掉,然后 просто 想:“嗯,我做 Rails 是因为我喜欢写 Ruby,我喜欢用 Ruby 来制作 Web 应用。那是我的北极星,我会继续这样做,我会继续分享我一路上发现的所有开源礼物。”就这样。这也足够了。
我不必从中得到所有的一切。这有时就像那个认为我放弃了成为 Jira 替代品而去做 Basecamp 的人一样。多年来,也有人问:“你为什么不为 Rails 收费?你不知道 Rails 创造了多少财富吗?”如果我们只看像 Shopify 这样的公司,它的价值数十亿美元。我不是亿万富翁,那又怎样?我得到的已经足够多了。我得到了我应得的那份。
不过,我也会说,我也足够自省,意识到如果我自己的生意没有像现在这样成功,也许我会更容易受到诱惑。也许如果你看到别人在你的工作基础上建立了巨大的成功公司,而你自己却一贫如洗,你可能会有点不高兴。我在 Rails 的世界里也见过这种情况,有些人贡献了大量的工作,然后当他们觉得没有得到足够的回报时,就非常生气。我很幸运,Jason 和我用 Ruby on Rails 建立的生意非常成功,我赚到了我需要的钱,所以我不需要去追逐剩下的。
Lex Fridman
但我们也应该明确一点,很多在你这个位置上的人会去追逐金钱。追逐金钱并不难。基本上你拒绝了金钱,你做了很多 просто 拒绝金钱的决定。
DHH
也许吧。我也想到了马特 (Matt) 的这个例子。他可能觉得有唾手可得的钱,但事实并非如此,对吧?那看起来像是低垂的钞票,结果却是一些非常酸的葡萄。结果他可能通过破坏整个 WordPress 的信任和生态系统,在那些会选择使用 WordPress 还是其他东西的人的脑海里打上问号,从而摧毁了巨额的财富。所以我常常想,当人们觉得:“哦,你把钱放在桌上了。”首先,那又怎样?我不需要拥有所有的钱。但其次,也许那笔钱根本就不在桌上。
Lex Fridman
也许代价,即使你得到了钱,也许其他方面的代价,就像我们谈到的,会超过你可能得到的所有金钱。我想你说过,让你快乐的是心流和宁静。这两件事。说得非常美。而赚钱可能会给你带来运营一个更大东西的责任,这会夺走你从……对你来说,心流基本上就是编程,而宁静就像……我想你还有一篇很美的文章,说“涅槃是空空如也的时间表”。
DHH
当我看到接下来的一周,发现我完全没有安排好的会议时——这很常见,或者也许我只有一天有一个小时的事情——我会对自己说:“你知道吗?这本可以完全不同。我们本可以经营一家有数百甚至数千人的公司,我的整个日历都会被别人的要求挤得满满当当,就像俄罗斯方块一样,而我会痛苦得要死。”我看着这个,然后想:“我还能要求什么呢?”这实际上是一种非常好的状态。我不是一直都这样。我职业生涯早期确实有过一种感觉,我需要多一点,多一点安全感。我记得一个非常有趣的研究,一些研究人员问那些赚到一定数量钱的人:“你需要多少钱才能感到安全?”
他们问那些净资产一百万美元的人:“你需要多少钱?”“大概需要 200 万美元。200 万,我就满足了。”然后他们问那些净资产 500 万美元的人:“你需要多少?”“1000 万。我需要 1000 万。”问那些有 1000 万美元的人:“你需要什么?”“2000 万。”每一次,人们需要的都是他们现有财产的两倍。我经历了几次这样的翻倍,直到我意识到:“你知道吗?这很傻。我已经达到了我希望达到的位置,而且是超额完成。那么还有什么可以追求的呢?”现在,这并不意味着如果更多的钱向我走来,我会拒绝。当然不会。但,这确实意味着我可以自由地把其他事情放在更高的位置。我也确实认为你会意识到,就像金·凯瑞 (Jim Carrey) 会说的那样:“我希望每个人都能得到他们希望的所有金钱,然后他们会意识到那不是答案。”
金钱解决了一大堆问题和焦虑,然后又制造了一堆新的问题,而且它根本触及不到人类体验的很大一部分。世界上充满了痛苦、焦虑、受伤的富人。也充满了痛苦、焦虑的穷人。我宁愿做一个痛苦、焦虑的富人,也不愿做一个穷人。但它不是那种能让一切消失的魔杖。这又是一个像生孩子一样的洞见,你无法用语言传达。我从来没能说服一个不富裕的人,财富不会解决他们所有的问题。
Lex Fridman
你经常引用的一个我很喜欢的可可·香奈儿 (Coco Chanel) 的名言是:“生活中最好的东西是免费的,第二好的东西非常非常昂贵。”我想,任务就是专注于让自己被生活中最好的东西包围,比如家庭和所有这些,而不去在乎其他的东西。
DHH
我很容易就会说,你可以关心其他的东西。只是要知道优先顺序。如果你有幸拥有一个你爱的伴侣,一些你疼爱的孩子,你已经赢得了大多数人能够获得的最伟大的奖赏。这个世界上大多数人,如果他们到了婚龄,有了孩子,如果你问他们什么最重要,他们都会那么说,无论他们是富是贫。当你追逐第二好的东西时,很容易忽略这一点,因为你知道吗?它们也很好。
我真的很喜欢那辆帕加尼 Zonda (Pagani Zonda)。那是一辆非常昂贵的车,如果我没有在商业上取得相当大的成功,我根本没机会拥有它。所以我也不想否定它。有钱是很有趣的。只是没有你想象的那么有趣,也没有那么持久或深刻。而其他的事情,拥有一份你喜欢的工作和追求,能够昂首挺胸地承担重担,并且有意义感,是难以置信的。拥有家庭,拥有朋友,拥有爱好,拥有所有这些实际上对世界上大多数人来说都是可得的东西,那就是赢了。这并不意味着你必须贬低你的野心,也不意味着你不能追求更多,但它确实意味着,如果你没有意识到,赚更多钱并不会在某种玄乎的意义上让你完整,那你就很傻了。真的不会。
希望
Lex Fridman 对于我们人类文明的未来,是什么让你充满希望?
DHH 我发现保持乐观比悲观更容易,因为无论如何我都无法预知未来。既然可以选择,为什么不选择相信一切终将好转呢?斯多葛学派 (Stoicism) 有一句话说:“我们更多地痛苦于想象,而非现实。” 我也认为,许多人对于未知的结果倾向于预先感到悲观。例如,气候变化让很多人对未来感到非常焦虑和悲观。但事实是,你什么都不知道。40 年前,我们还以为问题是地球会变得太冷。我个人碰巧相信,地球正在变暖的说法可能是正确的,而且这与二氧化碳有关。但是,我们是否有合适的措施及时解决这个问题,甚至这是否可能,都完全是未知数。
如果你如此确信世界会变得一团糟,那么在你的脑海里,它今天就已经如此了。气候变化可能会在 200 年后毁灭整个物种,但它不会发生在明年,也不会在 10 年后。生活可能会变得更不愉快,可能会有更多的负面影响,等等。是的,好吧,但那也应该等困难真正来临时再去应对,而不是提前承受。整天沮丧地走来走去,对地球又有什么帮助呢?
Lex Fridman 我认为我们今天的整个对话本身也说明了一些问题——这只是两个人的交谈。我们有数十亿人,而人类的本性中就有一种解决问题和创造酷炫事物的渴望。所以,无论我们陷入什么困境,我们都会通过创造来找到出路。这就是人类的行事方式。我们为自己制造问题,然后想办法造出火箭来摆脱这些问题。有时,火箭又会带来其他问题,比如核弹头,但我希望我们能想出办法避免这些问题。然后,可能会出现纳米机器人,接着外星人会到来,纳米机器人和外星人之间会爆发一场大战,而那将使我们所有人类团结在一起。
DHH 有趣的是,就拿你提到的原子弹来说。当它刚被发明出来时,很多人认为我们基本上终结了地球上的生命。但也许,它也恰恰阻止了过去 80 年里第三次世界大战的爆发,因为相互保证毁灭的威慑让超级大国之间避免了正面冲突,将战斗限制在代理人战争 (proxy wars) 的层面。你知道吗?代理人战争当然不好,但可能比一场有核武器的第三次世界大战要好。所以,在当下很难判断一件事究竟是好是坏,我认为我们应该更谦虚一点。随着时间的推移,我对自己能够预知事物走向的想法确实变得更加谦虚了。我认为新冠疫情对很多人来说是一个重要的时刻,当时人们对某种干预措施是否有效充满了确定性,但结果大多数人都错了。
当然,很多非常聪明、非常有资质的人在那件事上错得一塌糊涂,甚至是灾难性的。所以,只需要一点点理智上的谦逊。我回想那段时期,然后会想:“你知道吗?我不是病毒学博士,” 我也不声称自己能看透事情会如何发展,但那些真正的专家们也搞错了很多事。没有人真正知道什么。我每天都这样提醒自己。没有人真正知道什么。我们无法预测一个月后的经济,也无法预测一个月后的世界局势……世界实在太复杂了。
Lex Fridman 当我观看 Netflix 的纪录片《黑猩猩帝国》(Chimp Empire) 时,我看到黑猩猩社会中的等级制度,这一切都与我们人类惊人地相似。我们是它们晚近的后代。所以,这些专家们,有些黑猩猩像是拿了博士学位,有些则没有。有些体格强壮,有些则是 beta 型雄性,他们会去讨好 alpha 首领。其中有很多有趣的动态,可以很清晰地映射到当今的地缘政治上。它们没有核武器,但它们行为的本质与我们相似。所以,我认为我们对自己所处的状况知之甚少,但我确实相信,在人类精神的深处,存在着一种合作的基本意愿和基本的同情心。也许这只是我的乐观想法,但如果这种精神确实存在,那么我们最终会没事的。
DHH 这种潜力肯定是存在的。但我们是否会选择它,在什么情况下选择,谁也不知道。我认为,我们需要接受我们所有人都同时拥有两种潜能——既有做出非凡慷慨和善良之举的能力,也有做出残忍之举的能力。我认为,荣格 (Jung) 关于“阴影” (shadow) 的理论非常精准,他指出我们内心都存在这种双重性。接受这一点,并认识到我们的责任是努力培养人性中更美好的一面,以对抗我们时而会展现出的最坏的一面,这很重要。
Lex Fridman 我很期待看到未来会发生什么。作为人类真是太棒了。我不想死,我想活得久一点,看看我们能创造出哪些酷炫的东西。其中一件我想看到的就是你创造的所有软件,你发的所有推文,以及你在 Twitter 上惹出的所有麻烦。David,我是你的忠实粉丝。正如我所说,感谢你为这个世界所做的一切,感谢你激励了数百万的开发者,我就是其中之一。也谢谢你带来的这场精彩的对话,兄弟。
DHH 非常感谢你的邀请。
Lex Fridman 感谢收听本次与 DHH 的对话。如果你想支持本播客,请查看简介中的赞助商信息,并考虑订阅本频道。最后,让我引用 DHH 和 Jason Fried 合著的《重塑工作》(Rework) 中的一句话来结束:“重要的是你的行动,而不是你的想法、言论或计划。” 感谢您的收听,期待下次再会。
