# How Kent Beck shapes the software engineering industry · 中英对照逐字稿

- 原节目：The Pragmatic Engineer
- 英文原始来源：https://newsletter.pragmaticengineer.com/p/how-kent-beck-shapes-the-software
- 中文译制版入口：https://www.xiaoyuzhoufm.com/episode/6a46c7c49d2f57436841aea9
- 时长：02:28:44
- 方法与限制：英文来自已验证的原始节目 transcript/caption；中文由 Codex 逐段翻译，未做逐字人工校对，公开引用前请回到英文原文与音频复核。

## 中英对照逐字稿

### [00:00:00–00:00:30]

**EN**  The human part is the hardest part in software engineering. >> This is the biggest cosmic practical joke ever. We were promised here's this computer and if you completely understand this computer, you'll be fine. That's all you need to do. >> When did TDD come along? >> I was just kind of farting around and I would write the test before I wrote the code. And I can remember laughing out loud cuz it was such a stupid idea. Why would you write a test that you know is

**中文**  软件工程中，人这一部分是最难的。>> 这简直是宇宙中最大的现实恶作剧。我们曾被许诺：这是计算机，只要你完全理解它，就没问题了。这就是你需要做的一切。>> TDD 是什么时候出现的？>> 我当时只是在随便尝试，会在写代码前先写测试。我记得自己笑出了声，因为这主意实在太蠢了。为什么要写一个明知

### [00:00:28–00:00:58]

**EN**  going to fail? TDD is a good example where it almost went out of style completely. The big part of it is I work on something for a while and then I switch to something else. I moved on to the next thing. TDD is out there [music] and then there were people who used it as a moral cudel like you should be if you're not using TDD you're not professional. Extreme programming was born. I didn't want Grady BCH to ever say that he was doing this thing. So I

**中文**  会失败的测试？TDD 是一个很好的例子，它几乎一度完全过时。很大一部分原因是，我会做一件事一段时间，然后转去做别的，进入下一个主题。TDD 已经存在于世，[音乐] 后来有些人却把它当成道德棍棒：你应该这样做，如果不用 TDD，你就不专业。Extreme Programming 诞生了。我不希望 Grady Booch 有朝一日说他在做这种事，所以我

### [00:00:55–00:01:22]

**EN**  had to pick a moniker that was unattractive enough that somebody would try and steal it. A little bit of thumb the nose at the establishment. Extreme sports were there. I like the analogy with extreme sports. 17 people rolled, but you're the first one listed. The agile manifesto. >> Things weren't going very well because there's all these people and I want my stuff in. No, I want my stuff in and that contradicts your stuff. And we took

**中文**  必须选一个足够没有吸引力的称呼，让别人不想把它拿走。这也有一点对体制嗤之以鼻的意味。当时正流行 extreme sports，我喜欢它与 extreme sports 的类比。17 个人参与了，但你的名字排在第一位——Agile Manifesto。>> 当时进展得不太顺利，因为人很多，每个人都说：我要把我的东西放进去。不，我要放我的，而且这和你的矛盾。于是我们

### [00:01:20–00:01:48]

**EN**  a break. We walked out and [music] Martin and Jim Highmith stayed behind. When we came in from the break, there was the basics of [music] the manifesto. For a couple of years, we've had AI alums. So, one of the things is that the pace of development is definitely accelerated. One thing I wonder Ken Beck is one of the living legends of the industry. He's greatly shaped the

**中文**  休息了一会儿。我们走了出去，[音乐] Martin 和 Jim Highsmith 留在房间里。等我们休息回来时，[音乐] Manifesto 的基本框架已经出现了。过去几年，我们已经有了 AI 编程工具。其中一个变化是，开发速度确实加快了。我想探讨的是，Kent Beck 是这个行业仍在世的传奇人物之一。他极大地塑造了

### [00:01:47–00:02:16]

**EN**  software engineering profession and [music] keeps impacting it even today. But there's not been a podcast episode covering his whole career from start to present [music] until today. In this conversation, we cover how Ken grew up with computers in the 70s and how he fell in love with small talk. The origin stories behind TDD, extreme programming, and the Agile Manifesto and while agile, the word was a [music] mistake. lesserk known stories like how he got fired from Apple, Ken's laws decade in the 2000s, and why he thinks TDD has failed, how he

**中文**  软件工程这一职业，[音乐] 甚至今天仍在持续影响它。但此前从未有一期 podcast 从头至尾讲述他的整个职业生涯，[音乐] 直到今天。在这次对话里，我们谈到 Kent 如何在 1970 年代与计算机一同成长，并爱上 Smalltalk；TDD、Extreme Programming 和 Agile Manifesto 背后的起源故事，以及为什么 agile 这个词是一个[音乐]错误；还有一些较少为人知的故事，比如他如何被 Apple 解雇、2000 年代 Kent 的迷失十年，以及他为什么认为 TDD 已经失败；他如何

### [00:02:14–00:02:43]

**EN**  thinks about and uses AI and what still excites him with coding after 40 plus years and many more. If you'd like to understand how True Legends was shaped by the industry and shaped software engineering himself, this episode [music] is for you. This episode is longer than most of my podcast episodes, and I do hope that you'll find that it's worth the time to listen to Kent longer than he's ever told his story in one setting before. This episode is presented by Antithesis. If you work with agents, your job is no longer just writing code. It's specifying and testing it. And antithesis is the most

**中文**  看待和使用 AI，以及做了 40 多年开发后，coding 还有什么令他兴奋，等等。如果你想理解一位真正的传奇是如何被行业塑造、又如何亲手塑造软件工程的，[音乐] 这期节目就是为你准备的。这一期比我的大多数 podcast 都长，希望你会觉得值得，因为 Kent 从未在一次谈话中如此完整地讲述过自己的故事。本期节目由 Antithesis 赞助。如果你与 agents 一起工作，你的工作便不再只是写代码，而是明确描述并测试代码。Antithesis 是当今验证 agent [音乐] 代码最

### [00:02:42–00:03:11]

**EN**  effective method of verifying agenda [music] code today. This episode is brought to you by Turbopuffer. A fun fact about Turbopuffer is how they become the search engine for AI agents. It seems like every week they add a new use case from one of the leading AI companies. RAM, Lorra, Harvey, Granola, they're all on Turbopuffer. Or as the team likes to say it, they're all puffing. Turbopuffer offers a full set of search tools. vector search, full text search, attribute filtering, ragex, and more in one API. It's built on

**中文**  有效的方法。本期节目也由 Turbopuffer 赞助。关于 Turbopuffer 有个有趣的事实：它已经成为 AI agents 使用的搜索引擎。似乎每周都有一家领先 AI 公司带来新的 use case。Ramp、Lora、Harvey、Granola 都在使用 Turbopuffer。按团队喜欢的说法，它们都在“puffing”。Turbopuffer 在一个 API 中提供完整的搜索工具，包括 vector search、full-text search、attribute filtering、regex 等。它以

### [00:03:09–00:03:38]

**EN**  object storage as a sole stateful dependency. So, it's extremely scalable, reliable, and cheap. But it's also very fast thanks to its intelligent caching layer. One cool thing about Turbopuffer is you can have unlimited search indexes. So, it's perfect for multi-tenant AI applications. Build an index per tenant, data is isolated by default, and you can scale without thinking about it. Here's the best part. Turbopuffer just announced last week that they've dropped their base price from $64 per month to $16 per month. So, there has never been a better time to

**中文**  object storage 作为唯一有状态依赖，因此扩展性、可靠性和成本表现都很好。借助智能 caching layer，它也非常快。Turbopuffer 的一个很酷之处是可以拥有无限数量的 search indexes，因此非常适合 multi-tenant AI applications。为每个 tenant 建一个 index，数据默认隔离，而且无需操心扩展。最棒的是，Turbopuffer 上周刚宣布把基础价格从每月 64 美元降到 16 美元。因此，现在正是

### [00:03:37–00:04:06]

**EN**  test it out. Head to turbopuffer.com/pragmatic. And it's so good to have you in person on the podcast. Guy, it's great to talk to you again. Yeah, I wanted to kick off with something really timely. There was this uh tweet going viral by Daario where he said, I quote, "Coding is going away first than all of software engineering." you had some things to say about it. >> Yeah. My response is that that's a statement by someone who doesn't

**中文**  试用它的最好时机。访问 turbopuffer.com/pragmatic。很高兴你亲自来到 podcast。>> Gergely，也很高兴再次和你交流。>> 是的，我想先从一个非常及时的话题开始。Dario 有条 tweet 正在广泛传播，他说，我引用一下：“Coding 会比整个 software engineering 更早消失。”你对此有一些看法。>> 是的。我的回应是：这是一位不

### [00:04:04–00:04:33]

**EN**  understand software engineering. Coding is part of what you're doing, but it's only a small part of what you're doing. Even if it takes up a fair amount of time, you're building confidence, you're building connections with other people, you're building your own understanding. All those things are happening while you're coding. And coding's actually a great way to cement understanding. The

**中文**  理解 software engineering 的人说出来的话。Coding 是你所做工作的一部分，但只是很小的一部分。即便它确实占用不少时间，你同时也在建立信心、与其他人建立联系、加深自己的理解。所有这些都会在 coding 时发生。而且，coding 其实是巩固理解的绝佳方式。

### [00:04:30–00:05:00]

**EN**  more you program, the more you understand the domain that you're working in. So to say, well, we're just going to pass all that off to a machine. Well, you're that's not all there is to it. Interesting because one thing that is so obvious with LLMs is they just code really quickly, right? like it it used to take us a lot of time to both type it out and also thinking out but you're saying that there was thinking

**中文**  你编程越多，就越理解自己正在处理的领域。因此，如果说“好吧，我们把这一切都交给机器”，问题在于，这并不是工作的全部。这很有意思，因为 LLM 最明显的一点就是写代码真的很快，对吧？过去我们既要花大量时间敲出来，也要花时间思考。但你的意思是，这一过程中还包含思考

### [00:04:57–00:05:25]

**EN**  involved and understanding involved as well in that process right so a couple of days ago I I I saw a phrase and it really hit me that we're accumulating code faster than we're accumulating trust and that sense of trust comes from me struggling to understand some domain concept I get it. I represent it in the

**中文**  和理解，对吗？前几天我看到一句话，它真的击中了我：我们积累代码的速度，比积累信任的速度更快。那种信任来自我努力理解某个领域概念，直到我真正明白。我把它表达在

### [00:05:23–00:05:52]

**EN**  code. I have I write tests that demonstrate that I really did understand it. And now I trust my program. But if we're programming together, that act of programming together means that we trust each other more. If we talk to someone an eventual user and we demonstrate that we understand their needs and we, you know, they tell us, "Well, I want a button that does this." We're like,

**中文**  代码中，再编写测试来证明自己确实理解了。现在，我信任我的程序。如果我们一起编程，共同编程这件事本身，也意味着我们会更信任彼此。如果我们与未来的用户交谈，并证明我们理解他们的需求，比如他们说：“我想要一个能做这件事的按钮。”我们会问：

### [00:05:50–00:06:18]

**EN**  well, what problem are you really solving? And we go back and forth and back and forth. That builds human trust as well. None of that can be automated. None of that occurs if we prompt the we get the finger guns, you know, the genie goes, "Yeah, it's all finished, boss." And it's like, "Well, hang on. Finish.

**中文**  好，你真正想解决的问题是什么？然后我们不断来回交流。这也会建立人与人之间的信任。这一切都无法自动化。如果我们只是给模型一个 prompt，然后看到它比着手枪手势，像精灵一样说：“都完成了，老板。”那上述事情一样都不会发生。我们得问：“等一下，完成了。

### [00:06:16–00:06:44]

**EN**  What's finished?" As we're talking about software engineering, you mentioned trust, connection, understanding. You didn't mention technologies, you didn't mention programming languages, you didn't mention wouldn't even mention refactoring. This is really interesting. You you've been doing this for what 50 plus years now. Do I understand that the human part is the hardest or most important part in software engineering?

**中文**  究竟什么完成了？”我们在谈 software engineering 时，你提到了 trust、connection、understanding，却没有提技术、programming languages，甚至连 refactoring 都没提。这很有意思。你已经做了多久，50 多年了吧？我是否可以理解为，人的部分是 software engineering 中最难或最重要的部分？

### [00:06:42–00:07:11]

**EN**  Th this is this is the biggest cos cosmic uh uh practical joke ever. As young people who some of whom like I don't understand humans very well, we were promised, okay, here's this computer and if you completely understand this computer, you'll be fine. That's all you need to do. So I set out the first part of my career just to become the best programmer that I

**中文**  这就是宇宙中最大的现实恶作剧。我们这些年轻人中，有些人会想：“我不太理解人类。”而我们得到的许诺是：好吧，这是计算机，只要完全理解这台计算机，你就没问题了。这就是你需要做的一切。因此，我职业生涯的最初阶段，一心想成为自己

### [00:07:08–00:07:37]

**EN**  could be because that's what it would take to be successful. And then woo sorry there's this whole human side and your ability to affect change in the world is gated by your ability to communicate with empathize with gh empathy not my natural strong suit to convince

**中文**  所能成为的最优秀 programmer，因为我以为成功只需要这个。然后，哇，抱歉，原来还有完整的人性一面。你影响世界发生变化的能力，受制于你沟通、共情的能力——天啊，empathy 可不是我天生的强项——以及说服

### [00:07:33–00:08:01]

**EN**  to communicate with to soothe to understand other human beings and those are exactly the skills that I thought I didn't need to learn. So I was promised just understand the computer and then just kidding understand people from a position where I was already 10 years behind. So I I'd like to go back to to right there to the very beginning cuz so

**中文**  他人、与他人沟通、安抚他人、理解他人的能力，而这些恰好是我曾以为自己不需要学习的技能。因此，我原先得到的承诺是“只要理解计算机”，后来却变成“开个玩笑，你得理解人”，而此时我已经落后了 10 年。>> 我想回到最开始，因为

### [00:07:58–00:08:28]

**EN**  many people know you from from your books from a lot of the techniques and the techniques that that that you've co-created or or made it made a lot more popular. XP, TDD, a bunch of other just small refactorings and so on. But going back, how did it all start? How did you have your first contact with computers? I I know your father was an electrical engineer.

**中文**  太多人是通过你的书，以及许多由你共同创造或发扬光大的技术认识你的，比如 XP、TDD、其他很多东西，以及小型 refactorings 等。但回到起点，一切是如何开始的？你第一次接触计算机是在什么时候？我知道你的父亲是一名 electrical engineer。

### [00:08:25–00:08:55]

**EN**  >> Yeah. So, my father started out as a an electrical engineer. He was in the Navy in the Korean War as a radio operator. uh came out of that, went to school, got an electrical engineering degree, started working in uh aerospace uh as an electrical engineer, and then we moved to Sunnyvale, Silicon Valley before it was Silicon Valley. This is before the invention of Silicon.

**中文**  >> 是的。我父亲最初是一名 electrical engineer。他在 Korean War 期间加入 Navy，担任 radio operator。退伍后，他去上学，取得 electrical engineering 学位，随后进入 aerospace 行业做 electrical engineer。后来我们搬到 Sunnyvale，那时 Silicon Valley 还不叫 Silicon Valley，甚至是在 silicon 发明之前。

### [00:08:53–00:09:23]

**EN**  >> Oh, this was before. >> Yes. Before there was this is when there were still uh cherry orchards on El Camino. And I was born there about the time So I was in sixth grade. He brought home a programmable calculator which was as big as not as big as this table, maybe half the size of this table. >> Probably weighed >> 65 or 70 lb. Yeah. Yeah. It was >> 65 lbs.

**中文**  >> 哦，是在那之前。>> 对。在那时，El Camino 旁边甚至还有 cherry orchards。我出生在那里。大约在六年级时，他带回家一台 programmable calculator，体积虽然没这张桌子大，但差不多有半张桌子那么大。>> 大概有多重？>> 65 或 70 磅。>> 65 磅。

### [00:09:21–00:09:49]

**EN**  >> And it had uh it had Nixie tubes. Nixie tube is this is before seven segment LEDs cuz LEDs hadn't been invented. uh you'd have a uh an incandescent light bulb with 10 filaments in the shape of the numbers. And my first program was uh was a loop that would just count up and down and up and down because the

**中文**  >> 它使用 Nixie tubes。Nixie tube 是在 seven-segment LED 出现之前的东西，因为 LED 当时还没发明。它像一个白炽灯泡，里面有 10 根做成数字形状的灯丝。我的第一个程序是一个 loop，只会不断向上计数、再向下计数，因为那些

### [00:09:47–00:10:13]

**EN**  filaments were set one in front of the other. 0 1 2 3 4 5 6 7 8 9. So, I I just uh wrote a program that would count up and down cuz I loved watching this go back and forth and back and forth and back for hours. I could just was >> mesmerizing. Oh, >> absolutely. That was the first time I had my hands on any real hardware.

**中文**  灯丝是一层层前后排列的：0、1、2、3、4、5、6、7、8、9。所以我写了一个程序，让它不断加减计数，因为我喜欢看数字来回跳动，能看上几个小时。>> 令人着迷。>> 完全正确。那是我第一次真正亲手接触硬件。

### [00:10:10–00:10:39]

**EN**  Although I did find my dad would bring home books and I was a kind of obsessive spectrumy kind of kid. I would obsessively read these books and I found one of them lately in uh in during a move, the Burroughs B6700 instruction set manual. And this was a really interesting machine to imprint on early because it has a hardware stack.

**中文**  不过，我父亲会带书回家，而我是那种带点 spectrum 特质、容易痴迷的孩子，会反复读那些书。最近一次搬家时，我找到了其中一本——Burroughs B6700 instruction set manual。它是一台很有意思、适合在早期留下深刻印象的机器，因为它有 hardware stack。

### [00:10:37–00:11:04]

**EN**  It wasn't register based, it was stack based. How they did that with discrete transistors, I will never know. But it's just a really interesting architecture. And that book I would just read the pages over and over and I understood nothing but I was just fascinated with this mechanism. So when I got an actual machine and I could play with it and something that that resembled assembly

**中文**  它不是 register-based，而是 stack-based。他们如何用 discrete transistors 做到这一点，我至今无法理解。但这确实是种很有趣的 architecture。我会一遍遍阅读那本书的每一页，虽然什么也不懂，却完全被这套机制吸引。因此，当我真的拥有一台机器，可以动手玩，并用某种类似 assembly

### [00:11:02–00:11:30]

**EN**  language and I could get it to do stuff, I could have an idea in my head and if I understood this mechanism, I could get it to do the stuff in my head which would spark the next idea. That's what really hooked me is is that creative impulse coupled with knowledge of the machine together I could create things in the world that I

**中文**  language 的东西让它做事时，我发现自己可以先在脑海里有个想法，只要理解这套机制，就能让它实现脑中的东西，而这又会激发下一个想法。真正让我着迷的，就是 creative impulse 与对机器的了解结合起来后，我能够在现实世界中创造出自己

### [00:11:27–00:11:56]

**EN**  wanted to see and this was very early '7s right Microsoft 72 maybe so Microsoft wasn't even founded in 75 >> what was it like in terms of how common or uncommon were these machines means how much or little did you even think that they would go anywhere or was it just just a a fun thing that has just been invented?

**中文**  想看到的东西。这是在 1970 年代初吧？也许是 1972 年，当时 Microsoft 甚至还没成立，它是 1975 年才成立的。>> 那时这些机器有多常见或多罕见？你们当时觉得它们会发展成大事吗，还是只把它看作一个刚刚发明出来的有趣东西？

### [00:11:53–00:12:21]

**EN**  >> Probably the first wave of miniaturaturization was the programmable calculator. >> Mhm. >> So the one that your dad brought home. >> So no, the like handheld calculators. Okay. So, so, so the the big tabletop calculators was was one thing, but then there were these little calculators. I remember my dad buying an HP35 for $400,

**中文**  >> 可能第一波 miniaturization 就是 programmable calculator。>> 嗯。>> 就是你父亲带回家的那台？>> 不，是 handheld calculators。>> 明白。也就是说，大型 tabletop calculator 是一回事，后来又出现了这些小型 calculator。我记得父亲花 400 美元买了一台 HP-35。

### [00:12:19–00:12:48]

**EN**  which is I don't have no idea how much that would be today, but a lot of money just for this little thing. >> It'll probably $2,000 location. >> Yeah. So you you had to keep the stack in your head of what order do I want to put the operands in and you know make sure that I stack everything and then you go plus+ and that would pop stuff off the stack. And then the HP45 came

**中文**  我不知道相当于今天多少钱，但只是买这么个小东西，确实是一大笔钱。>> 按通胀可能是 2,000 美元。>> 对。你得在脑中记住 stack，想清楚 operands 应以什么顺序放进去，确保把所有东西正确压栈，然后按 plus，它就会从 stack 中 pop 出内容。后来 HP-45

### [00:12:45–00:13:14]

**EN**  along and it would it had its own little programming language in it and that was just like okay this is really really cool. And then microprocessors started to come out and we had the Z80 and the 808 and the 6800 and my dad and I soldered together our first 600 6800based machine. Then we were programming in

**中文**  出现了，里面有自己的小型 programming language，我当时就觉得：好吧，这实在太酷了。接着 microprocessors 开始出现，有 Z80、8080 和 6800。我和父亲亲手焊接了第一台基于 6800 的机器，然后开始用

### [00:13:12–00:13:41]

**EN**  assembly language. Then out came basic then >> this was mid70s. >> Yeah. Yeah. So, so that was really I I was spending a lot of time working on that machine. Again, I wouldn't say I understood it at a at an elite level, but I was fascinated. I Everything I could learn about it made me that much more effective at that creative impulse,

**中文**  assembly language 编程。后来 BASIC 出现了。>> 这是 1970 年代中期。>> 对。所以我确实花了大量时间使用那台机器。我不会说自己对它的理解达到了 elite level，但我着迷于它。每多了解一点，我就更能实现那种 creative impulse：

### [00:13:38–00:14:07]

**EN**  imagination of a thing in the world, execution. There's a thing in the world. And that just has always felt great for me. And then when it came to college, you you chose University of Oregon, right? >> Well, University of Oregon kind of chose me because no none of the other places I applied accepted me. >> No way. >> Yep. And what did you study there? How did your college years go? >> Well, the first year was computer

**中文**  先想象现实中某个东西，然后执行，现实里就真的出现了某个东西。这种感觉一直让我非常满足。后来上大学时，你选择了 University of Oregon，对吗？>> 其实是 University of Oregon 选择了我，因为我申请的其他学校没有一个录取我。>> 不会吧。>> 真的。你在那里学什么？大学过得怎么样？>> 第一年学的是 computer

### [00:14:05–00:14:35]

**EN**  science. And >> so they already had a computer science. Yes. Yes. We had invented computer science by then. The first year was CS. and and I enjoyed it, but I I still wasn't a great programmer, but classes I breezed through. So, I was a little bit bored. So, before the start of my sophomore year, it was really hot and I was walking through the music building and there were some some flyers for uh

**中文**  science。>> 当时已经有 computer science 了？>> 有，我们那时已经发明 computer science 了。第一年我学 CS，也很喜欢。虽然还不是出色的 programmer，但课程对我毫不费力，所以有一点无聊。大二开学前，天气非常热。我走过 music building，看到一些招募

### [00:14:32–00:15:02]

**EN**  signing up for auditions. I thought, "Oh, I play guitar. Let me see what I can do." Next thing I knew, I was a music student. So, [laughter] >> wow. >> So, I'd been playing I started playing guitar when I was eight, kind of the end of the folk boom. Mrs. Card at a summer school class and uh uh there was a guitar laying around at our house. And

**中文**  audition 的传单。我想：“哦，我会弹 guitar，不如看看自己能做什么。”回过神来时，我已经成了一名 music student。>> 哇。>> 我从八岁开始弹 guitar，差不多赶上 folk boom 的尾声。在暑期班里，Card 太太教了我，而我们家正好放着一把 guitar。

### [00:14:57–00:15:26]

**EN**  so I I went and and again just obsessed. She'd show us something and I'd go home and I'd play it until my fingers bled and come in the next day and and everybody else was kind of where they were before, but I would have mastered some picking pattern, some strumming pattern because I just played it for three, four hours. So, I was very into music and in high school I was in the choir and which was the big deal. We

**中文**  于是我又一次痴迷进去。她教给我们一样东西，我回家后会一直练到手指流血；第二天回去时，其他人差不多还停在原来的程度，我却已经掌握了某个 picking pattern 或 strumming pattern，因为我连续练了三四个小时。所以我非常喜欢 music，高中时还参加了 choir，那在我们学校是件大事。我们

### [00:15:24–00:15:53]

**EN**  didn't have a lot of sports at our high school, but we certainly had music. It was kind of natural that I would study music. At the end of a year of music, I missed programming, so I went back to programming. Then I went back to music so I could do my senior recital. Then I went back to programming for a master's degree uh in another year and and uh finished that. And so and as I say, I

**中文**  高中体育不算丰富，但 music 确实很强。因此，学习 music 是件很自然的事。学了一年后，我又想念 programming，于是回去学 programming。然后我又回到 music，完成 senior recital；接着为了 master's degree 又回到 programming，用了一年完成学业。所以，就像我说的，我

### [00:15:51–00:16:21]

**EN**  just ended on the wrong year. Yeah. Because I I I checked I think it was eight years in total. uh that you spent at Oregon at University of Oregon. >> 5 years full-time and then I had a hard time finishing my master's thesis. >> Why did you have a hard time? What was your master's thesis on? >> It was a novel query language. Not surprisingly, I did not get along with the authority figures,

**中文**  只是最后落在了错误的年份。>> 是的，因为我查到你好像总共在 University of Oregon 待了八年。>> 全日制是五年，后来我的 master's thesis 很难收尾。>> 为什么会那么难？你的 master's thesis 是什么主题？>> 是一种新型 query language。不出意料，我和权威人物相处不好，

### [00:16:18–00:16:46]

**EN**  which is a a theme of my career. Yeah. Just had a hard time like checking off all the boxes and getting getting the whole thing finished. People said, "Oh, you're gonna be sorry if you I was just ready to quit." Just like, "Yeah, you know, this is all hoop jumping and has nothing to do with programming and I was making a good living as a programmer by then. So, oh, but you're going to regret it if you don't get your degree. If you don't finish, you're so close." And it's

**中文**  这也是我职业生涯反复出现的主题。对我来说，按要求勾完所有框、把整件事彻底完成很困难。别人说：“如果你不……你将来会后悔。”我那时已经准备退出，心想：“这些全是在跳 hoops，和 programming 毫无关系，而且当时我靠 programming 已经收入不错。”他们又说：“但你不拿到学位一定会后悔。你要是不完成，都已经这么接近了。”结果据我所知，它

### [00:16:43–00:17:11]

**EN**  never never helped me one bit as far as I can tell. So, but you completed it. >> I did complete it. It is important to complete things that in that in that process from vision of thing in the world to careful activity to the thing in the world there has to be some finishing even if I'm uh as the Reverend Jesse Jackson said uh I'm a tree shaker not a jelly maker and that's definitely

