# 杰夫·阿特伍德：Stack Overflow 与 Coding Horror

> Stack Overflow 联合创始人聊程序员问答社区的兴起、技术写作与职业成长。

- 原标题：Jeff Atwood: Stack Overflow and Coding Horror
- 期数：特别节目
- 发布日期：2018-11-29
- 嘉宾 / 主题：杰夫·阿特伍德
- 网页版：https://lexfridman-cn.pages.dev/ep/jeff-atwood/
- 官方页面：https://lexfridman.com/jeff-atwood/
- 精读字数：约 12941 字（阅读约 29 分钟）

> 本文为 lex.qiaomu.ai 基于原始访谈的 AI 改写中文精读，非官方翻译；引用请注明出处并链接网页版。

2018 年，Stack Overflow 满十岁。杰夫·阿特伍德（Jeff Atwood）在博客里写了一篇纪念文章，标题大意是《Stack Overflow 长大后想成为什么》。文章里没什么庆功的味道，他花了大半篇幅解释一件事：这个网站为什么对新人这么凶。

他自己先给了答案：**Stack Overflow 从来就不是给初学者准备的。**

这句话从一个把「帮程序员解决问题」做成全球基础设施的人嘴里讲出来，值得琢磨。一个看起来应该张开双臂欢迎所有人的问答网站，为什么要刻意维持一种近乎冷淡的严格？答案藏在他对社群、对人、对软件该怎么被造出来的一整套理解里。而这套理解比问答网站本身有意思得多。

## 驱动程序员的是解谜，钱和名声排在后面

访谈开场，Lex 问了个看似简单的问题：是什么在驱动大多数程序员？名声、财富、编程本身的过程，还是对社群的归属感？

阿特伍德的回答很短：是解谜。

他描述的那种状态很具体。一个人把自己关起来，对着一个问题反复敲打，用近乎蛮力的方式一遍遍试，直到它跑通。电脑太快了，人要算一辈子的东西，机器几秒钟跑完几百万次。程序员享受的正是这种用蛮力换答案的过程。听起来不优雅，可这确实是很多人写代码时最真实的快乐来源。

他举了个例子。大部分程序员写过的洗牌算法其实有缺陷，那种朴素写法会让某些排列出现的概率明显偏高。你要是在赌场干活，正好碰上一个不太老练的程序员写洗牌逻辑，后果可能很难看。这个问题怎么被发现？不需要多聪明，把洗牌跑十亿次，看看每种排列落进桶里的分布，答案自己就浮出来了。

蒙提霍尔问题（Monty Hall problem）是同一回事。三门问题里该不该换门，直觉上让人抓狂，你写个程序跑一遍「永远换」和「永远不换」，两组数据一对比，结论就摆在那儿。你想不明白没关系，跑出来就行。

> 你不需要聪明，你只要用数据把它跑出来就行。（杰夫·阿特伍德）

这种「用实验代替推理」的路子，其实也解释了 Stack Overflow 后来为什么会变成那个样子。它服务的人群很明确：手里有具体阻塞问题、需要可验证答案、愿意自己动手验证。这类人不太需要安慰，需要的是能编译通过的代码。

## 语言也是代码

阿特伍德说自己现在很少写代码。Discourse 这家公司里，他做的是管理工作。而他年轻时当程序员，最看不起的就是管理者，觉得那是一群自己什么都不干的人。

后来他的看法整个翻了过来。他发现一件挺有意思的事：**语言本身就是代码。**当你能够清晰地指挥别人做事，你能完成的东西比一个人单干多得多。写代码是用一种形式语言告诉机器做什么，说话是用自然语言告诉人做什么，底层是同一个动作，只是抽象层级不同。

什么样的领导算好的？他给了两条。

第一条是以身作则。这话听起来是老生常谈，但他讲了个特别具体的观察：有了孩子之后你会发现，孩子无时无刻不在看你，甚至在那些你已经看不见自己的地方。人最难看清的就是自己。你看别人一眼就能下判断，看自己却带着巨大的偏见，而且往往对自己比对别人苛刻得多。

所以作为领导者，你得非常勤快地反问：我现在的行为，是不是我希望别人做出的行为？他说很多领导者在这件事上栽跟头，做出来的决定传递出去的信号完全是反的。

第二条是真正投入。他看重的是对**问题本身**的真实热情，加班时长他并不在意。对解决方案有热情的人，听到反对意见会防御；对问题有热情的人，听到更好的解法会兴奋。这两者的区别，几天就能看出来。

