在科技圈,David Heinemeier Hansson(更广为人知的名字是DHH)是一个传奇。他是著名Web框架Ruby on Rails的创造者,是37signals公司的联合创始人和CTO,是《重来》(Rework)等多本畅销书的作者,也是一位在勒芒24小时耐力赛中获得过冠军的赛车手。
DHH以其犀利、坦率且充满激情的观点而闻名。在与Lex Fridman的深度对话中,他从自己坎坷的编程入门经历聊起,一路剖析了现代软件开发的“病症”、Ruby语言的美学、37signals独特的经营哲学,以及他为何不惜与苹果和亚马逊云这样的巨头“开战”。
这不仅仅是一次技术访谈,更像是一场关于代码、商业与人生的哲学思辨。
一段“屡败屡战”的编程缘起
你可能很难想象,这位编程界的“大神”,最初学编程时却是个不折不扣的“学渣”,而且失败了不止一次。
故事的开端,是上世纪80年代风靡一时的Commodore 64电脑。五六岁的DHH,在邻居家孩子的房间里,第一次玩到了格斗游戏《Yie Ar Kung-Fu》。那块小小的屏幕仿佛有魔力,让他着了迷,他缠着父亲也想要一台电脑。
终于有一天,父亲带回一台电脑,但并不是他心心念念的Commodore 64,而是一台让他大失所望的Amstrad 464。不过,有总比没有好。很快,自带的两款游戏就不够玩了。那个年代,想玩更多游戏又不花钱,最“硬核”的方式就是——照着电脑杂志自己把代码敲进去。
小DHH花了无数个下午,对着杂志敲了两小时代码,结果往往因为一个拼写错误,整个程序就崩溃了。更要命的是,他当时完全搞不懂“变量”(variable)到底是个什么鬼。为什么一个东西被赋予了一个值,之后又可以变成另一个值?这太反直觉了!相比之下,“常量”(constant)对他来说就好理解多了。
第一次尝试,以失败告终。幸运的是,他很快发现了“盗版”这个神奇的东西,对编程的热情也就暂时被搁置了。
几年后,大概十一二岁时,DHH拥有了或许是他至今最爱的电脑——Amiga 500。这台在欧洲风靡一时的机器,以及一个名为“Easy AMOS”(简单的AMOS)的编程语言,再次点燃了他的编程梦。“既然都叫‘Easy’了,能有多难呢?”他心想。
这一次,他更努力了,学会了条件判断、循环,但最终还是没能做出一个像样的游戏。他开始怀疑自己是不是不够聪明,或者编程需要太多数学天赋,而他并不是那种“数学怪才”。看着朋友们用汇编语言在Amiga上创造出炫酷的Demo(一种结合了图形、音乐的演示程序,在极小的内存限制下展示编程技巧),他既敬佩又沮丧。
那个年代,在没有互联网的欧洲,Amiga的Demo场景异常火爆。成千上万的年轻人,会扛着自己笨重的CRT显示器和电脑,坐火车去参加名为“The Party”的大型线下聚会,现场编程、竞赛、交换软盘。DHH也曾是其中的一员,尽管他自己不会编程,但他深深地被那种创造氛围所吸引。
为了融入这个圈子,14岁的DHH在自己哥本哈根的小卧室里,拉了三条电话线,搞起了BBS(电子公告板系统)。这在当时既是Demo作品的交流中心,也是盗版软件的集散地。他回忆,当电话公司的技术员来装第三条电话线时,看着满屋子闪烁的调制解调器,脸上写满了困惑:“这孩子到底在搞什么鬼?”
他的父母对此也只是知其一二,并不完全理解其中的“非法交易”。在当时的丹麦,盗版似乎并不是什么道德问题,对于一个没钱又想玩大量游戏的孩子来说,这几乎是唯一的方式。毕竟,他送一个月报纸挣的钱,只够买一款正版游戏。
真正的转折点,发生在他接触到互联网之后。
1995年左右,学校组织的一次活动让他第一次用上了网景浏览器(Netscape Navigator)。当他用简单的HTML
标签让网页上的文字闪烁起来时,那种即时反馈的成功体验,与之前编程屡屡受挫的经历形成了鲜明对比。他意识到,他可以在互联网上创造东西,全世界的人都能看到,而且不需要任何人的许可。
“这太酷了!”
HTML为他打开了一扇门,随后他开始学习PHP。正是PHP,让他终于贯通了编程的任督二脉——变量、循环、数据库交互,一切都变得清晰起来。
我们是如何把开发搞得一团糟的?
“可以说,没有PHP,就没有今天的DHH。”DHH毫不讳言,“我百分之百亏欠于PHP。”
PHP不仅是他的启蒙老师,更为他树立了一个关于“开发者体验”的黄金标准。他至今仍在怀念90年代末用PHP开发网站的感觉:
你写好一个脚本,用FTP上传到服务器,刷新一下浏览器,它就立刻生效了。没有复杂的构建流程,没有繁琐的配置,几乎是零门槛。
我们今天的电脑比那时快了无数倍,但Web开发却似乎变得越来越复杂。这让他感到困惑和惋惜。
他尖锐地指出,许多Web应用,本质上和20年前没什么区别,核心仍然是围绕数据库的增删改查(CRUD - Create, Read, Update, Delete)。许多开发者内心深处对这种“CRUD猴子”的身份感到不安,为了补偿这种存在主义的恐慌,他们倾向于把事情过度复杂化。
这也是为什么DHH对过去十几年JavaScript社区的“军备竞赛”颇有微词。他并不讨厌JavaScript这门语言本身(他甚至开玩笑说这是他第二喜欢的语言,虽然和第一名Ruby差距巨大),但他厌恶的是那套复杂的构建流程。
从2010年到2020年,JavaScript社区简直像个精神病院。各种框架和工具层出不穷,你刚学会一个,三个月后就被告知‘那玩意儿已经过时了’。你不得不扔掉所有东西,从头再来,否则你就是个傻瓜。
他认为,这种疯狂的“内卷”背后,有几个原因:
- 浏览器技术停滞:IE浏览器的垄断导致Web标准发展缓慢,开发者不得不发明各种预处理和编译工具来使用现代JavaScript语法。
- 大公司的组织结构:像Facebook(现Meta)这样的大公司,将开发岗位切分得越来越细(前端工程师、构建流程配置师……),导致原本一个Web开发者能搞定的事,现在需要一个庞大的团队,沟通成本和系统复杂度急剧上升。
- 优先级错位:许多聪明的开发者和公司涌入Web领域,但他们的首要目标并非“程序员的幸福感”,而是其他商业指标,这让他们可以容忍甚至合理化他们所引入的复杂性。
幸运的是,随着Chrome等现代浏览器的崛起和标准化,我们正走出那个“黑暗时代”。浏览器本身已经足够强大,开发者可以直接编写优雅的现代JavaScript,无需复杂的构建步骤。
这正是DHH在Rails 8中追求“零构建”(No-Build)的初衷——试图将90年代的简单便捷与过去20年的技术进步结合起来,找回开发者最初的幸福感。
Ruby的福音:为程序员幸福而生的语言
如果说PHP是让DHH入门的工具,那么Ruby就是他的信仰和“真爱”。
2001年,DHH开始和远在芝加哥的Jason Fried(他未来的合伙人)远程合作。他们最初用PHP做项目,但在协作中遇到了很多麻烦。终于,在决定为自己公司开发一款名为Basecamp的项目管理工具时,DHH第一次拥有了完全的技术选择权。
那时,他通过《IEEE》杂志等渠道,读到了Martin Fowler和Dave Thomas等大师的文章。这些大师在阐述设计模式时,不约而同地使用Ruby作为示例代码,因为它简洁、优雅,几乎就像伪代码一样易于阅读。
DHH被这种语言的美感深深吸引,他决定花两周时间尝试用Ruby来构建Basecamp的原型。结果,只用了一个周末,他就彻底“入教”了。
“Ruby就像是为我的大脑量身定制的手套,我从未见过这样的语言。这怎么可能?”
Ruby的美学和哲学体现在每一个细节上。DHH举了几个例子来阐释这种“为程序员幸福而生”的设计理念:
消除“代码噪音”:
- 没有分号:Ruby抛弃了C语言家族中无处不在的分号,因为人类阅读代码时根本不需要它。
- 可选的括号:如果方法调用没有歧义,括号也可以省略。
- 清晰的循环:
5.times { ... }
这样的语法,将循环五次的意图表达得淋漓尽致,而且数字5
本身就是一个可以调用方法的对象。 - 人性化的条件判断:
if user.admin?
:方法名中的问号,对计算机毫无意义,却是给人类阅读者的明确信号——这是一个返回布尔值的判断。user.upgrade if user.admin?
:可以把if
后置,更符合自然语言的语序。user.downgrade unless user.admin?
:用unless
替代if !...
,彻底消除了if
和!
这种别扭的组合。
信任程序员:与Java等语言试图用严格的规则限制“愚蠢的程序员”不同,Ruby的设计者松本行弘(Matz)选择相信程序员。
- 开放类(Monkey Patching):Ruby允许你为系统核心类添加方法。例如,Rails为数字增加了
.days
方法,你可以写出expires_in 5.days
这样极具可读性的代码,将5天自动转换为秒。Matz信任你,允许你用自己的章节续写他的故事。 - 动态类型:DHH坚决捍卫动态类型,他认为这是Ruby美学和灵活性的基石。静态类型虽然有助于工具(如自动补全)和捕捉某些类型的错误,但它带来了大量的重复代码(
User user = new User()
)和审美上的灾难,并且极大地限制了元编程(Metaprogramming)的威力。
- 开放类(Monkey Patching):Ruby允许你为系统核心类添加方法。例如,Rails为数字增加了
元编程与领域特定语言(DSL):这是Rails的“皇冠上的明珠”。通过元编程,Rails创造了像
has_many :comments
(一个用户有多条评论)或belongs_to :account
(一个用户属于一个账户)这样的“伪关键字”。这些代码读起来就像是专门为描述数据关系而设计的语言,而不是通用的Ruby。这使得开发者可以用非常接近自然语言的方式来构建复杂的业务逻辑。
DHH总结道,编程不仅仅是得到一个能运行的结果,过程本身也应该是一种享受,一种创造性的表达。他把自己看作一个“软件作家”(Software Writer),而不是一个“软件工程师”(Software Engineer),因为他更关心代码的表达力、美感和诗意,而不仅仅是工程上的对错。
37signals之道:小即是美,远程万岁,拒绝VC
DHH和Jason Fried的合作已经持续了近25年,他们的公司37signals(旗下产品包括Basecamp和HEY)至今依然是科技界一股独特的清流。他们的成功,很大程度上源于一套反传统的经营哲学。
小团队的力量:37signals的核心工作模式是“两人团队”——一个程序员,一个设计师,负责一个功能。这种极小的团队规模消除了大量的沟通成本和管理开销。“小不是一个过渡阶段,它本身就是一种优势。”DHH说道。小团队可以快速行动,不需要冗长的规划会议,能够从实际的开发工作中发现真理,而不是在PPT里预测未来。
拒绝风险投资:这是他们能保持小而美的关键。DHH认为,一旦接受了VC的钱,你就必须按照他们的剧本走——追求指数级增长,追逐“独角兽”地位,最终不可避免地走向臃肿的组织和企业级销售模式。“生活会变得很糟糕。”
- 一个例外:他们确实接受过一笔来自杰夫·贝索斯的投资。但这笔钱并非用于公司扩张,而是直接进入了DHH和Jason的个人账户。DHH称之为“疫苗”——这笔钱给了他们足够的安全感,让他们可以理直气壮地拒绝所有其他VC的诱惑。
工作与生活的平衡:“工作狂文化是愚蠢的。”DHH坚持认为,每周40小时的工作已经足够。大多数人所谓的“加班”,只是把时间浪费在了无效的会议和各种琐事上。如果你能拥有每天三到四个小时不被打扰的深度工作时间,效率会高得惊人。
- 成为一个“完整的人”比成为一个工作机器更重要。家庭、朋友、爱好,这些工作之外的生活,不仅不会拖累你的事业,反而会让你更有创造力,也让你的职业生涯更具可持续性。
“莫吉托岛”是个幻觉:科技圈流行着一种“奋斗几年,然后财务自由,去海岛上喝莫吉托”的神话。DHH认为这纯属幻想。对于有创造力的人来说,无所事事就是地狱。真正的幸福感,来自于“心流”(Flow)——那种在挑战略高于自身能力的任务时,完全沉浸、忘记时间的状态。这可以是编程,也可以是赛车。
与巨头开战:捍卫原则与互联网的灵魂
DHH从不畏惧挑战权威,无论是对行业趋势的批判,还是与科技巨头的直接对抗。
vs. 苹果的30%“保护费”
DHH曾是苹果的铁杆粉丝,但当苹果利用App Store的垄断地位,强行收取30%的“苹果税”时,他的态度发生了180度大转弯。
2021年,当他们的新产品、电子邮件服务HEY上线时,苹果以“未使用应用内支付”为由,不仅拒绝了他们的应用更新,还威胁要将其下架。这彻底激怒了DHH。
“我宁愿一把火烧了公司,也不会把30%的收入交给苹果。”
他利用自己和公司在互联网上的影响力,向苹果发起了猛烈的舆论攻击。恰逢苹果全球开发者大会(WWDC)前夕,这场斗争迅速发酵,最终以一种“妥协”收场:HEY可以留在App Store,也无需缴纳30%的收入,但必须提供一个功能有限的“免费账户”,以符合苹果那套模糊不清的“读者应用”规则。
DHH对Epic Games创始人Tim Sweeney花費上亿美元与苹果对簿公堂的行为表示极大的敬意,他认为这是唯一对苹果的垄断造成实质性伤害的斗争。
vs. 亚马逊云的“退出”
另一个广为人知的故事,是DHH带领37signals“退出云端”。他们曾将所有服务都构建在AWS上,但随着时间推移,DHH发现云服务的账单高得离谱,而且其复杂性也违背了“让事情更简单”的初衷。
“我们曾以为云服务就像电力一样,便宜又简单。结果发现,它不仅贵得要死,而且复杂得像地狱。AWS的利润率接近40%,这哪里是‘你的利润就是我的机会’?”
在仔细核算后,他们决定回归“自建机房”的模式。通过购买自己的服务器并托管在数据中心,他们在短短6个月内,将每年320万美元的云开销削减了近三分之二。
这不仅是经济上的胜利,更是一种哲学上的回归。DHH认为,互联网最初的魅力就在于其去中心化的设计,任何单一节点都不应控制一切。而如今,三大云服务商(AWS, Azure, Google Cloud)却成了新的中心,一旦它们出现故障,半个互联网都会瘫痪。他希望通过自己的实践,鼓励更多人重新拥抱硬件,回归互联网的分布式精神。
未来的赌注:在不确定性中保持乐观
从编程的未来到人类文明的走向,DHH始终保持着一种审慎的乐观。
关于AI与编程:他承认AI是强大的生产力工具,他自己也每天都在使用。但他对完全由AI驱动的“氛围编程”(Vibe Coding)持保留态度,担心这会导致程序员技能的退化。“你不可能看着健身视频就练出肌肉,”他比喻道,“你必须亲手去做。”他更倾向于将AI视为一个全天候、不知疲倦、极有耐心的“结对程序员”,用来查询资料、提供建议,但最终的代码,他坚持要自己亲手敲下。
关于人生与家庭:他坦言,是他的妻子说服了他组建家庭,而这最终成为了他生命中“最重要的事情”。他认为,在现代社会对婚姻和家庭的种种负面解读中,有责任去“唱多”这些传统价值。因为家庭提供的稳定和意义,是其他任何成就都无法替代的。孩子们带来的不仅仅是责任,更是将人生幸福感的量程从“1-10”扩展到“1-100”的奇妙体验。
关于未来:“没人知道未来会怎样。”这是DHH反复强调的信条。无论是气候变化还是技术奇点,与其在想象中为未知的灾难而痛苦,不如选择乐观。他相信,人类总有办法解决自己制造出的问题。
最后,引用DHH在《重来》中的一句话,或许是对他所有思想的最好总结:
“你做了什么才最重要,而不是你想了什么、说了什么,或者计划了什么。”