**中文**  从来没有帮过我哪怕一点。不过，你还是完成了。>> 对，我完成了。把事情完成确实很重要。在从“设想现实中的东西”，经过谨慎行动，再到“现实中的东西”这一过程中，必须有某种 finish。即使如 Reverend Jesse Jackson 所说，我是 tree shaker，不是 jelly maker，而这确实

### [00:17:09–00:17:38]

**EN**  me. Yes it's true true for your work as well also for software. Well, I keep I keep switching topics. That's uh that's something that'll probably come up as we go through the various things that I've worked on. >> What was your first job? It was while you were still finishing your degree the last few years. You started to work as a programmer, right? >> Correct. So during that uh graduate student year, a team from Tektronics came down to give a presentation about

**中文**  很像我。>> 对，这也很符合你的工作，包括 software。>> 好吧，我总是在切换主题。这一点大概会随着我们回顾你的各种工作不断出现。>> 你的第一份工作是什么？是在你还没完成学位的最后几年里开始做 programmer，对吗？>> 对。在我读研究生的那一年，Tektronix 的一个团队来做介绍，讲他们正在进行的

### [00:17:36–00:18:06]

**EN**  the programming environment work they were doing. Tektronics was uh started out as an electronic test equipment company in Portland. Did well in their little niche, but they they opened up an indust uh industrial lab as lots of companies at that point did to do basic research and part of that basic research was on uh programming environments. They came and gave a presentation.

**中文**  programming environment 工作。Tektronix 最初是 Portland 的一家 electronic test equipment 公司，在自己的小领域里做得不错。后来和当时很多公司一样，它开设了 industrial lab 做 basic research，其中一部分研究正是 programming environments。他们来做了演讲。

### [00:18:04–00:18:32]

**EN**  Uh, I asked them questions they couldn't answer and so they invited me out to dinner which led to an interview which led to a job. >> Tektronics was an interesting one because this is where you met Ward Kunigum, right? >> Yeah. So, uh, Tektronics had invested early in this crazy object-oriented programming language called Small Talk and was trying to make a commercial go

**中文**  我问了几个他们答不上来的问题，于是他们邀请我一起吃晚饭，后来变成 interview，再后来就成了一份工作。>> Tektronix 很有意思，因为你在那里遇到了 Ward Cunningham，对吗？>> 对。Tektronix 很早就投资了一个疯狂的 object-oriented programming language，叫 Smalltalk，并试图让它成为一项商业

### [00:18:30–00:18:59]

**EN**  of it. And I got there and the looked at the research that had been presented down at Oregon and it kind of played itself out. But this small talk thing, wow, that's cool. So I dove right into that. For those of us who have not touched small talk, might have heard of it. What made small talk so such a hit?

**中文**  业务。我到那里后，看了看之前在 Oregon 展示的研究，发现它已经差不多走到了头。但 Smalltalk 这个东西，哇，真酷，于是我一头扎了进去。对于我们这些没有用过 Smalltalk、可能只听过它名字的人，Smalltalk 为什么如此吸引人？

### [00:18:57–00:19:27]

**EN**  What pulled you in? What is the language like? There's a beautiful paper called the design principles behind small talk by Dan Engles and the opening line is small talk is computer support for the creative spirit in everyone which had two big themes. One was a language of programming, the small talk language, and another was a language of

**中文**  它是什么样的语言，是什么把你吸引进去？有一篇很美的论文叫《Design Principles Behind Smalltalk》，作者是 Dan Ingalls。开头第一句话是：“Smalltalk 是对每个人心中 creative spirit 的计算机支持。”它有两个主要主题：一个是 programming language，也就是 Smalltalk language；另一个是

### [00:19:23–00:19:52]

**EN**  interaction, overlapping windows, mice as pointing devices, panes, scroll bars, those were all things that uh were pioneered out of the user interface. Those things are kind of ordinary today. But Small Talk, the language, was built out of a very small number of primitives. There's really only three primitives in the language. Sending a message, assigning a variable,

**中文**  interaction language，包括 overlapping windows、作为 pointing device 的 mouse、panes、scroll bars；这些都是由那套 user interface 开创的。今天这些已经稀松平常。但 Smalltalk 这门语言由极少数 primitives 构成。整个语言其实只有三个 primitives：发送 message、给 variable 赋值，

### [00:19:50–00:20:17]

**EN**  and returning a value. And that's really all that there is. And so, um, maybe, uh, towards the end we can talk about my current projects, one of which is to build another a new Small Talk from scratch, just because now that's in within reach for anybody. But what what I found beautiful was that the language

**中文**  以及返回 value。真的就只有这些。也许在节目最后，我们可以谈谈我目前的 projects，其中一个就是从头构建一个新的 Smalltalk，因为现在这件事已经进入任何人都能做到的范围。不过，我当时觉得最美的地方，是这门语言

### [00:20:14–00:20:44]

**EN**  pushed its own mechanisms to the absolute limit. So everything is an object in small talk including numbers. You don't call a function that adds two integers. You send a message plus which is received by an integer and takes another object as a parameter. If that other object happens to be another integer, then you add them together. This leads to interesting things like

**中文**  把自己的机制推到了极限。在 Smalltalk 中，一切都是 object，包括数字。你不是调用一个 function 来把两个 integers 相加，而是发送一个 plus message，由某个 integer 接收，并把另一个 object 作为参数。如果另一个 object 恰好也是 integer，它们就会相加。这会带来一些有趣的结果，例如

### [00:20:41–00:21:09]

**EN**  there are no control structures defined. So no if then if then else is not part of the language. It's part of the library because there's a you send the message if true with a closure to true and it evaluates the closure. You send the message if true to false with a closure and it does nothing. Just returns null. Everything is built out of

**中文**  语言中根本没有定义 control structures。因此，if-then、if-then-else 都不是 language 的一部分，而是 library 的一部分：你把 `ifTrue` message 连同一个 closure 发给 true，它就执行 closure；把带 closure 的 `ifTrue` message 发给 false，它什么也不做，只返回 null。一切都由

### [00:21:07–00:21:36]

**EN**  the same kind of substrate. There there's very few special cases in small talk which means that sometimes you have to get clever to understand things like h how does how do how do conditionals work but also when the time comes for you to build abstractions you you don't have a bunch of special cases getting in your way. It is a different way to think especially looking at the modern programming languages that have a you

**中文**  同一种 substrate 构成。Smalltalk 中极少有 special cases。这意味着，有时为了理解 conditional 如何运作，你需要想得巧妙一点；但当你要构建 abstraction 时，也不会有一堆 special cases 挡路。这是一种不同的思考方式，尤其是看看现代 programming languages，它们

### [00:21:34–00:22:04]

**EN**  know the language comes with so many things built in whether even if we're thinking of like later languages like coughlin or swift or any of them they have things like control structures and reserved words why would you reserve words how rude the programming language should give me as much vocabulary as possible but I do notice that with small talk the people who have used it just get really really passionate about it

**中文**  随语言附带了太多内置内容。即便是后来的 Kotlin、Swift 或任何语言，也都有 control structures 和 reserved words 之类的东西。为什么要保留单词？太粗鲁了。Programming language 应该给我尽可能多的 vocabulary。不过我确实注意到，用过 Smalltalk 的人都会对它非常非常有热情，

### [00:22:01–00:22:30]

**EN**  and love using it and I understand doing my research that there was a time around that time for a few years where it started to become a lot more popular. Can you tell me why it got more popular and then what happened? It seems to have kind of fizzled out. Yeah, longer story. Some of which I was not privy to. Some of which comes down to business decisions. Objects were were hopping. We'd been programming with the previous

**中文**  并且热爱使用它。我在做资料研究时了解到，那段时期曾有几年，Smalltalk 开始变得流行得多。你能解释为什么它越来越流行，以及后来发生了什么吗？它似乎慢慢消失了。>> 这是个很长的故事，其中一些我并不知情，一些则归结为商业决策。Objects 当时正火。此前我们长期使用上一代

### [00:22:27–00:22:56]

**EN**  generation of languages cobalt forransc alascal for a long time and we were used to kind of the constraints that those provided and along came these objects and objects were going to change everything. People were really, really excited, but you know, objects were going to make programmers so much more productive that we wouldn't need nearly as many programmers. And in fact, >> really.

**中文**  语言，如 COBOL、Fortran、C、Pascal，也已经习惯了它们提供的种种约束。然后 objects 出现了，objects 将改变一切。人们非常非常兴奋，认为 objects 会让 programmers 的生产力大幅提升，以至于不再需要那么多 programmers。事实上……>> 真的吗？

### [00:22:54–00:23:22]

**EN**  >> Yeah. And you know, it's so much easier to program with objects that ordinary people can write their own programs. They don't have to. >> I've heard this recently. [laughter] >> Exactly. But seriously, like this was what they were saying where like inside of the industry, this was a thing. Use objects or small talk and do more with less programmers, cheaper

**中文**  >> 真的。还说用 objects 编程容易得多，普通人也能编写自己的 programs，不再需要……>> 这话我最近也听过。[笑] >> 正是如此。不过说真的，这就是当时行业内部在说的话：使用 objects 或 Smalltalk，用更少 programmers 做更多事、降低成本，

### [00:23:21–00:23:47]

**EN**  the works. >> Yeah. And and to a degree it was true. We would people would come in. So built a workstation, there weren't workstations. Tecttronics built a workstation and started to sell it with Small Talk bundled in it. and technical people but in different domains like chemical engineers or structural engineers or hydraulic engineers would

**中文**  以及诸如此类。>> 对，而且某种程度上确实如此。当时人们会来找我们。Tektronix 造了一台 workstation——此前还没有 workstations——并开始销售这台捆绑 Smalltalk 的机器。不同领域的技术人员，比如 chemical engineers、structural engineers 或 hydraulic engineers，会

### [00:23:45–00:24:12]

**EN**  come in and show us the systems they built with small talk and on the surface they looked fantastic the solve the and oh they were so happy so proud of their baby. You look under the underneath though at the code and it was just a horrible unmaintainable mess. But the fact that people could program the

**中文**  来向我们展示他们用 Smalltalk 构建的 systems。表面上看起来都很棒，解决了问题，他们也非常开心，为自己的孩子般的作品无比自豪。但如果翻到下面看代码，就会发现那是一团糟，糟糕且无法维护。不过，人们能够编写自己

### [00:24:09–00:24:38]

**EN**  programs that they wanted was a a significant step forward as opposed to I'm going to write a thousandpage requirements document and then wait 8 years and not get what I want which was the alternative that we were offering at the at the time. So it's not the first time that we're expanding because again if we jump to today similar things are happening. People in different domains

**中文**  想要的 programs，这本身就是显著的进步。另一种方案是：我先写一份一千页的 requirements document，然后等八年，最后还得不到自己想要的东西——那是我们当时提供的替代方式。所以，这并不是我们第一次扩大能编程的人群。再次跳到今天，类似的事情正在发生。不同领域的人

### [00:24:35–00:25:05]

**EN**  who could never dream of hiring a developer are now building their programs and the same thing is playing out which is if you look under the hood if you put your software engineering hat on and look under the hood of that mess. There's lots of corner cases that aren't covered. It's impossible to to modify and evolve. Yeah. But so far this story with small talk and Tektronics selling machines that come with small talk make everyone more productive. Clearly it pays for itself. That sounds great. But

**中文**  过去做梦也不敢想能雇一名 developer，如今却在构建自己的 programs。同样的过程也在重演：如果打开盖子，戴上 software engineering 的帽子去看下面那团东西，你会发现许多 corner cases 没有覆盖，而且它根本无法修改和演进。>> 对。但目前为止，这个关于 Smalltalk 以及 Tektronix 销售预装 Smalltalk 机器、让所有人提高生产力的故事，显然可以收回成本，听起来很棒。那么

### [00:25:02–00:25:31]

**EN**  then what happened? There were alternatives that were easier to understand. So for example, small talk syntax is uh funky. It's this keyword infix syntax. Along comes C++ which was originally called C with objects. And the syntax looks familiar even though it's the design philosophy is entirely the opposite of small talk.

**中文**  后来发生了什么？>> 出现了更容易理解的 alternatives。比如，Smalltalk syntax 很古怪，使用 keyword infix syntax。后来 C++ 出现了，最初叫 C with Objects。它的 syntax 看起来很熟悉，虽然其 design philosophy 与 Smalltalk 完全相反。

### [00:25:30–00:25:58]

**EN**  There's lots of mechanisms and they're very complicated. But just the fact that it was approachable that you could there was a compiler because we were used to having compilers in small talk. There'd be some code you'd edit it and now you're running with the new code. There's no compile and link step. It's of course it's just sitting right there. And if you're in the middle of, you know, you could be editing a some text and say, "This doesn't work the way I

**中文**  它有大量机制，而且非常复杂。但它很亲切，而且有 compiler——我们习惯了 compiler，而 Smalltalk 不是这样。在 Smalltalk 中，有一段 code，你编辑它，马上就在新 code 上运行，没有 compile 和 link 步骤。它当然就在那里。如果你正在编辑一些 text，心想：“它没有按我

### [00:25:57–00:26:25]

**EN**  want and hit control C and you get a debugger and go down the stack and you find the code that's not doing what you want and you fix it and you continue on your way and then you're you're writing again." That was that was that level of this is intended to be a personal computer. And part of that that sense of ownership was that you could see everything and you could change everything. Now it turns out if you have

**中文**  想要的方式工作。”然后按 Control-C，就会进入 debugger。你沿 stack 向下走，找到没有按预期工作的 code，修好它，继续执行，接着又回去写作。Smalltalk 就是达到了那种“这应当是一台 personal computer”的程度。那种 ownership 的一部分，是你能看到一切，也能改变一切。不过事实证明，如果

### [00:26:22–00:26:51]

**EN**  a hundred people working on the same program, you need to put the brakes on. Everybody can't be changing everything in incompatible ways at the same time. That just doesn't work. But in terms of this is my computer and I feel power because I understand it. I can have more ideas that I can then execute on to create things in the world. It worked great for

**中文**  有一百个人同时处理同一个 program，你就必须踩刹车。所有人不能同时以互不兼容的方式修改一切，那根本行不通。但就“这是我的 computer，我因为理解它而感到有力量；我能有更多想法，再执行这些想法，在现实中创造东西”而言，它的效果非常

### [00:26:49–00:27:18]

**EN**  that. Now while at Tektronics you work with War Kunagum who would later become the developer of the first ever wiki. Uh he had a huge influence or he helped create design patterns. He also helped with extreme programming. Can you tell me about what it was like working with him and and how you and him started to get into design patterns which back then didn't exist right this was something you you would invent later we needed to

**中文**  好。你在 Tektronix 工作时遇到了 Ward Cunningham，他后来开发了史上第一个 wiki。他影响巨大，也参与创造 design patterns，还帮助形成 Extreme Programming。你能讲讲与他共事是什么样，以及你们如何开始接触 design patterns 吗？当时它还不存在，是你们后来发明的东西。>> 我们需要

### [00:27:15–00:27:44]

**EN**  give training classes on small talk and Ward had written some small talk code we knew each other there were probably 60 people 80 people in the labs so we knew each other by side I had learned a bunch about small talk working on my own projects I was working on programming language for prologue because logic programming was also a big deal at that time. So I implemented I think three different virtual machines for prologue

**中文**  开设 Smalltalk training classes。Ward 写过一些 Smalltalk code，我们彼此认识。实验室里大概有 60 到 80 人，所以我们见过彼此。我通过自己的 projects 已经学了很多 Smalltalk。当时 logic programming 也很热门，我正在为 Prolog 开发 programming environment，还为 Prolog 实现了大概三种不同的 virtual machines，

### [00:27:40–00:28:08]

**EN**  including some nice animations showing how prologue's unification mechanism worked. >> And I guess for for those who don't know prologue is this declarative language is a very different way of thinking. No no variables is I I think >> no no it's got variables. No variables is FP box. Oh, this FP sorry, but it does have some some funky stuff. I I I used it a long time ago. >> It's fun.

**中文**  其中还有一些漂亮的 animations，用来展示 Prolog 的 unification mechanism 如何工作。>> 给不了解的人解释一下，Prolog 是一种 declarative language，是完全不同的思考方式。我想它没有 variables。>> 不，它有 variables。没有 variables 的是 FP。>> 哦，是 FP，抱歉。但它确实有一些古怪的地方。我很久以前用过。>> 很有趣。

### [00:28:06–00:28:33]

**EN**  >> Turns out to be difficult to write big programs in, but it's it's it's a good exercise because you there there aren't control like do this thing, then do this thing. It's it's more like a theorem prover. So, I was working on that. Ward had built this example code for the small talk class and he said I just want to run you

**中文**  >> 事实证明，用它写大型 programs 很困难，但它是一种很好的练习，因为里面没有“先做这件事，再做那件事”这样的 control，更像 theorem prover。我当时就在做这个。Ward 为 Smalltalk class 构建了一些 example code，他说：“我只是想带你过一遍这些

### [00:28:30–00:28:57]

**EN**  through this code. So I sat down next to him and he showed me the code for plumbing called plumbing and I suggested some some improvements. We gave the class together. I met some people who would later become lifelong friends in that class and then

**中文**  code。”于是我坐到他旁边，他给我展示了名为 Plumbing 的 plumbing code，我建议了几项改进。后来我们一起授课，我在那堂课遇到了一些日后成为终生好友的人。接着，

### [00:28:54–00:29:23]

**EN**  we just kind of fell into a rhythm of well, I wonder if we can make Small Talk do this because the universe of of what it meant for a computer to support programming was just exploding. We had the this high resolution screen which nobody had ever had before. we had this dynamic language uh including our own implementation of

**中文**  我们自然而然形成了一种节奏：不知道能不能让 Smalltalk 做这件事？当时，计算机能够如何支持 programming 的可能空间正在爆炸式扩张。我们有前所未有的 high-resolution screen，还有这种 dynamic language，包括我们自己的 implementation，

### [00:29:20–00:29:50]

**EN**  it so we could tweak it if we needed to and we just didn't know what was even possible. So uh at first and Ward was always a much better programmer than I was in terms of low-level technique. He also had a gift for design at a higher level and a gift as you see in the wiki of uh picking

**中文**  所以需要时甚至能修改它。我们根本不知道什么是可能的。最初，Ward 在 low-level technique 上一直是比我优秀得多的 programmer。他在更高层次的 design 上也有天赋，而且就像后来 wiki 所展示的，他还擅长选择

### [00:29:46–00:30:13]

**EN**  powerful top level goals and then making something that does that. But I was this 24 year old punk with attitude and he he didn't let me touch the keyboard for a while. I could watch him and then eventually I was like h those parentheses don't balance you need a period here and I was actually being

**中文**  有力量的 top-level goals，然后做出真正实现目标的东西。但我当时是个 24 岁、态度很冲的小混蛋。他有一段时间不让我碰 keyboard，我只能看着他。后来我开始说：“嗯，这里的 parentheses 没有配平，你这里需要一个 period。”于是我确实开始对他

### [00:30:10–00:30:39]

**EN**  useful to him even though and I was absorbing watching a master programmer at work but I wasn't really driving stuff eventually though I started you know understanding the low-level patterns and then building up to the next level and the next and then I would say why is this called this and not that pull out a thesaurus and look it up and find just the right word for things and then continue.

**中文**  有用。我一边观看 master programmer 工作，一边吸收，但还没有真正主导。最终，我开始理解 low-level patterns，再逐步上升到下一层、再下一层。我会问：“为什么这个叫这个，而不叫那个？”然后拿出 thesaurus 查找，为事物找到恰到好处的词，再继续。

### [00:30:37–00:31:06]

**EN**  And eventually I started making suggestions that he wouldn't understand right away. And so I would take the keyboard for a little while say something like this. Oh, I get it. I get it. And then he'd take the keyboard back. Over the course of a few months, we developed both a programming style where the keyboard was going back and forth where we were talking at multiple

**中文**  最终，我开始提出一些他无法立刻理解的建议。于是我会暂时接过 keyboard，说：“像这样。”他会说：“哦，我懂了，我懂了。”然后再把 keyboard 拿回去。几个月里，我们既形成了一种 keyboard 来回传递的 programming style，也会在多个

### [00:31:04–00:31:32]

**EN**  levels. You know, we talk about here's this code, why isn't it working? Is this the thing we should be working on at all? What programming tools would we need for this to be easy? What should the design be so this whole thing should work well? Should we even be doing this at all philosophically? We would bounce between all those levels

**中文**  层次上交谈。比如：这段 code 为什么不工作？我们真的应该做这件事吗？需要什么 programming tools，才能让它变容易？怎样 design 才能让整个东西运作良好？从 philosophy 上说，我们究竟是否应该做它？在实际 programming 过程中，我们会在所有这些层次

### [00:31:29–00:31:57]

**EN**  in the in the active programming. And we had a weekly cadence where Monday morning we'd have a coffee and we talk about of the list of things because we would then out of those conversations we'd come I wish we had a thing that did a thing. We would talk about that and then we'd say okay well let's go down and see how far we can get. And over and over, Tuesday, Wednesday, we would make

**中文**  之间来回切换。我们还有每周一次的 cadence：周一早上喝 coffee，讨论事项清单，因为那些对话常会产生“真希望有个东西能做某件事”的想法。我们会谈一谈，然后说：“好，下来看看能做到哪一步。”一次又一次，周二、周三我们会在手头工作上取得

### [00:31:55–00:32:24]

**EN**  a bunch of progress on what we were working on. Thursday, we'd be giving demos and refining it. And Friday, we'd write a tech report. So, there's this whole string of tech reports that we wrote over the course of maybe 6 or 12 months of really working together intensely. Even if one of those weeks failed, you know, we'd we'd have our coffee Monday, Tuesday, Wednesday. ah,

**中文**  大量进展；周四做 demos 并完善它；周五写一份 tech report。因此，在我们大概 6 或 12 个月紧密合作期间，留下了一整串 tech reports。即使某一周失败了，比如周一喝 coffee，周二、周三做下去，最后发现“啊，

### [00:32:21–00:32:50]

**EN**  this didn't work. We would know why it didn't work and what it was that we needed in order for that thing to be easy in the future. And that goes into the hopper for the next Monday's coffee. So, we developed a wide range we of programming tools and applications, some foundational stuff. So, we had a uh graphics editor called Hot Draw because

**中文**  这行不通”，我们也会知道它为什么行不通，以及未来需要什么才能让它变容易，然后把这些放进下周一 coffee 的备选池。因此，我们开发了种类广泛的 programming tools 和 applications，也有一些 foundational 工作。比如我们有一个 graphics editor，叫 HotDraw，因为

### [00:32:47–00:33:14]

**EN**  we we had this graphical interface and everybody had been used to text interfaces for so long, but now we had high-speed graphics. Oh my goodness. What can we do with this? So, we kept making graphical interfaces, but it was hard to make graphical interfaces. >> Yeah. I I have a photo of of early draw. >> Yes, absolutely. And and this reminds me when I look at hot draw this, you know, like these boxes and arrows, they do

**中文**  我们当时有 graphical interface，而所有人此前长久以来都习惯 text interfaces。现在有了 high-speed graphics，天啊，我们能用它做什么？于是我们不断构建 graphical interfaces，但制作 graphical interfaces 很困难。>> 对，我这里有一张早期 HotDraw 的照片。>> 没错。看着 HotDraw 里的这些 boxes 和 arrows，会

### [00:33:10–00:33:39]

**EN**  remind me later of things like UML and a bunch of just the not not the exact ideas, but but visualizing and of course later I think these days people don't use UML, but you still you just go to the whiteboard and you draw out boxes and arrows and how they connect. Sounds like so you did this back in in ' 87 or something like that. >> Correct. And because we had uh high

**中文**  让我想到后来 UML 一类的东西。不是说 ideas 完全相同，而是 visualizing；当然今天人们可能不用 UML，但仍会走到 whiteboard 前画 boxes、arrows，以及它们如何连接。听起来你们在 1987 年左右就做了这些。>> 没错。而且因为我们拥有在当时算 high-

### [00:33:37–00:34:06]

**EN**  performance for the time graphics primitives, the magic moment out of hot draw was we drew a series of rectangles kind of on top of each other. We selected every other one. We clicked on it and we started to move it back and forth and you could and because we could do maybe 10 hertz animation. It was it was smooth and you could just see half of the rectangles, you know, kind

**中文**  performance 的 graphics primitives，HotDraw 的 magic moment 是这样的：我们画了一系列差不多叠在一起的 rectangles，隔一个选中一个。点击后开始来回移动它们；因为能做到大约 10 hertz 的 animation，画面很流畅，你可以看到一半 rectangles 在另一半后面

### [00:34:05–00:34:34]

**EN**  of moving behind the other half and it was just this is so hot. We were just really excited about it. >> Oh, that that's that's why that's why you called it hot draw. That was the name because that was the reaction to being able to see this smooth animation. And before that, writing that kind of smooth animation was a bespoke thing and took a lot of work. And with this, you subclass figure and now you have something that works in

**中文**  来回移动。我们只觉得：这太 hot 了，真的非常兴奋。>> 哦，所以这就是你们把它叫 HotDraw 的原因。这个名字来自看到 smooth animation 时的反应。在此之前，写这种 smooth animation 是一项 bespoke 工作，需要投入很多。而有了它，你只要 subclass Figure，就能立刻拥有一个在

### [00:34:31–00:34:58]

**EN**  this 2 and 1 halfd world and away you go. Those figures though were meant to represent something in the interface. It wasn't just a rectangle. It was a processor, it was a generator, or it was a whatever. And then you click on it and you get these handles on the figure which each of which represents some way

**中文**  这个 2.5D 世界中工作的东西，可以直接继续。这些 figures 当然是为了代表 interface 中的某种东西，不只是 rectangle。它可以是 processor、generator 或任何事物。点击后，figure 上会出现 handles，每个 handle 都代表一种

### [00:34:54–00:35:22]

**EN**  to manipulate the state, not just of the graphic thing, but again of there was intended to be meaning behind it. So you'd have a handle that would raise and lower the temperature and another handle that would change the pressure or whatever whatever domain you were working in. And then you had it was a boxes and arrows uh model. So you'd have connections between things and the

**中文**  操作 state 的方式，不只是操作 graphical thing；它背后本来就应该有 meaning。比如一个 handle 可以升高或降低温度，另一个 handle 可以改变压力，具体取决于所处 domain。然后，这是一个 boxes-and-arrows model，所以不同事物之间会有 connections，而

### [00:35:21–00:35:50]

**EN**  connections again were intended to be semantic but would follow the figures around. And actually the the words figure handle drawing uh Ward came up with those. Mine were something pedestrian drawing object drawing handle. I I I didn't have good words for it. And this was where the thesaurus

**中文**  connections 同样带有 semantic 意义，同时会跟随 figures 移动。事实上，figure、handle、drawing 这些词都是 Ward 想出来的。我用的是一些很普通的词，比如 drawing object、drawing handle。我不擅长为它们命名，而这正是 thesaurus

### [00:35:46–00:36:15]