他自己举的例子是 Discourse 要解决的问题：怎么让一群人在线上沟通的时候，不至于退化成狼群互相嚎叫。怎么处理 troll，怎么让人用完整的句子说话，怎么让人在讨论里不互相伤害，最后还能就某个议题达成共识。这些事听起来琐碎，可每一个线上社群每天都在面对。

## 自我认知从哪里来

Lex 追问了个更尖锐的：你说人很难看清自己，那你怎么知道自己哪些行为是错的？尤其是那些你压根没做的事，同样在传递信号。

阿特伍德的回答分两层。

第一层是机制。Discourse 有三个联合创始人，他们在做决定之前会定期讨论。多人讨论的价值在于，误解和盲点能被提前捞出来。至于单个人会不会犯错，那几乎不用讨论。他对「一个领导者拥有绝对权威」这种结构评价很低。一个社群要是由一个人说了算，那个人总会有倒霉的一天，出事的时候整个社群跟着完蛋。所以他主张让多个人共同承担领导责任，彼此给对方反馈。

第二层更微妙。他说每个人心里都有一个小声音，你的直觉，你的良心，随便你怎么称呼。大多数人是有道德感的，是想做对的事的。也许有极少数反社会人格不在乎，可绝大多数人希望别人觉得自己是个好人。你做的每个决定让你感觉如何，这个信号值得留意。

他同时承认这有副作用。程序员群体里，那个「魔鬼」的声音往往太响，自我批评过度，内向型人格尤其明显。这就引出了更大的问题：当你必须做一个不受欢迎的决定时，怎么办？

答案是：**把决策过程完整地讲给别人听。**

这也是他反复强调博客和沟通重要的原因。直接甩一句「这是决定，执行吧」，没人会服气。换个说法：「我们为这个问题想了很久，中间发生了这些事，我们的目标是这个，我们看了这几个选项，其中第二个更好。」对方的反应就会变成「行，我可能不完全同意，但我大概能理解你是从哪儿来的」。

关键区别在这里：决定要让人听得出是从一个具体的人嘴里说出来的，天上火云里砸下来那种感觉要尽量避免。如果你们的目标本来就不一样，那达不成一致完全合理。这跟谁是坏人没关系，只是出发点不同。

## Stack Overflow 的诞生：一次投票和一堆失败案例

回到源头。2004 年，阿特伍德开始写博客 Coding Horror。名字来自史蒂夫·麦康奈尔（Steve McConnell）那本《代码大全》（Code Complete）里的一个侧边栏插图，画的是一个标示危险的图标。他特别喜欢那张图，因为它说的正是编程的核心洞见：每次你写下一行代码，都要想「我会怎么把自己坑死」。人太容易犯错了，所以你得在每一步都设计好，让之后的自己不会把事情搞砸。

他专门写信给麦康奈尔要授权使用这张插图，对方同意了，而且一直同意到今天。

博客写了几年，积累了大约四万名订阅者。他当时在一家制药公司工作，编程不是公司的核心业务，身边没人可以聊技术。于是他把对编程的痴迷全部倾泻到博客里。他给自己的定位是执行者，出点子这件事并不擅长。所以博客写着写着，他想做点更大的事，又不知道做什么。

转折点是乔尔·斯波尔斯基（Joel Spolsky）。乔尔的想法很明确：有个叫 Experts Exchange 的网站，数据很好，体验极差，像二手车销售一样想方设法骗你。他们决定做一个更好的版本。

Stack Overflow 这个名字是博客读者投票选出来的。他感慨，给东西起个好名字是计算机科学里最难的问题之一。早期 beta 用户几乎全部来自他和乔尔的博客读者。这种重合来自他刻意的经营：先通过长期写作建立一个小社群，然后邀请他们一起参与建设。当人们看到你在认真听取反馈，他们会跟着你走。

> 你不可能听取所有反馈，那是不可能的。但你确实在等我们的反馈，你在乎我们在做什么。（杰夫·阿特伍德）

关于这段创业，他还讲了一个反直觉的方法论：**不要只盯着成功案例，去看失败案例。**所有人都盯着成功产品看，那些东西很无聊。真正有意思的是失败的东西，因为那里有人在实验，有人在推进，只是最后没成。他们失败的原因，往往跟他们的想法本身的质量无关。