**EN**  came in was Ward would think about okay this is like figures in a book. You know we had an analogy there. there there was a metaphor to what we were doing. But in the computer world, you can you can have figures and figures and figures. >> And do I understand that you actually had a physical thesaurus like a book? >> Yeah. Yeah. An actual book with words in it. >> You would actually as a programmer reach

**中文**  发挥作用的地方。Ward 会想：好，这就像一本书里的 figures。我们在那里建立了 analogy，所做之事有一个 metaphor。但在 computer world 中，可以有 figures、figures、figures。>> 我理解得对吗？你们真的有一本纸质 thesaurus？>> 对，真正的一本书，里面印着 words。>> 你作为 programmer 真的会伸手

### [00:36:11–00:36:40]

**EN**  for this book with words and open up to find better words all the time. >> Was this just you doing it or did programmers in general have like people that you knew that they also have the satarist? We were on the far end of the obsessive scale for this. There were other people certainly who were fighting for the right words. But this just this just reminds me of how programming is is

**中文**  拿起这本有 words 的书，翻开它寻找更好的词，而且经常这么做。>> 只有你这么做，还是 programmers 通常都会这样？你认识的人也都有 thesaurus 吗？>> 在这件事的痴迷程度上，我们处在最极端的一端。当然也有其他人在努力寻找正确的 words。但这真的提醒我，programming

### [00:36:38–00:37:06]

**EN**  just more than just you know like writing code. how you need the skills of for example if you are well read you can probably write more expressive programs or if you're not well read having a thesaurus of of course you could do it online but I assume that by opening up the book and looking through and reading a lot of other you know words your vocabulary was will start to grow there therefore making you a better programmer

**中文**  远远不只是写 code。比如，你需要相关技能；如果读过很多书，可能就能写出表达力更强的 programs；如果阅读不多，thesaurus 也能帮忙。当然今天可以在线查，但我猜当你打开书、四处翻阅并看到很多其他 words 时，vocabulary 会逐渐增长，从而让你成为更好的 programmer，

### [00:37:04–00:37:34]

**EN**  or someone who can write a lot more understandable or maintainable part of the goal of programs is to communicate intent to other human beings and now to models as well which which is a much more open-ended problem. We understand a lot more about how to communicate to other human beings whether we apply that understanding or not. We don't understand at all how to communicate effectively to models and people are trying out all kinds of things which is

**中文**  或者至少写出更容易理解和维护的内容。>> Program 的一部分目标，就是向其他人传达 intent，现在还包括向 models 传达；这是一个开放程度高得多的问题。关于如何与人有效沟通，我们了解得多得多，只是不一定会运用这些知识。对于如何与 models 有效沟通，我们几乎完全不了解。人们正在尝试各种东西，而这

### [00:37:31–00:38:00]

**EN**  that's great. That's what you do. >> Yeah. And and then later Ward went on and he he got very much involved with design patterns. I can all now see with hot draw how you know the design patterns in the gang of four later you see boxes and arrows how I see some resemblance on being able to visualize objects on on a monitor. Yes, all of the pieces were working together for us. Um

**中文**  很好，这正是该做的。>> 对。后来 Ward 深度参与 design patterns。我现在从 HotDraw 中也能看出这种联系：后来 Gang of Four 的 design patterns 里有 boxes 和 arrows；我能看到在 monitor 上 visualizing objects 的相似之处。>> 没错，对我们而言，所有这些 pieces 都在共同作用。

### [00:37:57–00:38:24]

**EN**  the patterns work I had become interested in Christopher Alexander at the University of Oregon. I couldn't afford the timeless way of building. So I read it standing up in the bookstore uh over the course of several visits and Ward had also been exposed to Christopher Alexander and patterns. Alexander wanted to build

**中文**  关于 patterns 的工作，我在 University of Oregon 时就对 Christopher Alexander 产生了兴趣。我买不起《The Timeless Way of Building》，所以分几次去 bookstore，站在那里把它读完。Ward 也接触过 Christopher Alexander 和 patterns。Alexander 想要建造

### [00:38:22–00:38:50]

**EN**  wanted buildings with a certain spirit to them. He talks about it in kind of mystical terms, but that's okay. And he hypothesized that if people made their own decisions about the design of buildings that this spirit would exist in a way that didn't. When the the architect would say, "Oh, well, you know, tell me what you need in a building and then I will program myself

**中文**  带有某种 spirit 的建筑。他用有些神秘主义的方式谈论它，但没关系。他假设，如果人们亲自对 building design 作出决定，这种 spirit 就会存在；如果由 architect 说：“告诉我你需要什么样的建筑，然后我会让自己进入

### [00:38:48–00:39:15]

**EN**  to dream of your perfect space and then I'll tell you I'll bring to you the solution." The way he wanted to work was to empower people to make decisions within constraints. Like me designing a house, I'm going to have roofs that fall down and walls that don't match and whatever cuz I don't know. So, I need constraints, but I know more about my

**中文**  梦见你的完美空间的状态，再把 solution 带给你。”它就不会存在。他想采用的工作方式，是让人在 constraints 之内自己做决定。比如让我设计一栋房子，可能会造出会塌的 roof、对不齐的 walls 等，因为我不懂。所以我需要 constraints，但我更了解自己的

### [00:39:12–00:39:42]

**EN**  life. So, I should be the one making the decisions about, oh, family family dinners are really important. Oh, so so this is in the domain of architecture like like strictly physical buildings. >> Yes. >> Wow. So you got a lot of inspiration from this domain even though software is very much a virtual it's in our head right and or in the computer right. So the patterns are the constraints.

**中文**  生活。所以，应当由我来决定：“哦，家庭聚餐真的很重要。”>> 哦，所以这里说的 architecture 是严格意义上的 physical buildings。>> 对。>> 哇。虽然 software 完全是 virtual 的，存在于我们脑中或 computer 里，你却从这个领域获得了很多灵感。>> Patterns 就是 constraints。

### [00:39:39–00:40:09]

**EN**  You can't just make any decision. You make particular decisions at per particular times based on the constraints that come from the decisions you've already made and that creates constraints for the next decisions that you make. We wanted that for the users of programs taking this small talk personal computer ethos to the next level. And so

**中文**  你不能随意作出任何决定。你会根据此前决定带来的 constraints，在特定时刻作出特定决定，而它又会为下一步决定创造 constraints。我们希望 programs 的用户也能这样，把 Smalltalk 的 personal computer ethos 推进到下一层。于是，

### [00:40:05–00:40:34]

**EN**  we were consulting on a project that wasn't going well at Tektronics. some programmers were writing software for some test engineers and it just it wasn't going well. So Ward came up with the initial set of patterns that we would use for designing a user interface. Again, graphical interfaces were brand new. Nobody knew what to do. There were all kinds of crazy things

**中文**  我们为 Tektronix 一个进展不顺的 project 做 consulting。一些 programmers 正在为 test engineers 编写 software，但双方合作得不好。于是 Ward 提出了一套初始 patterns，用于设计 user interface。再次强调，graphical interfaces 当时刚刚出现，没有人知道该怎么做，各种疯狂的东西

### [00:40:32–00:41:02]

**EN**  coming out in in music school. We learned about the the evolution of musical notation. And when musical notation first came out, before then it was entirely an oral tradition, then musical notation was invented. And some of the most complicated music ever written was written in like 1200 or 1300, right after musical notation had been invented because nobody knew what the limits were. And then then they they

**中文**  不断涌现。我在 music school 学过 musical notation 的演化。Musical notation 诞生之前，music 完全依靠 oral tradition；记谱法刚发明后，大约 1200 或 1300 年，人类立刻写出过一些最复杂的 music，因为没人知道它的 limits。后来，人们才

### [00:40:59–00:41:29]

**EN**  settled down. It's like, okay, a four-part motet, that's fine. and we don't need to have 60 different instruments doing 60 different things all at the same time just cuz we can. Well, it was the same kind of way with these user interfaces. Nobody knew how to organize them. So we gave this initial set of patterns that Ward had come up with and we'd talked about Christopher Alexander and patterns and I

**中文**  平静下来：好吧，four-part motet 已经够了，我们不需要仅仅因为做得到，就让 60 种不同 instruments 同时演奏 60 件不同的事。User interfaces 当时也一样，没有人知道如何组织它们。因此，我们给出 Ward 提出的那套初始 patterns。我们讨论过 Christopher Alexander 和 patterns，而我

### [00:41:27–00:41:56]

**EN**  ran across a copy of notes on the synthesis of form at Powell's books in Portland and devoured that which is kind of the theoretical underpinning of patterns. We handed the patterns to the test engineers and said okay we're just going to start over. use these patterns to break your process down into windows

**中文**  又在 Portland 的 Powell's Books 偶然找到一本《Notes on the Synthesis of Form》，并一口气读完；那本书算是 patterns 的理论基础。我们把 patterns 交给 test engineers，说：“好，我们彻底重新开始。用这些 patterns，把你们的 process 拆成带

### [00:41:50–00:42:19]

**EN**  with pains. And we were careful to only allow them to do things that we knew that we could implement. So they couldn't come up with anything. The pains had to be lists or text or waveforms. The waveforms were special, but that's okay. We could do that. Each task that you had to do in this testing process would have its own window and so so

**中文**  panes 的 windows。”我们小心地只允许他们做我们知道能实现的东西，所以不能随意设计。Panes 必须是 lists、text 或 waveforms。Waveforms 比较特殊，但没关系，我们能做。Testing process 中的每项 task 都有自己的 window，因此

### [00:42:16–00:42:44]

**EN**  there was you know a four or five different patterns and they came up with an interface that was eminently implementable and they felt like they owned it and then the small talk programmers would look at that and go okay well how do I implement this how do I implement that so that was our first foray into patterns People get really fussed about

**中文**  大概有四五个不同 patterns。他们最后设计出一个非常容易实现的 interface，而且觉得它属于自己。接着 Smalltalk programmers 会看着它说：“好，这个怎么实现？那个怎么实现？”这就是我们第一次尝试 patterns。人们会非常纠结于

### [00:42:40–00:43:10]

**EN**  this transfer of responsibility. They want to think I I am the designer of interfaces and I worked hard at this and I want to ask you a bunch of questions and then I want to cogitate on that and then I'm going to bring you the solution and then you'll thank me and pat me on the head. Of course, that doesn't happen. Your understanding of somebody else's problem is bounded because you're not in the middle of it.

**中文**  责任的转移。他们想的是：“我是 interface designer，我为此努力学习。我想问你一大堆问题，再仔细思考，然后把 solution 带给你；接着你会感谢我、摸摸我的头。”但当然不是这样。你对他人问题的理解有边界，因为你不在问题中央。

### [00:43:08–00:43:38]

**EN**  You don't have the same skin in the game. If you're not semiconductor test engineer, you don't have as much skin in the game as somebody who is because they're going to have to be using this interface for a long time after you're gone. >> Yeah. There's also this concept of the flyby architect on teams who, you know, this very senior person has built a lot of stuff and the team is struggling. They call them and they call him or her in. This person comes, does some suggestions and kind of flies off. >> This is a seagull.

**中文**  你承担的利益风险不同。如果你不是 semiconductor test engineer，就不如真正从业者那么 skin in the game，因为你走后，他们还得长期使用这个 interface。>> 对。团队里还有 flyby architect 这个概念：某位非常资深、做过很多东西的人，看到团队陷入困境，被请过来。他或她提出一些建议，然后就飞走了。>> 这叫 seagull。

### [00:43:37–00:44:05]

**EN**  >> The seagull. The seagull. Because it should >> You fly in, you make a bunch of noise, you crap all over everything, and then you fly out. Yeah. >> Yeah. And you drop skin in the game. Yeah. And it's interesting because we've anyone who's worked in in teams of a certain size or or certain tenure, you see it happen. And it doesn't really matter how highly skilled that person is. There might be a few exceptions, but generally if you don't have skin in the game, you just make different decisions.

**中文**  >> Seagull，对。因为它……>> 你飞进来，制造一大堆噪音，到处拉屎，然后飞走。>> 对，而且没有 skin in the game。很有意思，任何在一定规模或有一定历史的团队工作过的人，大概都见过这种情况。那个人的能力有多高并不真正重要，或许有少数例外，但通常只要没有 skin in the game，作出的决定就会不同。

### [00:44:01–00:44:30]

**EN**  And then after Tektronics, you worked at Apple. I only realized this about you. What how did you get into Apple? This was in 1987. It's a very exciting time from from my research. How did you get in there? What did you do there? So, Small Talk was going up like a rocket at that time. Xerox had developed Small

**中文**  离开 Tektronix 后，你去了 Apple。我也是最近才知道这件事。你是怎么进入 Apple 的？那是 1987 年，从资料来看是非常令人兴奋的时期。你怎么进去，在那里做什么？>> Smalltalk 当时正在像 rocket 一样上升。Xerox 开发了 Small

### [00:44:25–00:44:55]

**EN**  Talk. It handed it to four I think companies to see can you also implement it or is this something special. So HP, Apple, Tektronics and blanking on the fourth one. HP really didn't do anything with it but Apple and Tektronics ran with it. So Apple had its own implementation of Small Talk and they wanted to not commercialize it in the

**中文**  talk，然后交给了我记得是四家公司，看看别人是否也能实现，还是只有 Xerox 能做到。包括 HP、Apple、Tektronix，第四家我记不起来了。HP 并没有真正做什么，但 Apple 和 Tektronix 都认真推进了。Apple 有自己的 Smalltalk implementation，他们希望将它 commercialize，不是

### [00:44:53–00:45:22]

**EN**  sense of selling it, but commercialize it in the sense of having something that this was right after the Mac had come out, something that you could use on a Mac. And so I I knew about that project. It was getting too big for my britches at Tektronics. I I learned a lot. You know, there's a there's a thing there's this kind of compression that happens

**中文**  指把它作为商品出售，而是做成实际可用的东西。当时 Mac 刚发布，所以他们想让它能在 Mac 上使用。我知道这个 project。与此同时，我在 Tektronix 已经有点自以为是，但确实学到了很多。人快速成长时会发生一种 compression：

### [00:45:19–00:45:48]

**EN**  when you're growing faster than the organization can recognize that you're growing, but also you're not growing as fast as you think you're growing. And eventually that gap between how people see you and how you see yourself and then somewhere in between is how you really are. Those if those gaps get too wide, you just have to move. So, I was ready to move on. So, I contacted Apple

**中文**  你的成长速度超过 organization 能意识到的速度，但同时又没有自己以为的那么快。最终，别人眼中的你与你眼中的自己之间会出现 gap，而真实的你大概在两者之间。如果这些 gaps 变得太大，你就只能离开。因此我已经准备好进入下一站，于是联系了 Apple。

### [00:45:45–00:46:13]

**EN**  and I I worked for about a year on the Small Talk project, which ended up going nowhere cuz it really didn't make sense. Small Talk could work in quite a small memory footprint, but the the only developer tools Apple really needed was a C compiler, Pascal compiler, >> because that that's what they built their software on mostly C. That's what they built their software on. That's

**中文**  我在 Smalltalk project 做了大约一年，最后它没有走向任何地方，因为确实不合理。Smalltalk 可以在很小的 memory footprint 中运行，但 Apple 真正需要的 developer tools 只有 C compiler 和 Pascal compiler。>> 因为他们的 software 主要就是用 C 构建。>> 对，他们自己的 software

### [00:46:11–00:46:39]

**EN**  what everybody else did. There there was a thriving third market uh for other developer tools. But the small talk wasn't going to do really do anything for anybody. Maybe school kids or something, but it wasn't it wasn't driving Apple sales. People who bought Apple computers typically didn't want to do small talk. Right. >> Correct. So So we talked about the

**中文**  如此，其他人也是如此。当时其他 developer tools 有蓬勃发展的 third-party market。但 Smalltalk 不会真正为谁带来价值，或许 school kids 除外；它无法推动 Apple 的销量。购买 Apple computers 的人通常并不想使用 Smalltalk。>> 对。>> 所以我们谈到了

### [00:46:37–00:47:05]

**EN**  decline of small talk. I'm sensing around this time it's if if you know like as personal computers started spreading it's it seems like it just remained the niche right no it was quite strong at that time it was growing fast um lots of people like relative to the previous year were using it a company

**中文**  Smalltalk 的衰落。我感觉大概就在那时，随着 personal computers 开始普及，它似乎只停留在 niche，对吗？>> 不，它当时非常强势，增长很快。与前一年相比，使用它的人很多。一家

### [00:47:00–00:47:30]

**EN**  had spun out of Xerox called Park Place uh which was selling small as a big ticket item for developers and this is before there was open-source out there. So the idea that you could set you could charge money for a language implementation was a lots of people were doing that kind of thing and this was running out of that same kind of playbook. >> Okay. So it was still doing it. It would

**中文**  名为 ParcPlace 的公司从 Xerox 分拆出来，把 Smalltalk 作为高价 developer 产品出售。当时还没有 open source，所以可以为一门 language implementation 收费的想法并不稀奇，很多人都这么做，它也沿用同一套玩法。>> 明白，所以 Smalltalk 当时仍然发展不错，只是

### [00:47:28–00:47:57]

**EN**  just didn't make sense for Apple's customer base. >> Correct. >> And and their hardware. >> Yeah. Also though at the same time a bunch of the ex Xerox people had come to Apple. So my friend Larry Tesler was there and by friend I mean bitter enemy who I respected a lot. Sometimes you know you there are people who just raised the hair on the back of your neck

**中文**  不适合 Apple 的 customer base。>> 对。>> 也不适合他们的 hardware。>> 对。不过与此同时，一批原 Xerox 员工来到 Apple。比如我的朋友 Larry Tesler——所谓朋友，是指我非常尊敬的死对头。有时就是会遇到一种人，让你后颈的毛竖起来，

### [00:47:54–00:48:23]

**EN**  and Larry Tesler was one of those to me and I don't know if even the feeling was reciprocated. He passed a few years ago, but so I never got a chance to talk to him, but I talked to him, you know, we would check in afterwards. Anyway, he was the head of the advanced technology group at Apple at that time. Alan K had moved to Apple and was working on a programming language for kids, another programming language for kids called

**中文**  Larry Tesler 对我就是这种人。我甚至不知道这种感觉是不是双向的。他几年前去世了，所以我再也没机会和他谈这件事，但我们当时确实会交谈，后来也会互相联系。总之，他当时是 Apple Advanced Technology Group 的负责人。Alan Kay 已经来到 Apple，正在开发另一门面向 kids 的 programming language，叫

### [00:48:21–00:48:51]

**EN**  Playground. Dan Dan Engles was there. So, a lot of the Xerox folks were were at Apple and I heard about Alen K's project and thought that was a dream of mine. Bite magazine had an article on small talk. I read about the development of Small Talk. The project started in like 71 and it was 1980 before they released anything at

**中文**  Playground。Dan Ingalls 也在那里。因此，很多 Xerox 的人都在 Apple。我听说 Alan Kay 的 project 后，觉得那就是自己的梦想。《Byte》magazine 曾刊登一篇关于 Smalltalk 的文章，我从中读到 Smalltalk 的发展过程：project 大约始于 1971 年，直到 1980 年才公开发布任何

### [00:48:48–00:49:18]

**EN**  all publicly. And just imagining working in that environment just seemed like heaven to me. So, I moved to the Alan K's playground project. Now, I was horribly ineffective. Uh, ended up getting fired from that job. >> No way. >> Yeah. Oh, sure. >> As as a programmer, you being inefficient. What happened? >> I wanted to do my own thing. And this

**中文**  东西。仅仅想象能在那种 environment 中工作，对我就像天堂。所以我转去了 Alan Kay 的 Playground project。可我在那里极其低效，最终还被解雇了。>> 不会吧。>> 当然是真的。>> 你作为 programmer 居然会低效。发生了什么？>> 我只想做自己的东西，而这

### [00:49:16–00:49:46]

**EN**  was still, you know, I'm still in this punk mode where I'd listen to somebody else's ideas and I go, "Nah, I don't think so. I have a better idea." And if you're working by yourself, that's okay. But if you're working in a team, that's not okay. So, uh, uh, the it came to a head. I was the program chair for the oops conference, which we probably should

**中文**  时我仍处于 punk mode：听完别人的 ideas 会说：“不，我不同意，我有更好的想法。”如果独自工作，这没问题；但在 team 中就不行。最后矛盾爆发了。我当时还是 OOPSLA conference 的 program chair，这件事也许早该

### [00:49:43–00:50:12]

**EN**  have mentioned earlier. Um there was this conference and it was the hottest conference and everybody who was ever anybody was there and it was growing fast and I was involved in it kind of stumbled into it but I was in ' 89 I was the program chair for oops right for oopsla and I spent a month just reading papers while uh ignoring my duties to

**中文**  提到。那是当时最热门的 conference，所有重要人物都会参加，而且增长很快。我有点偶然地参与其中，1989 年担任 OOPSLA 的 program chair。为了读 papers，我整整一个月忽略了自己在

### [00:50:09–00:50:37]

**EN**  the playground project and that was kind of the final straw. okay, you're you're not helping us, so you you need to move on. And then the conference happened and my second child was busy not being born. So I didn't even get to attend the conference, but I had heard about the playground project. So I moved to the playground project and and did a

**中文**  Playground project 的职责，这成了最后一根稻草。对方说：“好吧，你没有在帮助我们，所以你得离开。”后来 conference 举办时，我的第二个孩子又迟迟不肯出生，导致我甚至没能参加。但我之前听说过 Playground project，于是转去那里，并

### [00:50:34–00:51:04]

**EN**  little bit to help build this programming language for kids. That was the next thing beyond object-oriented programming. You would you would call it today you'd call it reactive programming. So you didn't you couldn't send a message. You could only raise some condition that some other object would would be waiting on. So

**中文**  为构建这门 kids programming language 做了一点贡献。它是 object-oriented programming 之后的下一步；用今天的话说，你会称它为 reactive programming。你不能直接发送 message，只能触发某种 condition，让另一个 object 等待它。因此，

### [00:51:00–00:51:29]

**EN**  it's like pub sub but that was the only control mechanism. And then I wanted to ask you about this this was around this time CRC cards. What are CRC cards? I know they stand for class responsibility collaborator cards but what were they and how did you come up with them? You have this these imperative programs and you have a flowchart which represents accurately if kind of verbosely the

**中文**  它很像 pub/sub，只不过这是唯一的 control mechanism。接着我想问问差不多那时出现的 CRC cards。CRC cards 是什么？我知道它代表 Class–Responsibility–Collaborator cards，但它们究竟是什么，你是怎么想到的？>> 对 imperative programs，你可以用 flowchart 相当准确、只是有些冗长地表示

### [00:51:26–00:51:56]

**EN**  control flow in an imperative program. Now we have these objects and you send messages which are polymorphic. So you don't know exactly what code's going to be invoked when you send a message. And people were like, well, how do you even visualize, internalize? For me, I'm um I have kinesesthetic synesthesia. So, I can feel

**中文**  control flow。现在有了 objects，你发送的 messages 是 polymorphic 的，因此发送 message 时并不知道究竟哪段 code 会被调用。人们会问：那要如何 visualise、如何 internalize？对我来说，我有 kinesthetic synesthesia。如果看着一些 code，我能在身体里感受到

### [00:51:53–00:52:21]

**EN**  in my body if I'm looking at some code, I can feel in my body. It wants to go this way. It's Yeah. which is, you know, I've I don't know if I've met anybody else who describes their experience of programming in the same kind of way, but there we go. How do you get a sense of however you internalize this of

**中文**  它想往哪个方向走。是的，我不知道自己是否遇到过其他人也这样描述 programming experience，但就是如此。那么，当你不能简单地说“先执行这一行，再执行那一行”，因为一旦发送 message 就不知道接下来会发生什么时，无论你以哪种方式 internalize program，又该如何形成

### [00:52:17–00:52:45]

**EN**  what's going on in this program where you you can't just say we execute this line and then we execute that line because as soon as we send a message, we don't know what's going to happen. So Ward came up with the idea to write down on cards, index cards, here's what's going on. Because we would we would talk this way all the time. So you

**中文**  对它运作方式的感觉？Ward 提出，可以在 index cards 上写下正在发生的事，因为我们平时一直会这样交谈。比如，

### [00:52:43–00:53:12]

**EN**  know, we've got a we have a rectangle and it asks the renderer to do the thing and then that goes into the pipeline which dah. So we would talk with our hands a lot. So he said, "Well, why don't we write these things down on cards?" So a a big challenge in object-oriented programming is dividing the responsibilities because you're moving the computation

**中文**  我们有一个 rectangle，它请求 renderer 做某件事，然后进入 pipeline，诸如此类。我们说话时经常会动手比画。于是他说：“为什么不把这些东西写在 cards 上？”Object-oriented programming 的一个重大挑战是如何分配 responsibilities，因为你要把 computation

### [00:53:09–00:53:39]

**EN**  to where the data is. Saying, "Well, this object does this and that object does that is a really critical decision because you want to you want the computation near to the data so that there's less coupling between them." which is a lesson that I I think uh kind of got lost in the noise. That's the fundamental design move in ob in designing object-oriented programs and I think I stand behind that. So so have the data be close to where it's used where the computation will happen >> uh backwards

**中文**  移动到 data 所在之处。决定“这个 object 做这件事，那个 object 做那件事”极其关键，因为 computation 应靠近 data，这样两者之间的 coupling 更少。我认为这条 lesson 后来有点淹没在噪音里，但它是设计 object-oriented programs 时最根本的 design move，我现在仍然认同。所以，是让 data 靠近其使用位置，也就是 computation 发生处？>> 反了。

### [00:53:38–00:54:07]

**EN**  >> backwards >> have have the computation move to where the data already lives >> have the computation move to where the data is. So like if you have a rich object with the lots of data inside of it for example, you want the computations to move there. So you want the like objects to invoke and just just get the data and do whatever computation they need to. >> If I'm going to operate on stuff that's on the inside of a rectangle like area.

**中文**  >> 反了？>> 应该让 computation 移动到 data 已经存在的地方。>> 让 computation 移动到 data 所在之处。比如你有一个内部包含大量 data 的 rich object，就希望 computation 移到那里；让 objects 去调用它，只获取 data，并执行所需 computation。>> 如果我要操作 rectangle 内部的内容，比如 area。

### [00:54:03–00:54:29]

**EN**  >> Yeah. Do I have height time width scattered all over the universe or do I have an area inside the rectangle that does height and width at the limit? Now I don't care that the rectangle has height and width that's hidden from the rest of the world. Like I can I can represent the rang rectangle with two corners

**中文**  >> 对。我是把 height 乘 width 的计算散落在整个 universe，还是在 rectangle 内提供一个 area，用它计算 height 乘 width？做到极致后，我甚至不关心 rectangle 是否真的存有 height 和 width；那对外部世界是隐藏的。我可以用两个 corners

### [00:54:26–00:54:55]

**EN**  >> or I can represent the rectangle as a top left a height and a width. Mhm. >> To the rest of the world, it doesn't matter as long as they both respond to area. So now I can come up with another representation and another representation and the rest of the world doesn't have to care if I've moved the computation where the data lives. >> Yes. And that means you can have looser coupling. >> Correct. Understood. It's a good lesson.

**中文**  >> 表示 rectangle，也可以用 top-left、height 和 width 表示。>> 嗯。>> 对外部世界来说，只要它们都响应 area，就没有区别。于是我可以采用一种又一种新的 representation，而只要 computation 已移到 data 所在之处，外界就不需要在意。>> 对，这意味着 coupling 可以更松。>> 正确。>> 明白了，这是个很好的 lesson。

### [00:54:54–00:55:24]

**EN**  >> Yeah. Yeah. Yeah. >> And and even today cuz everything that we do is under the hood. Almost everything we do is object. A lot of it is object-oriented. And I don't think we think about these. >> Yeah, I see a lot of criticism of programs written in object-oriented languages that aren't criticisms of object-oriented programming or design. So after Apple, you moved to a company called Maspar. And the thing that I notice here is unit

**中文**  >> 对。>> 而且今天仍然适用，因为我们所做的一切在底层几乎都是 objects，很多都是 object-oriented，但我觉得我们并不常思考这些。>> 我看到很多对 object-oriented languages 所写 programs 的批评，其实批评的并不是 object-oriented programming 或 design。离开 Apple 后，你去了名为 MasPar 的公司。我在这段经历中注意到的是 unit

### [00:55:22–00:55:51]

**EN**  testing. This was the place where, as I understand, you came up with something called SUnit. While I was at Tektronics, uh, I got interested in testing. At that point, testing was a sociological divide. If you got A's and B's in computer science school, you got to program. And if you got C's, you had to be a tester. So, it really was like a status. I'm not going to test. I'm I'm one of these guys, not one of those. But

**中文**  testing。据我了解，SUnit 就是在那里出现的。我在 Tektronix 时开始对 testing 感兴趣。当时 testing 有一条社会身份分界线：computer science 学校里拿 A 和 B 的人可以做 programming，拿 C 的人就得做 tester。因此，它确实是一种 status：“我不做 testing，我是这边的人，不是那边的人。”但是

### [00:55:49–00:56:18]

**EN**  I got interested in how would you automatically test programs? How would you get a sense of confidence in what you were doing? So, I tend to be an anxious person and the more complicated my programs were, the more I had to be anxious about. The more experience I had with what kind of bugs could possibly exist, the more anxious I got. And I thought there was just some way to kind of quell this without pills. That would be great. I tried out a bunch of

**中文**  我开始对如何自动测试 programs、如何对所做之事建立 confidence 感兴趣。我本来就容易焦虑，program 越复杂，值得焦虑的事情就越多；越有经验、越知道可能存在什么 bugs，我就越焦虑。我想，如果有什么不用吃药就能压下这种焦虑的方法，那就太好了。我试过许多

### [00:56:16–00:56:45]

**EN**  different approaches to writing automated tests. At that point in addition to this this uh status divide there was a tool divide. You had testing tools which would have their own kind of language and some way to connect with the program that was under test. So I tried this and that and the other thing. It was actually after Maspar that uh I

**中文**  不同的 automated tests 写法。当时除了 status divide，还有 tool divide：testing tools 有自己的 language，再以某种方式连接受测 program。我尝试了这个、那个和其他方案。实际上，应该是在离开 MasPar 之后，不过

### [00:56:42–00:57:11]

**EN**  think is all ancient history. So we'd have to go you know dig through the archaeological layers. I started consulting and I was going to tell a client that they should write tests. I was going to fly out to Chicago the next day, but I didn't have any way for them to write tests. So, out of these five or six experiments that I'd done, I synthesized test case, test suite, and test result. That was the it was like three classes

**中文**  这一切都属于 ancient history，得挖开考古层才能确认。我开始做 consulting，准备告诉一位 client 应该写 tests。我第二天就要飞去 Chicago，却还没有任何工具能让他们编写 tests。于是我把之前做过的五六个 experiments 综合起来，形成 TestCase、TestSuite 和 TestResult，一共大约三个 classes

### [00:57:08–00:57:35]

**EN**  and 12 methods. But it was a framework where you could write tests that would execute isolated from each other fully automatic and give you a rollup of the results of it. >> So this was pretty much a unit testing framework for small talk. >> It was written in yeah the first version was written in small talk. So, Maspar was a Silicon Valley startup

**中文**  和 12 个 methods。但它是一个 framework：可以编写彼此隔离执行、完全自动化的 tests，并获得汇总结果。>> 所以，这基本上就是 Smalltalk 的 unit testing framework。>> 对，第一版是用 Smalltalk 写的。MasPar 则是 Silicon Valley 的 venture-funded startup，

### [00:57:32–00:58:00]

**EN**  venturefunded intended to build an entire new architecture which was uh SIMDI single instruction multiple data. So, we would have a Taurus of process processing elements uh up to 16,000. So, you have 16,000 and they're connected in a toridal grid. So you could talk to the the processing

**中文**  目标是构建一种全新 architecture，即 SIMD——single instruction, multiple data。我们会有一个由 processing elements 组成的 torus，最多达到 16,000 个。也就是说，16,000 个 processing elements 连接在 toroidal grid 上，可以与左、右、上、下及对角方向的

### [00:57:58–00:58:27]

**EN**  elements in your left, right, up, down, and diagonally. And it looks very much like the Nvidia architecture now, but this was way back when, and it was just too early. So three years of that building programming environments for high performance computing. So the intention was to get the kind of performance you'd get out of a cray at

**中文**  processing elements 通信。它看起来很像今天的 NVIDIA architecture，但那是在很久以前，实在太早了。我在那里做了三年，为 high-performance computing 构建 programming environments。目标是获得当时 Cray 级别的 performance，

### [00:58:23–00:58:52]

**EN**  that time um but for a tenth the cost and they needed a programming environment. So we built a programming environment in Small Talk that did some really cool stuff. You could you could single step a forran program and build a performance profile at the same time. >> No way. So you built a runtime that allowed you to do in in small talk to interpret for example program programs

**中文**  但成本只要十分之一，而它需要 programming environment。于是我们用 Smalltalk 构建了一个很酷的 programming environment。你可以对 Fortran program single-step，同时建立 performance profile。>> 不会吧。所以你们构建了一个 runtime，允许你在 Smalltalk 中解释执行例如 Fortran programs。

### [00:58:51–00:59:20]

**EN**  and run them. >> No the we had a a standard compiler an optimizing compiler but because we had we controlled the operating system we could build really low-level probes to collect performance profiling data. So we could get line level profiles for these four trend programs running on 16,000 processors and great gobs of data.

**中文**  并运行它们？>> 不，我们使用标准的 optimizing compiler；不过由于 control 了 operating system，我们可以构建非常 low-level 的 probes 来收集 performance profiling data。因此，运行在 16,000 个 processors 上的 Fortran programs 可以获得 line-level profiles，以及海量 data。

### [00:59:18–00:59:48]

**EN**  >> That's awesome. Like when you're going from not just like you're going to lower level, you know, like building infrastructure that runs programs, but then I want to go back to to SUnit. So the concept of of SUnit, the the these concept you put together a test case. What was it? the test case, >> test suite and test result. >> This really became sticky because then there was JUnit which you later created

**中文**  >> 太棒了。你不只是往 lower level 走，比如构建能运行 programs 的 infrastructure。不过我想回到 SUnit。SUnit 的概念是你把 TestCase……还有什么？>> TestCase、TestSuite 和 TestResult。>> 这套东西真正流传了下来。后来你和 Erich Gamma 创建 JUnit，

### [00:59:44–01:00:12]

**EN**  with with Eric Gama and there's a whole suite uh nunit for uh I think that was fornet xunit.net all of them took over some of these ideas and a lot of modern unit testing frameworks are built on some of these ideas. Why do you think it was so sticky and why do you think it wasn't created

**中文**  接着出现了整个系列，比如我想用于 .NET 的 NUnit、xUnit.net 等。它们都继承了其中一些 ideas，许多现代 unit testing frameworks 也建立在这些 ideas 上。你觉得它为什么如此有生命力？为什么此前没人创造出来？

### [01:00:08–01:00:36]

**EN**  beforehand? So beforehand because of this social divide between programmers and testers. There was a lot of incentive for the testers to have their own language. This is my tool. I know how to run it. I'm going to run it. And it was very adversarial at that time too and kind of patronizing like you're a programmer. you can't be trusted to

**中文**  >> 此前 programmers 与 testers 之间存在社会分界，因此 testers 很有动力拥有自己的 language：“这是我的 tool，我知道怎么运行，我来运行。”而且当时双方关系非常 adversarial，甚至有点居高临下：“你是 programmer，不能信任你来

### [01:00:34–01:01:02]

**EN**  test, you know, you'll just say it works fine. I'm going to be the adult supervision, you know, and sometime and sometimes the programmers really did act that way. So I, you know, hard to hard to argue with, but I think that encouraged this idea that a testing tool is its own its own world. the inspired decision to use the same language

**中文**  test，你只会说它运行得很好。我得来做 adult supervision。”有时 programmers 确实会那样表现，所以也很难反驳。但我认为，这鼓励了“testing tool 是一个独立世界”的观念。而使用与被测 program 相同的 language

### [01:01:00–01:01:29]

**EN**  to test as you're testing. It was a natural decision because I was in small talk and you should be able to represent anything in small talk. So, you know, and I was just used to how do I represent this as objects. So, sounds like small talk as a language has been early to a lot of things. I sense a lot of innovation coming from small talk because it was one of the first languages that did have objects but it was a very simple language. So you needed to build a lot of things which

**中文**  来写 tests，是个有灵感的决定。它又很自然，因为我身处 Smalltalk，而你应该能在 Smalltalk 中表示任何东西。我只是习惯思考如何把它表示成 objects。>> 听起来 Smalltalk 这门语言在很多事情上都非常早。我能感觉到很多 innovation 来自 Smalltalk，因为它是最早拥有 objects 的语言之一，同时又非常简单，所以你必须构建许多东西，这

### [01:01:27–01:01:56]

**EN**  then led to representing a lot of things to talking about them design patterns and now also you know being able to write your test environment if if you or being forced to do so if if you wanted to do it. Well there was an ethos that went along with small talk. So if you didn't like the tools, if you're running the debugger and the debugger doesn't have some feature that you really need right now, you just hop on the stack,

**中文**  又促使你表示许多事物、讨论它们、形成 design patterns；现在还包括编写自己的 test environment——如果想做 testing，你需要甚至被迫自己完成。>> Smalltalk 同时带有一种 ethos。如果不喜欢现有 tools，比如正在 debugger 中运行，却发现 debugger 缺少此刻真正需要的功能，你只要跳到 stack 上，

### [01:01:54–01:02:23]

**EN**  implement the feature that you want, and then get back to whatever it was you were doing. That was just a natural thing because there was never this huge gap. You know, imagine today, uh, I'm using a C compiler and I realize, oh, I wish C had this new feature. We're embarking on a multi-year project to go and like the huge barrier to entry to go to the next level. And in small talk by

**中文**  实现想要的功能，然后回到刚才的工作。这是一件很自然的事，因为两层之间从来没有巨大的 gap。想象今天，我正在使用 C compiler，突然发现：“哦，希望 C 有这个新 feature。”这意味着要启动一个 multi-year project，跨过进入下一层的巨大门槛。而 Smalltalk 通过

### [01:02:21–01:02:49]

**EN**  design, for example, you have pop-up menus and they you can see all of the options right there. That's a deliberate pedagogical choice. It says, "Okay, well, you know about cut and paste, but you don't know the other things that you can do right here." So the menu doesn't just give you cut and paste. It gives you all the things that you can do as a way to encourage you to learn about them

**中文**  design 避免了它。比如，系统有 pop-up menus，你可以直接看到所有 options。这是一项刻意的 pedagogical choice，意思是：“好，你知道 cut 和 paste，但还不知道这里能做的其他事情。”所以 menu 不只提供 cut 和 paste，而是列出能做的一切，以鼓励你了解它们。

### [01:02:46–01:03:13]

**EN**  because eventually you're going to I see this format item here and I well what does that do? So that was very much part of the small talk ethos that this system would teach you as you kept using it. So yeah it was very natural to build the testing tool in the language. And of course you have to kind of bastardize the language a bit here. Here I've got this this class for some test case and I

**中文**  因为你最终会看到这里有个 Format item，然后想：“这是做什么的？”Smalltalk ethos 中很重要的一点，就是 system 会随着使用不断教你。所以，用同一门 language 构建 testing tool 非常自然。当然，你也得稍微扭曲一下 language。这里有某个 TestCase 的 class，

### [01:03:11–01:03:39]

**EN**  have a method which is one of the test cases and it starts with t is kind of magic you know uh this is getting squidgy and then when you execute it you create one of these objects you send it setup because you don't you know may have to build some stuff and then you send it the test t something or other and it executes that one thing and then

**中文**  还有一个代表其中某个 test case 的 method，它以 `test` 开头，多少带点 magic，事情开始变得不那么干净。执行时，你创建这样一个 object，向它发送 `setUp`，因为可能需要先构建一些东西；然后向它发送 `testSomething`，它执行这一个 test，接着

### [01:03:36–01:04:06]

**EN**  you Then assuming well then regardless you run the tear down from that. So it's not it looks like the the syntax is the same as the language. The the representation of the tests you kind of borrow from the representation of just any kind of code and then you interpret it yourself. So it's it it it it it's in the language

**中文**  无论结果如何，都运行 `tearDown`。因此，它的 syntax 看起来和 language 相同；tests 的 representation 借用了任何普通 code 的 representation，再由你自己解释执行。所以，它既在 language 之内，同时又不真的属于 language。

### [01:04:04–01:04:32]

**EN**  but it's not really in the language at the same time. But people don't think about that. They just think I subclass this I give a method with the annotation of test or with starts with tst and then it just starts working and that's fine. I want to jump to a few years later from to 1996 you started to work on a project at Chrysler and this is where you met Martin Fowler. What was this project?

**中文**  不过人们不会想这些，只会觉得：“我 subclass 这个 class，提供一个带 `test` annotation 或以 `test` 开头的 method，然后它就能工作。”这已经足够。>> 我想跳到几年后的 1996 年。你开始参与 Chrysler 的一个 project，也是在这里遇到了 Martin Fowler。这个 project 是什么？

### [01:04:30–01:04:59]

**EN**  I'd actually met Martin Fowler a little bit before that. So as early as the first oops conferences, the question of how do we manage projects with objects differently than we manage projects with the previous generation of tools. The previous generation of tools definitely gave you a many fewer options for change. You'd still have to change code, but it was just a lot harder compared to

**中文**  >> 其实更早一点我就认识 Martin Fowler。最初几届 OOPSLA conferences 就提出过这样的问题：管理 objects project 的方式，应如何区别于管理上一代 tools project？上一代 tools 当然让 change 的选择少得多，仍然需要改 code，但与 object-oriented programs 相比困难得多。

### [01:04:56–01:05:23]

**EN**  working with object-oriented programs. So what is the methodology? We had we had the structured analysis, structured design. What is the methodology for um for objects and how should it be different? That was the million-dollar question at the original 86 oops law. By the time 9495 rolled around, we were starting to get a

**中文**  那么 methodology 应该是什么？我们曾有 structured analysis、structured design。面向 objects 的 methodology 又是什么，它应该有何不同？这是 1986 年首届 OOPSLA 的 million-dollar question。到 1994、1995 年左右，我们开始大致知道它会是什么样。那时可能已经有

### [01:05:20–01:05:49]

**EN**  clue what that would look like. There were I think uh the rational and unified process or the the things that would go into the rational unified process already existed by that time which was >> Brady Buch was involved in that. >> Brady BC Evar uh James Rumba Ivar Yakabson. So people were coming up with some kinds of answers. Ward had come up

**中文**  Rational Unified Process，或构成它的那些要素。>> Grady Booch 参与了。>> Grady Booch、Ivar……James Rumbaugh、Ivar Jacobson。所以，人们开始提出不同答案。Ward 也提出了自己的答案，

### [01:05:47–01:06:16]

**EN**  with his own uh answer called episodes written into as a pattern language because we were like you know I don't have a big bag of tricks I have to keep using them over again and the same is true turns out of of everybody. So you can find that episodes on uh Ward's C2 site. It's really interesting to compare that because I I borrowed heavily from that. I borrowed

**中文**  叫 Episodes，以 pattern language 写成。因为我们的想法是：“我没有一大袋 tricks，只能反复使用手中那几招。”事实证明每个人都一样。你可以在 Ward 的 C2 site 找到 Episodes。把它拿来对照很有意思，因为我大量借鉴了它，也借鉴了

### [01:06:13–01:06:41]

**EN**  from everything else that I had seen and experienced. But at that point, I'd been when did I leave Masspar? 92. So I had been an independent consultant for four years at that point. And there were a couple of workshops uh held in Snowbird. I don't know why we picked Snowbird, but somebody else did

**中文**  我看到和经历过的其他一切。那时，我什么时候离开 MasPar？1992 年。所以到那时，我已经独立 consulting 四年。Snowbird 还举办过几次讨论 methodology question 的 workshops。我不知道为何选 Snowbird，是别人选的。

### [01:06:38–01:07:05]

**EN**  uh about this methodology question. Um, and I met Martin at the first one of those that I attended. And his introduction was, it's just the classic Martin introduction. He said, "I am the only person here I've never heard of." And he was already doing some some great work on uh analysis patterns uh at the time, which I knew about. So, I was excited to to meet him. Get to

**中文**  我在第一次参加的 workshop 遇到 Martin。他的自我介绍是很典型的 Martin 风格，说：“我是这里唯一一个我自己从未听说过的人。”他那时已在 analysis patterns 上做出很好的工作，我也知道，所以很高兴见到他。后来便来到

### [01:07:03–01:07:30]

**EN**  this Chrysler project. The project's important for Y2K, but it's not clear that it's going to be finished in time. Martin was already there as a consultant. Uh I had met Ron Jeff doing small talky stuff. I don't remember exactly how we met, but long story short, I came in as I know lead consultant or something

**中文**  Chrysler project。这个 project 对 Y2K 很重要，但不确定能否按时完成。Martin 已经作为 consultant 在那里。我做 Smalltalk 相关工作时认识了 Ron Jeffries，具体怎么认识的记不清了。长话短说，我以 lead consultant 或类似身份加入，

### [01:07:28–01:07:55]

**EN**  restarting that project in a very different development style. And for that style, I took everything that I knew that was useful and cranked it up to 11 and discarded all the stuff that I couldn't prove we needed. So that was the value system behind this new style of development. Uh Martin and

**中文**  以一种非常不同的 development style 重启 project。对于这种 style，我把自己知道有用的一切全部调到 11，并丢弃所有无法证明为必要的东西。这就是新 development style 背后的 value system。Martin 和

### [01:07:53–01:08:21]

**EN**  I would visit there periodically. Ron was there full-time. I was originally brought in as a performance consultant because I knew a lot about small talk performance and they were using a database called gemstone which it was small talk objects small talk semantics but coupled with persistence transactions indexes all that database good stuff but it wasn't going fast enough so I said well where's the test

**中文**  我会定期去那里，Ron 则全职在场。我最初是作为 performance consultant 被请来，因为很了解 Smalltalk performance。他们使用名为 GemStone 的 database，它有 Smalltalk objects 和 semantics，同时结合 persistence、transactions、indexes 等所有 database 的好东西，但速度不够。于是我问：“如果我要作出一些 changes，确保不会破坏其他东西的 test

### [01:08:19–01:08:48]

**EN**  case that makes sure that I don't break something if I make some changes and I said well actually it's not computing the right answers yet. And I said, "Well, then I can make it go really fast." And they didn't like that answer very much. Anyway, most change I've ever seen over the course of one week. At the end of which, everybody was exhausted. They've been working very long hours. I said, "Send everybody away for 2 weeks. Tell them to get some rest. We'll come back. We'll

**中文**  case 在哪？”他们说：“其实它现在还算不出正确答案。”我说：“那我能让它跑得非常快。”他们不太喜欢这个回答。总之，那一周发生了我见过最多的变化。结束时所有人都筋疲力尽，因为长期加班。我说：“让所有人离开两周，休息一下。回来后，

### [01:08:47–01:09:15]

**EN**  throw away all the code that we've written so far, and we'll restart." And we restarted on this 3-w weekek cadence. Every three weeks we would have more test cases specified by Marie, the payroll expert would be working and then we'd start another 3-we segment and another and another. No, it turns out those 11s that we

**中文**  扔掉目前写的所有 code，重新开始。”于是我们以三周为 cadence 重启。每三周，由 payroll expert Marie 指定的更多 test cases 都会开始工作；然后进入又一个三周 segment，再一个，再一个。事实证明，我们把所有实践调到的 11

### [01:09:12–01:09:42]

**EN**  turned everything to, there were several notches beyond that, but it was just that was the most intensely we could imagine replanning, integration, deployment, refactoring, and so on. The ideas that went into that was this synthesis of all these experiences that I'd had. And then so this is from from Ward when the two of you started to pair and pass the keyboard and and decide on all the

**中文**  之上其实还有好几档，但那已经是我们能想象的、在 replanning、integration、deployment、refactoring 等方面最激进的程度。这些 ideas 是我全部经历的综合。>> 所以，其中有你和 Ward pairing、来回传递 keyboard、决定各种工作的经验；还有你对 tests 的理解，即 testing 不一定要由 testing team 独立完成，而是可以用自己的 language 自己做。这在当时全是新鲜事，所有 ideas 就这样汇聚到一起。

### [01:09:40–01:10:09]

**EN**  different things that you're going to do your experience with tests as as a concept of that it doesn't needs to be the testing team that does it themselves but you can do it yourself in your own language which was just new new and and so all of these ideas just all came together. >> Yeah. >> And then when did you give it a name? It started going well. At first I was like I was excited. I was scared. I was excited. Then it started going really well. >> So like the project started to go

**中文**  >> 对。>> 那你什么时候给它命名？>> 它开始进展顺利。最初我既兴奋又害怕，后来真的变得非常顺利。>> 也就是说，project 开始明显顺利起来。

### [01:10:08–01:10:36]

**EN**  visibly well. >> Yeah. Yeah. After my like six weeks and then I was happy to be telling my friends about it. This new style of working that we're doing here at Chrysler. This new style of working we're doing here at Chrysler. This new style. They got kind of old to say that over and over again. So now I'm back with the C thesaurus trying to figure out what are the words >> called us.

**中文**  >> 对。大概六周后，我已经很乐意向朋友们介绍：“我们在 Chrysler 使用的这种新工作方式。”反复说“我们在 Chrysler 使用的新工作方式”，说久了也很烦。于是我又拿出 thesaurus，寻找应该用什么词来称呼

### [01:10:32–01:11:01]

**EN**  >> I thought we were really on to something that was going to be big. So I wanted to protect it. Apologies to Grady who's a good friend now. But um I didn't want Grady BCH to ever say that he was doing this thing. So, I had to pick I had to pick a moniker that was unattractive enough that somebody would try and steal it. And this is about the point at which

**中文**  我们。我认为这东西真的可能做大，所以想保护它。向 Grady 道歉，他现在是我的好朋友。但我当时不希望 Grady Booch 有朝一日说自己也在做这个。因此，我必须选一个足够不吸引人的 moniker，让别人不会尝试偷走它。而这大概也正是

### [01:11:00–01:11:29]

**EN**  uh >> you're you're now this punk again. >> Yeah. Well, yeah. I still am, but [laughter] I'm just I'm just an older punk now. Yeah. Yeah. But but a little bit of thumb the nose at the establishment. Extreme sports were there. I kind of like the analogy with extreme sports because you don't just hop on a snowboard at the top of some avalanche

**中文**  >> 你再次变成 punk 的时候。>> 对。其实现在还是，只是成了年纪更大的 punk。[笑] 不过，这确实也有一点对 establishment 嗤之以鼻的意味。当时正流行 extreme sports，我喜欢它与 extreme sports 的类比，因为你不可能第一次站上 snowboard，就直接从可能发生 avalanche 的山顶

### [01:11:26–01:11:55]

**EN**  and the first time. No, you have to be supremely prepared. You have to have done all of your research and then if you have these outstanding skills, then you accomplish things. >> Yeah. And training and all that, >> right? that seem impossible and are impossible if you haven't done all the prep. So it's accurate, it's edgy, it's

**中文**  滑下去。你必须做好极其充分的准备，完成所有 research；只有拥有出色 skills，才能做到那些事。>> 对，还有 training 等等。>> 没错。那看起来不可能，而且在没有完成全部准备时也确实不可能。因此这个名字准确、edgy，而且

### [01:11:52–01:12:20]

**EN**  the that word extreme and hence extreme programming was was born. >> That's so that's the extreme part. Extreme we had I knew that a bunch of people wouldn't like it but that's okay. I started out calling it development which I still kind of like because there's more to delivering value with software than programming

**中文**  包含 extreme 这个词，Extreme Programming 就这样诞生了。>> 原来这就是 extreme 的来源。>> 对。我知道很多人不会喜欢这个词，但没关系。最初我把它叫 Extreme Development，我现在仍有点喜欢，因为通过 software 交付价值不只有 programming。

### [01:12:17–01:12:45]

**EN**  but the methodologies extent at that time treated programming as this clerical task. We'll we'll we'll draw these diagrams and these diagrams and build this thing and the 14 ways to visualize this and then then there's some programming and then we'll draw some more diagrams and I thought programming sitting fingers on keyboard staring at code that's that's

**中文**  但当时的方法论把 programming 当成 clerical task：“我们先画这些 diagrams、那些 diagrams，构建这个东西，再用 14 种方式 visualise 它；接着做一点 programming，然后继续画 diagrams。”而我认为，坐下来、手指放在 keyboard 上、盯着 code，正是

### [01:12:43–01:13:08]

**EN**  where I do my learning because that's where you can no longer fool yourself that you actually understand either you compute the correct value or you don't compute the correct value. So I wanted to elevate that moment of reality meets program and that's where the programming comes from. Now from very early days I also

**中文**  我学习的地方，因为在那里你再也骗不了自己说已经理解。要么算出 correct value，要么没有。因此，我想抬高“现实与 program 相遇”这一时刻的地位，这就是 programming 一词的来源。从很早开始，我也

### [01:13:06–01:13:35]

**EN**  called it XP as uh a way of separating from the downsides of both of those words extreme and programming. So we can just call it XP and it's it's more of a generic thing. Not long after that, Microsoft releases Windows XP and there's an alternate universe in which I sued them and succeeded. And there's another al alternate universe in which I sued them

**中文**  把它叫 XP，以避开 extreme 和 programming 两个词各自的负面含义。我们可以直接叫 XP，让它变成一个更 generic 的东西。不久后，Microsoft 发布 Windows XP。存在另一个 universe，我起诉他们并赢了；也存在另一个 universe，我起诉他们

### [01:13:32–01:14:01]

**EN**  and failed and bankrupted myself and my children all starved to death. So, >> Right. Right. Cuz this was right around the year late '9s and XP came out. Yes. Soon after, I think 2000 or 2001, something like that. When did XP extreme programming recall start to become big? Was it as you gave it a name and you started telling people or then there was your book which came out in the year 2000? I remember the first talk about XP