Stack Overflow 的设计是把一堆已知有效的元素拼起来，像个科学怪人：Digg 和 Reddit 的投票排序、维基百科式的可编辑、博客式的署名归属感，再加上声誉系统。声誉系统来自一个关键洞察：**同行的认可，是程序员最初做事的动力。**老板发的钱撑不了太久，同行说一句「这人真的懂」才有效。

## 严格本身没什么可追求的，它只是达成结果的手段

系统跑起来之后，他们很快发现一个现象：有些问题下面会有几百个回答。一个编程问题怎么可能有五百个答案？点进去一看，那些根本算不上问题，全是讨论。「你最喜欢的编程食物是什么」「你看过最好笑的编程漫画是什么」。这些早期被允许，后来全部禁掉。

判断标准是什么？他给了一条特别好用的线：**这是不是你工作中真实遇到的问题？**没人上班上到一半说「我干不下去了，因为我不知道最好笑的编程漫画是什么」。

第二条线关于学习方式。他把学习分成两种。一种叫「意外学习」，像刷 Reddit 一样，本来没打算学，刷着刷着知道了树蛙只活三年（这个数据是他随口编的，他自己也承认）。另一种叫「有意图的学习」，你遇到一个具体问题，需要围绕这个问题把相关知识补齐，可能是理论，可能是编译器原理，但都为目标服务。Stack Overflow 只服务第二种。

这套规则随着时间越来越严，原因之一是声誉系统自己带来的张力。如果有人靠一个笑话或者一张别人的漫画拿到五百个赞，其他程序员会不爽：凭什么他靠别人的作品拿走声誉？这跟写出一条刁钻的正则表达式、并附上详细解释说明为什么会这样、以后怎么避免，完全不是一回事。后者的声誉是应得的。

他打了个比方：**严格的类型系统最终会赢。**早期 Ruby 社群觉得动态类型很爽，不用声明变量，出问题靠单元测试兜底。然后微软的 C# 之父 Anders Hejlsberg 做出 TypeScript，硬给 JavaScript 套上严格类型，现在所有人都在说「我们上线 TypeScript 之后发现了五十个潜伏的 bug」。

严格并不意味着刻薄，也不意味着凶，它只是严格。他把这个区分讲得很清楚，因为很多人在这一点上误解了 Stack Overflow。

## 程序员为什么会变得像电脑

访谈里有一段特别有意思的推论。Lex 问，为什么程序员有时候给人感觉很刻薄？

阿特伍德说，你想想程序员整天跟谁一起工作。如果你每天跟一群混蛋工作，你最后会变成什么？混蛋。那么，除了电脑，还有谁是世界上最大的混蛋？

电脑对你的废话零容忍。你只要犯一个错，一切就崩了。一个分号能让太空任务失败。你把这种环境内化之后，会开始觉得：哦，我的同事，也就是这台电脑，严格得要命，一点情面不讲，所以我也该这样，因为我必须在所有事情上服从它的规则。

> 好程序员像电脑一样思考，因为那是他们的工作。可如果你内化得太深，你自己就变成了那台电脑。（杰夫·阿特伍德）

这就像侦探小说里的套路：最好的侦探能像罪犯一样思考，因为他们自己也沾了点罪犯的影子。程序员也一样。你开始觉得「错误代码 56249」是个完全合格的报错信息，因为电脑就是这么告诉你的。你忘了怎么当一个人。

这里没有恶意，你只是失去了对「不严格」的耐心。你非常简洁，非常不说废话，非常「错了，下一个」。别人问「你能帮我看看怎么修吗」，你的反应还是「错了，下一个」。对电脑来说这很正常，可对面坐着的是个人。

## 向上抽象：从代码到人

作为一个写了十几年代码、后来又做了两个大项目的人，阿特伍德说了一句听起来很打击人的话：**要成为一个有效的程序员，你最终得停止写代码。**

他自己也知道这话对听众不友好，所以赶紧补充：写代码这件事，会变成用越来越高级的语言在写。

最早你写汇编，硬编码到具体架构上。然后有了 C，可以跨架构抽象，编译到 ARM 或者 x86。再往上，Python、Ruby 这类解释型语言。再往上呢？他想再抽象一层，比编程语言更高的抽象是什么？

是自然语言。

你在用英文或者中文写作、说话、激励别人、给出方向、说「如果我们这样做会怎样」。这是最高层级的编程语言。他说自己意识到这一点的时候有点难受，因为这确实是很多程序员不愿意接受的事实。Patrick McKenzie（也就是 patio11）写过一篇很有名的文章讲这个：把自己叫作「程序员」，在某种程度上是职业发展的天花板。

因为代码周围的所有事情，比如人，才是真正难的部分。他在博客里早就反复写这个：编程更多是关于人，关于代码的比重没那么多。听起来不合逻辑，可事实如此。这些人能不能彼此相处？能不能互相理解？你能不能跟我讲清楚你到底在做什么？你解决的是不是正确的问题？

他推荐了另一本经典：《人件》（Peopleware）。核心观点是，软件就是人。人本身就是软件。

他把这个逻辑推到底：**一旦你的编程能力过了某个门槛，任何合理的工程问题你都能解决。**你不需要从零写算法，那种事基本不会发生。所以技术问题很少是瓶颈。真正的瓶颈是「我的经理是个混蛋」，这个问题你没法用代码解决，可它对你的伤害比「我们得用那个我讨厌的框架」大得多。Dave 在角落里写着谁也看不懂的东西，Sam 天天提交烂代码，这些都没那么致命。真正让整个团队停摆的，是那个有毒的同事或者上级，所有人都被压得喘不过气，谁也没法干活。

## 心跳：迭代速度是软件公司的核心竞争力

这是整场访谈里最实用的一段。

阿特伍德说，Discourse 早期他和 Robin Ward 两个人干的时候，他意识到一件事：每当他跑去问 Robin 一个关于 Ruby 的蠢问题，Robin 就在花时间回答他，而这段时间本来可以用来写 Discourse 的第一个 alpha 版本。对两个人的时间都是浪费。解法很干脆：**去雇更多合格的程序员。**至于「我要自力更生学 Ruby」这条路，他很早就放弃了。

然后他给出了一个判断软件公司健康度的指标。他发过一条推文，很多人喜欢：你想衡量任何一家软件公司的核心能力，就看这样一件事，从有人提出「我们产品里这个词该改一下，用户会更清楚」，到这个词真正改完、上线、送到用户手上，需要多长时间。

> 这就是你的生命周期。这就是你的健康度，你的心跳。如果你的心跳特别慢，你基本上已经死了。（杰夫·阿特伍德）

他说得很重。如果一个词的修改要花两周甚至一个月，那这家公司就没救了。这跟闲着没事改词玩是两个概念，一个明显更好的改动，所有人都同意，然后花了几个月才上线。这意味着你没法迭代，你什么都做不了。

他也澄清了另一面：心跳快不等于要像蜂鸟一样狂跳。重点是健康，是合理。可必须跳得起来。因为软件开发就是这么工作的：你做出改变，推上线，跟它相处一段时间，看看感觉如何，然后说「天啊，这主意太糟了」，或者「如果加上 Y 会更好」，接着继续转曲柄。你转得越多，最终跑得比竞争对手越远。一年之后你已经在几英里之外，他们才追上来。

他还提到一个反直觉的点。用户抱怨「软件又变了」的时候，他的反应是「对，就该变，一直变」。可塑性恰恰是软件最酷的地方。你反抗这个特性，等于在跟你所建造之物的本质作对。当然他也承认有些改动确实很烂，但总体而言，拥抱这种流动才是对的。

## Discourse：社群应该拥有自己

讲完 Stack Overflow，话题转向 Discourse。为什么一个做问答网站的人，要跑去做论坛软件？

起因是 Stack Overflow 的边界被看清了。它只适合那些答案可以被验证的领域，有数据、有事实、有科学依据，或者有一本权威的知识典籍可以翻。一旦离开这个范围，引擎就失灵。

他们做过实验。Stack Exchange 网络允许用户提议新的问答站点，票数够了就开站。有人提议了「扑克」和「乐高」，结果惨败。为什么？这两个领域太社交了。玩扑克的人真正想聊的是「我们抽什么雪茄」「用什么牌好看」「这手牌我该怎么打」，乐高玩家想说的是「看我搭的这个，帅不帅」。这些都不是问题，是分享，是讨论。

> 没有人会因为「我拿到同花顺时该怎么办」而被卡住。那算不上会阻塞你的问题，只是一个聚在一起聊天的机会。（杰夫·阿特伍德）

于是他转向论坛。2012 年底到 2013 年初他重新看了一圈论坛软件，发现从四年前他上次看的时候到现在，一点进步都没有。这让他很生气，因为他喜欢那种一群人围绕共同热爱的东西聊天的社群，而他们居然没有像样的工具。