**中文**  却输了，导致自己破产，孩子们全饿死了。>> 对，因为这是 1990 年代末左右，Windows XP 很快就在 2000 或 2001 年左右发布。Extreme Programming 是什么时候真正开始走红的？是在你给它命名、开始告诉别人时，还是等 2000 年那本书出版之后？>> 我记得第一次做 XP 演讲

### [01:13:58–01:14:26]

**EN**  I gave I had some flyers to hand out. So I think it was at an oopsum on a panel or something like that. I I talked some about XP and afterwards people were give me a copy. No, no. Uh uh uh uh uh uh. The reaction to it was just tugging on my shirt wanting a piece of this thing.

**中文**  时准备了一些 flyers，可能是在 OOPSLA 的某个 panel 上。我讲了 XP，结束后人们纷纷拉着我：“给我一份。”“不行，不行。”大家的反应就像不断拽我的 shirt，想要分到这个东西。

### [01:14:22–01:14:52]

**EN**  And I think the XP had exquisite timing in that the dot the upside, not the bomb, but the the upside of it was just starting to hit. They looked at other methodologies. It would say, you know, very carefully prepare, do this analysis document, do this design document, then a bunch of coding, then a bunch of testing. They could tell that's never going to

**中文**  我认为 XP 的时机好得不可思议。当时 dot-com 的上升期——不是泡沫破裂，而是上升——刚开始显现。其他 methodologies 都会说：“非常仔细地准备，完成这份 analysis document，再完成 design document，然后大量 coding，再大量 testing。”人们看得出来，在一个变化速度像 internet wave 即将达到峰值、即将进入

### [01:14:49–01:15:18]

**EN**  work in a world that's changing as fast as the internet wave starting to crest, starting to come into, you know, the this super hyper growth. On the other hand, we know that this cowboy style of just, you know, you have the Jolt Cola, rest in peace, Jolt Cola, cowboy, you have a bunch of programmers, they do incomprehensible stuff, they don't talk

**中文**  super hyper-growth 的世界里，这套方式永远行不通。另一方面，那种 cowboy style 也不行：准备 Jolt Cola——愿 Jolt Cola 安息——找一群 programmers，让他们做出无法理解的东西，彼此不沟通，你只需从门缝塞 pizza，最后 code 就出来了。这同样行不通。

### [01:15:15–01:15:43]

**EN**  to anybody, you just slide pizza under the door, and then you get the code out. That's not going to work either. Here's this thing that looks like it's kind of in between the two. There's discipline to it. There's iteration to it. There's transparency to it. You have ways of steering what goes on. You have ways of tuning the process. You have all these tests to make sure that stuff actually works. You have frequent alignment between people, whether it's business

**中文**  而这里有一个看起来介于两者之间的东西：它有 discipline、iteration 和 transparency；你可以 steering 工作方向，也可以 tuning process；还有所有这些 tests，确保东西真的能运行；人与人会频繁 alignment，无论是 business

### [01:15:42–01:16:10]

**EN**  people and technology people or technology people with each other. Okay, I can see how this could work. And so they could see the internet is exploding and I can use XP to take advantage of that opportunity in a way that I I can't I don't there wasn't really another alternative to it. >> Basically XP was giving you a way to move pretty fast and nimble but also

**中文**  people 和 technology people 之间，还是 technology people 彼此之间。好吧，我看得出这可能有效。因此，人们看到 internet 正在爆发，也看到可以用 XP 抓住这个 opportunity，而当时确实没有真正的 alternative。>> 简单说，XP 给你一种快速、灵活行动的方法，同时

### [01:16:06–01:16:34]

**EN**  have a sense of stability not just going wild. tests there. You had the iterations, the planning, the learning. And then when did TDD come along? Because there was a book that you you wrote that came out, I think two years later, uh, test-driven development by example. And how did it relate to XP?

**中文**  也有稳定感，不是彻底失控。它包含 tests、iterations、planning 和 learning。那 TDD 是什么时候出现的？你两年后左右出版了《Test-Driven Development by Example》，它与 XP 有什么关系？

### [01:16:32–01:17:00]

**EN**  >> So TDD was an earlier test development. >> Test-driven development was an earlier rediscovery for me. Remember, I was a kid. I read all these books. I remember one of the books my dad brought home and I still haven't found a a copy of it. Said, "Here's how you program." This was back in the days of taped to tape. So, you'd have an input tape, you know, like time cards, and then you put it through

**中文**  >> TDD 更早。Test-driven development 是我更早重新发现的东西。还记得吗？小时候我读父亲带回家的所有那些书。其中一本我至今没找到副本，里面写着：“这是编程的方法。”那还是 tape-to-tape 的年代：有一盘 input tape，内容类似 time cards，然后送进

### [01:16:58–01:17:28]

**EN**  the payroll program, which would write an output tape, which was like dollars for checks, dollars for withholding, etc., etc. >> Yeah. So it was always and then >> really back in the day and and you'd have these long strings of this and it's actually functional programming because you can't change the input tape but operating payroll or operating accounts payable or operating inventory was a

**中文**  payroll program，它会写出一盘 output tape，比如支票金额、withholding 金额等等。>> 对，所以它总是……>> 真的是很久以前。你会得到一长串这样的步骤。实际上这就是 functional programming，因为无法改变 input tape。运行 payroll、accounts payable 或 inventory，都是

### [01:17:25–01:17:55]

**EN**  process of I take these tapes I feed them into this program I take the output of that feed them into this program and blah blah blah blah blah blah and then you really manual like actually >> physically pulling a tape off and moving it over. Yeah. And it so it said here's how you write one of these programs is you take an input tape an actual input tape that you need to process and you manually type in the output tape you expect that to generate. You say okay well this number of hours uh should I I

**中文**  这样一个 process：把这些 tapes 送进这个 program，再把 output 送入下一个 program，如此继续。>> 而且真的是手工操作。>> 对，真的把 tape 拿下来，再搬到另一边。书里说，编写这种 program 的方法是：拿一盘需要处理的真实 input tape，然后手工输入预期生成的 output tape。比如说：“好，这个工时数字，

### [01:17:53–01:18:22]

**EN**  should have a record in the output that like this. So I see where we're going with this. You're you're defining the output. You're >> before you start on the program. >> Yeah. So first you need to know what do I expect? How can I validate it? >> Correct. I had read that as a kid, didn't understand diddly squat, but but it's it's back in the back here someplace. I wrote sunit for the first started using it. Gave it to Hal

**中文**  在 output 中应该生成这样一条 record。”>> 我明白接下来要讲什么了。你是在定义 output，而且是在开始写 program 之前。>> 对。所以首先需要知道：我的预期是什么？如何验证它？>> 正确。我小时候读过这段话，完全没理解，但它一直藏在脑中某个角落。我写出 SUnit，开始使用它，并把它交给 Hal

### [01:18:20–01:18:49]

**EN**  Hildebrand, one of the smartest programmers. I knew I didn't figure he would need it. He used it. He loved it. So, I knew I was on to something with this this testing framework. And then I [clears throat] was just kind of farting around and remembered this typing in the output tape first and mapped that onto the testing that I was doing with SUnit. I

**中文**  Hildebrand，他是我认识的最聪明的 programmers 之一。我没觉得他会需要这个，但他用了，而且很喜欢，所以我知道这个 testing framework 确实有价值。后来我只是随便尝试，想起了先输入 output tape 的做法，并把它映射到自己用 SUnit 进行的 testing 上。我

### [01:18:47–01:19:16]

**EN**  went, well, if I followed that pattern, I would write the test before I wrote the code. And I can remember laughing out loud because it was such a stupid idea. Why would you write a test that you know is going to fail? you you don't even have the classes defined yet. You don't have the methods defined yet. It's just it's going to fail a bunch of different ways before it could possibly succeed. Cool.

**中文**  想，如果遵循那个 pattern，我就会在写 code 前先写 test。我记得自己笑出了声，因为这主意实在太蠢了。为什么要写一个明知会失败的 test？Classes 甚至还没定义，methods 也没定义；它会以各种方式不断失败，才有可能最终成功。太好了。

### [01:19:13–01:19:40]

**EN**  Let's try it and see what happens. So, I used stack as my first example. So, I have a stack new and I push something and I pop it. I should get the same thing back. Okay. And then I went to program it and okay, well, that's easy to satisfy that. What's the next one? You know, you push two things and you get them back in the right order. Okay. And this and uh

**中文**  试试看会发生什么。所以我用 stack 作为第一个例子：创建一个新 stack，push 某个东西再 pop 出来，应该拿回同一个东西。好。然后开始实现：这个很容易满足。下一个呢？Push 两个东西，再按正确顺序取回。好。接着……

### [01:19:39–01:20:05]

**EN**  dupe pop top is empty and finished. Where's the anxiety? >> Oh, just gone. Oh, for the first time. >> Wow. I can't imagine another test case that wouldn't pass. So, I'm really I'm

**中文**  duplicate、pop、top、empty，然后完成。焦虑去哪了？>> 哦，完全消失了，第一次如此。>> 哇。我已经想不出还有哪个 test case 不会通过。所以我真的

### [01:20:02–01:20:31]

**EN**  finished and I feel great. I feel finished and I am finished. Wow. Go going from this is a stupid idea. Let's let's try it. Absolutely. No, I made a comment. Always try your stupid ideas if you can do it cheaply and reversibly. Jumping off a bridge is not a reversible decision. Not talking about that. I'm talking about stuff like this where you're just like, "Here's a

**中文**  完成了，而且感觉很好。我既感觉完成，也确实完成。哇。>> 从“这是个蠢主意”到“让我们试试”。>> 绝对如此。我说过一句话：只要能以低成本、可逆的方式去做，就一定要尝试你的蠢主意。从桥上跳下去不是 reversible decision，我说的不是那种。我说的是这种情况：你只是想，“这里有个

### [01:20:29–01:20:58]

**EN**  stupid idea." 99 times out of a 100 it'll fail. But that one time you won't have any competition cuz nobody else is stupid enough to try this idea. Part of this punk attitude, I don't care what you think about this has enabled me to just try lots and lots of stupid ideas. And most of them you don't see, but there had been a string of them which worked out way better than they would

**中文**  蠢主意。”一百次中 99 次会失败，但成功的那一次，你不会有任何 competition，因为别人没蠢到会去试。我的 punk attitude 中有一部分是“不在乎你们怎么看”，它让我尝试了大量蠢主意。多数你们根本看不到，但确实有一串 ideas 最后的效果远远好于

### [01:20:56–01:21:25]

**EN**  have expected to work out. Well, and then a bunch of other people tried these ideas as well. You know, like I think TDD is a good example where there was a time where shortly after you wrote the book about it as well. Uh it was it was a super popular book. I still remember I think I had a copy as well back in the late uh two 2000s people were like doing you know group exercises developers were developing accordingly

**中文**  预期。>> 后来很多其他人也尝试了这些 ideas。我觉得 TDD 是个好例子。你写书后不久，它曾非常流行。我还记得自己在 2000 年代末可能也有一本。人们做 group exercises，developers 也照此开发。

### [01:21:22–01:21:51]

**EN**  over time it it probably dropped I would say in the 2010s I saw fewer and few people doing it uh and it almost went out of style completely and now with uh with agents the idea is back because turns out it might take more time what not but agent agents can do that but it's a It's pretty useful for them to test themselves. >> It costs tokens in the short run, but it can save them in the long run because

**中文**  随着时间推移，大概到了 2010 年代，我看到使用它的人越来越少。它几乎彻底过时，而现在 agents 出现后，这个 idea 又回来了。它可能更费时间之类，但 agents 能做，而且让它们自我测试非常有用。>> 短期会花费 tokens，长期却能节省，因为

### [01:21:48–01:22:17]

**EN**  one of the classic genie mistakes is stuff doesn't work. So, how do you how do you pull in the reins a little bit? And why did TDD go out of fashion? I I think uh there's a big part of it is I work on something for a while and then I switch to something else. That was true of patterns. It was true of Junit. It's true of TDD. It's true of XP. I just

**中文**  genie 最经典的错误之一就是东西不能工作。那么，要怎样稍微收紧缰绳？TDD 为什么会失去流行？我觉得很大一部分原因是，我做一个主题一阵子就会切换到别的。Patterns 如此，JUnit 如此，TDD 和 XP 也如此。我只是

### [01:22:14–01:22:43]

**EN**  move on to the next thing. So I moved on to the next thing. TDD is out there. And then there were people who used it as a moral cudgel. Like you should be if you're not using TDD, you're not professional. And that's just such People can write very good software with a wide variety of workflows. Now, there's advantages and

**中文**  继续做下一件事。所以我离开后，TDD 留在了那里。接着有些人把它当成 moral cudgel：“你应该这样做；如果不使用 TDD，就不专业。”这实在……人们可以用多种 workflows 写出很好的 software。当然，不同 workflows 各有优

### [01:22:41–01:23:11]

**EN**  disadvantages to different workflows. The sweet spot of TDD is this combination of discovery and realization. I kind of know where I want to go. I don't know exactly I'm going to get there, but I do know the first step. So, I take the first step and that teaches me something which lets me take the next step. and that teaches me something. I if you can just go implement implement implement, fine. There's other workflows that are

**中文**  缺点。TDD 的 sweet spot 是 discovery 与 realization 的结合：我大概知道要去哪里，不完全知道如何抵达，但知道第一步是什么。于是我迈出第一步，从中学到东西，让我能迈出下一步，再学到东西。如果你能不断 implement，也很好，还有其他同样

### [01:23:08–01:23:37]

**EN**  fine. If you just want to sit there and go learn learn learn, I don't think that works very well, but you certainly don't need TDD. It's when you have this rapid alternation between I do a thing, I learn a thing, I do a thing, I learn a thing. That's where TDD is really powerful. But it's not a moral decision. It's a practical decision.

**中文**  可行的 workflows。如果只是坐在那里不停 learn，我不认为效果很好，但你当然不一定需要 TDD。真正适合 TDD 的，是“做一件事、学到一点，再做一件事、再学一点”的快速交替。它不是 moral decision，而是 practical decision。

### [01:23:35–01:24:05]

**EN**  >> Test-driven development is one of Kent's most lasting contributions to how software is written and shipped. And today with Agentic development, it's more important than ever. If you work with agents, your job is no longer writing code. It's specifying and testing it. This is where I need to mention our presenting sponsor. Antithesis. Antithesis is the most effective method of verifying a code today. Let me explain how it works. Antithesis runs your whole system in a hostile simulation. By doing so, it finds every bug before your users do. And because the simulation is fully

**中文**  >> Test-driven development 是 Kent 对 software 编写与交付方式最持久的贡献之一。今天，在 agentic development 中，它比以往更重要。如果你与 agents 一起工作，你的工作便不再是写代码，而是明确描述并测试代码。这里需要提到我们的主赞助商 Antithesis。Antithesis 是当今验证 AI code 最有效的方法。解释一下它如何工作：Antithesis 会在 hostile simulation 中运行整个 system，以此在 users 遇到 bugs 之前发现每个 bug。而且因为 simulation 完全

### [01:24:04–01:24:33]

**EN**  deterministic, antithesis doesn't only find bugs, it gives you a perfect reproduction of every issue. I know this sounds close to science fiction, but it's actually hardcore engineering under the hood. Jane Street, Fly.io, and the CCD community ship agent written code with full confidence because they know it's been verified by antithesis. To see more case studies and details, head to antithesis.com/pragmatic. That's antithesis.com/pragmatic. Kent has spent his career building the primitives that the rest of us now take

**中文**  deterministic，Antithesis 不只找到 bugs，还会为每个 issue 提供完美的 reproduction。我知道这听起来接近 science fiction，但底层其实是硬核 engineering。Jane Street、Fly.io 和 CCD community 能满怀信心地交付 agent-written code，因为他们知道 code 已由 Antithesis 验证。如需更多 case studies 和详情，请访问 antithesis.com/pragmatic。Kent 的职业生涯一直在构建今天其他人视为

### [01:24:31–01:25:01]

**EN**  for granted. Unit testing design patterns refactoring. And building on solid primitives is exactly what our seasonal sponsor works is all about. If you're building any SAS, especially an AI product, sooner rather than later, you'll need to get around building enterprise features. Things like O for apps and agents. Work handles it. SSO, skim, fine grade authorization built for how agents actually operate. The fastest growing AI companies entropic open AI cursor perplexity already trust work to

**中文**  理所当然的 primitives：unit testing、design patterns、refactoring。而在 solid primitives 上构建，也正是我们本季 sponsor WorkOS 的目标。如果你在开发任何 SaaS，尤其是 AI product，迟早都需要构建 enterprise features，比如为 apps 和 agents 提供 OAuth。WorkOS 可以处理它，还有 SSO、SCIM，以及为 agents 实际运作方式设计的 fine-grained authorization。增长最快的一批 AI companies，如 Anthropic、OpenAI、Cursor、Perplexity，都已经信任 WorkOS

### [01:25:00–01:25:27]

**EN**  solve these problems. Check out work.com. And with this, let's get back to Kent and where the agile manifesto came from. I wanted to talk about the one thing that you're also very very known for, the thing that 17 people wrote, but you're the first one listed, the Agile Manifesto. Can you take me back to what happened in in Snowbird? What was the industry like and and what made all of you come together? There were a bunch of

**中文**  来解决这些问题。访问 workos.com。现在回到 Kent，以及 Agile Manifesto 的来源。我想谈谈你另一件广为人知的事情：由 17 个人共同写成、但你名字排在第一位的 Agile Manifesto。能否带我回到 Snowbird 当时的情景？行业是什么样，是什么让你们聚到一起？>> 当时有一批

### [01:25:26–01:25:54]

**EN**  people remember we were talking about what is the methodology for objects and you had kind of this dominant rational unified process which I say is neither rational nor unified nor a process but that's a separate mostly I did that to tweak people's noses but that was the adult way to to do development and there were a bunch of us who if you talk to Grady if you talk to

**中文**  人。记得我们谈过“objects 的 methodology 是什么”吗？那时主导的是 Rational Unified Process。我会说它既不 rational，也不 unified，更不是 process；当然这是另一个话题，我主要是想刺激一下别人。但它当时代表了成年人的 development 方式。另外还有一批人。如果你问 Grady，问

### [01:25:50–01:26:20]

**EN**  Jim and you talk to Ivar how they would apply I it is actually looks a lot like the way that I would develop but doesn't matter what you would do. What matters is what the people who read the stuff that you write would do. And it was being used in a very waterfall style. Bunch of analysis, bunch of design, bunch of implementation, separate

**中文**  Jim，再问 Ivar 他们实际会如何应用，结果看起来会很像我的开发方式。但你本人会做什么并不重要，重要的是阅读你所写内容的人会怎么做。而人们用一种非常 waterfall 的 style 使用它：大量 analysis、大量 design、大量 implementation，再单独

### [01:26:18–01:26:46]

**EN**  testing, disaster over and over and over again. So a bunch of us looked at that and in our own ways, in our own sequence of time said, "No, we we shouldn't do this. We should do something else." And we started making enough noise that we started getting attacked by the rational unified process people. Well, you don't want to do that. You want to

**中文**  testing，灾难一遍又一遍地发生。因此，我们一群人看着这种情况，分别以自己的方式、在各自时间线上说：“不，我们不该这样，应该做别的。”我们开始发出足够大的声音，以至于 Rational Unified Process 的人开始攻击我们：“你不该做那个，应该

### [01:26:43–01:27:13]

**EN**  do my thing and here I'll sell you tool for millions of dollars to help you do it. I I can understand why they would attack. But we started realizing, okay, if we're all going in this similar kind of directions, scrum, feature-driven development, we had to come together. We had a meeting in Norway where we got together, gave a presentation. This is towards the end of the time I was living

**中文**  做我的东西，而且我可以卖给你价值数百万美元的 tool 来帮你做。”我理解他们为什么攻击。但我们逐渐意识到：如果大家都在朝类似方向走——Scrum、Feature-Driven Development 等——就应该聚到一起。我们在 Norway 开过一次 meeting，各自做 presentation。那接近我在

### [01:27:11–01:27:39]

**EN**  in Europe. I lived in Switzerland for two years, 97 and 99. So in 99 we we flew up to the tip of Norway and took the Guten Berry, which I practiced saying, and I'm sure I still butchered it. Took this ferry down to Bergen and it was light all day or all night. Bucket list item. Definitely take this if you ever get a chance because the

**中文**  Europe 居住的尾声。我 1997 到 1999 年在 Switzerland 住了两年。1999 年，我们飞到 Norway 最北端，乘上 Hurtigruten ferry——我专门练过怎么读，现在肯定还是读错——一路去 Bergen。那段旅程整夜都有光，绝对是 bucket-list item。如果有机会一定要坐，因为

### [01:27:37–01:28:06]

**EN**  scenery is just absolutely spectacular. But we were meeting and talking about do we have enough in common that we could actually do stuff together. The sense of that meeting was yes, we should do something together, but there's still a lot of friction and there's a lot of divergence. You're talking about people with some healthy egos, >> strong opinions.

**中文**  scenery 壮观到不可思议。我们聚在那里，讨论彼此是否有足够共同点，真的可以一起做点事情。那次 meeting 的结论是：对，我们应该一起做，但仍然存在很多 friction 和 divergence。你说的是一群 ego 都相当健康的人。>> 而且 opinions 很强。

### [01:28:00–01:28:30]

**EN**  >> Me, not the smallest among them. So, uh, when we got back, Jim Highmith and Alistister Coburn, uh, convened another meeting at at Snowbird, same place that we'd been having these kind of methodology kind of meetings for a while. And so, we all went there and um, other people have told the details of

**中文**  >> 包括我，我的 ego 也绝不算小。回来后，Jim Highsmith 和 Alistair Cockburn 在 Snowbird 召集了另一次 meeting。我们此前就在那里开过一阵子类似的 methodology meetings。于是大家都去了。其他人曾讲述过

### [01:28:28–01:28:57]

**EN**  the meeting. I'm not going to be able to recall them precisely enough. So find one of those uh recountings of this, but it was not going well for me personally. I had a nasty sinus infection and I was on some heavy duty drugs. So I don't really remember much of the meeting in general, but I knew that things weren't going very well because there's all these people and they I want my stuff in. No,

**中文**  meeting 的细节，我无法足够准确地回忆，所以可以找他们的叙述。但就我个人而言，那次 meeting 进行得不太顺。我得了严重 sinus infection，还服用了很强的药，所以对整体几乎没有记忆。不过我知道进展不好，因为人太多，每个人都说：“我要把我的东西放进去。”“不，

### [01:28:55–01:29:25]

**EN**  I want my stuff in and that contradicts your stuff. And so we all we took a break. We walked out and Martin and Jim Highmith stayed behind. When we came in from the break, there was the basics of the manifesto. You know, we the the that format. We value these things, but we value these things more.

**中文**  我要放我的，而且这和你的东西矛盾。”于是大家休息，走出房间，Martin 和 Jim Highsmith 留在里面。等我们回来时，Manifesto 的基本内容已经出现：就是那种格式，“我们重视这些，但更重视那些”。

### [01:29:22–01:29:50]

**EN**  And the four specific items that was all in place. And then the and that was just a magic moment that I had nothing to do with. And then we came up with the principles. And I remember the only word in there that's mine is the word daily when it talks about daily interaction with users. I don't think I had another thing in there. But when it came time to publish it, what order the

**中文**  四项具体内容都已就位。那是一个与我毫无关系的 magic moment。后来我们再提出 principles。我记得其中唯一属于我的词是 `daily`，出现在“与 users daily interaction”的表述中。除此之外，我想不出自己还贡献了什么。可发布时，names 按什么顺序排列？

### [01:29:46–01:30:16]

**EN**  names go? Like alphabetical >> al absolutely alphabetical. So So when people say, "Oh, you're a signator." as they know I'm the first signatory alphabetically. >> And then what was the impact of the agile manifesto? >> Oh, in instant instant people were so excited again were now the rumblings of the dotbomb.com. It it was still going up. >> I I think so

**中文**  当然完全按 alphabetical order。所以别人说：“哦，你是 signatory。”我只能说，我是按字母排序的第一位 signatory。>> Agile Manifesto 产生了什么影响？>> 立刻、立刻就有了反响。人们非常兴奋。那时 dot-com bust 已经有一些动静，但整体仍在上升。>> 我想是的。

### [01:30:15–01:30:43]

**EN**  >> it was towards the end >> but definitely towards the end like but people were still looking for a like how do we do this? How do we do this stuff? How to build software quickly, cheap, reliably. Everyone's searching for the optional >> with with optionality. >> With optionality. Yeah. >> Because when things are uncertain is exactly when options give you the most value and we had a story about how you

**中文**  >> 已经接近尾声。>> 但确实接近尾声。人们仍在寻找：到底该怎么做？怎样快速、廉价、可靠地构建 software？所有人都在寻找 optionality。>> 对，带着 optionality。>> 没错。因为事情越 uncertain，options 的价值越大；而我们讲得出一个如何

### [01:30:40–01:31:09]

**EN**  could preserve optionality. All of us in our own separate ways. That was another case. So XP was the first time I had people tugging on my shirt. JUnit was another one which was SUnit. I had SUnit. Eric was using Eric Gamma was using this new language Java. We were flying to America. He was going to show me Java. I was going to show him SUnit.

**中文**  保留 optionality 的故事，只是每个人有各自的方法。这又是一个例子。XP 是第一次有人拽着我的 shirt；JUnit 是另一次。那时我有 SUnit，Erich Gamma 在使用一种新 language Java。我们要一起飞往 America，他给我展示 Java，我给他展示 SUnit。

### [01:31:05–01:31:33]

**EN**  So we developed JUnit testing itself in itself on the flight from Vienna to Washington Dulles. >> Wow. >> And when we landed >> on the plane, no internet. No internet. >> Two and a half hours of battery. Like the clock is ticking. >> Yeah. And no power adapter in the seat. Oh, it was it was like a horsedriven

**中文**  于是，我们在 Vienna 飞往 Washington Dulles 的航班上，用 JUnit 测试 JUnit 自身并开发了它。>> 哇。>> 等我们落地……>> 在飞机上，没有 internet。>> 电池只有两个半小时，时钟一直在走。>> 而且座位没有 power adapter。哦，那就像 horse-driven

### [01:31:30–01:31:59]

**EN**  computing. So we landed and and we gave Jayun to Fowler who was at at that oops and um the next day I hear you have a Java testing framework. Can I get a copy? So we made floppy discs, 3 and 12 in discets and and we were handing them out as fast as we could cuz there was so much demand for it. So that was the second time I've been through that kind

**中文**  computing。落地后，我们把 JUnit 交给了当时参加 OOPSLA 的 Fowler。第二天我就听到：“听说你有 Java testing framework，能给我一份吗？”于是我们制作 floppy disks，也就是 3.5-inch diskettes，尽可能快地分发，因为需求太大。这是我第二次经历这种

### [01:31:55–01:32:24]

**EN**  of a demand product market fit column >> Yeah. Yeah. Exactly. Product market fit. Um and then agile manifesto was the the next version of that where people were just really excited about it. beautiful piece of marketing to have the original signitories and then if you wanted to sign it, >> you could sign it for for a while. I think they closed it after a while because it got too many people, >> right? But that meant that pe people