他讲了一段经历。很多创业者来找他，说「Jeff 我有个创业点子」。他第一句话总是「你为什么要问我？我又不懂你这行。你为什么不去问你的用户，问对这个社区感兴趣的人？」对方说「好主意，怎么问？」这时候他就在心里拉起了悲伤的长号，因为所有能让创业者和用户、客户、受众对话的软件，全都烂得他不愿意推荐给别人。

而那恰恰是创业者能拿到最有价值输入的地方。Stack Overflow 自己就是这么做的。他花了大量时间泡在 Meta Stack Overflow 上，那是公开的社区反馈站点。**90/10 法则**：90% 的反馈没法用，可能是烂反馈、疯反馈，或者你现在根本没法执行的反馈。剩下 10% 是金子，是钻石，是对核心产品的真正改进，而且不太难实现。其中他最喜欢的那 5%，是他完全没想到的：「天啊，我从来没想到这个，但这主意太棒了。」Stack Overflow 的很多功能就是这么来的。

Discourse 的核心理念是**兴趣图谱**，跟 Facebook 的关系图谱对立。Facebook 理解的世界是状态更新：你的朋友在餐厅吃了饭。论坛围绕的是一个具体兴趣：我热爱电动车，我热爱特斯拉，我热爱他们解决问题的方式、创始人的风格、设计的伦理。他引用 The Oatmeal 那篇关于特斯拉的漫画，说那篇东西基本上就是所有兴趣社群的起源神话：一个人把自己热爱的东西挖到极深，然后分享出来。

他对自己的描述是：他是那种会对少数几件事极度投入、然后一头扎进去好几年的人。广泛地浅尝不是他的方式，深入扎几件事才是。论坛正好解锁了这种体验。

然后是那句最关键的话：

> 我不想要一个一切都属于 Facebook 的世界，至少我不想要。我想要一个社群能够拥有自己的世界。（杰夫·阿特伍德）

他打了个特别形象的比方。你每周四在 Barnes & Noble 书店聚会，某天书店说「你们走吧，你们买的书不够多」，那你就完蛋了，因为书店拥有你。换到自己有聚会空间、有俱乐部小屋，你就能定自己的规则，决定聊什么，产出比在书店角落里挤着好得多。

他对 Facebook 的评价很有意思。他先夸：Facebook 的执行力非常强，收购 WhatsApp 和 Instagram 是极其聪明的决定，他们还免费送 VPN 软件，间接把所有流量数据喂回给 Facebook，让他们看到什么在变流行。紧接着一句：**Facebook 没什么道德指南针，Facebook 只在乎 Facebook。**它不在乎你和你的问题，只在乎自己能做多大。

## 社群怎么从零长起来

Lex 问了个很实际的问题：怎么把一个社群从一个人做到一千人？运气、技巧、时机还是坚持？

阿特伍德的答案回到他关于博客的那套话。他引用一位他很敬佩的人的说法：所谓写博客，就是你必须有一些有意思的东西要说，而且用有意思的方式说，然后坚持十年。

「有意思的东西」意味着不是所有人都在说的东西。「有意思的方式」意味着一种带娱乐性的表达方式。

然后是仪式感。你宣布「我每周写三篇」，然后你必须做到。因为在你坚持几年之前，你根本到不了任何地方。这件事要花好几年。如果你真的热爱它，它就不会感觉像工作。

他特别提到写作的一个技巧，说这可能是他能给的最好的写作建议：

> 把文章大声读出来，读好几遍，让它听起来像你在说话。因为好文章的目标就是这个。（杰夫·阿特伍德）

好的写作应该听起来像你说的话，只是措辞稍微好一点，因为你有更多时间思考。它念出来要自然。

关于选题，他的方法是从旧书里挖。世界上的有趣事物太多了，如果你一天想不出一个可以聊的有意思的点，那是你不够努力。读经典编程书是一条很好的矿脉，那些书里提出的概念往往经久不衰，你可以拿几句话出来，同意或不同意，比较两个概念，或者讨论「这在今天还适用吗」。你不用假装是自己的原创，可你有了一个可以持续聊下去的常青话题。

2007 年，有人出价大约八万到十万美元要买他的博客。那是一年的工资，一次性到手。他犹豫过，跟人聊过，最后还是拒绝了。理由很简单：卖了之后，这个博客就不再属于他了。

他给了一条他自己也不太爱给人建议、可觉得确实有用的原则：**当你面对一堆选项时，选那个让你稍微有点害怕的。**跳崖那种害怕不算在内，要的是让你紧张的那种。选安全的那个，通常意味着你没在推自己，没在选那个能让你成长的东西。

对他来说，更可怕的选择是说不。「不，我们就看看这事能走到哪儿。」因为这样它还是他的。

他说，假如当年说了 yes，世界会多不一样。可能就没有 Stack Overflow 了。

## 关于未来：手机是文化变迁，AI 还没到魔法

访谈后半段聊到未来。Lex 问了两个方向：智能手机和人工智能，会不会根本改变编程这件事。

阿特伍德对智能手机的判断是：**它带来的主要是文化层面的转变，编程层面的变动没那么大。**2010 年之后，每个人都随身带着一台电脑，这确实是巨大的社会变化，我们到今天还在消化它的正面和负面影响。他提到自己作为极客的梦想世界就是「人人随时随地都在电脑上」，然后补了一句「小心你许的愿」。现在人人都有电脑了，可它没能长成我们想象的乌托邦，电脑能被用来做很多未必好的事。

至于编程本身，他越来越相信 Unix 那套。命令行、基础工具，这些东西在未来很长很长时间里还是编程的样子。他不相信会有什么神奇的可视化编程颠覆这一切。他甚至想不出手机上有什么操作能跟编程直接对应，想半天也没想出什么。

关于人工智能，他的态度是：这个概念被过度吹捧了。很多所谓的 AI，本质上是「人非常可预测」。他举了 Discourse 里的一个检查：你一小时前从纽约登录，现在从旧金山登录，那就标记为可疑。那只是条启发式规则，一小时跑两千英里不合理。你可能用了 VPN，可这条规则建立在「人基本上不会到处移动」这个观察之上，非常朴素。

他说好的软件应该预判你的需求，比如 Google 预测你的通勤路线。电脑在这块能做得更好，可他不太愿意把它叫「完整的 AI」，那只是电脑变强了。现在人人有智能手机，我们突然有了大量以前没有的位置数据、通信数据，喂给一些基础的启发式，再加点漂亮的算法，就变成了对你需求的预测。就像一个朋友说「我看你到家了，要不要一起吃个饭」，因为这是我们这个点通常会做的事。

落到编程过程本身，他觉得 AI 确实有可能帮上忙，因为编程里重复太多。他举的反面教材是 Clippy，那个「看起来你正在写一个 for 循环」的曲别针。他更看好的方向是「更好的乐高积木，更大的乐高积木」：库本身就是这类东西。你不用自己写 HTTP 请求库，用一个久经考验的现成的就行。WordPress 在他看来就是一个让非程序员也能做出东西的工具，通过插件，你可以把它变成任何东西，甚至有点疯狂。他说未来可能更多是「粘合」而不是「真正的编程」，这是好事，因为你需要的大部分东西已经在外面了。

至于 Unix会不会一直被沿用，他的回答很干脆：会。他年轻时是 Windows 的忠实信徒，觉得 Unix 是浪费时间。后来他完全翻转：**Unix 那帮人基本是对的，微软和 Windows 在服务器端和桌面端，至少在那个年代，基本是错的。**现在苹果的桌面系统底层也是 Unix（Darwin）。他说，不管上面套了多少层外壳，剥掉一两层，底下还是 Unix，这个状态会持续很长时间。

他还顺带提了一句 Discourse 自己的架构。Discourse 就是客户端编程，服务器把一大碗 JavaScript 递给你，剩下的排序、分页、基本计算全在你自己的机器上跑。数据当然还是要从服务器拿，可本地的算力用得越来越多。这是编程重心往客户端偏移的一个例子。至于服务端那部分，他的判断是 Unix 哲学会继续赢下去。

## 为什么 Discourse 不做广告

聊到商业模式时有一段很有意思。Lex 提到，广告在最理想的状态下其实是在服务用户，把用户和他们感兴趣的东西连接起来，这跟 Discourse 连接兴趣社群的逻辑一致。

阿特伍德说自己对广告持一个反常的看法：他其实同意这个观点。如果广告就是「把你会感兴趣的东西推给你」，那挺好，甚至是件好事，通过看广告来支持做这些工作的人也是合理的。

可他还是装了 Adblock，而且装得很不情愿。原因很实际：现在的广告太重，为了给你看广告要加载三四十兆的东西。他说现在的广告像当年的 Experts Exchange，等你做出 Stack Overflow 的时候，它就什么都不是了。广告技术领域公司多到离谱，一张图上密密麻麻全是 logo，小到看不清。