**中文**  demand。>> Product-market fit。>> 对，正是 product-market fit。Agile Manifesto 则是下一次，人们真的为它兴奋。让 original signatories 出现在上面，再允许其他人签名，是很漂亮的 marketing。>> 有一段时间可以签，后来可能因为人数太多关闭了。>> 对。但这意味着人们

### [01:32:21–01:32:50]

**EN**  felt invested. They were already bought in. They'd already attached their names to this thing. >> Is it interesting, right, how being invested, being able to contribute or feel you're contributing, it it can make a difference. It it has made a difference and and for agile for sure. >> So uh one piece of followup is that word agile part of the ar argument yeah argument was around what are we going to

**中文**  感觉自己投入其中，已经 buy in，也已经把名字附在这个东西上。>> 很有意思，对吧？能够投入、能够贡献，或感觉自己正在贡献，确实会带来差别。对 Agile 来说，它的确产生了影响。>> 有一件后续值得讲，就是 `agile` 这个词。当时的争论之一是该把它

### [01:32:48–01:33:17]

**EN**  call this thing and somebody suggested agile I don't remember who but probably somebody somebody does and I objected and what I don't like about it I didn't like about it then and still don't like about it is it's not defensible. Nobody's going to say I'm not agile. Oh no, I prefer rigid development. Oh, I prefer inflexible development. No, everybody's going to say that they're

**中文**  叫作什么。有人建议 `agile`，我不记得是谁，但也许有人记得。我反对。无论当时还是现在，我不喜欢它的原因都是：它不可防御。没人会说自己不 agile：“哦不，我更喜欢 rigid development，我更喜欢 inflexible development。”不会，所有人都会说自己

### [01:33:14–01:33:44]

**EN**  agile, which extreme doesn't have that problem. If you work hard at your skills at being able to pair and being able to design incrementally and being able to test thoroughly and and build tools and you make that investment now you say, "Okay, I'm an extreme programmer." If you haven't made that investment, you're never going to say that you're an extreme programmer if you're not. But you're going to say you're agile even if

**中文**  agile，而 extreme 没有这个问题。如果你努力训练 pairing、incremental design、thorough testing 和 tool building 等 skills，并真正作出 investment，才会说：“好，我是 extreme programmer。”如果没作出这种 investment，就绝不会冒充 extreme programmer。但即使

### [01:33:40–01:34:09]

**EN**  you're definitely not. So that was my objection back then and and that certainly played out. That word does not only doesn't mean anything anymore, it means something negative. >> Okay. Can we talk about that of the afterlife of of agile and and some of the the capital, you know, the capital A version, there's a whole uh industry that was grown that initially was meant to do good things, but it turned into a

**中文**  完全不 agile，你仍会自称 agile。这就是我当时的异议，后来也完全应验。这个词现在不只没有意义，甚至带有负面含义。>> 好，我们能谈谈 Agile 的 afterlife，以及大写 A 的版本吗？它发展出完整的 industry，最初本想做好事，却在许多方面变成

### [01:34:06–01:34:36]

**EN**  snake oil industry in in many ways. We now have scaled agile frameworks that are sold for massive amounts for huge companies which you know bog them down with even more bureaucracy you can imagine. How did you see this being played out and did you expect agile to grow this big into both a commercial story and and and and then all all of these I guess snake oily parts? >> I was certainly afraid that that was

**中文**  snake-oil industry。现在有 Scaled Agile Frameworks，以巨额价格卖给大型 companies，结果只会让它们陷入更多 bureaucracy。你如何看待这一演变？当初预计 Agile 会成长为如此庞大的商业故事，同时带来这些 snake-oil 部分吗？>> 当我们提出它时，我确实担心

### [01:34:34–01:35:03]

**EN**  going to happen at the time that we put it together. The agile manifesto is the intersection of the ideas of the people in the room. I think there's a lot more to software development than is contained in the manifesto. And I've written books and books and books about what I think those things are. Without the foundation of technical skills, you can have the the best intentions of

**中文**  这种事会发生。Agile Manifesto 是在场众人 ideas 的交集。我认为 software development 远不止 Manifesto 中的内容。我写了一本又一本书，阐述自己认为还包括哪些东西。如果没有 technical skills 这个 foundation，你可以怀着最好的 intentions，

### [01:35:01–01:35:29]

**EN**  we're going to be able to replan and we're going to be able to implement in any or you know we have a set of features and we can implement them in any order and we can add new features anytime we want and you can say you're going to do that but if you don't have the technical chops to write efficiently write reliable software in bits and pieces to

**中文**  说“我们可以重新规划；有一组 features，可以按任意顺序实现；随时也能加入新的 features”。你可以这样说，但如果没有 technical chops，不能高效地把 reliable software 分成小块编写、

### [01:35:26–01:35:56]

**EN**  design in bits and pieces to preserve and enhance optionality to write your own tools when you need to do that. Those are things are technically difficult. It's it's like putting somebody at the top of the avalanche on a snowboard for the first time. Well, there's a certain kind of agility as you fall down the mountain and break your body into multiple parts, but this is not really what we're

**中文**  分块设计、保存并增强 optionality，也不能在需要时写自己的 tools，那就做不到。这些在技术上很困难。就像让第一次滑 snowboard 的人站在 avalanche 顶端。一路摔下山、把身体摔成好几段，确实也有某种 agility，但那不是我们

### [01:35:52–01:36:22]

**EN**  talking about. You need that foundation. And there were people who were willing to say, "Nah, no, no, don't worry about that. This is easy. You can do this. Anybody can do this. Twice the work in half the time." From my perspective, that's just a lie. Can you get twice the work done in half the time? Yes, absolutely. Is it going to be a lot of hard work gaining the

**中文**  说的东西。你需要那个 foundation。但有人愿意说：“不，不，别担心。这很容易，你能做到，任何人都能做到。用一半时间完成两倍工作。”在我看来，这就是谎言。你能不能用一半时间完成两倍工作？当然可以。但要获得那些

### [01:36:19–01:36:49]

**EN**  skills, which aren't taught in computer science school, aren't frequently modeled in your first employer? You're going to have to work hard to gain the skills to be able to do twice the work in half the time. In the the genie world is just playing this out again. Well, everybody can be a programmer. Yeah, but everybody can't be the same programmer. Yeah, seems like there's a pattern where when there is a new technology or a new methodology in this case, but I guess it's interchangeable

**中文**  skills，是否需要大量艰苦训练？当然。这些 skills 在 computer science school 中没人教，在第一家 employer 也很少有人示范。你必须刻苦练习，才可能做到一半时间两倍工作。Genie world 正在再次上演同一幕：“每个人都能成为 programmer。”是，但每个人无法成为同样的 programmer。>> 看起来有一种 pattern：每当出现新 technology，或者本例中的新 methodology——不过我猜二者可以互换——

### [01:36:48–01:37:17]

**EN**  >> technology. Yeah. >> Well, it's a technology that a group of people, a group of highly trained people can get really good results with it and then they publish it and they share this is working for us. Here's the results. There's a bigger industry going around that's saying what you just said that anyone can get these results and we will sell it to you. We'll show it to you. And of course, by the time you realize that, for example, a company like a large bank realizes that it's not really working. They're heavily invested and

**中文**  >> Methodology 也是 technology。>> 某群受过高度训练的人可以用它取得非常好的 results。接着他们发布并分享：“这对我们有效，结果在这里。”外围会出现更大的 industry，说出你刚才那种话：“任何人都能获得这些结果，我们可以把它卖给你、教给你。”当然，等一家 large bank 之类的 company 意识到它其实没有真正奏效时，已经投入很深，

### [01:37:15–01:37:45]

**EN**  maybe they're actually getting some minor results, just not the same. And then I guess you can argue of like this is this is the whole point of snake oil, right? Like snake oil, it does something just not what it was advertised. Let's talk about what happened after 2001. So, uh there was a big do bus. Can you take us back to what it was like being in the middle? So you were in were you in Silicon Valley at that point?

**中文**  或许也确实取得了一点小 results，只是不是宣传中的那种。我猜这就是 snake oil 的本质：它确实有点作用，只是不是广告声称的作用。我们来谈谈 2001 年之后发生的事。Dot-com 出现了严重 bust。你能带我们回到当时身处其中是什么感觉吗？你那时住在 Silicon Valley 吗？

### [01:37:40–01:38:07]

**EN**  >> 87 to 97 we lived in the Santa Cruz Mountains above Silicon Valley. Much of that time I commuted to work. Then we moved to Switzerland 97 to 99. Then in the last part of when we were living in uh in Boulder Creek in the Santa Cruz Mountains, we had bought acreage near my

**中文**  >> 1987 到 1997 年，我们住在 Silicon Valley 上方的 Santa Cruz Mountains，其中很多时间我通勤上班。1997 到 1999 年，我们搬到 Switzerland。后来住在 Santa Cruz Mountains 的 Boulder Creek 期间，我们在我

### [01:38:04–01:38:33]

**EN**  grandmother in southern Oregon. So we bought eight hectares of just trees and started developing power well road and so on. Went to Switzerland. Oh, we built the office and we had a trailer and then we went to Switzerland and we came back. So I was living in rural southern Oregon at that time

**中文**  祖母家附近、位于 southern Oregon 的地方买了地产：八公顷全是 trees，然后开始修 power、well、road 等。我们先建好 office，还有一个 trailer，接着去了 Switzerland，后来又回来。所以，当时我住在 rural southern Oregon。

### [01:38:30–01:38:59]

**EN**  >> and the industry just went through this massive boom which there are similarities as as I'm talking with people with the current uh boom whenever you're working in AI right now and then there was a sudden bust that again I I've I've learned it from the the his history books or like reading back news but apparently it was sudden uh it was shocking uh how did you see it what what happened in the industry But what what

**中文**  >> 行业刚经历 massive boom。我和今天在 AI boom 中工作的人交流时，能看到一些相似之处。随后突然发生 bust。我的了解来自 history books 和旧 news，但据说发生得很突然，令人震惊。你看到的是什么？行业发生了什么？

### [01:38:56–01:39:26]

**EN**  were your friends working as programmers observe or how were they impacted? >> It was horrible for me personally. The turning point was 9/11. I had 8 months booked solid work at very high rates, higher rates than I can charge now, even with inflation. And the day after 9/11, everyone canled. I

**中文**  你那些 programmer 朋友观察到了什么，又受到什么影响？>> 对我个人来说非常可怕。Turning point 是 9/11。我原本已经排满了未来八个月的工作，rate 非常高，即使考虑 inflation，也比今天能收的更高。但 9/11 第二天，所有人都取消了。

### [01:39:24–01:39:53]

**EN**  was also finishing the house that we were building. So, we were we were about to come up on some big bills to finish the house at the same time that all of my income disappeared. It's overnight. >> Overnight. Wow. >> So, things had already been bad. There were there were big bankruptcies and the pets.com and the whatever that that was already happening. And then 9/11

**中文**  与此同时，我们正在完成所建的 house，很快就要支付一些大额 bills；可所有 income 同时消失了。>> 一夜之间？>> 一夜之间。>> 哇。>> 其实之前情况已经不好，发生过一些大型 bankruptcies，Pets.com 等都已经倒下。然后 9/11

### [01:39:51–01:40:20]

**EN**  just shut down everything. That was a big shock for me and I ended up burning out um pretty thoroughly. Severe depression. I had a really important lesson to learn about boundaries. So up until that time, remember periodically I had people tugging on my shirt and yeah, you had three really big part of market fits where people were after you.

**中文**  让一切彻底停摆。这对我打击很大，最后我严重 burnout，陷入 severe depression。我必须学会一个关于 boundaries 的重要 lesson。在那之前，还记得吗？时不时就会有人拽着我的 shirt。>> 对，你经历过三次真正重大的 product-market fit，人们都来追着你。

### [01:40:17–01:40:46]

**EN**  >> Patterns even before that was also like that. >> But you were a star. I was Yeah, I was feeling Yeah. And I would get these messages. Somebody would say, "Oh, Junit saved my life. XP was fantastic and I love it and you're a genius and blah blah." And I'd feel really good knowing a message like that. Then I started getting messages, uh, XP ruined

**中文**  >> 更早的 patterns 也一样。>> 你是个 star。>> 对，我当时就是这样感觉。我会收到 messages。有人说：“JUnit 救了我的命。XP 太棒了，我爱它，你是 genius。”诸如此类。看到这种 message，我会感觉非常好。后来我开始收到另一种 messages：“XP 毁了

### [01:40:42–01:41:12]

**EN**  my life. I lost my job. My wife left me. I can't see my kids. I'm living on the streets. You M and then I would feel really bad. And the way I think about it now is that there's the way people perceive you and there's the way you perceive yourself and then there's what's really true, which is somewhere different than either

**中文**  我的生活。我丢了工作，妻子离开我，见不到孩子，现在流落街头。都怪你……”我又会感觉非常糟糕。现在我的理解是：别人如何看你、你如何看自己，以及真正的事实，三者各不相同；真相位于另外某个地方。

### [01:41:09–01:41:38]

**EN**  of those. When people are giving you a bunch of feedback that you're more awesome than you think you are, that just stretches your head. So you see this in celebrities periodically. There'll be somebody super famous and then their their head explodes and that's that gap between how people see you and how you see yourself. And what I

**中文**  当所有人给你的 feedback 都说你比自己以为的更了不起时，你的脑袋会被撑大。所以 celebrity 身上时不时会发生这种情况：某个人超级有名，然后脑袋爆炸。那就是别人看你的方式与你看自己的方式之间产生了 gap。而我

### [01:41:34–01:42:02]

**EN**  had to learn was the reason that people come to me with those out of proportion responses is because that's what they need. They need a hero or they need a villain. and their need for a hero or a villain has nothing to do with me. If it wasn't me, they'd be contacting you. They'd be contacting somebody else. It really

**中文**  必须学会的是：人们带着那些不成比例的 responses 来找我，是因为那是他们需要的。他们需要一个 hero，或需要一个 villain；而他们对 hero 或 villain 的需求与我毫无关系。即使不是我，他们也会联系你，或者联系其他人。这真的

### [01:42:00–01:42:29]

**EN**  doesn't have anything to to do about me. But but that recalibration where I'm like, I'm trying to convince myself that I really am this awesome. No, I I get feedback that I'm not. That was a a a serious reset for me. So, I went through a bunch of mental health problems, couldn't work, c couldn't uh couldn't program at all. I had I started over

**中文**  与我无关。但当时我需要重新校准。原先我努力说服自己：“我真的有这么了不起。”接着又收到相反 feedback。那对我来说是一次严重 reset。我经历了许多 mental health problems，无法工作，甚至完全不能 program。我不得不重新开始，

### [01:42:26–01:42:53]

**EN**  with Sudoku and eventually I could do sudokus on easy and then eventually I could do them on medium and then I started on on uh uh crossword puzzles. Wow. And then eventually I got to a programming problem. I was doing a bunch of stuff with Eclipse when it was new. I got to a programming problem and I I

**中文**  先做 Sudoku。后来我能完成 easy 难度，再后来能做 medium，然后开始 crossword puzzles。>> 哇。>> 最终，我又遇到一个 programming problem。当时 Eclipse 刚出现，我在做很多相关工作。我完成了那个问题，

### [01:42:50–01:43:19]

**EN**  nailed it and I went, "Oh, this is still fun. I can still do this." Uh but yeah, the kind of a lost decade from 2002, let's say, to to 2011 when I joined Facebook. So it you really went from being on close to the peak of of of the industry or the professional, you know, like mountain if if if you will to just

**中文**  而且做得很漂亮。我想：“哦，这仍然很有趣，我仍然做得到。”但从大约 2002 年到 2011 年加入 Facebook，确实像一段 lost decade。>> 所以你真的从行业或者职业高峰——如果把它比作 mountain——附近，跌落到只是

### [01:43:17–01:43:46]

**EN**  I guess just finding your way. >> Yep. Do you think something similar might have happened? Was it not for this sudden crash or being a this sudden or was it just the intensity of of of everything just being pulled under out of under your feet? What do you think it was? I think that people are coming to me with these expectations that I know I can't meet

**中文**  重新寻找方向。>> 对。>> 你觉得如果没有这场突然 crash，这种事仍可能发生吗？还是说，问题就是一切突然从脚下被抽走的强度？你怎么看？>> 我觉得人们带着那些 expectations 来找我，而我知道自己无法满足，

### [01:43:43–01:44:12]

**EN**  that it's going to blow up somehow eventually for sure. You can't just live the rest of your life like that. Then that's what the classic midlife crisis is. Is the masks that used to work that felt like they used to work. You realize, oh, they're not going to work going forward. I have to be myself. And actually, they've never worked. I was just fooling myself that they had

**中文**  所以它最终肯定会以某种方式爆炸。一个人不能余生都那样活。经典 midlife crisis 就是：过去似乎有效的 masks，你发现未来不再有效；你必须做自己。而事实上，它们从来没有真正有效，只是你骗自己说有效。

### [01:44:10–01:44:40]

**EN**  worked. Yeah, I think that's it's going to come. It said 35 or 40 or 45 and mine was at 42. But then you in 2011, you got into Facebook. And I'm really intrigued by this story because at this time Facebook was uh 7 years old which meant that the median age was probably like 24 at the company and there you are an industry

**中文**  >> 对，我认为它迟早会到来。有人说是 35、40 或 45 岁，我是在 42 岁。但到了 2011 年，你进入 Facebook。这个故事很吸引我，因为 Facebook 当时只有七年历史，company 的 median age 可能只有 24 岁；而你作为行业

### [01:44:37–01:45:07]

**EN**  legend again. You you've you've had all these contributions TDDXP knowing how to build efficient software and Facebook is building efficient software in a different way and now you're showing up when you're you were 50 with these people half your age. I assume you could have gone back to consulting and do what what you've done before. >> I was trying to do the same thing. So I needed the money for sure trying to do the same things as a consultant that I'd

**中文**  legend 出现。你已经贡献了 TDD、XP，也知道如何构建 efficient software。Facebook 以另一种方式构建 efficient software，而你在 50 岁时加入，周围的人年龄只有你一半。我猜原本也可以回去 consulting，继续以前做过的事。>> 我确实试过做和以前一样的 consultant 工作。

### [01:45:04–01:45:32]

**EN**  done before and just there was no zero interest out there. I had college to pay for. Uh I have five kids and uh I knew I was going to have two tuitions for four years in a row. I needed some stability and income. Problem with book book

**中文**  我肯定需要 money，但外界对过去那套东西完全没有兴趣。我还得付 college 学费。我有五个孩子，并且知道会连续四年同时支付两份 tuition，因此需要稳定性和 income。问题是，book

### [01:45:28–01:45:56]

**EN**  publishing doesn't make much money. >> Yeah. Except in a rare cases for a guy. >> Well, in in in in the rare cases in my case where Amazon self-publishing has been invented. >> Yeah. >> And and people buy your books in bulk. But outside of that, even for uh Yeah. It doesn't. >> Yeah. I love teasing you because you're so successful. I can I know I know that even if you can't take it, you have to take it.

**中文**  publishing 赚不了多少钱。>> 对，除了少数特殊情况，比如 Gergely。>> 好吧，在我的特殊情况下，Amazon self-publishing 已经出现。>> 对。>> 而且有人批量购买你的 books。但除此之外，即使是……对，也赚不了多少。>> 我喜欢取笑你，因为你太成功了。我知道即使你受不了，也只能忍着。

### [01:45:54–01:46:22]

**EN**  >> I have to take [laughter] it here and then here here on this podcast. >> So I needed some stability number one, but number two, these people were doing nothing that was in my books and they were running a stable site. It's not perfect, but at this crazy scale, it was stable and kind of

**中文**  >> 我只能在这里忍着，[笑] 就在这个 podcast 上。>> 首先，我需要一些稳定性；其次，这些人没有做我书里的任何东西，却运行着一个稳定 site。它并不完美，但在如此疯狂的 scale 下仍然稳定，而且

### [01:46:20–01:46:49]

**EN**  unprecedented. They were expanding. Users and growth was expanding dramatically and they were innovating all at the same time. So, how in the world are these like this is a bumblebee. It can't fly according to my theories. I want to find out what's going on in there. So at that point I'm still very curious about methodology and how people get along and software

**中文**  前所未有。他们同时不断扩张，users 和 growth 急剧增长，也持续 innovation。那么，这些人究竟如何做到？按我的 theories，这就像 bumblebee，本来不可能飞。我想进去看看发生了什么。那时我仍然对 methodology、人们如何相处，以及 societal scale 的 software

### [01:46:46–01:47:16]

**EN**  development sort of in the societal scale but I also needed the money. So I joined and I think I was the first or or one of the first remote engineers. There were about 2,000 employees total, 700 engineers at that time. And uh I just wanted to parse how does it work that they have scale, growth, and innovation at the same time because I'd

**中文**  development 非常好奇，但也需要 money。所以我加入了，可能是第一位或最早一批 remote engineers。当时总共有大约 2,000 名 employees、700 名 engineers。我只想解析：他们如何同时拥有 scale、growth 和 innovation？因为我

### [01:47:13–01:47:41]

**EN**  never seen anybody do all three. You'd see people do one of those, two was rare, and all three I was unprecedented. And apparently they weren't too interested in no >> in the prior art. Can can you tell that story about your TDD class? I think you told it like many many years ago somewhere else. >> Yeah, absolutely. So I get there and I'm nervous like, you know, how am I going to contribute? I don't want to just, you

**中文**  从未见过任何人同时做到三件事。能做到一件很常见，两件很少见，三件同时出现前所未有。显然，他们对 prior art 不太感兴趣。>> 你能讲讲 TDD class 的故事吗？我想你很多年前在别处讲过。>> 可以。我刚到那里时很紧张：自己要如何贡献？不想只

### [01:47:39–01:48:07]

**EN**  know, be here for a week and then get kicked out. Uh, so there was going to be a hackathon and hackathons often t came with classes and so there was a a signup sheet for classes and I thought all right I'll give a TDD class because after all you know >> you wrote the book >> I wrote the book I invent you know blah blah blah blah and they clearly need it I could see because nobody's

**中文**  待一周就被赶走。当时要举办 hackathon，而 hackathons 经常伴随 classes，于是有一张 class signup sheet。我想，那我就开 TDD class，毕竟……>> 你写了那本书。>> 我写了书、发明了它，诸如此类。而他们显然需要它，因为看得出没人

### [01:48:04–01:48:32]

**EN**  doing it very few unit tests at that time um which just shocked me how can this be so I said, "I put on the signup sheet TDD class for me from the Kentback." Just before my class was one on Argentinian tango and just after my class was was one on uh advanced Excel techniques. When the time came for

**中文**  在做，当时 unit tests 非常少，这让我震惊：怎么会这样？所以我在 signup sheet 上写：“由 Kent Beck 本人教授的 TDD class。”我前一节是 Argentine Tango，后一节是 Advanced Excel Techniques。等到

### [01:48:30–01:48:59]

**EN**  the classes, the Argentinian Tango class was full, the advanced Excel class was full, and no one, not one, not even like a pity signup. Zero people had signed up for my TDD class. So, these engineers clearly felt like they had it already dialed in and they didn't need anything from this old guy. So, I decided, you know what? I'm just going to forget everything that

**中文**  classes 开始时，Argentine Tango class 报满，Advanced Excel class 也报满，而我的课一个人都没有。一个都没有，甚至没有出于同情而报名的人，零。这些 engineers 显然认为自己已经完全掌握，不需要从这个老家伙身上学任何东西。所以我决定：“知道吗？我要忘掉自己

### [01:48:58–01:49:28]

**EN**  I think I know about software engineering and I'm gonna try to do things. I'm just sort of monkey see monkey do. I'm going to copy what I see people doing and get feedback and see if I can learn to develop in this different style as qui quickly enough. Can I relearn software engineering fast enough not to get fired? And I ended up staying there for seven years. And what did you learn? What made it work?

**中文**  以为知道的全部 software engineering，然后开始动手做事。”基本上就是 monkey see, monkey do：复制我看到别人做的方式，获取 feedback，看看能否足够快地学会这种不同的 development style。我能否足够快地重新学习 software engineering，避免被解雇？结果我在那里待了七年。>> 你学到了什么？是什么让它奏效？

### [01:49:26–01:49:54]

**EN**  Because again, again, going back there, what Facebook did from the outside would have made no sense. They didn't have tests at the time. They were running this massive site somehow keeping it working. Oh, and they had uh young engineers who didn't have a decade or two of experience to know what mistakes to avoid. >> Mostly young engineers. >> Mostly. So, they we had we had some very senior people with great leadership skills.

**中文**  再回到当时，Facebook 从外面看根本不合理。他们那时没有 tests，却运行着这个 massive site，还不知怎么维持正常。而且 engineers 都很年轻，没有十年或二十年经验来知道要避免哪些错误。>> 大多数很年轻。>> 大多数如此，但也有一些非常 senior、leadership skills 很强的人。

### [01:49:52–01:50:22]

**EN**  >> Aha. uh who could model it. Many layers of feedback were built into the system. So we had developer machines that ran the site. So if you wanted to change the color from blue to green, you could do it on your developer machine. >> You could check out there was a mono repoish thing. >> Yeah. And so you could just change anything and see the because it was PHP, you could see the results of that change

**中文**  >> 原来如此。>> 他们可以示范做法。System 中内置了许多层 feedback。Developer machines 能运行整个 site。如果想把颜色从 blue 改成 green，可以直接在自己的 developer machine 上完成。>> 你可以 check out 当时那个接近 monorepo 的东西。>> 对，所以可以修改任何内容。因为使用 PHP，能在几秒钟内看到 change 的结果。

### [01:50:18–01:50:47]

**EN**  in seconds. So that gave you one level of feedback. Then you had code review which gave you another level of feedback. You could roll out internally more frequently. And everybody was using Facebook for all kinds of stuff, personal and internal business stuff. So whatever feature you developed, people would start using it immediately. So you

**中文**  这给你第一层 feedback。接着 code review 又带来一层。你可以更频繁地先在 internal rollout。所有人都用 Facebook 做各种事情，包括个人和内部业务。因此，无论开发什么 feature，人们都会立刻开始使用，

### [01:50:44–01:51:14]

**EN**  get another round of feedback. Then we had this phased roll out process where you'd start rolling your stuff out. If there was a problem, the blast radius would be limited to a a few million people. Not >> like automatic roll back based on signals. >> Yeah. Not the whole [clears throat] thing. Chuck Rossy's um deployment team also was another level of feedback. You had stars. They would secretly give you

**中文**  你会获得又一轮 feedback。然后还有 phased rollout process，开始逐步推出自己的内容。即使有问题，blast radius 也只限于几百万人。>> 比如根据信号 automatic rollback。>> 对，不会影响整个系统。Chuck Rossi 的 deployment team 也是另一层 feedback。Engineers 有 stars，团队会私下给你

### [01:51:12–01:51:40]