然后他回到现实：**非常非常少的 Discourse 站点能靠广告模式活下来。**太分散，太奇怪，给的钱太少，用户还讨厌它。理论上他同意「干净、快速、正好是你感兴趣的广告」很棒，可我们离那个理想状态太远了。连 Google 在重定向那块也只是做得还行。

真正有效的是订阅、Patreon、亚马逊联盟链接这类。有人点了一个链接去亚马逊买了东西，站点拿 2% 到 5% 的佣金，他觉得这完全公平。你在他站点上看到一辆溜溜球，点过去，买了，他分一点，合理。他自己帮过一个站长，基本上算是付钱让对方换到 Discourse，理由很直接：「这软件太烂了，我没法再来了。」同时他建议对方别再做用户讨厌的广告，全力做 Patreon，做亚马逊联盟。那个人照做之后效果很好，尤其是对一个内容创作者来说，这条路走得通。

## 机械键盘是一种信仰物品

访谈最后聊到 Code Keyboard，阿特伍德自己参与设计的机械键盘。Lex 说自己用 Kinesis，楼上就有一把。

阿特伍德的坦白很有意思。他说机械键盘带不来任何功能上的必需性，你在任何键盘上都能编程，甚至屏幕键盘也行（说这话的时候他自己都觉得可怕）。薄膜键盘也能用，只是手感很差，那种薄薄的橡胶膜，按下去没有明确的反馈点。

它本质上是一种信仰物品。它真正表达的是：我在乎键盘，因为键盘是我和电脑沟通的主要方式。就像播客要用好麦克风一样，你想要一把好键盘，因为它有明确的触感反馈，你按下键的那一刻能清楚感觉到那一下咔哒。

> 它表明你关心基础。因为你知道什么让你成为一个好程序员吗？打字快。（杰夫·阿特伍德）

这句话他说得很认真。打字足够快，能把脑子里的想法搬到代码库里，本身就是一项核心技能。练打字真的能让你成为更好的程序员。

更深一层，是那种触感带来的愉悦，最终反哺热情。他说自己弹钢琴，道理一样，技术性的、触觉性的东西会让人开心。他提到机械键盘社区已经爆炸了，Massdrop 上可能有五百个键盘项目，他关注的一个前 Tech Report 作者每周都在发键盘图，各种炫酷的键盘，多到他数不过来。

Lex 说自己有一堆溜溜球，阿特伍德说这正是他讲的道理。技术上你只需要一个，可你就是喜欢很多个。机械键盘也是一样。

他的结论是：这些非必需的、近乎宗教性的物品，恰恰构成了人之所以为人的那部分。它让生活值得过。严格来说它们都不必要，可你想想，什么东西是真正必要的呢？

## 一个普通程序员能从这里拿走什么

这场对话跨度很大，从算法聊到领导力，从社群治理聊到键盘手感。如果只挑几条能马上用上的，大概是这些。

- **遇到搞不懂的问题，先跑数据，别硬想。**洗牌算法、三门问题、任何反直觉的逻辑，写个程序跑一百万次，看分布的桶，答案比推理可靠。这也是为什么哪怕你已经在做管理，最好还是保留一点动手做实验的能力。
- **把决策过程完整讲出来。**带团队也好，在社区发言也好，别只抛结论。讲清楚背景、目标、你考虑过哪些选项、为什么选这个。别人的反对往往会变成「我理解你的出发点，虽然不完全同意」，这跟「凭什么」是两种完全不同的对话。
- **衡量所在团队的健康度，看「改一个词要多久」。**从提出改动到用户看到改动，这个时间就是团队的脉搏。两周以上就是警讯，一个月以上基本停摆。想办法缩短它，比优化任何单点技术都更值。
- **写东西的时候，把稿子大声读出来。**读好几遍，直到它听起来像你在说话。这是区分「能读」和「好读」最有效的一招，成本几乎为零。
- **在重要选择上，挑那个让你稍微紧张一点的。**跳崖那种冒险不算，要的是让你心里发紧的那种。安全的选项通常意味着原地踏步。当年拒绝卖掉博客的阿特伍德，后来做出了 Stack Overflow。
- **如果你是新手，别把 Stack Overflow 当学习平台。**它服务的是「有具体阻塞问题、需要可验证答案」的人。新手真正需要的是实时屏幕共享、聊天、可以随便玩的沙盒，这些它从来不提供。找错工具，受伤的只会是你。
- **想建社群，先写十年博客。**这话不是比喻。先有值得说的东西，有有意思的说法，有稳定的节奏，然后邀请读者一起参与建设，让他们投票命名、参与测试。社群拉不来，只能长出来。
- **开会前先问一句：我们聊的是问题还是解决方案？**对解决方案有热情的人容易防御，对问题有热情的人容易吸收。团队里这两种气氛的差别，几个月就能体现在产出上。

最后那条关于键盘的建议，阿特伍德自己也承认它是非必需的。可他讲得对：一把手感好的键盘，会让你更愿意坐在那儿多敲一会儿。而多敲一会儿，往往就是所有进步的起点。

整场访谈里他说的最实在的一句话，可能是那句「你不需要聪明，你只要用数据把它跑出来就行」。这句话能用在算法上，也能用在带团队上，还能用在写作上。把想法变成可以跑的东西，看看结果，然后改。这可能就是他十几年里做的全部事情。

## 那场关于旧金山的对话，后来没人再提

访谈里有个细节容易被略过。阿特伍德讲到 Discourse 里那个异地登录检测的时候，语气很轻松：「你一小时前在纽约，现在在旧金山，嗯，这挺有意思。」他把这当作启发式规则的一个平凡例子，用来论证所谓 AI 没那么玄。可这段话背后藏着一个更大的判断：**软件对用户行为的预测，大部分时候只是把人类的重复性写成代码。**

他说人非常可预测。你每天大致在同一时间起床，走同一条路去上班，在同一个便利店买咖啡。Google 预测你的通勤路线，靠的就是这份重复。它没什么魔法，只是把你的行为模式记住了。他说这更像一个朋友说「我看你到家了，要不要一起吃饭」，因为它知道你这个点通常干这个。

问题在于，这套逻辑在社区产品里会变得微妙。预测得准，用户觉得贴心；预测得太准，用户觉得被盯着。Discourse 是开源软件，每个站点自己托管数据，这件事上他站在用户这边：数据在你自己手里，你才有可能决定它被怎么用。这又绕回他那个核心主张，社群应该拥有自己。

## 为什么他总在夸对手

整场访谈里有个反复出现的模式，值得单独说一句。他批评 Facebook 的时候，一定会先夸一句「他们执行力非常强」「收购 WhatsApp 和 Instagram 是极其聪明的决定」。他批评微软早年的方向，紧接着承认 TypeScript 出自 C# 之父 Anders Hejlsberg 之手，是软件史上最聪明的头脑之一。他谈到自己已经完全转向 Unix 阵营，仍然会说苹果的桌面系统底层也建在 Unix 上。

这种既能批评又能准确承认对方强项的能力，在技术圈并不常见。多数人一旦站定阵营，就会把对面的所有东西都归为垃圾。他的做法更像一个工程师在评估方案：这个选择在什么条件下是对的，在什么条件下是错的。他讨厌 Facebook 的道德取向，可他不会因此说 Facebook 的技术烂。这两件事在他脑子里是分开的。

这可能也是他做社区能做这么久的原因。一个总觉得对手一无是处的人，没办法设计出一个真正好用的替代品，因为他不知道对手到底做对了什么。

## 十年这个数字，他反复提到过

把访谈里散落在各处的「十年」串起来看，会发现一条挺清晰的线。

他说写博客要「坚持十年」，才可能到任何地方。Discourse 一开始他定的是五年计划，很快就改成十年，因为三年才能把产品做成你想要的样子，而第一版一定是烂的，可你还得先把它发出去。Stack Overflow 到 2018 年正好十年，他写文章反思它长成了什么样子。学 Unix 的知识几十年不失效，学人性的知识也同样耐用。

十年在他这里像是一个基本单位。短于这个尺度的事情，他没太大兴趣谈成功或失败。这个时间感跟当下技术圈的主流节奏差得很远，今天的标准节奏是三个月做出 MVP，一年内找到 PMF，两年内要么规模化要么死掉。他那套「三年才做出想要的产品，十年才算走完一轮」的说法，听起来像是另一个时代的话。

可他自己给了辩护。他说你转曲柄的次数越多，最终跑得越远。转曲柄这件事本身需要时间，而时间没法压缩。你能压缩的只有每次转动的周期，也就是他说的那个心跳。心跳快一点，同样十年能转更多圈。这可能就是他全部方法论里最核心的一条：**把循环周期压到最短，然后一直转下去。**

算法是这样，跑十亿次看分布。写作是这样，每周三篇读出来听。社群是这样，每次反馈都回应。公司也是这样，一个词的改动从想法到上线，越快越好。

这套东西朴素到有点无聊。可他在访谈里从头到尾没换过别的说法。