**EN**  a number of stars and if you were three stars, they wouldn't look at your stuff. But if you were a one star, you just couldn't get your stuff pushed. So that was another round of feedback. Then you deploy stuff and you'd look at the results like the observability early observability stuff. So you get more feedback about what you're doing. So feedback comes in layers like a like a filter. And if you get enough different layers,

**中文**  分配 star 数。如果是 three-star engineer，他们不会检查你的东西；但如果是 one-star，根本无法 push。这又是一轮 feedback。等 deploy 后，你还会查看 results，也就是早期 observability，从所做之事获得更多 feedback。因此 feedback 像 filter 一样分层。只要有足够多不同 layers，

### [01:51:38–01:52:08]

**EN**  >> Swiss cheese, >> it's the bad stuff sticks and the good stuff still goes through. Yeah. So the Swiss cheese model even though there's holes everywhere >> as long as they don't line up for six layers of cheese then then you're good and unit test would unit test been better maybe. I wrote unit test for the first feature I rolled out and I still caused a site event because there was some other coupled code that I didn't

**中文**  >> 像 Swiss cheese。>> 坏东西会被拦住，好东西仍能通过。>> 对。Swiss cheese model 虽然每层都有 holes，只要六层 cheese 的 holes 没有全部对齐，就没问题。Unit tests 会更好吗？也许。我为自己推出的第一个 feature 写了 unit tests，却仍造成一次 site event，因为有一些 coupled code 没有

### [01:52:06–01:52:33]

**EN**  find meaning an outage. >> Yeah. Yeah. not a bad enough one to to go through a incident review which is another another layer of that where every Friday the most senior people would get together and anybody who'd caused an incident would come in and explain here's the timeline of what happened here's what we learned here's what we need to do to avoid this ever happening again and if you went into

**中文**  找到。>> 也就是 outage。>> 对。程度还没严重到需要进入 incident review，而它又是另一层 feedback。每周五，最 senior 的人会聚在一起，任何造成 incident 的人都要进来解释：“这是发生事件的 timeline，这是我们学到的，这是为了避免再次发生需要做的事。”如果进入

### [01:52:31–01:53:01]

**EN**  incident review and you explained it that way you were fine if you went into incident review and said well ops did this and somebody else did that and blah blah blah blah you could literally get walked to the door. That was another level of feedback that made sure that the same mistakes didn't happen again and that was taken seriously. What what I know and what many people know is well Facebook for a long time did they did not do unit tests for most things. In

**中文**  incident review 后这样说明，就没事；如果说“是 ops 做了这个，其他人又做了那个”，不断甩锅，你真的可能被直接送出门。这是另一层 feedback，确保相同错误不会再次发生，而且他们非常认真。>> 我以及很多人都知道，Facebook 很长时间里大多数东西都没有 unit tests。

### [01:52:59–01:53:28]

**EN**  fact, I think if someone tried to push they would often just delete it in code review. And you know that sounds bad in itself especially at a time this was the early 2010s where testing was considered really best practice or baseline but I think what people missed is all these other layers that most places did not have. My understanding is that to to this date, Facebook the the website and mobile apps rollout infrastructure is probably the most advanced in the world in how it automatically collects signals

**中文**  事实上，我想如果有人尝试 push unit tests，code review 时经常会直接删除。从单独看这件事听起来很糟，尤其在 2010 年代初 testing 已被视为 best practice 或 baseline。但人们忽视了这些其他 layers，而大多数地方都没有它们。据我了解，直到今天，Facebook website 和 mobile apps 的 rollout infrastructure 在 automatic signal collection、

### [01:53:26–01:53:54]

**EN**  and it does the auto roll out and the auto rollbacks which just does not exist in 99.9% of places because they don't have their scale or their opportunities or or even their business right because I guess you know outages are just it's a bit different when a utility company goes down versus when Facebook might go down the the impact. >> Yes. And while I was there, so by the

**中文**  auto rollout 与 auto rollback 上可能仍是世界最先进的；99.9% 的地方没有这些，因为缺少它的 scale、opportunities，甚至 business 条件。毕竟 utility company 宕机与 Facebook 宕机造成的影响也不相同。>> 对。而我在那里时，

### [01:53:51–01:54:21]

**EN**  time I left 2017, Facebook was a very different place than when I joined. Over the first couple of years, Facebook became much more like a utility. The big site events, the big negative incidents, we the the the notable ones would get names. And so there was one called the call of cops sev and it was the first time that people called 911 when Facebook went down.

**中文**  到 2017 年离开，Facebook 已与刚加入时非常不同。最初几年，Facebook 越来越像 utility。大型 site events、严重 negative incidents 中，值得注意的会得到名字。其中一次叫“Call the Cops SEV”，因为那是 Facebook 宕机时人们第一次拨打 911。

### [01:54:18–01:54:47]

**EN**  >> Wow. It was like oh crap we we need to take this even more seriously than we've been taking it. >> Okay. >> Because we're social infrastructure and people just expect it to absolutely work. And what was it like inside Facebook? How the engineering culture uh how engineers work compared to the rest of the industry? because now you you were now in in this bubble which worked very differently. There was very little planning.

**中文**  >> 哇。>> 当时我们想：“糟了，必须比过去更认真对待它。”>> 明白。>> 因为我们已经是 social infrastructure，人们期待它绝对正常工作。>> Facebook 内部是什么样？Engineering culture、engineers 的工作方式与行业其他地方有何不同？因为你当时进入了一个运作方式完全不同的 bubble。>> 那里几乎没有 planning。

### [01:54:44–01:55:13]

**EN**  There were no deadlines as such. Zuck would say, "I want to increase the resolution of photos, you know, by a factor of four." And the engineers would say, "Well, we can't do that because blah blah blah." And he'd say, "Yeah, I understand. Still want to see the photos looking better." And then people would go and do it. and it would take as long as it would take or you'd work on it for a while and if it just couldn't for

**中文**  也没有真正意义上的 deadlines。Zuck 会说：“我想把照片 resolution 提高四倍。”Engineers 会说：“做不到，因为这样那样。”他会回答：“对，我明白，但还是希望照片看起来更好。”然后人们就去做，花多久就花多久；或者做一阵后，因为某种原因确实无法实现，再换另一件事。

### [01:55:10–01:55:39]

**EN**  whatever reason then you'd switch to something else. Early on I had lunch with somebody who'd come from Microsoft and said the thing about Facebook is if you're at Microsoft and you have a good problem to solve, you will defend that problem tooth and nail because there aren't enough problems to go around. And at Facebook, if you're solving a problem and somebody else starts solving it, you just go on to the next thing because

**中文**  早期，我和一位从 Microsoft 来的人吃 lunch。他说 Facebook 的特点是：在 Microsoft，如果有一个好问题可解决，你会拼死保住它，因为可分的问题不够多；在 Facebook，如果正在解决一个问题，却发现其他人也开始做，你会直接去做下一件事，因为

### [01:55:37–01:56:05]

**EN**  there's always some other trash fire burning someplace else. And that's certainly no longer true at Facebook. It's opportunity starved. Then it was opportunity rich. I I accidentally saved $5 million a year during my boot camp. No way. I was looking that the photos code which at that time was a single PHP file that I printed it out and taped it all

**中文**  总有别处的 trash fire 在燃烧。今天 Facebook 肯定不再如此，现在缺少 opportunities；那时却 opportunity-rich。我在 boot camp 时意外每年省下了 500 万美元。>> 不会吧。>> 我在看 photos code。当时它是单个 PHP file，我把它打印出来，再全部粘在一起，

### [01:56:02–01:56:30]

**EN**  together. It was 18 pages the whole that was photos and it was the biggest photos site in the world at that time. And I looked at it I thought man there's just there's something wrong here. We were very careful to reduce the number of round trips between the front-end code and the cache or d even worse databases. And so I looked at it and I thought there's some I realized, oh yeah, they

**中文**  一共 18 页，那就是整个 Photos，而它当时是世界最大的 photo site。我看着它想：“这里一定有什么不对。”我们非常小心地减少 front-end code 与 cache，或更糟的 databases 之间的 round trips。看了一阵，我意识到：“哦，对，他们

### [01:56:28–01:56:56]

**EN**  this can be made more parallel. So I made that switch and a week later the photos manager came to me and said, "Oh, ops noticed that the demand on the photos machines suddenly dropped when we rolled your stuff out and they they can reccommission enough servers to save $5 million a year." And I was just farting around, you know? So there it was like the the gold rush and there's just gold nuggets

**中文**  可以让这部分更 parallel。”于是我作出改变。一周后，Photos manager 来找我说：“Ops 注意到你的东西 rollout 后，photos machines 的 demand 突然下降。他们可以退役足够多 servers，每年节省 500 万美元。”而我只是在随便试。因此那里就像 gold rush，gold nuggets

### [01:56:54–01:57:20]

**EN**  sitting on the ground and you just pick them up. That not true today and even by the time that I left it was it was no longer true in that same kind of sense. But you could just be a programmer and do programmer stuff and you had enormous leverage which was part of the magic of it at that time. This is preIPO. The middle management, middle uh engineering management like first and

**中文**  直接躺在地上，弯腰捡起来就行。今天已经不是这样，即使到我离开时也不再如此。但那时你只要做一个 programmer、做 programmer 的事，就能获得巨大 leverage，这也是当时 magic 的一部分。那是在 IPO 之前。Middle management，也就是第一层和

### [01:57:19–01:57:49]

**EN**  second level of engineering management all had generational wealth in vested options but had to go public. So that tier was very focused on global optimization, not local optimization. they would give up. You know, you you talk to some team and they're like, "Well, we could really use you, but I think you really should go here cuz that's what's going to make my stock options go up the most."

**中文**  第二层 engineering management，都持有一旦上市就会带来 generational wealth 的 vested options。因此，那一层关注的是 global optimization，而不是 local optimization。他们愿意放弃局部利益。比如你和某个 team 交谈，对方会说：“我们真的很需要你，但我觉得你应该去这里，因为那样能让我的 stock options 涨得最多。”

### [01:57:48–01:58:17]

**EN**  >> Yeah. >> Which is crazy behavior once you get into this scarcity desert kind of mindset. Like nobody's going to act that way. But at that point, that was it was extremely novel. I collected a whole uh series of this. I found this manuscript the other day, how Facebook works. There were a bunch of policies that I had never seen before. One of which was 50/50 goals. So, six-month performance review cycle. At

**中文**  >> 对。>> 一旦进入 scarcity desert 的 mindset，这种行为就太疯狂了，没人会这样做。但在当时，它极为新颖。我收集过一整套案例，前几天还找到一份题为《How Facebook Works》的 manuscript。那里有许多我此前从未见过的 policies，其中一项是 50/50 goals。Performance review 每六个月一次。在

### [01:58:15–01:58:44]

**EN**  the beginning of six months, you'd say, "Here, here are the thing. Here are my goals." And when you reviewed those with your manager, if you had accomplished half of the goals, you get A+. If you accomplished everything you set out to accomplish, people, you know, you're sandbagging. you're not trying hard enough. You're not risking enough. You didn't learn anything over the course of the six months. If you accomplished none of your goals, you were just out. So

**中文**  六个月开始时，你会说：“这些是我的 goals。”与 manager review 时，如果完成一半 goals，就拿 A+；如果完成所有预定 goals，别人会说你在 sandbagging，说明不够努力、不够冒险，六个月里什么也没学到；如果一个 goal 都没完成，那就直接出局。所以

### [01:58:42–01:59:11]

**EN**  engineers and engineering managers would get fired at a much sooner than I'd ever seen anywhere before, which creates anxiety, but it also like you knew you didn't have to protect yourself from slackers. because everybody else was under the same kind of pressure and you were all trying to work make the world more open and connected. Now it

**中文**  engineers 和 engineering managers 被解雇的速度，比我此前在任何地方见过的都快。这会制造 anxiety，但你也知道不必防着 slackers，因为其他人承受同样压力，大家都在努力“让世界更 open、更 connected”。当然，后来证明世界也可能过于 open 和 connected，不过那是另一个话题。

### [01:59:09–01:59:38]

**EN**  turns out the world can be too open and connected but that's a separate set. >> Yeah. But it feels like you were there during the golden years now. Now now it's morale is is terrible with all the engineers are being assigned without asking them to do data labeling. It's all turning into very different uh culture. But I guess it just shows that places do change. But it seemed that was a time where Facebook was growing. The mission was very interesting. There were

**中文**  >> 对。但感觉你当时身处 golden years。今天 morale 很糟，所有 engineers 都在没有被征求意见的情况下被分配去做 data labeling，culture 已经完全不同。不过这也说明 places 会改变。你在 Facebook 增长、mission 很吸引人、opportunity-rich 的时期在那里，也负责 coaching engineers。对于那些能进入 Facebook、本就很出色的人，你能以什么方式帮助他们，又真的帮助了吗？

### [01:59:35–02:00:02]

**EN**  as you said more it was opportunity rich and you were coaching coaching engineers there. What did you learn about folks who are already I guess pretty stand out if they got into Facebook. How in what ways could you help them or did you help them? So about a year in I'd been working on a C++ project infrastructure for the Facebook Messenger product which

**中文**  >> 加入大约一年时，我正在做一个 C++ project，为 Facebook Messenger product 构建 infrastructure。Messenger 已经发布并非常成功，有点超出原有 infrastructure 的承载，需要支持。

### [01:59:58–02:00:27]

**EN**  had come out become very successful kind of out outgrown its infrastructure needed support and I was not a good C++ programmer and so I was not going to stand out there. uh I had six months to turn stuff around and in that uh the missing years I kept body and soul together by doing

**中文**  但我不是优秀的 C++ programmer，所以无法在那里脱颖而出。我有六个月时间扭转局面。而在那段 missing years 里，我靠做

### [02:00:24–02:00:51]

**EN**  coaching, remote coaching. And so I I knew I'd had I don't know hundreds of hours, maybe thousands of hours of of coaching interaction. And uh one of my friends at Facebook, a old-timer named Peter Demov said, "You've talked about this coaching stuff. Why don't you just start doing that? And Facebook was very much a you're an engineer. You feel like doing

**中文**  remote coaching 勉强维持生活，因此已经拥有几百、也许几千小时的 coaching interaction。Facebook 一位老员工朋友 Peter Deng 对我说：“你一直谈 coaching，为什么不直接开始做？”Facebook 很强调：你是 engineer，想做

### [02:00:49–02:01:16]

**EN**  a thing, you do the thing. If it doesn't work out, you take the consequences. If it does work out, you get the rewards. So, I thought, "All right, I'm I'm a coach now." So, I hung out my shingle and I found my first three students and started with daily one-hour conversation, which turns out to be way too much for 3 weeks or four weeks or something.

**中文**  一件事就去做；如果失败，承担 consequences；如果成功，获得 rewards。所以我想：“好，我现在是 coach。”我挂出招牌，找到前三名 students，开始每天进行一小时 conversation，事实证明对持续三四周来说强度太大。

### [02:01:14–02:01:41]

**EN**  And two of the students worked out well and one of them got fired. But uh yeah, they told other people so people would come to me and ask for this coaching thing which evolved into a program called good to great. And the idea was I'll talk with programmers who who are good but have kind of stalled. You know

**中文**  其中两名 students 进展很好，一名被解雇了。不过他们告诉了其他人，于是更多人来找我做 coaching，后来发展成名为 Good to Great 的 program。Idea 是，我与那些表现不错但已经停滞的 programmers 交谈。

### [02:01:38–02:02:06]

**EN**  there's this punctuated equilibrium that happens where people get better and then they they gather experiences without growing much and they need a little kick to get them up to the next. And so that's the good to great part. And I was coaching people one-on-one. I'd coach six people at a time, which is

**中文**  人会经历 punctuated equilibrium：先获得提升，接着只积累 experiences，却没有明显成长，需要有人轻推一下，进入下一阶段。这就是 Good to Great 的含义。我一对一 coaching，每次同时带六个人，

### [02:02:03–02:02:32]

**EN**  exhausting, but I was also matching up other senior engineers with junior engineers for coaching. And then we'd we would have the meta conversation of coaching the coaches. tell me about something that happened this week that was a you didn't know how to react to or was difficult or we'd all talk. I brought in a a storytelling consultant

**中文**  非常耗人。同时我也把其他 senior engineers 与 junior engineers 配对做 coaching，接着进行关于 coaching 的 meta conversation：“讲讲这周发生的一件事，也许你不知道如何回应，或者觉得很困难。”然后大家一起讨论。我还请来一位 storytelling consultant

### [02:02:28–02:02:56]

**EN**  to to do an offsite. Uh, I hired uh Aaron Oorc uh was my administrator cuz this is not my strong suit. Kind of lining stuff up. And she worked with HR to analyze the program and discovered that the people who'd been my students were twice as likely to get promoted in the year

**中文**  举办 offsite，并雇 Aaron Oorc 做 administrator，因为安排事情不是我的强项。她和 HR 一起分析 program，发现接受过我 coaching 的人，在随后一年获得 promotion 的概率，是背景相近但未接受 coaching cohort 的两倍。

### [02:02:53–02:03:20]

**EN**  following coaching than a cohort that was the sameish. but didn't get coaching. So, it it really worked to to accelerate the career progression of the people. I didn't handle the politics of it very well. So, this was this was learning and development outside of the learning and development organization which and I didn't understand that that

**中文**  所以它确实加快了参与者的 career progression。我不太擅长处理其中的 politics。这是在 Learning and Development organization 之外做 learning and development，我没意识到这会成为问题。

### [02:03:18–02:03:47]

**EN**  was going to be an issue. So, by the time I left there were big fans of Good to Great, but there were also people who didn't like the fact that it was around. So I ended up coaching probably 200 people individually. I would write classes that I would give and that I'd teach other people then to give that thousands more of engineers went through it. And just before I left, I went to an

**中文**  所以到我离开时，Good to Great 有强烈支持者，也有人不喜欢它的存在。我最终可能单独 coaching 过 200 人；还会编写自己教授的 classes，再教别人去讲，使数千名 engineers 参加过。离开前不久，我参加了一次

### [02:03:44–02:04:13]

**EN**  offsite with the top 1% of Facebook engineers. And out of the 100 plus people, 100ish people there, 10 of them were former students of mine who had gotten promoted to that level. So I felt really good about h how that all worked out. That was a kind of back to Ward. That was a kind of interaction that I was able to

**中文**  Facebook top 1% engineers 的 offsite。现场大约 100 多人，其中 10 人是我的 former students，并已晋升到那个 level。我对结果很满意。这又有点回到 Ward：我能够与 Ward 进行的，也正是类似 interaction。

### [02:04:10–02:04:37]

**EN**  have with Ward. It wasn't It wasn't It's not always pleasant. It's not a pat you on the head and you're going to be fine. It's a It's a don't like no, you're screwing this up. Go try this thing. Tell me how that works. Oh, you didn't try the thing. Oh, you don't want to work on this? Okay, we're done. Quite uncompromising. uh I say coaches are are there to

**中文**  它并不总是令人愉快，也不是拍拍你的头说“一切都会好的”。而是：“不，你把事情搞砸了。去试这个，再告诉我结果。哦，你没试？你不想认真做？那就结束。”相当不妥协。我说 coaches 的职责是

### [02:04:35–02:05:04]

**EN**  identify and induce productive discomfort but the coaching program as a whole by the time I w I left I had great great grand students I'd coached people who became coaches who coached people who become coaches who now were coaching I think there's an element to that a way of learning in that kind of style that just can't be

**中文**  识别并诱发 productive discomfort。到我离开时，整个 coaching program 已经有了我的 great-grandstudents：我 coaching 的人成为 coach，再 coaching 别人成为 coach，后者又在 coaching。我认为，这种 style 的学习包含某种无法

### [02:05:01–02:05:30]

**EN**  duplicated. So when Daario says we're going to eliminate software engineering, you don't understand what software engineers do. We're going to transform some of the activities that go into software engineering. Absolutely. I'm having a blast. But the uh this idea that we're code monkeys

**中文**  复制的元素。因此，当 Dario 说“我们将消除 software engineering”时，他并不了解 software engineers 做什么。我们会改变 software engineering 中的一些 activities，当然。我自己玩得很开心。但那种把我们看成 code monkeys 的想法——

### [02:05:25–02:05:54]

**EN**  requirements and jolt col in code out. Come on. To be honest, I do sense that Daario has a disdain for developers, software engineers, should I say. Or I've never seen an indication that he likes them or that he was one. No, he clearly wasn't one. This is fine. You can be it's like a physics background or something like that. That's fine. And you can say I'm going to replace your

**中文**  requirements 加 Jolt Cola 输入，code 输出——得了吧。>> 老实说，我感觉 Dario 对 developers、software engineers 带有 disdain，或者我从未看到任何迹象表明他喜欢他们，或自己曾经是其中一员。>> 他显然不是。没关系，他可以有 physics background 或其他背景，都没问题。他也可以当面对我说：“我要取代你的

### [02:05:52–02:06:20]

**EN**  job to me. I don't consider that disrespectful. That that's ignorant. By the way, can we talk about now you you we bring this up every you brought this up multiple times in our discussions. People awfully want to replace us developers and we should probably reflect a little bit on that. You've had time to reflect why why does this keep coming back? >> Just we're kind of sometime. I mean, that's the that is the long and

**中文**  工作。”我不认为那是 disrespectful，而是 ignorant。顺便说，我们能谈谈这件事吗？我们的讨论里你已经多次提到：人们特别想取代 developers。我们也许应该反思一下。你已经思考过一段时间，为什么这种事不断重演？>> 简单说，因为我们有时就是混蛋。这就是

### [02:06:17–02:06:44]

**EN**  the short of it. My perspective is someone on the spectrum who's been an engineer for a long time, whose dad was an engineer, whose grandfather was a geek, you know, in his own in his radio kind of way. So, I come by this all honestly. We don't necessarily have good emotional regulation skills. Don't have natural empathy. It's why I play poker, by the way, so I

**中文**  全部。我是一名 spectrum 上的人，做了很久 engineer；父亲是 engineer，祖父以自己的 radio 方式也是 geek，所以这些特质确有家族来源。我们未必拥有良好的 emotional regulation skills，缺少天生 empathy。顺带一提，这也是我打 poker 的原因，因为当 empathy 不好时，

### [02:06:42–02:07:10]

**EN**  get feedback when I have don't have good empathy. We often times are more direct than other people can easily handle. >> Yeah. In the in the business setting. Yeah. >> I'm just telling the truth or I was just asking a question. Those are the most hideous things that that I say because Okay. Yeah. You were just asking a question, but you're being an asking that question. And you I didn't

**中文**  我会得到 feedback。我们说话经常比别人容易接受的程度更直接。>> 尤其在 business setting。>> “我只是在说实话”，或者“我只是问了一个问题。”这是我说过最糟糕的话。好吧，对，你只是问问题，但问这个问题时你表现得像个混蛋，而你……我当时没有

### [02:07:06–02:07:36]

**EN**  realize it, but I was cuz that's how people react. So I don't expect anybody to cut me any slack. There are people who say, "Well, it's up to the rest of the world to adapt to the ways that I'm weird." It's just not because I mean, it's not going to happen. So, learning empathy, learning how to read body language,

**中文**  意识到，但人们的反应说明事实如此。我不期待别人迁就我。有人会说：“世界其他人应该适应我的怪异方式。”可事实并非如此，因为这根本不会发生。所以，学习 empathy、读懂 body language、

### [02:07:33–02:08:02]

**EN**  learning how to read tone of voice, this is not natural skills, but they're skills. They're learnable. I'll never be as good at them as my partner who's social genius, but I can be not horrible at those kind of skills. things like uh belligerance. That's a common social strategy

**中文**  理解 tone of voice，这些都不是天生 skills，但仍然是 skills，可以学习。我永远无法像我的 partner 那位 social genius 一样出色，但至少能不再糟糕。类似 belligerence 也是我们这类人常见的 social strategy，

### [02:07:57–02:08:26]

**EN**  for people like me and has been a social strategy of mine. There's some disagreement between us and the way I resolve it is you know how long is this going to take? Four weeks has to be done in two weeks. >> Yeah, that's an invitation to have a conversation. When I say four weeks and you say no, it has to be two weeks. I don't have to shrink and say, "Okay, I'll try and get it done."

**中文**  我自己也用过。比如我们意见不一，我解决的方式是问：“这要多久？”“四周。”“必须两周完成。”>> 对，那其实是在邀请一场 conversation。当我说四周、你说“不，必须两周”时，我不必畏缩着说：“好吧，我试着完成。”

### [02:08:23–02:08:53]

**EN**  I also don't have to say, "Yeah, go to yourself, jackass." That neither of those responses help. Say, "All right, well, let me let me understand your needs." Not an easy task for me, but I can I can do it. I have a little checklist, you know, the first Terminator movie where where he's got the little uh pull down menu of responses. Yeah, it feels like that often times. But it's better to have the pull down

**中文**  也不必回一句：“去你的，混蛋。”这两种 response 都没帮助。我可以说：“好，让我先理解你的 needs。”这对我不是容易的任务，但能做到。我脑中有一个小 checklist，就像第一部《Terminator》里，它会拉出一个 responses menu。对我而言，很多时候就是这种感觉。但有一个下拉

### [02:08:51–02:09:20]

**EN**  menu of responses than to do something that alienates the other person and ends the conversation before it's actually finished. I think it's those kinds of things. It behooves us to learn how to communicate in a style that other people can actually listen. Which is why I bring in analogies from the the finance world, from sports, from history, from every place I can find in a desperate

**中文**  responses menu，也比做出 alienate 对方的事情、在 conversation 真正结束前强行终止要好。我们应该学会以其他人真的能听进去的 style 沟通。正因如此，我会从 finance、sports、history 等所有能找到的领域引入 analogies，拼命

### [02:09:18–02:09:45]

**EN**  attempt to understand other people and help them to understand my perspective and what that brings to the situation in a way that they can actually comprehend it. Jumping to the present times where now for a couple of years we we've had AI LLMs but now we just call it AI or as you call the genie. >> Yeah. >> And >> it grants wishes but it's not actually what you want >> and it has some interesting

**中文**  尝试理解其他人，也帮助他们理解我的 perspective，以及它能以他们真正可理解的方式为当前 situation 带来什么。>> 跳到现在，过去几年已经有 AI LLMs，不过今天只叫 AI，或者按你的称呼叫 genie。>> 对。>> 它会实现 wishes，却不会真正给你想要的东西。>> 而且有一些有趣的

### [02:09:44–02:10:14]

**EN**  characteristics. I'm wondering how do you think this will change individual developers work and also teams companies tech companies are building software. What are you seeing so far? Talked a lot about how what software engineering really is. We talked about the understanding the communication the the learning as you are coding and it seems that that is

**中文**  characteristics。我想知道，你认为它将如何改变 individual developers 的工作，以及 teams、companies、tech companies 构建 software 的方式？你目前看到了什么？我们谈过 software engineering 真正是什么，谈过 understanding、communication，以及在 coding 时发生的 learning。看起来这些

### [02:10:11–02:10:41]

**EN**  definitely shrinking if not being taken away. That's a choice. But I'll let you finish your question. >> Just look looking across the industry. >> Yes. >> And and it also feels that there's this analogy which what you said when uh when interfaces were out that people overdoing the interfaces and it feels it's it's like this. We have these AI agents or genies as as we call and people are using it everywhere and they're going mad and forgetting some of the sensible stuff.

**中文**  确实正在缩减，甚至被拿走。>> 那是一种选择，不过你先把问题问完。>> 我只是放眼整个 industry。>> 对。>> 也让人想到你说过的 interface 类比：interfaces 刚出现时人们过度使用它们。现在感觉也一样。我们有 AI agents，也就是 genies，人们把它用在所有地方，开始疯狂，忘掉了一些 sensible 的做法。

### [02:10:37–02:11:05]

**EN**  >> Yeah. What an open-ended question. So one of the things is that the pace of development is definitely accelerated. One thing I wonder the pace of business hasn't accelerated though and that mismatch is going to become more and more apparent. So I was at a client they were showing they were spending $2 million a year on some SAS

**中文**  >> 这是个极其开放的问题。其中一点是，development pace 肯定加快了。但我想知道的是，business pace 并没有加快，这种 mismatch 会越来越明显。我去过一个 client，他们每年为某个 SaaS

### [02:11:03–02:11:33]

**EN**  product. somebody vibecoded a replacement for it that was better for their uses and didn't cost $2 million a year. How is that vendor going to reply to that? Back in the olden times two years ago, they'd have years to respond to, "Yeah, we have this add-on. It costs $2 million a year, but people don't really like it, and eventually they're going to find a

**中文**  product 支付 200 万美元。有人 vibe-coded 了一个 replacement，更符合他们的 use cases，而且每年不用花 200 万美元。那个 vendor 要如何回应？在遥远的过去，也就是两年前，他们会有几年时间应对：“我们有这个 add-on，每年收费 200 万美元，但用户并不真正喜欢，最后会找到

### [02:11:30–02:11:58]

**EN**  replacement. we have five years to respond to that or three years to respond to that. Now they've got we have this add-on, we've been able to charge for it. That's going to go away in a month. On their side, they could they code up a replacement that was better. Yeah, they could code up they they're seeing the same kind of acceleration everybody else is. But is the need for a

**中文**  replacement。我们还有五年或三年时间回应。”现在却变成：“我们一直能为这个 add-on 收费，但一个月后收入就会消失。”从 vendor 一侧，他们能否也快速写出更好的 replacement？可以，他们同样看到 acceleration。但某项 replacement 的需求，是否还要依次通过

### [02:11:55–02:12:24]

**EN**  replacement going to go through their customer service to marketing to sales to business development to the product organization. Da da blah blah blah blah blah blah. That's that chain is designed to take five years and now they have a month or they're going to be losing big chunks of revenue. This isn't AI's fault. this is just an acceleration

**中文**  customer service、marketing、sales、business development、product organization 等等？这条 chain 本来设计为耗时五年，而现在只有一个月，否则就会损失大块 revenue。这不是 AI 的错，只是 acceleration，

### [02:12:21–02:12:51]

**EN**  and their business process is just not prepared to respond in time. As my my personal definition of agile is uh responds in time and they're not prepared to deal with the new pace. Like you you're driving a tractor and all of a sudden you're in a race car. still wheels, still an engine, but are your

**中文**  而他们的 business process 没准备好及时回应。我对 agile 的个人定义是 responds in time，他们没有准备好适应新 pace。就像原本开 tractor，突然换成 race car。仍然有 wheels 和 engine，但你的

### [02:12:46–02:13:16]

**EN**  skills prepared to steer that car? Not how fast can it go, but how fast can you get from point A to point B on a windy mountain road? You're used to driving a tractor and now you're in a Ferrari. It's not the car's fault, but I think that's that's a trend that I expect to play out that we're going to see

**中文**  skills 准备好驾驭它了吗？重点不是 car 能多快，而是在 winding mountain road 上，你能多快从 A 点到 B 点。你原先习惯开 tractor，现在却坐进 Ferrari。不是 car 的错。但我预期这种 trend 会继续展开，我们将看到

### [02:13:13–02:13:42]

**EN**  companies fail because they don't respond in time. They've they've been fat and happy. Kind of newspapers with uh an another analogy, newspapers with classified ads. classified ads paid for reporters and paper print, you know, stuff printed on paper and taken around to everybody's houses and then classified ads went away

**中文**  一些 companies 因为不能及时回应而失败。它们过去活得太舒服。另一个 analogy 是 newspapers 和 classified ads。Classified ads 曾为 reporters、paper、printing 以及把报纸送到每家每户的系统买单，后来 classified ads 消失，

### [02:13:38–02:14:06]

**EN**  and journalism had to respond and it's responded well in some ways but poorly in others and we're less served by local journalism than we were before all this happened. Okay. So now we have people who've been able to rely on switching costs to protect their profits and the switching costs just drop to zero. Their

**中文**  journalism 不得不回应。有些方面应对得好，有些很差；今天 local journalism 对我们的服务已经不如从前。现在，一些 companies 一直依靠 switching costs 保护 profits，而 switching costs 突然降到零。它们的

### [02:14:05–02:14:33]

**EN**  profits are going to drop to zero and some people aren't going to survive that change. Some people will the flip side. So you're paying for some service. You think I could vibe code something better. And so you do, but you only solve this much of the problem. It's the >> the the part the iceberg iceberg >> you can see that you can vibe code the part of the iceberg that you can see.

**中文**  profits 也将归零，有些无法挺过变化。再看另一面：你正在为某项 service 付费，觉得“我可以 vibe code 一个更好的”，于是动手，但只解决了问题的一小部分。>> 就像 iceberg 露出的部分。>> 你只能 vibe code 自己看得到的 iceberg 部分。

### [02:14:30–02:14:59]

**EN**  >> So uh I'll talk my own book. I was at Gusto for three years does small business payroll. Somebody said, "Well, I just asked Claude, I have this many hours at this rate. I'm in this tax bracket. What should my paycheck be?" And it tells me all the numbers. I don't need gusto anymore. And I'm just like, oh, you have no idea. Go ahead, run your own payroll for a quarter and then

**中文**  >> 用我自己的经历举例。我在 Gusto 工作过三年，它做 small-business payroll。有人说：“我只要问 Claude：我按这个 rate 工作了这些 hours，处于这个 tax bracket，paycheck 应该是多少？它会告诉我所有数字，我不再需要 Gusto。”我只能说，你根本不知道自己没看到什么。尽管自己运行一个季度的 payroll，然后

### [02:14:56–02:15:25]

**EN**  figure out what all of the reports you need to submit to the various tax agencies and different states and I live in this one, but I work in that one and the company's based here and now what should the number >> like? There's so much that goes on to correctly, compliantly execute payroll that isn't gross pay, net pay. So, we're going to see people

**中文**  再搞清楚需要向各个 tax agencies 和不同 states 提交哪些 reports：“我住在这个州，却在那个州工作，company 又设在这里，现在数字应该是多少？”正确且 compliant 地执行 payroll，远远不只是 gross pay 和 net pay。所以我们会看到一些人

### [02:15:24–02:15:51]

**EN**  get into those where they're like, "Well, I vibe code the tip of the iceberg. I throw away the rest of the iceberg and now I'm in trouble because now I don't know what to do. Now I get to these downstream problems that I didn't even know existed." So, we're going to see on the on the side of the the the vibe coding replacers, we're going to see that kind of a naivity play

**中文**  陷入这种处境：“我 vibe code 了 iceberg 顶端，然后把余下 iceberg 全部扔掉，现在遇到麻烦，因为不知道该怎么办；接着碰上此前根本不知道存在的 downstream problems。”在试图用 vibe coding 取代现有系统的一方，我们会看到这种 naivety

### [02:15:48–02:16:17]

**EN**  out. And what about for software engineers? Cuz a lot of the identity for engineers was around being able to craft code, caring about the craft, being able to visualize a lot of these things. And these tools are getting really good at doing a bunch of that stuff. What advice do you give to to these folks on okay well there's this new technology change if you'd like to stay top of the game

**中文**  不断上演。>> 对 software engineers 呢？许多 engineer identity 建立在 craft code、关心 craft，以及在脑中 visualise 这些事物的能力上。这些 tools 已经非常擅长完成其中很多工作。对于希望面对新 technology change、保持顶尖水平的 software engineers，你会给什么建议？

### [02:16:15–02:16:44]

**EN**  software engineer what activities can you do what mentality change should you do so the my inspirational motto is nobody knows so people come to me they say well how does TDD apply in in the augmented coding world I said nobody knows it's not just that I don't know is nobody knows. The big lesson I learned at Facebook was about that there are three different

**中文**  应该做哪些 activities，又该改变什么 mentality？>> 我的 inspirational motto 是：“没人知道。”有人来问：“TDD 在 augmented coding world 里如何适用？”我说：“没人知道。”不是只有我不知道，而是没有人知道。我在 Facebook 学到的重要 lesson，是 product 或 software development 有三种不同的

### [02:16:43–02:17:10]

**EN**  phase states of of product of software development. This exploration phase where you got to try a bunch of different things because you can't predict. Then something takes off and we've talked about a bunch of those examples from my career. And the discipline of riding that rocket up once it's been lit is very different than the discipline and it is a discipline of

**中文**  phase states。第一种是 exploration phase，你必须尝试很多不同东西，因为无法预测。接着某样东西开始爆发——我们已经谈过我职业生涯中的很多例子。一旦 rocket 被点燃，驾驭它上升所需的 discipline，与 exploration 所需的 discipline 完全不同；而 exploration 本身也需要 discipline。

### [02:17:07–02:17:34]

**EN**  exploring the space. So while you're expanding you you you focus very intently and it can be and it might even be unsustainable but it doesn't last very long and then there's another you get to extracting value from that to feed the next set of explorations. This is 3x, >> right? Explore it. >> This is yet another model that you came

**中文**  探索整个 space。到了 expanding 阶段，你会高度集中精力；它可能不可持续，但持续时间不长。接着进入另一个阶段：从成果中 extract value，为下一批 exploration 提供资源。这就是 3X。>> 对，Explore……>> 这又是你大概在 2016、2017 年提出的 model。

### [02:17:31–02:17:59]

**EN**  up sometime in 2016 17. >> Yeah. 15 16 I finally figured out figured out. I felt that I understood how Facebook had been able to be large, growing, and innovative at the same time. And it was by treating projects at different phases in a completely different style. So explore >> explore is you you're just looking for

**中文**  >> 对，2015、2016 年，我终于想明白了。我觉得自己已经理解 Facebook 为何能同时做到 large、growing 和 innovative：它以完全不同的 styles 对待处于不同 phases 的 projects。先说 Explore。>> Explore 就是在寻找

### [02:17:56–02:18:24]

**EN**  something and you can't predict. So you have to try as many it's a numbers game. You try as many uncorrelated experiments as you can for the cheapest price. Then you expand >> and then something takes off and then you're in this expansion phase where instead of trying a little bit of everything, you focus on the one thing that's working and you discard everything else and you overcome

**中文**  某样东西，而且无法预测，因此必须尽可能多尝试。这是个 numbers game：以最低成本进行尽可能多、彼此不相关的 experiments。然后是 Expand。>> 当某样东西开始起飞，就进入 expansion phase。此时不再每样浅尝一点，而是集中在唯一有效的东西上，丢弃其他一切，接连克服

### [02:18:21–02:18:48]

**EN**  obstacle after obstacle after obstacle and then you get to a certain size and now you can predict growth and you can say you can write a if we roll out our product in a new country, we've done five countries already, here's the playlist and you know how to do that. That's that extract phase. You've reached economies of scale. You can make small tweaks and it makes a big

**中文**  一个又一个 obstacle。等达到一定规模，就能预测 growth，比如说：“如果把 product rollout 到新 country，我们已经做过五个 countries，这是 playlist。”此时知道怎么做，进入 Extract phase，已经达到 economies of scale。一些很小的 tweaks 就能带来巨大

### [02:18:46–02:19:14]

**EN**  difference. You have a long life span also. So how you write code, how you manage projects, who you hire, how many people, what the org structure is is completely different in the three phases. For 20 years, we've been up in that extract stand. There's been a playbook. It's evolved a little bit, but you know, oh, we have

**中文**  差别，而且 system 有很长 lifespan。因此，三个 phases 中如何写 code、如何管理 projects、雇用谁、多少人、org structure 如何，都完全不同。过去 20 年，我们一直处于 Extract 立场，已经有 playbook。它有一点演化，但大致会说：“哦，我们

### [02:19:11–02:19:39]

**EN**  too many bugs in production. Here's the three things you can try. Oh, you know, we need to accelerate development. Here's the things you can do. Now, people sometimes didn't do the things, but the playbook existed. And to be a senior engineer meant that you knew the playbook. And the more you knew the playbook, the more effective you could be. If you knew, oh well, I also know

**中文**  production bugs 太多，这里有三件可以尝试的事。”“我们需要加快 development，这里有可做的事。”人们有时不执行，但 playbook 始终存在。所谓 senior engineer，就是知道这套 playbook；知道得越多，就越有效。如果你还知道：“哦，我也知道

### [02:19:37–02:20:06]

**EN**  how to scale backends. You know, I know about item potency and you know what advantages that brings if I implement it and so on. Nobody knows now. That playbook has been wiped clean and people whose identity is I know the playbook are now terrified. Who who am I? Now, it turns out that the skill of writing a playbook is

**中文**  如何 scale backends，知道 idempotency，以及实现它会带来什么 advantages。”就更加出色。但现在没人知道，playbook 被彻底擦掉了。那些把 identity 建立在“我知道 playbook”上的人会非常害怕：“那我是谁？”但事实是，编写 playbook 的 skill

### [02:20:05–02:20:34]

**EN**  completely different than the skill of applying a playbook. That stuff that we did in the the days of objects, that was writing a playbook. That was that explore part of the curve. It's not that there isn't a way to be effective when you don't have a playbook. It's just that it's a different game. And the people who don't feel safe without a playbook need

**中文**  与应用 playbook 的 skill 完全不同。我们在 objects 早期做的工作，就是编写 playbook，是曲线的 Explore 部分。没有 playbook 时并非不存在有效做法，只是 game 不同。那些没有 playbook 就感到不安全的人需要

### [02:20:31–02:20:59]

**EN**  to turn their heads around to like, well, nobody knows. It's not like there's some secret playbook for genie based development that, you know, if only I paid a million dollars, I could have it there. It just doesn't exist. When we get glimpses of it, it changes next week. like small changes to the inputs cause large changes to the outputs.

**中文**  转换思维：“没人知道。”并不存在一份 genie-based development 的秘密 playbook，只要付一百万美元就能获得；它根本不存在。我们偶尔看到一点端倪，下周却又变了。Inputs 的小变化会导致 outputs 的大变化。

### [02:20:55–02:21:23]

**EN**  So we're all back in explorer stand in this where we just the more things we can try the better. I'll get these questions. Oh well I think we should blah blah blah blah blah instead of writing one test at a time maybe should we should write a bunch of tests at a time. Do you think that would work? Nobody knows. Try it and tell us how it goes. If more people are trying more

**中文**  所以，我们在这件事上全都回到了 Explore 状态，能尝试的东西越多越好。我会收到这类问题：“我想我们应该……不再一次只写一个 test，而是一次写一批 tests。你觉得可行吗？”没人知道。去试，然后告诉我们结果。如果更多人在 community 中尝试更多

### [02:21:20–02:21:48]

**EN**  things in community and communicating like I did this thing here, I added this markdown file and it had this effect. Somebody else says well I added it and made things worse. Okay. Well, what's different about your have to have that conversation that's what's going to result in the playbook. The agile manifesto date 2002, right? >> 2001. Yeah.

**中文**  东西并彼此沟通：“我在这里添加了这个 Markdown file，产生了这个效果。”另一个人说：“我也加了，但结果更差。”好，你们之间有什么不同？必须进行这样的 conversation，最后才会形成 playbook。Agile Manifesto 是 2002 年，对吧？>> 2001 年。

### [02:21:44–02:22:11]

**EN**  >> 2001. The first oops LA 1986 took 15 years to write that manifesto which is why when I see manifestos today I'm just like too soon. Not a bad idea. Would love to have one just too soon. It took 15 years for the technical change of object-oriented programming to come

**中文**  >> 2001 年。首届 OOPSLA 是 1986 年，写出那份 Manifesto 花了 15 年。所以今天看到各种 manifestos 时，我只会想：太早了。Idea 不坏，我也很想拥有，只是太早。我们花了 15 年，等到 object-oriented programming 这项 technical change 真正到来，

### [02:22:09–02:22:39]

**EN**  before we could say here are the consequences of it. Here's how in a simple way we can express how to effectively use this technology that we've been using day in and day out for 15 years. The genie comes along. People are like, "Well, what's the new manifesto? It's just not manifesto time yet." As closing, what do you find exciting looking ahead with with AI

**中文**  我们才能说：“这就是它的 consequences；这是如何以简单方式有效使用这项已经日复一日用了 15 年的 technology。”Genie 刚出现，人们就问：“新的 Manifesto 是什么？”现在还没到 manifesto time。>> 最后，展望 AI

### [02:22:37–02:23:05]

**EN**  agents, with genies, with all this change, with this clean state that we're in? What what gives you energy? >> This is home base for me. The writing of the playbook. I I just love that. I'm a tree shaker, not the jelly maker. So, I love shaking the tree. I love getting stuff started. I have a very wide range of projects. So, I have a project called

**中文**  agents、genies、所有这些变化，以及我们所处的 clean state，什么让你兴奋，什么给你 energy？>> 这里就是我的 home base：编写 playbook。我真的热爱这件事。我是 tree shaker，不是 jelly maker，喜欢摇树、喜欢启动新的东西。我现在有范围很广的 projects，其中一个叫

### [02:23:02–02:23:31]

**EN**  Arlo, which is a an object-oriented database. I have uh several fundamental data structures. I wanted to see if I could write code that was library quality code for a language I didn't know. It turns out, yeah, I can. So, I built a B+ tree that's faster than Rust's B tree for some operations. >> Wow.

**中文**  Arlo，是 object-oriented database。还有几个 fundamental data structures。我想看看自己能否为一门不熟悉的 language 写出 library-quality code。结果证明可以。我构建了一棵 B+ tree，在某些 operations 上比 Rust 的 B-tree 更快。>> 哇。

### [02:23:27–02:23:55]

**EN**  >> Wow. Yes. But also, I'm not a Rust expert. Like, what could a REST expert do with these same tools? And and why didn't they write it? I don't I don't know. But I'm building little bits and pieces of apps for stuff that I care about. I use the Genie for business planning cuz like you, I have a newsletter. Unlike you, my newsletter is

**中文**  >> 是，很惊人。但我也不是 Rust expert。一位 Rust expert 用同样 tools 又能做出什么？他们以前为什么没写出来？我不知道。我还在为自己关心的事情构建 apps 的小 pieces，也用 genie 做 business planning，因为和你一样，我有 newsletter。不同的是，我的 newsletter

### [02:23:53–02:24:22]

**EN**  kind of small, but it's pretty big. >> I'm doing okay. Now, how do I turn that into a sustainable business? Um, also I hired a business partner um to help with that. So, I'm doing a lot of writing, reflecting on my experiences. I'm trying everything. If there's a secret sauce to what I'm doing, it's uh not being afraid to start

**中文**  比较小。>> 但也相当大。>> 我还行。现在的问题是，如何把它变成 sustainable business？我也雇了一位 business partner 来帮忙。因此，我在做大量 writing，反思自身经历，也在尝试一切。如果我的做法有什么 secret sauce，那就是不害怕重新

### [02:24:19–02:24:46]

**EN**  over. And and your your whole your whole career shows this from the very early days. TDD XV 3X, Tidy First, Genie. >> Yeah. So if you look on my GitHub, you'll see project project two project three project four new project new project two new project three new project I I'll take it I'll push it a

**中文**  开始。>> 你的整个职业生涯都体现这一点，从最早的 TDD、XP、3X、Tidy First，到 Genie。>> 对。如果查看我的 GitHub，会看到 project、project2、project3、project4、new-project、new-project2、new-project3。一个方向推进到

### [02:24:43–02:25:12]

**EN**  certain amount and then the genie runs out of g runs itself out of options it can't make further forward progress and so I'll wipe it away start over I won't try and tweak I'll start over and say all right well if I implement things in a different order. If I implement with this markdown file or if I implement it with this commit hook, we collectively need to try absolutely everything.

**中文**  一定程度后，genie 会耗尽自己的 options，无法继续向前。我就把它全部清掉、重新开始，不去 tweak，而是问：“好，如果按不同顺序 implement 呢？如果加上这个 Markdown file，或者用这个 commit hook 呢？”我们共同需要尝试绝对所有可能。

### [02:25:10–02:25:39]

**EN**  And some of those ideas are going to be sound stupid and are going to work out great. Some of the stupid sounding ideas are also going to be disastrous. But if we're willing to start over, then it doesn't matter. We're not really risking that much. That creative impulse is what's come back to me with the genie. This idea that I can go, I wonder what a B+ tree looks like in Go. Here's an

**中文**  其中一些 ideas 听起来很蠢，却会效果极佳；另一些听起来很蠢的 ideas 也会导致灾难。但只要愿意重新开始，就无所谓，实际上没有冒太大风险。Genie 让那种 creative impulse 回到了我身上。我会想：“不知道 Go 中的 B+ tree 是什么样。这里还有

### [02:25:38–02:26:07]

**EN**  alternative to the B+ tree. This adaptive radics tree. What does that look like? I can find out. I sit down with a genie. I can work it out. And then there's this artifact that wasn't there before that's there now because of my imagination and my work. And I had gotten fed up with the stupid minutia of programming. Oh, for that you need to

**中文**  另一种 B+ tree alternative，adaptive radix tree，它会是什么样？”我可以直接找出答案。和 genie 坐下来，一起解决。然后，一个此前不存在的 artifact 出现了，它来自我的 imagination 和 work。我过去已经受够 programming 中愚蠢的琐碎细节：“哦，这里你需要

### [02:26:03–02:26:33]

**EN**  have the version 7.1 of the upgrade the thing which then causes something else to break which causes something else to break which means that I can't use version 7.1. I have to I just hated that. getting emotionally invested, having an idea, getting emotionally invested, getting a ways in and realize I can't do this for no good reason. I hated that. And that that kind of

**中文**  升级到 7.1 版，但这又让另一个东西坏掉，再导致其他东西坏掉，结果我不能使用 7.1。”我太讨厌这种事：先对一个 idea 产生 emotional investment，做了一段后发现由于毫无道理的原因根本做不了。我讨厌它。而现在，这种

### [02:26:30–02:27:00]

**EN**  blockage just doesn't happen to me now. And oh, so it's it this is hog heaven. I've got 40 years worth of ideas. This would be cool. Uh it's too big. That suddenly are back in play. And I'm having so much fun making things that are real. >> I can see it. And you're sharing it as well, Kent. This was awesome. Especially doing it finally in person. >> Yeah, it was great. Great to be able to

**中文**  阻塞已经不会发生。所以，这简直是 hog heaven。我有 40 年积累的 ideas：“这个会很酷。”“它太大了。”现在突然全都能重新进入候选。我从把东西变成现实中获得无穷乐趣。>> 我看得出来。Kent，你也在分享这些。今天太棒了，尤其终于能当面进行。>> 对，真的很棒。很高兴能

### [02:26:58–02:27:28]

**EN**  sit down with you in your home country. Here we are. >> This was a special episode for me. Recorded in Budapest, Hungary, right before Craft Conference 2026. It was a first getting to hear Kent walk through his entire career start to present in a way he's never done in a podcast before. One thing I think back to is how Kent said, "We're accumulating code faster than we're accumulating trust." Kent is [music] so good at summarizing very true things like this. When you struggle through understanding domain, represented in code, and write tests that prove that you got it right, you

**中文**  在你的祖国与你坐下来交流。我们就在这里。>> 这对我来说是一期特别的节目，录制于 Hungary Budapest，就在 Craft Conference 2026 之前。这是第一次听 Kent 以 podcast 中从未有过的方式，从头到尾讲述整个职业生涯。我一直回想的一句话是：“我们积累 code 的速度，比积累 trust 的速度更快。”Kent 很擅长[音乐]用这类句子总结非常真实的事。当你努力理解 domain、用 code 表达它，再写 tests 证明自己理解正确时，你

### [02:27:26–02:27:56]

**EN**  end up trusting your program. And when you do that work alongside other people, you build trust with these people, too. Kent's point is that none of this happens when you just prompt an AI, or as a genie he calls it, and you get back the code that works, and the AI says, "It's all done." I also loved how consistent Kent has been across 50 years. Whether it's small talk, design patterns, TDD, or AI today, his instincts are the same. Try the stupid idea and don't be afraid to throw it all away and start over. As he put it, he's

**中文**  最终会信任 program。与其他人一起做这些工作时，也会建立对彼此的 trust。Kent 的重点是：如果你只是给 AI——按他的说法是 genie——一个 prompt，然后拿回能运行的 code，AI 再说“都完成了”，上述一切都不会发生。我也很喜欢 Kent 50 年来的一致性。无论是 Smalltalk、design patterns、TDD，还是今天的 AI，他的 instinct 都相同：尝试蠢主意，不要害怕全部丢弃、重新开始。用他的话说，他是

### [02:27:54–02:28:23]

**EN**  a tree shaker, not a jelly maker. And Kent's tree shaker impulse is right back on his trying stupid things with AI. Finally, I appreciate how grounded [music] Kent is. People kept asking him what the new manifesto for AI development is, and his answer is that is too soon. The agile manifesto took 15 years of doing object-oriented programming before people like Kent could summarize lessons with AI. [music] Things are still changing quickly and Kent is honest when he says that right now nobody knows what is working. Do

**中文**  tree shaker，不是 jelly maker。而 Kent 的 tree-shaker impulse 如今又回来了，用于尝试关于 AI 的蠢主意。最后，我也欣赏[音乐] Kent 的脚踏实地。人们一直问他 AI development 的新 Manifesto 是什么，他的回答是：现在太早。Agile Manifesto 是在 15 年 object-oriented programming 实践后，Kent 这些人才得以总结 lessons。对 AI 来说，[音乐] 一切仍快速变化；Kent 很坦率地说，现在没人知道什么有效。请

### [02:28:22–02:28:44]

**EN**  check out the show notes below for how Kent and me both thought that McKenzie did not know what they're talking about when they want to measure software engineering productivity. Also check the show notes for related the pragmatic engineer deep dives on topics like tech, software craftsmanship, TDD and others. If you've enjoyed this podcast, please [music] do subscribe on your favorite podcast platform and on YouTube. A special thank you if you also leave a rating on the show. [music]

**中文**  查看下方 show notes，了解为什么 Kent 和我都认为 McKinsey 在衡量 software engineering productivity 时根本不懂自己在说什么。也请查看 The Pragmatic Engineer 关于 tech、software craftsmanship、TDD 等 topics 的相关文章。如果你喜欢这期 podcast，请[音乐]在常用 podcast platform 和 YouTube 上订阅。如果还能留下 rating，特别感谢。[音乐]
