Pragmatic Engineer
AI Skills with Matt Pocock
00:00
00:00
I got the grilling of my life and building a pretty simple API and point using the grill
我在用 grill me skill 构建一个相当简单的 API endpoint 时,遭到了这辈子最狠的盘问。
00:03
me skill. It asked me 35 questions, I kid you not. It was intense, and annoying. And it forced
它问了我 35 个问题,不骗你。
00:10
me to think more. Today's guest is a creator of this popular skill, Matt Polcock. Matt is a
过程很紧张,也很烦人。
00:15
developer turned educator, well known for his total types of series, and now for his AI skills
而且它逼着我思考更多。
00:20
and educational videos. Today we cover Matt's unusual path and detect after years of being a voice
今天的嘉宾是这个热门 skill 的创造者,Matt Polcock。
00:25
coach and building his own DIY coaching software. Matt's popular skills, grill me,
Matt 是从开发者转型的教育者,以他的 total types of series 闻名,现在则因为他的 AI skills 和教育视频而闻名。
00:30
wayfinder, and why these skills became so widespread. Taking inspiration from decades old programming
今天我们聊了 Matt 不寻常的经历,以及他做了多年声音教练、构建自己的 DIY 教练软件之后的转折。
00:35
books to build better software with AI, and many more. If you want to understand which software
Matt 的热门 skills,grill me、wayfinder,以及为什么这些 skills 会变得如此广泛流行。
00:40
engineering fundamental approaches remain very useful when working with AI agents, this episode is
00:44
for you. This episode was presented by TurboPuffer, Vector and Fultech Search, built on object storage.
00:49
It's fast, cheap, and extremely scalable. This episode was presented by Linear, and I wanted to
00:54
take you back in time to remind you how we used to get work done. Back when every lineup cold
00:58
was risen by an engineer like you or me, a tracker's job was to keep people in sync, without slowing
01:03
people down. Linear was built to be fast and low friction, and you could tell. In last year's
01:09
a pragmatic engineer survey, Linear was the most loved tracker tool, and you're the most
01:13
dislike one for its sluggish performance. And data coming from the pragmatic engineer audience
01:18
showed how linear starts to gain traction against existing tools, especially as startups and
展示了 Linear 如何开始在与现有工具的竞争中崭露头角,尤其是在初创公司和
01:23
mid-sized companies. And since then, Linear grew up. They added all the stuff that larger companies
中型公司中。从那以后,Linear 逐渐成熟。他们加上了大公司
01:28
need to manage work, projects, initiatives, roadmaps, and customer requests, and large companies
管理各项工作、项目、计划、路线图和客户请求所需的所有功能,而大公司
01:33
start to switch. For example, Hellsker company Oscar helped move 600 engineers from Jira to Linear.
开始切换过来。例如,Hellsker 公司的 Oscar 帮助把 600 名工程师从 Jira 迁移到 Linear。
01:39
Open AI started with 100 seats and moved all 3,000 staff without any mandate. Coinbase, cash,
Open AI 一开始只有 100 个席位,然后在没有任何强制要求的情况下迁移了全部 3,000 名员工。Coinbase、cash、
01:44
app, Brexon, ramp, or all on Linear. Many of them saw Linear as a way to consolidate single tool
app、Brexon、ramp,或者都在 Linear 上。他们中的许多人把 Linear 视为一种整合单一工具的方式,
01:50
that brings planning and building together. So now, let's fast forward to today. When you have AI
把规划和构建结合在一起。那么现在,让我们快进到今天。当你有 AI
01:56
agents inside a company, those agents need context to work well. They need access to things like
agents 在公司内部时,这些 agents 需要 context 才能好好工作。它们需要访问像
02:01
specs, customer requests, history. Oh wait, these are all already in Linear. So when agents arrive,
specs、客户需求、历史记录。哦等等,这些都已经在 Linear 里了。所以当 agents 到来时,
02:08
Linear became the ideal context layer. Today, 80% of enterprise workspaces in Linear have adopted
Linear 就成了理想的 context layer。如今,Linear 里 80% 的 enterprise workspaces 都已经采用了
02:13
agents. You can use agents like Codex, Cloud Code Linear agent, or your own agent. Coinbase and
agents。你可以使用 Codex、Cloud Code Linear agent 这样的 agents,或者你自己的 agent。Coinbase 和
02:19
ramp both built their own internal agents and described Linear as a place that their agent goes
ramp 都搭建了自己的内部 agents,并把 Linear 形容成他们的 agent 会去
02:23
and picks up the context before starting work. See how it works at Linear.app slash pragmatic.
并在开始工作前获取 context 的地方。去 Linear.app slash pragmatic 看看它怎么运作。
02:29
Matt is great to have your podcast. Great to finally be here. I'm a huge fan of
Matt,很高兴能上你的播客。终于来到这里,太好了。我是超级粉丝,
02:34
watched so many of these. I feel like this is like the tiny desk of being a software engineer,
看过好多期。感觉这就像软件工程师界的 tiny desk,
02:38
you know what I mean? This is big stuff. So I'm glad to be here.
你懂我意思吧?这可是大事。所以我很高兴能来这里。
02:41
And it's also great to reconnect because about a year ago, we had lunch at Microsoft build as well,
而且能重新联系上也很棒,因为大概一年前,我们也在 Microsoft build 一起吃午饭,
02:46
which was really fun. But now it's good to jump into this. And with this, I wanted to ask about
那真的很有意思。不过现在,能直接聊这个也很好。说到这个,我想问问
02:52
your background. Unlike many people in tech and on this podcast, you didn't start out to study
你的背景。和科技圈里很多人、以及这个播客上的很多人不同,你一开始并不是学
03:00
computer science, right? Absolutely not. So four, six years before I became a developer, I was a
computer science 的,对吧?完全不是。所以在我成为 developer 之前的四到六年,我是一名
03:06
voice coach. I was a singing teacher working in London and working in extrowear and with university.
声音教练。我是一名唱歌老师,在伦敦工作,也在 extrowear 工作,还和大学合作。
03:12
I was teaching accents. I was teaching singing. I was teaching voice. I did a masters in it.
我教口音。我教唱歌。我教发声。我还读了一个这方面的硕士。
03:17
I spent a lot of time thinking that was what my career was going to be. You know, I didn't have
我花了很长时间都觉得那就是我未来的职业。你知道,我当时完全
03:22
any inkling of tech didn't sort of think about it at all. I sort of ran my own website and stuff.
没有对科技的任何概念,也压根儿没怎么想过。我只是自己弄了个网站之类的东西。
03:27
But yeah, so I did that for a long time. And it's been an extremely important influence on my life.
但没错,所以这件事我做了很久。它对我的人生影响特别大。
03:34
And I think my personality as well. Can you get a bit deeper? Where did the voice come from? And what
而且我觉得也塑造了我的性格。你能再深入讲讲吗?这个声音是从哪儿来的?还有
03:41
do you do as a voice coach? Who are people who came to you for help? And what kind of help?
你作为嗓音教练具体做什么?谁会来找你帮忙?又是哪方面的帮助?
03:47
So I started as a singing teacher. I was in a band and stuff at university. I sort of had a bit
所以我是从唱歌老师做起的。我上大学时玩过乐队什么的。我算是有一点
03:51
of experience doing singing. And so I set up my own company kind of at university and doing that
唱歌的经验。于是我在大学时差不多自己开了个公司,做这些
03:56
stuff. And it was people who just wanted to sing better, who wanted to use their voice for
事情。来的人就是那些想把歌唱得更好的人,那些想用自己的声音
04:03
quiet. Who wanted to just do it as a hobby. It wasn't anything particularly professional. I
来求得安静的人。只是想把它当爱好的人。这算不上什么特别专业的事。我
04:07
went in today, masters in it. And I started going to drama schools to teach people Shakespeare
后来越做越深,还读了这方面的硕士。然后我开始去戏剧学校教人们 Shakespeare。
04:12
and stuff and like getting people in who wanted to do public speaking. I did a couple of big gigs
还有之类的,就是把那些想做公开演讲的人弄进来。我接过几个大活,给咨询公司做,你知道,去教他们怎么发表演讲,怎么讲得更好。太疯狂了。你知道,我退出这行的原因是我意识到,要想做到不错的水平,你得住在伦敦。我不想住在伦敦。我试了大概两年。我就是讨厌它。我讨厌它。我不是在伦敦长大的。我想回到乡下,回到我来自的地方。我就这么做了。于是我就学会了怎么当 developer。我基本上是自学的,就为了能有个可以 remote 做的事。所以可能你当时在看的是那些能在伦敦以外做的职业。
04:18
for consulting companies, you know, going and teaching them how to deliver speeches and how to
04:23
talk better. It was wild. You know, and it was the reason I got out of it was because I realized
04:28
in order to do it at a decent level, you had to live in London. I didn't want to live in London.
04:33
I tried it for like two years. I just hated it. I hated it. I didn't grow up in London.
04:37
I wanted to get back to the countryside and where I was from. And that's what I did. And so I
04:41
learned how to be a developer. I was essentially self-taught in order to have something I could do
04:46
remotely. So maybe you were looking at like professions that you could do from outside of London
04:53
that had a career or perspective or a future. Exactly. And I sort of taught myself how to build
那种有职业、有视角、有未来的人。没错。然后我算是自学了怎么搭建东西,
05:00
stuff and just sort of build basic stuff in JavaScript because I was interesting in making my
就是在 JavaScript 里做些基础的东西,因为我想让我的课
05:05
lessons better for my students. So I'd actually made sort of little flashcard apps. I was working
对学生更好。所以我其实做了一些小小的 flashcard apps。我当时在做
05:10
like the first app I ever built was the most ambitious thing I've ever attempted. It was like a
——我做的第一个 app 是我尝试过的最有野心的事情。它有点像
05:15
a web audio analyzer. So I could analyze the spectrogram of your voice to see which resonant
一个 web audio analyzer。所以我可以分析你声音的 spectrogram,看看哪些 resonant
05:21
frequencies were happening, whether you were whether your T1 and T2 were like properly balanced
frequencies 在起作用,你的 T1 和 T2 是不是平衡得不错,
05:26
and things like that. Extremely in depth, ran terribly, but actually, you know, made my lessons
之类的东西。特别深入,运行得特别烂,但你知道吗,让我的课
05:31
that little bit better. And so I was doing pretty hardcore stuff terribly straight away. And I realized,
好了一点点。所以我一开始就在做相当硬核的东西,而且做得很烂。然后我意识到,
05:37
okay, I started looking at job postings and I thought, well, I could do a bit of JavaScript, I could
05:40
do a bit of SaaS, I could do a bit of bits and bobs. And I just jumped into it as, you know, quit my job,
05:45
had a couple of months off and eventually got a job. This was about 2017 where it was a little bit
05:51
easier to get a job in the UK than it is now. And I just went from there. I guess as always,
05:56
you were also lucky because that was the peak. That was a time where the band was so high for
06:00
engineers that people had a bootcast with a few months of experience. And I think people got
06:05
on chances from a lot of places where to drive and the motivation and the smarts, right? Yeah.
06:10
And because I had this history of talking to people, that was an unbelievable advantage, right?
06:16
I could actually go into an interview and sound like a reasonable person instead of someone who
我其实可以去面试,而且听起来像个正常人,而不是那种刚从 CS degree 出来、可能压根没有这些技能的人。
06:20
comes straight from a CS degree who maybe didn't have those skills. So I had this bizarre ability
所以我一开始有个很神奇的本事:technical knowledge 几乎为零,或者说非常少,但我能把 technical knowledge 讲给别人听,对吧?
06:25
of having zero technical knowledge or very little in the beginning, but the ability to explain
所以基本上我要做的,就是把自己的 technical knowledge 稍微提高一点。
06:31
technical knowledge to people, right? And so that basically all I needed to do was increase my
而且我对这件事特别有热情,它提升得也挺快。
06:36
technical knowledge a little bit. And I was very passionate about it. And that increased quite
接着这好像就成了一种不公平的组合,因为我在各种不同的公司里都晋升得非常快。
06:40
quickly. And then it was sort of seemed to be an unfair combination because I just rose through
我也不知道,就感觉——我觉得自己和一起工作的其他 software developers 不太一样。
06:44
the ranks very quickly in various different companies. And I don't know, it felt, I felt different
这说得通。
06:50
from the other software developers I was working with. That makes sense. And then how did you step
然后你是怎么迈出……
06:55
up on the ladder? So you decided I'm going to do this. You taught yourself. You went to some
在往上爬?所以你决定‘我要做这个’。你自学成才。你去了一些
06:59
interviews. You got to give, I'm assuming it was a small company, right? Yeah. A tiny company
面试。你得承认,我猜那是一家小公司,对吧?是的。一家很小的公司
07:04
with a couple of really inspiring software developers who work there, basically a guy.
里面有几个非常鼓舞人心的 software developers,基本上就一个家伙。
07:09
Well, I won't say his name because he likes his own entity, but basically a guy lived in sandals
嗯,我不会说他的名字,因为他喜欢保持自己的独立身份,但基本上就是一个穿凉鞋的家伙
07:13
who lived in a canal boat for a long time, like a long hair, proper hardcore. It was around
他长期住在运河船上,留着长发,相当硬核。那大概是在
07:20
the time that Microsoft bought GitHub. I remember him coming in almost in tears. Yeah.
Microsoft 收购 GitHub 的那段时间。我记得他进来时几乎要哭了。是的。
07:27
Microsoft haters. Yeah, absolutely. Class, you know, I remember first thing he got me to do was set
Microsoft 黑子。是的,绝对。Class,你知道,我记得他让我做的第一件事是设置
07:33
up CentOS 6 on my, on my Windows PC. It's a pretty hardcore organization. It's really hardcore
在我的,在我的 Windows PC 上安装 CentOS 6。这真是个相当硬核的组织。真的非常硬核
07:41
limits distribution because that's what our application was running on in the cloud or something,
limits distribution,因为我们的 application 当时在 cloud 上跑的就是它之类的,
07:45
you know, it's a really lovely, wonderful guy and someone who taught me a lot straight away.
你知道,他真的是个非常可爱、很棒的人,而且一上来就教了我很多。
07:50
And so basically that company ran into financial troubles and so I had to move to an agency pretty
所以基本上那家公司遇到了财务问题,所以我不得不相当
07:55
quickly and I got a higher job there. From there nine months later, I moved to another agency
快地换到一家代理公司,而且在那儿得到了一个更高的职位。从那儿过了九个月,我换到了另一家代理公司
08:00
and then another agency. So I'm just sort of bouncing around different agencies. And then I was working
然后又是另一家代理公司。所以我就只是在不同的代理公司之间跳来跳去。然后我在做
08:05
open source, which is kind of the next part of the story. And with the agencies, what tech stack were
open source,这算是故事的下一部分。那在那些代理公司的时候,你们当时用的是什么
08:11
you using at the time? Yeah. It was TypeScript. It was React. I was TypeScript already back then.
tech stack?对。是 TypeScript。是 React。我那时候就已经在用 TypeScript 了。
08:16
Well, I was pretty hardcore on TypeScript already. Almost as in my second job, I think I was doing,
嗯,我当时对 TypeScript 已经相当硬核了。几乎就像我第二份工作那样,我想我当时是在做,
08:23
you know, presentations on how important TypeScript was. We were working for a automobile manufacturer
你知道,就是那些讲 TypeScript 有多重要的演讲。我们当时在给一家汽车制造商做 learning management system,对吧?你知道,就是那种典型的、无聊的外包公司活儿,对吧?那时候 front end 团队还挺小,我们有一个 back end 团队在 Portugal,对吧?所以就是典型的 front end、back end 分工。Back end 团队跑得飞快,而我加入的时候,front end 团队真的特别慢。我们有一大堆 bugs。Back end 团队一直不告诉我们就改他们的 contracts。我们就想,得找个东西把我们更好地连起来。TypeScript 感觉就是显而易见的选择。然后我们一上线,我们的 velocity 就直接上去了,你知道,我们比 back end 团队还快。最后他们从我们团队抽走了人,因为我们太快了。所以
08:29
building a learning management system, right? You know, classic boring agency stuff, right? And
08:35
the front end team at that time was pretty small and we had a back end team in Portugal, right? So
08:39
classic front end back end split. The back end team were racing ahead and at the time I joined,
08:44
the front end team was really slow. We had a ton of bugs. The back end team kept changing their
08:48
contracts without telling us. And we thought we need something to link us up a bit better. TypeScript felt
08:53
like the obvious thing. And once we shipped it, we like our velocity just went, you know, we were faster
08:58
than the back end team. And eventually they took people off our team because we were so quick. So
09:02
yeah, that was my history with TypeScript. That's kind of my origin story with it. How did you get
是啊,那就是我和 TypeScript 的渊源。某种程度上,那也算是我的起源故事。那你是怎么
09:06
into open source? Was it at work? Was it on the side? It was. I would been constantly playing around
接触 open source 的?是在工作上,还是业余做的?是业余做的。我以前一直在业余时间不停地折腾
09:12
with open source on the side. And I was interested in different things. By then, I was into Twitter,
open source。而且我对各种不同的东西都感兴趣。那时候我迷上了 Twitter,
09:17
I was sort of looking at people online and thinking that's something someone I want to emulate,
我会在网上看一些人,然后想,那正是我想效仿的那种人,
09:20
someone I want to look at. And there was a guy who crossed my radar called David Kursheed,
是我想关注的人。后来有个人进入了我的视野,叫 David Kursheed,
09:26
who's the state machine and TypeScript guy on Twitter. Lovely, lovely guy. And I owe a lot of,
他是 Twitter 上搞 state machine 和 TypeScript 的那个人。特别特别好的人。而且我欠他很多,
09:32
you know, my career to him really. And I was working on a project. This is I think in my fourth job
你知道,我的职业生涯真的欠他很多。当时我在做一个项目。这应该是我第四份工作的时候,
09:38
where we needed a state machine. It was a very complex application where you were on a
当时我们需要一个 state machine。那是一个非常复杂的应用,你会在里面处于一个
09:44
video call with someone and you could navigate around a house in real time together using some sort
和某人视频通话,你们可以一起实时在房子里导航,用某种 Matterport integration。
09:49
of Matterport integration. And there was a lot of linking up that needed to be doing it across
而且有很多连接需要跨 network boundary 来做,很多复杂的 state。
09:54
the network boundary, a lot of complicated state. And so I used a a library called xstate at the time,
所以当时我用了一个叫 xstate 的 library,我想是 xstate version 4。
10:01
xstate version four, I think. That was a resounding success. And so I wondered, okay, how can I make
那是一次巨大的成功。
10:07
this more type safe? And so I started to sort of build some tooling around it, have a fiddle
所以我就想,好吧,我怎么能让它更 type safe 呢?
10:11
built a sort of CLI that constructed around it. And that got me the attention of David. And as
所以我开始围绕它构建一些 tooling,捣鼓了一下,构建了一个围绕它构建的 CLI。
10:17
became a member of the xstate quoting. So I started contributing issues started having discussions
这引起了 David 的注意。
10:22
about the future of the library. And it brought me into contact with just a level of developer
然后我就成了 xstate quoting 的一员。
10:27
that I'd never seen before. David and another guy called Mateusz Bozinski,
那是我之前从未见过的。David 和另一个叫 Mateusz Bozinski 的人,
10:32
called Andres Rayk on Twitter, these are the most talented developers I've ever seen. Like this
在 Twitter 上叫 Andres Rayk,这些是我见过的最有才华的开发者。就像这
10:36
is another level. And eventually David wanted to form a company out of it. He wanted to make a big
完全是另一个层次。后来 David 想从中成立一家公司。他想下个大
10:43
bet on state charts and visual sort of programming as the future development. They got some funding.
赌注,押在 state charts 和那种 visual programming 会是未来的开发方向上。他们拿到了一些融资。
10:49
And that was my first kind of that was my first job where I was being paid American money,
而那算是我的第一次,那是我第一份拿美国薪资的工作,
10:54
basically. And it was a huge step up for me. Yeah, which which as as we know, it's quite
基本上。而且对我来说是一次巨大的跃升。对,这这,正如我们所知,它相当
10:59
different from one of Europe, you know, or local, even UK company are paying because yeah,
不同于欧洲的,你知道,或者本地的,甚至 UK 公司给的薪资,因为对,
11:04
we I also covered some of it in the tri model nature of software and new composition,
我们,我也在 tri model nature of software and new composition 里讲过其中一些,
11:10
where US companies, especially in Europe and also in the US, they think about composition,
美国公司,尤其是在欧洲以及美国本土,他们会考虑 composition,
11:15
different value generated differently, right? Totally. It changed my life, you know,
不同的价值以不同的方式产生,对吧?完全同意。它改变了我的生活,你懂的,
11:19
in terms of the way I was thinking about money and the way I was thinking about flexibility.
就我怎么看待金钱、怎么看待灵活性来说。
11:22
And it meant I was working on something I was passionate about. And I started while I was there
而且这意味着我在做一件我充满热情的事。我在那儿的时候就开始
11:28
doing a bit more advocacy for it because obviously the company's very small. I was doing a lot of
为它多做了一些倡导,因为很明显这家公司非常小。我做了很多
11:33
development, but also I wanted to be an advocate for it because I believed in it, you know. And I
开发,但我也想成为它的倡导者,因为我相信它,你懂的。而且我
11:38
still think state charts are incredible primitive for certain kinds of work. I've sort of rode back
仍然觉得 state charts 对某些类型的工作来说是个非常棒的 primitive。我有点收回
11:42
a little bit on my belief of them, especially in the AI age, but I was doing a bit more of that.
了一点我对它们的信念,尤其是在 AI 时代,但当时我确实做得更多一些。
11:48
And that got me the attention of a couple of guys at Versailles because Versailles,
这让我得到了 Vercel 几个人的关注,因为 Vercel,
11:54
at that time, Lee Robinson was the guy in charge of developer education there. They had this
当时,Lee Robinson 是那里负责开发者教育的人。他们有一个
11:59
incredible team, Delbert Delbert Deliveriera, Lydia Halle, both of whom an outdoor code.
超棒的团队,Delbert Delbert Deliveriera、Lydia Halle,两人都在一线写代码。
12:05
Lee himself. And I was working, I got a job there under Jared Palmer as like the, yeah.
还有 Lee 本人。我当时在工作,我在那里找到了份工作,在 Jared Palmer 手下,算是那个,对。
12:12
Wow. That Jared Palmer. That Jared Palmer. Yeah.
哇。那个 Jared Palmer。那个 Jared Palmer。对。
12:15
He's a really good night, actually. And he's the one who later moved to
其实他人真的很好。而且他后来去了
12:20
GitHub. He started our spearheadage sacked diffs or stacked PRs. And now he's a cognition.
GitHub。他发起了我们的 stacked diffs 或 stacked PRs。现在他在 Cognition。
12:26
Yeah, he went into GitHub, ship stack diffs, left, refuses to elaborate. And he's now a cognition.
对,他进了 GitHub,ship stacked diffs,然后离开,拒绝详细说明。现在他在 Cognition。
12:32
Exactly. Yeah, but he's also in this religion. Yes. Yes. He's a, I mean, he's a great guy. And I
没错。对,不过他也信这个教。对。对。他嘛,我是说,他是个很好的人。而且我
12:37
worked under him for not very long at Versailles. I was only there about three months. From there,
在 Versailles 跟着他干的时间不长。我在那儿只待了大概三个月。然后,
12:43
I had, I got a funny contract at Versailles because I'd already been floating this idea of
我拿到了一份挺奇怪的合同,在 Versailles,因为我当时一直在琢磨这个想法,
12:49
sort of TypeScript and thinking about TypeScript and thinking about maybe making education
有点像 TypeScript 的东西,琢磨着 TypeScript,还想着也许可以做点教育
12:53
and material for TypeScript. I had this urge while I was at state Lee, the ex-state company,
以及 TypeScript 的材料。我在 state Lee,那家 ex-state company 的时候,有股冲动,
12:59
to teach stuff. I've been teaching for six years before. I've been not teaching for four or five
去教点东西。在那之前我已经教了六年。到那时候,我已经有大概四五年
13:05
years at that point, maybe six years. And I thought, I need to get back to this like I miss it.
没教了,也许六年吧。然后我想,我得回到这件事上,我真的很想念它。
13:10
You know, and I love making stuff. I love making content. I love teaching people.
你知道,我喜欢做东西。我喜欢做内容。我喜欢教人。
13:14
And so that's what I started doing. And I started doing it for advanced types. I'd got in
所以我就开始这么做了。而且我开始针对 advanced types 做。我在试着逼着 ex-state 做到 type safe 的过程中,接触到了很多疯狂的 typing tricks,很多非常 advanced 的 TypeScript 东西,这活儿非常非常难。我觉得基本上是不可能的事。于是我就做了几个 tips。我做了这些 two minute tips,发到 Twitter 上。结果它们就那样传开了,那种感觉我以前从没体会过。然后我意识到,好吧,这里有市场。于是某个周日,我一口气做了大概 13、15 个这种 two minute tips。我就把它们排好,接下来几周陆续发。然后我的 follow account 从,你知道,4000 涨到了 10000 左右。你知道,就是你看到我,我也感觉到大家对这东西有巨大的兴趣,对吧?没错。一股巨大的 something 浪潮。
13:19
contact with a lot of crazy typing tricks. A lot of really advanced TypeScript stuff while I was
13:25
trying to force ex-state to be type safe, very, very hard job. I think a mostly impossible job.
13:32
And so I made a couple of tips. I made these two minute tips, posted them on Twitter. And they just
13:37
went in a way I'd not felt before. And I realized, okay, there's a market here. And so one Sunday,
13:44
I just made like 13, 15 of these two minute tips. I just queued them up over the next few weeks.
13:50
And my follow account went from, you know, 4000 to 10,000 or something. You know, it's just
13:54
you saw me felt that there was huge interest in this, right? Exactly. A massive wave of something
14:00
was, you know, some combination of the way I was speaking, the material I was delivering,
是,你知道,是我说话的方式和我讲的内容的某种结合,
14:04
that was clicking in a way that I'd not felt before. And that's only really happened twice in my
那种共鸣感,是我以前没感受到过的。而且这种事在我的
14:09
career. So I was already floating the idea of a course. And I knew I could do it well. I knew I could
职业生涯里只真正发生过两次。所以我当时已经在琢磨开一门课程了。我知道我能做好。我知道我能
14:16
do a really great course if I just had the right audience, if it clicked. And so I went into
做出一门非常棒的课程,只要我有对的受众,只要它能产生共鸣。于是我就加入了
14:21
Versel. I got a contract there for only three days a week for three months initially, which is
Versel。我在那儿拿到了一份合同,一开始只是每周三天、为期三个月,这
14:26
very unusual. Is that what you wanted or this is like how, you know, Versel was probably testing the
非常不寻常。这是你想要的,还是说,你知道,Versel 可能只是在
14:32
water, see how it goes. I, I, Versel want to be full-time straight away. You knew that there's
试水,看看情况怎么样。我,我,Versel 想直接全职。你知道的,有
14:37
a set of things. So let me kind of hedge my bets if I'm able to do, right? Versel was this weird
一系列事情。所以如果我能做到的话,就让我稍微给自己留点后路,对吧?Versel 是个很奇怪的
14:43
backup to what I, which is wild. Which is wild. For most people, this will be the dream job, right?
我的备选方案是……这太疯狂了。太疯狂了。对大多数人来说,这会是梦想中的工作,对吧?
14:54
So it's a little embarrassing to say because obviously it's so many people's dream job,
所以这话说出来有点尴尬,因为显然这是很多人的梦想工作,
14:58
but I went into it going, okay, I need a stable nine to five for three days a week while I test
但我开始做的时候心想,好吧,我需要一份每周三天、稳定的朝九晚五,同时我测试
15:05
this other thing out. But I mean, just to be fair, I think this is sensible, right? Like at this
另一件事能不能行。但我的意思是,公平地说,我觉得这很合理,对吧?就像在这个
15:12
point, if we just go back to where you are, like you, you've been a voice coach for a good part of
节点上,如果我们回到你现在的处境,比如你,你职业生涯中很大一部分时间都在做声音教练,
15:19
your career, let's say six years and let's say now for five years, you've been building software,
比如说六年,然后现在这五年,你一直在做软件,
15:24
you love doing it, you think you're good at it, you think you might be able to teach, but who knows,
你喜欢做这件事,你觉得自己做得不错,你觉得自己也许能教别人,但谁知道呢,
15:30
right? And at that point, saying, all right, let me take a gamble and like do this thing that might
对吧?到了那个时候,你说,好吧,让我赌一把,去做这件可能会
15:35
or might not work out. Whereas if you can pull it off, when you have something stable,
也可能成不了。但如果你能把它做成,当你有了一个稳定的东西,
15:42
and it gets traction, I was different, right? You know, a lot of engineers have aspirations, ideas,
并且它开始获得 traction,我就不一样了,对吧?你知道,很多工程师都有抱负、有想法,
15:46
especially because with software and you can work remotely, you can, you can take your idea,
尤其是因为有了 software,而且你可以远程工作,你可以,你可以把你的想法,
15:50
build a company, and they're thinking, all right, should I just plunge, I quit my job,
做成一家公司,然后他们就会想,好吧,我是不是该直接豁出去,辞掉工作,
15:54
should I knock with my job? So like, in some ways, I guess this is one model that is kind of
我该不该先不辞掉工作?所以就像,某种程度上,我猜这是一种有点
16:00
unique. And if you're able to pull it off, I mean, it was the most bizarre thing because it became
独特的模式。而且如果你能做成,我的意思是,那是最离奇的事,因为它变得
16:06
very clear, very quickly that I couldn't stay at the cell, basically. So we had about two months
非常清楚,非常快,我基本上没法继续待在 the cell 了。所以大概过了两个月
16:12
into my work at the cell. I was there actually over a very tumultuous time because I was there
在我进入 the cell 工作之后。实际上我在那儿经历了一段非常动荡的时期,因为我在那儿
16:17
when they released TurboPack. I actually wrote some of the documentation, the initial documentation
他们发布 TurboPack 的时候,其实我写了一些文档,最初的文档
16:21
for TurboPack and that's some of the team, which was a lot faster built system, right?
是给 TurboPack 的,而且是团队里一些人做的,它是一个构建速度快很多的系统,对吧?
16:25
Yeah. It was a build system, essentially, at the time, they were trying to rival WebPack
对。本质上,它当时是一个 build system,当时他们在试图和 WebPack 竞争
16:30
what they were working with. And I was there initially when they were building the docs,
他们当时在用的东西。而且最初他们在写 docs 的时候,我就在场,
16:35
I flew out to San Francisco, I was there for an XGS conference when they announced it. You know,
我飞到 San Francisco,他们宣布它的时候,我正在那里参加 XGS conference。你知道,
16:39
big, you know, a really fun experience and like, I was, you know, there with everyone while they're,
很盛大,你知道,真的是一次很好玩的经历,而且,我,你知道,我和大家在一起,而他们正
16:44
you know, getting everything ready for it. And so, you know, I do that. And already in the back of my
你知道,为它准备好一切。然后,你知道,我就做那些。而且已经在我
16:48
head, I'm thinking, I've seen the newsletter sort of from my total touch grip stuff creep up,
脑海里,我在想,我见过 newsletter 那种,从我 total touch grip stuff 慢慢冒出来,
16:54
I understand, okay, there's something really big here. And when I made a pre-release sale,
我明白,好吧,这里面真的有件特别大的事。然后当我做了个预售,
17:01
that just went crazy. I was earning, let's say, X in Versel and that was like 30, 40 X or something,
那直接就疯了。我当时在 Versel 赚的,比如说,是 X,而那个差不多是 30、40 倍的 X 之类的,
17:10
you know, it was, it was immediate. And X at Versel was already a really, really good composition.
你知道,它就是来得特别快。而且 Versel 给的 X 本来就已经是非常非常好的薪酬了。
17:16
Absolutely. Very, very, very happy with that. But yeah, so I just, it was obvious.
绝对。对此非常、非常、非常满意。但是啊,所以我就,这事很明显。
17:21
There was no other decision I could make. I loved working at Versel. I would probably go back
我没有别的决定可做。我很喜欢在 Versel 工作。我可能以后还会回去
17:26
at some point, but I just couldn't stay. So I had to do this thing. And then tell me about
某个时候,但我就是没法留下。所以我必须做这件事。然后跟我说说
17:32
total typescript. So you, you started, you had this idea, you started to build two days a week
total typescript。所以你,你开始了,你有了这个想法,你开始每周花两天来搭建
17:37
and on the weekends. And then you did this pre-release sale. Yeah. What's the?
周末也做。然后你做了这个预售。对。那是什么?
17:43
I almost, I try never to work on weekends, basically. I'm extremely radical about this. I just,
我几乎,基本上我尽量从不在周末工作。在这一点上我特别极端。我只是,
17:48
I don't know. I mean, I think it's something I mostly fail at because I'm a quite
我也不知道。我是说,我觉得这事儿我大多做不到,因为我这个人特别
17:52
obsessional person. I like trying to make something work, but I'm not one of these guys who's
执念很强。我喜欢试着把什么东西做成,但我不是那种
17:58
doing, what's it like, what's the SF thing where people go like 996 days, 996?
搞什么,怎么说来着,SF 那个什么,人们说什么 996 天、996 的人?
18:03
996 turns my stomach. You know, I just hate that stuff. But I'm, I am trying to, with everything
996 让我反胃。你知道,我就是讨厌这种东西。但我,我在努力,无论我做什么,
18:10
I do, build a lifestyle and build a, a, a life where I can spend most of it with my family.
都去建立一种生活方式,建立一种,一种,一种能让我把大部分时间花在家人身上的生活。
18:16
That's my goal. And so just to prefix that, without all of my decisions after that,
这是我的目标。所以先把这一点放在前面,这样我之后所有的决定,
18:22
hopefully make more sense in that light. So total typescript, I was working with a guy called
希望能从这个角度更好理解。所以 total typescript,我当时在和一个叫……的人合作
18:27
Joel Hooks. Joel Hooks is extremely funny, extremely influential on me. I've worked with him
Joel Hooks
18:35
now for four years. And he came up with Egghead. He's worked with Kensey Dodds on his courses,
18:42
extremely successful course creator in the background. And I basically reached out to him and I
18:49
said, we'd like to make this course. And he said, Hell yes. And we went from there. And so
18:54
straight while I'm at Versailles, I'm also working with Joel. And we do this pre-release.
18:58
And as I said, just goes nuts. And I realize, okay, I've got to fully commit to this.
19:04
And we get to, I think about January 2023, February 2023. And we release the full course. And
19:14
I don't know, I think I need to look at the charts from around that time, but it reaches seven
19:18
figures extremely quickly. And that's a revenue split between me and Joel, of course,
数字增长得非常快。当然,这是我和Joel之间的收入分成,
19:22
this expenses in that. But in terms of raw revenue, it was extremely exciting.
这里面还有支出。但就 raw revenue 而言,这非常令人兴奋。
19:25
Yeah, but the seven figures, that's one million dollars, which is, I mean, incredible milestone,
是的,但七位数,那是一百万美元,我的意思是,这是令人难以置信的里程碑,
19:31
right? Which is nuts. And life changing. And I realize, okay, I can wake up in the morning.
对吧?这太疯狂了。而且改变了人生。我意识到,好吧,我可以早上醒来。
19:38
And this money is still going to come in. This is something that I dreamed about for a long time
这笔钱还是会源源不断地进来。这是我长期以来一直梦想的事情,
19:44
when I was a singing teacher as well, making material that I could sell online. This is something
当我还是歌唱老师的时候也是,制作可以在网上销售的材料。这是我长期以来一直追求的目标,某种 high leverage work,我可以做这些工作,
19:49
I've been aiming for for a long time, sort of high leverage work, where I can do the work,
然后退后一步,回到家人身边。而在接下来的几年里,我一直在做
19:55
and then step back and go back to my family. And for the next couple of years, I worked on
20:02
TypeScript, sort of expanding the course, selling a couple of supplementary courses. And yeah,
TypeScript,算是把课程扩展了一下,卖了几门补充课程。然后,嗯,
20:07
that's basically where Total TypeScript was. And so that was the main portion of my success
基本上这就是 Total TypeScript 当时的状态。所以那是我成功的主要部分,
20:13
in the last four years has been Total TypeScript in building that out.
过去四年里主要就是 Total TypeScript,把它一点点做起来。
20:16
Yeah. And Total TypeScript has been very inspirational, especially that you openly shared
嗯。而且 Total TypeScript 一直很鼓舞人,尤其是你公开分享了
20:21
a big milestone when it hit two and a half million dollars of total revenue, which again,
一个很大的里程碑,就是它总收入达到 250 万美元的时候,而且,还是那句话,
20:26
I think for many software engineers, you know, that is, of course, we know this is before
我觉得对很多软件工程师来说,你知道,那当然,我们知道这是在
20:32
revenue share, and there's expenses involved as well. But it's something that is pretty clearly
revenue share 之前,而且还有支出。但这件事显然
20:38
a higher earning potential than many great software engineering jobs. Not necessarily all of them,
比很多很棒的 software engineering 工作都有更高的收入潜力。不一定所有都这样,
20:44
especially when we're looking at the US and some of the AI labs and whatnot, which was probably an
尤其是当我们看 US 和某些 AI 实验室之类的时候,这大概是个例外。
20:48
exception. But the fact that there is a market and a business to be made of what I feel is a bit
但事实上,有一个市场、也有一门生意可做,我觉得这某种程度上算是一种挺诚实的模式,就像:嘿,我创造了这个东西。
20:56
kind of an honest model in a sense of like, hey, I created this thing. People pay for it because they
人们付钱是因为他们想学,也希望从中获得价值,因为不然的话,他们就会要求退款,对吧?
21:00
want to learn and they hopefully get value from it because otherwise, they would ask for refund,
没错。
21:04
right? Exactly. We do like a very extended refund policy. I don't tend to want to accept any other
我们确实有那种非常长的退款政策。
21:10
forms of money, either. I don't like necessarily doing sponsored content. I'm not going to say never,
我也不太想接受任何其他形式的钱。
21:15
you know, but I don't really, I've got to get Hubsponsors page, but I'm really trying to take it down
我不一定喜欢做赞助内容。
21:22
for a long time. I'm trying to take it down. I like the idea of just being someone who has,
我不会说绝不,你知道,但我并不是真的——我得去弄 Hubsponsors page,但我真的已经试着把它下架很久了。
21:26
okay, these are the products you can buy from me. This is how you can support me. And hopefully
好吧,这些就是你可以从我这儿买的产品。这就是你可以支持我的方式。希望这能给你带来,你知道,10x 的回报,因为这是个非常赚钱的行业,对吧?就像,很多人都有可以花的
21:30
this gives you, you know, 10x in terms of returns because this is a very lucrative industry, right? Like,
21:35
and a lot of people have education budgets that they can spend. And if you want to spend some
21:40
your education budget on me, that's basically my model. And a lot of that money, a lot of the people
21:46
taking the course, this is from people's education budgets, you know, this is companies coming and
21:51
spending big on education. And that was a market that Joel was very keen pushing me towards
21:57
and realizing this, you know, I didn't have much of a sense for how much money was sloshing around
22:03
in the industry, especially in that age. And honestly, still. But the fact that just hit that
22:10
milestone so quickly within a couple of years, I mean, life changing. Well, I mean, this sounds
在短短几年内就达到这个里程碑,我是说,这真的改变人生。嗯,我是说,这听起来
22:16
like an amazing story and it could be fairytale. I mean, we're like, you keep creating educational
像一个精彩的故事,甚至可能是童话。我是说,我们就像,你会一直创作教育
22:20
content for the rest of your life. And it's highly in demand. But then AI happened. Yeah. And as
内容,做一辈子。而且需求量很大。但后来 AI 出现了。是啊。而且正如
22:26
we know, it's changing a lot of how we work, how we how we find information. For example, like,
我们所知,它正在很大程度上改变我们的工作方式,改变我们、我们获取信息的方式。比如说,
22:32
I don't Google that much. I actually work with AI agents or deep research or some of those things.
我不怎么用 Google 了。我实际上会用 AI agents 或者 deep research 之类的东西。
22:38
I heard stories about educators, online educators who are saying that their revenue and
我听过一些教育者的故事,在线教育者,他们说自己的收入和
22:42
and market share and mine share is just falling down because people might not want to sit through
以及市场份额和 mine share 正在直线下降,因为人们可能不想耐着性子听完
22:48
courses or sessions when you can just turn to turn to the bot. How did you see AI impacting the
课程或场次,因为你可以直接转向、转向 bot。你怎么看 AI 对
22:55
industry? How people learn and also your business as and also you as a teacher is complicated
行业?人们如何学习,还有你的业务,以及你作为老师,这一切都很复杂
23:00
because AI has changed the game, right? It's changed how important knowledge is and specifically
因为 AI 已经改变了游戏规则,对吧?它改变了知识有多重要,而且具体来说
23:07
the types of knowledge that are important. So when I'm teaching my courses, I sort of think of
是哪些类型的知识重要。所以当我教我的课程时,我有点把
23:13
there as being two layers. I'm teaching the syntax, obviously, I'm teaching the what, but there's
它想成有两个层次。显然,我在教 syntax,我在教 what,但还有
23:17
also the why behind it, right? And it's very hard to teach the why without touching on the what,
背后的 why,对吧?而且如果不触及 what,就很难教 why,
23:24
if that makes sense. So the sort of medium is I'm going to teach you the syntax and maybe you
如果这说得通的话。所以这个媒介差不多就是,我会教你 syntax,也许你
23:29
might gather the sort of wisdom around it, right? I'm teaching you knowledge, but I'm also
会从中领会到那种智慧,对吧?我在教你知识,但我也在
23:34
trying to teach you wisdom. Knowledge is now very cheap to acquire, right? Very, very cheap,
试着教你智慧。现在获取知识非常便宜,对吧?非常非常便宜,
23:40
you can just look it up. I have a teach skill that can just take you and just teach you the knowledge
你直接查一下就行了。我有一个 teach skill,可以直接带着你,把那些知识教给你
23:46
that you need, but the wisdom has gotten no easier to learn, right? It's still knocking about, like
你需要的东西,但智慧并没有变得更容易学,对吧?它还是在那儿晃悠,就像
23:52
you are still going to run into the same issues that you ran into if you didn't have that wisdom
你还是会遇到同样的问题,就像你以前没有那份智慧时会遇到的一样
23:57
before, even with AI. So in terms of like my revenue from Total Timescript, that's gone down,
以前,就算有 AI 也一样。所以说到我从 Total Timescript 拿到的收入,它已经下降了,
24:04
obviously, because I think people are not so interested in that material anymore. And I think
很明显,因为我觉得人们已经对那类内容没那么感兴趣了。而且我觉得
24:09
people teaching that material are going to find it tricky because, again, that knowledge is really,
教那类内容的人会觉得很难搞,因为还是那句话,那种知识真的,
24:14
really hard to come by. The only way that I've been able to not necessarily survive, but it took
真的很难获得。我唯一能算是做到的方式——不一定是活下来——但它让我花了
24:20
me a long time to figure out where I wanted to be in the AI space, because I'm not a researcher
很长时间才想清楚,我在 AI 领域里想处在什么位置,因为我不是研究员
24:26
from OpenAI. I don't have the credentials to like talk about this stuff really, especially in 2020,
来自 OpenAI。说实话,我没什么资格聊这些东西,尤其是在 2020 年,
24:31
late 2023 was when I started looking at it. And I was initially making courses about how you put
2023 年底,我才开始关注它。我最初是在做课程,讲怎么把
24:38
AI into applications. I thought, okay, I've been building fronted applications for a long time.
AI 融入应用。我想,好吧,我已经做 frontend 应用很久了。
24:43
It makes sense that AI is changing things a bit there. It started to be clear to me that was the
AI 在这方面带来一些改变,这很合理。然后我开始清楚地意识到,那是
24:48
wrong bet to make. I wasn't sort of seeing the returns I was expecting. And I didn't, like the
一个错误的赌注。我并没有看到自己期待的那种回报。而且我没有,呃,
24:53
material was good, and I feel proud of it, but I didn't think I wanted to make more of it.
材料本身很好,我也为它感到自豪,但我觉得我不想再做更多了。
24:59
And around December last year, which is a date that many people cite. Oh, yes.
然后大概去年 12 月,这是很多人都会提到的一个时间点。哦,对。
25:05
We know, or as we call the kind of the winter break where everyone came back the AI pill.
我们知道,或者我们把它叫作那种寒假,大家回来时都吞下了 AI 这颗药。
25:10
Yeah, exactly. The Peter break, right? The open club break. When Opus 4.5 is out, people have a
对,没错。Peter break,对吧?open club break。等 Opus 4.5 出来的时候,大家有很多空闲时间,然后就开始猛用它,接着意识到,哇,好吧,事情真的在发生了。我也一样。然后我意识到,好吧,AI 现在已经好到你可以把任务委派给它了。你其实可以围绕 agents 搭结构。而 agents 可以处理知识、语法,还有那种——我称之为战术性的东西。而你可以处理战略性的东西,长期思考。我经常这么用。我知道你在这个播客里请过 John Asterhal。我一直特别想亲自跟他聊聊。我喜欢他,他对我影响很大。他谈到 tactical programming 和 strategic programming 的区别。
25:17
lot of time off and they just start slamming it and they realize, wow, okay, things are really
25:22
happening. And that happens to me too. And I realize, okay, the AI is now good enough that you can
25:29
delegate to it. You can actually make structures around the agents. And the agents can handle the
25:36
knowledge, the syntax, the sort of, I call it the tactical stuff. And you can handle the strategic
25:44
stuff, the long-term thinking. I used that a lot. I know you had John Asterhal on this
25:49
broadcast. I've been really wanting to chat to myself. I like he's a huge influence on me.
25:53
And he talks about the difference between tactical programming and strategic programming.
25:58
Yeah. AI has largely eaten tactical programming in my view. And it's up to us to handle the
对。在我看来,AI 很大程度上已经把 tactical programming 吞掉了。而 strategic 这部分就得我们来搞定。
26:04
strategic. And I realized, okay, in the strategic layer, there's a course I can create then.
然后我意识到,好吧,在 strategic layer 里,那我可以做一门课了。
26:09
I was looking at Ralph Loops at the time, sort of Jeffrey Huntley was building this really
当时我正在看 Ralph Loops,差不多就是 Jeffrey Huntley 在做一些特别酷的东西,你可以把 agent 循环起来,让它跟着这些目标走。
26:15
cool stuff where you can loop the agent and get it to follow these goals. And I thought, okay,
然后我想,好吧,这里肯定有素材。我只需要找到一个结构,能把它放进去,并理清怎么围绕它来回折腾。
26:21
there's definitely material here. I just need to find a structure within which I can put it and
我还记得,关于 Ralph Loops,你也做了一个在 YouTube 上特别火的视频,到处都能看到,你在里面基本上就是说,好吧,这就是我创建 Ralph Loop 的过程。
26:26
organize how to fiddle around it. And I remember with the Ralph Loops, you also made a video that
就像,我这儿有一个项目,里面有很多要做的事,
26:31
became very popular on YouTube, acts everywhere, where you basically said like, all right, like here's
26:36
how I created a Ralph Loop. Like here's I have a project that has a lot of like to do,
26:42
then either a great job in rolling that video on the show notes below where you said,
然后要么是你在下面 show notes 里放那个视频这件事做得很棒,你说过,
26:46
like, right, here's how usually we would try to get agents to work, like do a plan up front.
就像,对,通常我们会试着让 agents 这样工作,比如先做一个计划。
26:52
And then implement each step, like the kind of traditional top down planning. And you're saying
然后实现每一步,就像那种传统的 top down planning。而你说的是
26:55
the problem is that as you're implementing or even the agents of implementing it,
问题在于,当你实现它,甚至当 agents 在实现它的时候,
26:58
realize it's a hang on. I need to do more stuff. And then I'll do modify the plan. And then
意识到,等等。我需要做更多东西。然后我会修改计划。然后
27:02
enter the Ralph Loop where you gave the structures that you used at the time. There was like an MD
进入 Ralph Loop,你当时给出了你用的那些结构。那里有一个像 MD
27:06
file. It keeps it ads as there. And it kind of like eats to it, but keeps adding. And it was
file。它会把它原样保留在那里。而且它有点像往里面编辑,但一直在添加。而它
27:12
actually a pretty eye-opener to me is like, oh, I'm a way to think about how to do these agents.
实际上对我来说挺开眼界的,就像,哦,这是一种思考怎么做这些 agents 的方式。
27:18
It actually, the couple of years that I spent sort of trying to put agents into applications
其实,我花的那几年,算是试着把 agents 放进应用里,
27:24
was really beneficial there. Because when you try to build an app that contains an agent,
在那方面真的很有帮助。因为当你试着搭一个包含 agent 的 app 时,
27:29
you're always thinking about data flow. You're thinking about how the data is going to get in,
你总是在想 data flow。你在想数据要怎么进来,
27:34
what shape it's going to be, what priority, whether you're going to put it in the system prompt,
它会是什么 shape,什么 priority,要不要把它放进 system prompt,
27:37
the user prompt, you're working at a lower level than you usually get to with the harnesses.
还是 user prompt,你是在比平常跟 harnesses 打交道时更低的层面工作。
27:42
And so when I got to working with the harnesses, it felt like, oh, this just feels very familiar.
所以当我开始跟 harnesses 一起工作时,感觉就像,哦,这感觉太熟悉了。
27:46
I just need to, you know, where is the state going to live? How am I going to pass the state into
我只需要,你知道,state 要放在哪里?我要怎么把 state 传进
27:51
the agents? What shape is that going to look like? How am I going to compact it or clear it? You know,
agents?那会是什么 shape?我要怎么把它 compact 掉或者 clear 掉?你知道,
27:56
and this was, you know, still pretty early days of Clorco, Clorco had been out.
而且那会儿,你知道,Clorco 还处在挺早期的阶段,Clorco 才刚推出。
28:00
Five, six months at that point. And it just felt very natural. And from there, I just got obsessed
当时也就五、六个月。而且感觉非常自然。从那之后,我就一下子迷上了
28:07
with these, I suppose we were called in loops now, but really they're just processes.
这些东西,我想我们现在叫它们 loops 了,但其实它们就只是 processes。
28:11
There's sort of different ways of stringing agents together.
把 agents 串在一起有挺多不同的方式。
28:14
It's just kind of like the diagram. Like, if you can draw arrows from one thing to the other
这有点像那张图。就像,如果你能从一个东西画箭头到另一个东西,
28:19
that you can call that a loop, especially when there is a port that goes back or you can call
那你可以把它叫 loop,尤其当有一个往回的 port,或者你可以叫它
28:23
the workflow or a flow or whatever, right? I would call it a finite state machine.
workflow 或 flow 或随便什么,对吧?我会叫它 finite state machine。
28:27
You know, it felt very similar to the stuff I've been working on in X-Tate, which is process-based,
你知道,这感觉和我在 X-Tate 里一直在做的东西非常像,那是 process-based 的,
28:32
which is state-based. Event-based sometimes as well, where you have an agent at the bottom there
这是 state-based 的。有时候也是 event-based,就是你在最底下有一个 agent
28:37
that's calling an event back at the top. And that's, I started just to see really good results
它会往上调用一个 event。而且,我开始只是想看看,结果真的很好
28:42
from that. And I would do these experiments where I would try sort of building out my process.
从这上面。然后我会做这些实验,试着大概把我的流程搭出来。
28:47
And I would build out a feature of, you know, I have a few apps that I work on kind of
然后我会开发一个功能,你知道,我有几个 app 在做,算是
28:52
to extend what I do. Like, I have a custom video editor. I have a, you know, a huge thing,
来扩展我在做的事。比如,我有一个 custom video editor。我有一个,你知道,一个巨大的东西,
28:57
huge co-base. I have a few open source projects as well. And I was just building these little loops
巨大的 co-base。我也有几个 open source 项目。我就只是在搭这些小 loops
29:03
and little pipelines. And I would sometimes just drop it and go back to what the default setup was.
和小 pipelines。有时候我会干脆把它放下,回到原来的 default setup。
29:09
And I just noticed a huge difference. Like, I just felt, wow, okay, the stuff that I'm doing here
然后我就发现差别巨大。就像,我感觉到,哇,好吧,我在这里做的这些东西
29:15
is really setting me up for success. And I started thinking, what's the best way that I can
真的在为我铺路。然后我开始想,我能分发这个的最好方式是什么?我怎么能更好地和别人分享这个?然后我就开始落到 skills 作为这些东西的分发机制上。这些是 AI bot harnesses 的 skills,你通常可以在里面定义它们。现在你一旦安装它们,你就可以用 slash command 来调用它们。没错。Skills 其实,它们只是一个 markdown 文件的文件夹,可以放在你电脑的某个地方。然后 agents 可以自己调用它们,所以 modeling vote skills。或者你可以有那种 agent 不知道的 skills,但你可以自己调用,所以是 user invoked skills。然后我开始看到这些 skill sets 冒出来
29:20
distribute that? How can I share that with other people better? And that's where I sort of started
29:26
landing on skills as the distribution mechanism for this stuff. These are the skills for AI
29:33
bot harnesses where you can typically define them. And now you can once you install them, you can
29:37
invoke them with a slash command. Exactly. Skills really, they're just a folder of markdown files
29:43
that can sit in your computer somewhere. And the agents can either invoke them themselves,
29:49
so modeling vote skills. Or you can have skills that, like the agent doesn't know about,
29:53
but you can invoke yourself, so user invoked skills. And I started seeing these skill sets pop
29:59
up everywhere, like superpowers and, you know, claw code plugins that you can install. I think GStack
到处都是,比如 superpowers,还有你知道的,那些可以安装的 claw code plugins。我觉得 GStack
30:04
as well. I realized, okay, maybe I can distribute what I have this process as a set of skills
也是。我意识到,好吧,也许我可以把我有的这个流程做成一套 skills 分发出去
30:10
and see what people think of it. And initially, I just put it up and I was doing other stuff. I was
看看大家怎么看。一开始,我就把它放上去,然后我在忙别的事。我当时
30:15
working on a course. And I check back in and I realized, oh, it's got more stars than anything
在做一个课程。后来我回去一看,发现,哦,它的 stars 比我做过的任何
30:20
else I've ever done. I've not even really talked about it. You know, it's just sat there on its own
其他东西都多。我甚至都没真正聊过它。你知道,它就靠自己待在那儿
30:26
word of mouth, I suppose. I've done a little bit of documentation, but really not much. And it's just
口口相传,我猜。我写了一点 documentation,但真的不多。然后它就这么
30:31
exploded already. So I thought, okay, maybe I should put a little bit more work into this. Maybe I
已经爆了。所以我想,好吧,也许我应该在这上面多投入一点。也许我
30:36
should talk about them. And I did a talk at think where we met last, which was AI engineer London
应该聊聊它们。然后我在 think 做了一个 talk,就是我们上次见面的那个,是 AI engineer London
30:42
about in April, that talk was entitled software fundamentals still matter. And that talk
大概在四月,那场演讲叫 software fundamentals still matter。而那场演讲
30:49
is now up to I think 1.2 million views or something. And I mentioned the skill set. The skill set is
现在好像有 120 万次观看,差不多吧。然后我提到了 skill set。这个 skill set 现在
30:53
now at 230,000 stars. It is now the second most starred skills repo in the world. I think somewhere
已经有 23 万个 stars。它现在是世界上 star 数第二多的 skills repo。我觉得大概
31:02
like 20th to 25th of the most starred repose of all time. Wow. What's going on? So there's obviously
排在史上 star 数最多的 repo 里的第 20 到 25 名左右。哇。这是怎么回事?所以显然
31:11
a hunger for this. So this was the second time in my career, just like when I was putting out the
大家对这件事有很强烈的需求。所以这是我职业生涯中的第二次,就像我当初推出
31:15
little time group videos where I felt, wow, there's a momentum here. There's something happening.
little time group videos 的时候,我感觉,哇,这里有股势头。有些东西正在发生。
31:19
And so I thought I had to double down on that. The skills, how did you write them? Is it is trying to
所以我觉得我必须在这上面加倍投入。那些 skills,你是怎么写的?它是不是想
31:25
capture your workflow, your understanding of what works with Asians? You know, not just right now,
捕捉你的 workflow,以及你对什么跟 agents 一起有效的理解?你知道,不只是现在,
31:31
but of course you're thinking about state, you're thinking about how you were integrating AI into
但当然,你在考虑 state,你在考虑你当时是怎么把 AI 集成进
31:36
application, which again didn't take off all that much, but you learned. So is this kind of like
application 里,而这个又一次没怎么真正火起来,但你学到了东西。所以这有点像
31:42
maths, workflow, maths way of what works for me? Yes, that's what it is. I tried to think, first of all,
数学、workflow、对我有效的数学式方法?对,就是这样。我试着想,首先,
31:50
people are going to use these skills and they're going to tinker with them. So how do I make the
人们会使用这些 skills,而且会去折腾它们。那我怎么做出
31:53
simplest set of skills that people can audit very easily? I'm trying to think how do I maximize
最简单的一套 skills,让人们能非常容易地 audit?我在试着想,我怎么最大化
32:01
these people picking these up and using them at work. So for instance, the Grilney skill,
这些人学会它们并在工作中使用它们。比如说,Grilney skill,
32:06
which is the most popular one, I don't know if you've used it, but I use it as well. It's annoying
它是最火的那个,我不知道你有没有用过,但我也用。烦人的是
32:14
how damn it grilled me. I just asked it. I was like, I'd like to expose an API endpoint that
它到底把我盘问得有多狠。我刚问它。我说,我想 expose 一个 API endpoint,
32:20
can tell whoever has the authenticator token, have some basic authentication. Is this email a
32:27
subscriber to my email list or not? Because I want to connect it with one of the events that I'm
32:33
doing with to get priority to pay subscribers. And that's very simple, right? And then the Grilney
32:38
thing, it starts to just really grill me like, okay, so what about authentication? Do you want the
32:43
bear token or do you want it in JSON, which is not a safe assertion? Okay, well, that's a decision
32:47
make. And then we go through all of these decisions and it goes really low level, including like,
32:52
how do we enforce rate limits when it comes to rate limits? You want to exactly do it when you
32:57
get a thousand per day and not a single more, which is more complexity. And I just realized
33:04
it's been a long time since I've had such an involved design discussion with a team or an
我已经很久没有和团队或
33:09
engineering team. And you typically have it when someone has deep domain knowledge. And I was
工程团队进行过这么深入的设计讨论了。通常只有当某个人有很深的 domain knowledge 时,你才会遇到这种情况。而我当时
33:12
both annoyed by, this is just simple like, no, don't worry about that. But also impress that
一方面觉得烦,心想这很简单啊,别担心那个。但同时也让我印象深刻的是,
33:18
this thing, this AI, this LM through a series of prompts is able to all of this.
这个东西,这个 AI,这个 LM,通过一系列 prompts 居然能做到所有这些。
33:23
It's, I mean, everyone's got a Grilney story. So I get so many of these conferences people say,
我是说,每个人都有个 Grilney 故事。所以我在很多会议上都遇到有人说,
33:27
you know, you've this, this very, very simple skill. It's really just telling the agent to interview
你知道吗,你有个,有个非常非常简单的 skill。真的就是让 agent 来采访
33:34
you relentlessly about the topic. It's a very small skill. It just has this weird emergent
你,围绕这个话题不停地追问。这是个很小的 skill。它只是有一种奇怪的 emergent
33:39
behavior with it where the models just start thinking a little bit outside the box. And they start
behavior,就是模型开始稍微跳出框架思考。然后它们开始
33:45
throwing ideas at you. I think I got it originally from like a Tariq who works with Claude. He's
给你抛想法。我想我最初是从一个跟 Claude 合作的 Tariq 那里听来的。他
33:49
saying basically get the agent to interview you and then you'll see better results. So I encode
基本上是说,让 agent 来采访你,然后你就会看到更好的结果。所以我把这个 encode
33:54
that into a little skill. And it's, I realized, wow, okay, it's just sort of 10 times better than
进一个小 skill。然后我意识到,哇,好吧,它大概就是比
33:58
anything I've ever used. And that Grilney skill was the first one. That sort of reminded me of
我用过的任何东西都好 10 倍。而那个 Grilney skill 是第一个。这有点让我想起
34:03
the discussions I would have at my first job, you know, with the guy with the sandals is this very
我第一份工作时会有的那些讨论,你知道,和那个穿凉鞋的人,就是房间里这位非常
34:08
senior engineer in the room really getting me to think about everything that I'd done. It was the
senior engineer,真的让我去思考我做过的所有事情。这对我来说是
34:13
most familiar thing to me to actually working with someone like Anderist Rake at X-Tate. You know,
最熟悉的事情,其实就是和像 X-Tate 的 Anderist Rake 这样的人一起工作。你知道,
34:18
it just felt like a really high quality developer was asking me these good questions. And I thought,
感觉就像一位非常高质量的 developer 在问我这些很好的问题。然后我想,
34:23
wow, okay. And then I started sort of taking that and going like, how do I mind this
wow,好吧。然后我开始有点像把那个拿过来,然后想,我要怎么调教这个
34:31
agent for more software fundamental stuff? How do I make it feel more like a proper developer,
agent,让它处理更多 software 基础层面的东西?我要怎么让它感觉更像一个正经的 developer,
34:40
a real senior? How do I tickle the right latent space in order to get its behavior to change and
一个真正的 senior?我要怎么挠到对的 latent space,才能让它的行为发生变化,并且
34:47
challenge me an interesting way? Because if you can do that, if you can increase the quality of the
用有意思的方式挑战我?因为如果你能做到这一点,如果你能提升
34:51
conversation you're having with the agent, you're going to increase the quality of the outputs.
你和 agent 之间的对话质量,你就能提升 output 的质量。
34:55
What I liked about the Grilney skill is it forced me to make decisions that I know what decision
我喜欢 Grilney skill 的一点是,它逼我去做决定,而我知道
35:01
to make when I think about it, but it is my decision. So unlike when I tell the, when you do the
认真想一下的话该选哪个,但那是我的决定。所以不像我告诉那个,当你执行
35:09
slash goal command, like build this, and it goes off and does this and it makes all the decisions
slash goal command,比如说 build this,然后它就自己跑去做这件事,所有决定都由它来做
35:14
or most key decisions. What I like about Grilney is I both make the decision, but also sometimes it
或者在大多数关键决策上。我喜欢 Grilney 的一点是,我既能自己做决定,但有时候它
35:20
reminds me about things that I didn't think too much about, or maybe it reminds me that I should do
会提醒我一些我没怎么多想的事情,或者也许它提醒我,我应该做
35:25
a bit of a research, for example, like it asked me which authentication would I want to do bear token
一点研究,比如说,它问我想要哪种 authentication,是用 bear token
35:30
or over post or even over get. And then I'm like, hang on, like, I'm going to look up like what the
还是用 post,甚至用 get。然后我就会想,等等,我要去查一下,比如
35:36
differences are or ask a different session to educate. So like it makes me a better professional.
区别是什么,或者让另一个 session 来教我。所以这让我成为更专业的从业者。
35:42
And I do have this belief that when you're working with AI, like as long as we're learning,
而且我确实相信,当你在和 AI 一起工作时,只要我们在学习,
35:47
I think we're fine. As long as we stop learning and outsource the learning to this thing, trouble
我觉得就没问题。一旦我们停止学习,把学习外包给这个东西,麻烦
35:51
will be brewing maybe months or years down the road. 100%. There's two things there, right? I think
就会在几个月或几年后酝酿出来。100%。这里面有两件事,对吧?我觉得
35:56
what everybody underestimates about agents. Everybody is that there is a communication gap between you
关于 agents,大家低估的是什么。大家低估的是,你和
36:03
and the agents, right? There is a barrier there. You feel like because the agent is not a human
agents 之间,对吧?那里有一道障碍。你觉得因为 agent 不是人
36:08
and because you understand your hierarchy of values, you think that the agent will just pick up on them,
而且因为你了解自己的价值观层级,你觉得 agent 会直接领会,
36:13
right? There's this sort of feeling of, yeah, just trust the model, especially with the top tier
对吧?就有这种感觉:嗯,相信 model 就对了,尤其是顶级
36:17
models, you know, just trust the model. But the agent, however good it is, however smart the model
model,你知道,就相信 model。但 agent,不管它多好,不管 model 多聪明
36:23
is, you know, even mythos, it can't read your mind. It can't read your mind. So you have to,
你知道,就算是 mythos,它也读不了你的心。它读不了你的心。所以你必须,
36:29
there has to be some process of communicating your values to the agent because often when you do
必须有一个过程,把你的价值观传达给 agent,因为很多时候当你
36:34
it like a goal, when you just go, okay, just spam me out some code, give me some slop. The agent is
把它当成目标,当你只是说,好吧,随便给我生成点 code,给我点垃圾。agent 就
36:40
going to produce something that's totally misaligned from you because it doesn't understand what you think
会产出一些跟你完全 misaligned 的东西,因为它不理解你认为
36:44
is important. And so, GrillMe is not only about implementation details, it's also about establishing,
什么是重要的。所以,GrillMe 不只是关于 implementation details,它还关乎确立,
36:49
okay, do this, this is in scope, this is not in scope. Here's what I think is important. And so
好,做这个,这在 scope 里,这不在 scope 里。这是我认为重要的。所以
36:55
it's the agent getting to know you. Matt just described the GrillMe skill. When I used this
这是 agent 在了解你。Matt 刚刚描述了 GrillMe skill。当我用这个
36:59
skill to design an API endpoint, the first questions it asked were about what the endpoint was and
skill 来设计一个 API endpoint 时,它最先问的问题是,这个 endpoint 被允许做什么和
37:04
wasn't allowed to do and who it was allowed to do it for. Now in my case, I had a decent idea of
不被允许做什么,以及被允许为谁做。现在在我这种情况下,我对
37:09
what I wanted, but it's generally a terrible idea to let an agent improvise authentication and
我想要什么还算有谱,但通常来说,让一个 agent 临场发挥 authentication 和
37:14
authorization as they would often do. This brings us to our season sponsor, WorkOS. How do you
authorization,而它们往往会这么做,这是个糟糕的主意。这就带到了我们的本季赞助商,WorkOS。你会怎么
37:20
authorize AI agents? The problem you have is how you want to control the scope of the agent.
给 AI agents 授权?问题在于你想怎么控制 agent 的 scope。
37:26
The tricky part is how permissions are static, but the job of what the agent does is dynamic,
麻烦的地方在于,permissions 是静态的,但 agent 要做的事是动态的,
37:31
so teams pick between two bad options. Either you read the prompt, then approve every tool
所以团队只能在两个糟糕的选项里二选一。要么你读 prompt,然后手动批准每一个 tool
37:36
invocation called by hand, and then read the prompt again, then approve by hand again,
invocation,接着再读一遍 prompt,再手动批准一遍,
37:41
until you eventually just stop reading the prompt. Or you just run in Yolo mode,
直到最后你干脆不读 prompt 了。或者你直接跑在 Yolo mode,
37:45
letting it rip and hoping that whatever the agent does is not irreversible. But there's
让它随便搞,祈祷 agent 做的事不是不可逆的。但还有
37:50
a better way. WorkOS just launch airlock, intent-based access control for agents. You write the rules
一个更好的办法。WorkOS 刚刚发布了 airlock,面向 agents 的 intent-based access control。你把规则
37:55
in plain English, for example, read repels and comments on PRs, anything touching alt or billing
用 plain English 写,比如,读取 repels、评论 PRs,任何碰到 alt 或 billing 的东西
38:01
needs sign off never pushed to main. Every call that the agent makes is judged against his task
需要 sign off,永远不会被推到 main。agent 发出的每一次 call 都会对照它的 task 来评判
38:06
and allowed, denied, or sent to a human. Every verdict is logged by airlock. The neat thing about airlock
然后被允许、拒绝,或转给人工处理。每一个 verdict 都会被 airlock 记录下来。airlock 最妙的地方在于
38:12
is how there are no pre-granted scopes and there's no rules to assign. The task itself is what
没有预先授予的 scopes,也没有需要分配的 rules。task 本身才是
38:17
defines what the agent can do. WorkOS airlock is in early access. Requested at WorkOS.com slash
定义 agent 能做什么的东西。WorkOS airlock 处于 early access。可在 WorkOS.com slash
38:23
airlock. I'd also like to mention a presenting sponsor, TurboPuffer. Matt and I are discussing
airlock 申请。我还想提一下我们的首席赞助商 TurboPuffer。Matt 和我正在讨论
38:28
a fundamental question. How do you get agents to remember what's important? Here's an idea.
一个根本问题。你怎么让 agents 记住哪些是重要的?这里有个想法。
38:33
What if instead of building a complex memory system, you just let the agent search its entire
如果不去构建复杂的 memory system,而是直接让 agent 搜索它的全部
38:38
history. This seems like it will be very, very expensive, but with TurboPuffer, it isn't.
历史记录,会怎么样?这看起来会非常非常昂贵,但有了 TurboPuffer,就不会。
38:43
TurboPuffer's object storage native architecture means that the marginal cost of source sessions
TurboPuffer 的 object storage 原生架构意味着 source sessions 的边际成本
38:48
transcript is almost nothing, making it economical to index the entire chat history. And because
transcript 几乎为零,这让给整个 chat history 建 index 变得很经济。而且因为
38:54
TurboPuffer names here it says skill virtually without limit, you can create a dedicated search
TurboPuffer 在这里的名字表明 skill 几乎不受限制,你可以创建一个专用的 search
38:58
index for every agent. Here's a good example of this. Entire another season sponsor of the podcast,
index 给每个 agent。这里有个很好的例子。Entire,播客另一季的赞助商,
39:03
indexes hundreds of millions of agents session transfers for search and then lets the coding agent
为 search 给数亿个 agent session transfers 建 index,然后让 coding agent
39:08
retrieve what it needs to recall how and why an engineering decision was made. Entire showed that
retrieve 它需要的内容,来回忆一个 engineering decision 是如何以及为什么做出的。Entire 展示了
39:13
their agent was more accurate, used for your tokens, and took less time to find memories when
他们的 agent 更准确,使用的 tokens 更少,并且花更少时间找到 memories,当
39:17
it used TurboPuffer instead of get history and a CLI. Agent memories are complex and evolving
它使用 TurboPuffer,而不是 git history 和 CLI。Agent memories 很复杂,而且不断演变
39:22
use case, but perhaps there's a better lesson here. Maybe the best solution is the simple one.
39:28
Just search every transcript. With TurboPuffer, this is actually possible. If agent memory is
39:33
something you're trying to solve, then please reach out to TurboPuffer team at TurboPuffer.com
39:38
And which other skills did you create? So from there, I thought, okay, how do I take that conversation
39:43
and turn it into code? And I was immediately scared because I've been working with models just
39:53
before they were good and before the December winter where things got really good. And so I felt
40:01
the constraints from what I've been working with before. I knew that, for instance, the more
40:05
context you put, you give to the agent, the worse it performs. I know you had Dex hauled the
40:10
on this podcast. And Dex is a really big influence on me, especially his idea of the smart zone.
在这个 podcast 上。Dex 对我影响特别大,尤其是他提出的 smart zone 这个概念。
40:15
The dumb zone. The dumb zone. Yeah. So idea of that just to kind of, so you don't have to go and
dumb zone。dumb zone。对。所以这个想法大概就是,这样你就不用非得去
40:21
listen to that podcast info, although you should, you have essentially the more context you give
听那个 podcast 里的内容,虽然你还是应该听,但本质上,你给
40:27
to the agent, every token is shouting for attention. And the more voices you put into that room,
agent 的 context 越多,每个 token 都在大声喊着要 attention。而且你往那个房间里塞进去的声音越多,
40:33
the harder it is to hear the important ones. And so the model starts losing the connections between
就越难听到那些重要的。于是 model 就开始丢失
40:39
things and making mistakes because of that. And you can think of that as a slow decline,
事物之间的联系,并因此开始犯错。你可以把这看成一种缓慢的衰退,
40:44
but there is a portion of the context window where it's better and where it's worse. And so you have
但在 context window 里有一部分会更好,也有一部分会更差。所以你就有了
40:50
the smart zone, which is currently, I would say, about the first 150,000 tokens of front-end models.
smart zone,目前我会说,大概是 front-end models 的前 150,000 个 tokens。
40:56
Of a one million token window. Yeah. Of any size token window. Of any size token window.
一百万个 token 的窗口。对。任意大小的 token 窗口。任意大小的 token 窗口。
41:00
It doesn't matter the context window size. It's all about raw amount of tokens, raw amount of
context window 的大小并不重要。关键就在于 token 的原始数量、原始的
41:05
attention relationships. And then the rest of it will slowly degrade more and more and more.
attention 关系数量。然后剩下的部分会慢慢越来越、越来越退化。
41:10
And so I started thinking, how do I take work that's bigger than 150k tokens, which is not very large,
所以我开始想,我该怎么把大于 150k token 的工作——这还不算很大——
41:16
and portion it out over multiple context windows, multiple sessions? And this took me a lot of
拆到多个 context window、多个 session 里?这花了我很多
41:23
tries, a lot of different filling around with different approaches. The Ralph loops was one
次尝试,很多次用不同方法来回折腾。Ralph loops 就是其中
41:27
version of that. Ralph loops are designed to make the most of the smart zone because they essentially
的一个版本。Ralph loops 的设计就是为了最大程度利用 smart zone,因为它们本质上
41:31
just give the Ralph loop a goal. And they say, do the smallest possible change that will get us
只是给 Ralph loop 一个目标。然后它们说,做能让我们……的尽可能最小的改动
41:37
further towards that goal. And then clear your context. Clear the context. Start from fresh.
进一步朝着那个目标前进。然后清空你的 context。清空 context。从头开始。
41:41
Exactly. And you're not technically starting from fresh because you've got the code base, right?
完全正确。而且严格来说你并不是从头开始,因为你已经有了 code base,对吧?
41:44
There's a little bit of state saved in the file system and in the environment, but not in the model
文件系统和环境里还保存了一点状态,但本质上不在 model 里。
41:49
essentially. So that's the idea. So I started thinking, how do I take that Ralph loop idea,
所以就是这个思路。然后我开始想,我怎么把那个 Ralph loop 的想法,
41:55
but make it a little bit more stable and turn that into skills. And so what I realized I needed
变得更稳定一点,把它转化成 skills。然后我意识到我需要的
42:00
was two different types of documents. You need a document for where you're going, which is the
是两种不同类型的文档。你需要一份关于你要去哪里的文档,也就是
42:04
destination document. I used to call that a product requirements document or a spec is what I call it
目的地文档。我以前叫它 product requirements document,或者 spec,现在我叫它 spec。
42:10
now. So that's the specification that declares when you've reached the end. And then you need to break
所以那就是一份 specification,声明你什么时候到达了终点。然后你需要拆解
42:15
that spec down into individual tickets, one ticket per session. And so I have a very simple skill,
把那个 spec 拆成一个个单独的 tickets,每个 session 一个 ticket。所以我有非常简单的 skill,
42:21
just to spec and then to tickets. And so you take that grilling session that you've had and
只是做 spec,然后再做 tickets。所以你把你有过的那个 grilling session 拿出来,然后
42:26
you turn it into a spec. Now that spec can work over, you know, 30, 40 tickets, let's say you can have
把它变成一个 spec。现在那个 spec 可以处理,你知道,30、40 个 tickets,比如说你可以有
42:32
really massive, great big chunks of work that are all tied into that spec. And so that's the main
真正巨大的、非常大块的工作,全都跟那个 spec 绑在一起。所以这就是主要的
42:38
idea. You just grill, you turn that grilling into a spec and then you just run some kind of implement
想法。你就 grill,把那个 grilling 变成一个 spec,然后你就跑某种 implement
42:43
a loop over those tickets until you've got a huge chunk of work. After a grilling, do you get
loop,跑过那些 tickets,直到你得到一大块工作。grilling 之后,你会得到
42:47
user input as well or throughout this process or it depends. I was mostly designing this to be run
user input 吗,还是整个过程中都会要,还是看情况。我主要是把它设计成可以运行
42:54
for the user like to be away from keyboard totally because there's this idea of like the day shift
给用户用的,像是完全 away from keyboard,因为有个类似 day shift 的想法
43:00
and the night shift. Have you heard of this? No, no, no, it's great. Basically the optimal way to work
还有夜班。你听说过这个吗?不不不,这很棒。基本上,最优的工作方式是
43:05
with agents is to plan during the day shift and then get the agents to work during the night shift,
和 agents 一起,在白班的时候做 planning,然后让 agents 在夜班干活,
43:11
right? And so hopefully you wake up in the morning and you've got beautiful clean code to look at.
对吧?所以希望你早上一醒来,就能看到漂亮的 clean code 等着你。
43:16
And that's what I was trying to optimize my process around because I was really sick of what I
这就是我一直在尝试围绕它优化自己流程的原因,因为我真的受够了我
43:21
know and what I still do to an extent of just switching between terminals, context switching all
知道的、以及我在某种程度上还在做的,就是在 terminals 之间来回切,context switching 一直
43:26
the time, just going, what I wanted and what I'm trying to optimize for is to just get a good chunk
不停,就是那种,我想要的、我在优化的,就是先搞定一大块
43:34
of planning done and then let the agent work for a couple of hours and then I can do other work
planning,然后让 agent 工作几个小时,接着我可以做其他工作
43:39
decent chunks of time, 50 minute chunks working on one thing planning on stuff and then I can review
不错的时间块,50 分钟一个块,专注做一件事、规划一些东西,然后我可以 review
43:45
the code and do that. So that's what I was trying to optimize for all the time when I was doing
代码,然后那么做。所以那正是我一直在做
43:49
Ralph loops and that was the big thing that I found in December is these guys are good enough to
Ralph loops 时想要优化的东西,而那是我在十二月发现的重大事情:这些人已经足够好,可以
43:53
delegate to and so I can run them AFK. And then you have a different skill as well which is a bit
委派给它们,所以我可以让它们 AFK 运行。然后你还有一个不同的技能,这个技能更
43:58
more ambitious called the Wayfinder skill. Can we talk about that? Absolutely. So in the exactly
有野心一些,叫做 Wayfinder skill。我们能聊聊这个吗?当然。所以,以完全
44:03
the same way that implementation I noticed needed to be split out over multiple sessions.
一样的方式,我注意到 implementation 需要拆到多个 session 里。
44:08
Sometimes you're grilling something and you're you're hitting the limits. You're going to grill
有时候你在死磕某个东西,然后你就碰到上限。你会去死磕
44:14
something, you know, build me a strike clone or something, right? You are going to hit the limits
某个东西,你知道,给我做一个 strike clone 之类的,对吧?你一定会碰到
44:18
there. There's no way you can plan that in 150 K tokens. And so I thought, how do I break that up
那里的上限。你不可能用 150 K tokens 来规划那件事。所以我想,我该怎么把它拆开
44:23
so that I can run grilling sessions that can be infinitely? How do I split up grilling so that it
这样我就能跑那种可以无限进行的 grilling sessions?我该怎么拆分 grilling,才能让它
44:31
can work like that? And so I came up with this idea, again, I'm thinking about the flow of
像那样运作?于是我想出了这个点子,再说,我是在想信息的
44:37
information. Essentially like, what does it need to perform well in a grilling session? It probably
流动。基本上就是,它需要什么才能在 grilling session 里表现得好?它大概
44:42
needs to understand exactly what it's what the purpose of that grilling session is. But it also
需要准确理解它到底是什么——那个 grilling session 的目的是什么。但它也
44:47
needs to understand what's been decided so far needs to understand what other grilling sessions
需要理解到目前为止已经决定了什么,需要理解还有哪些其他 grilling sessions
44:51
might be happening at that moment. And I came up with this idea of a map and the map would be the
可能正在那一刻发生。然后我想出了 map 这个点子,而这个 map 会是
44:59
sort of center point of everything that was needed for all the decisions that you were coming up with.
差不多就是所有你当时正在想出的决策所需要的一切的中心点。
45:04
And once you've got a map, you realize, okay, there are certain things I can like as I'm trying to
而一旦你有了一个 map,你就会意识到,好吧,有些事情我可以,就像我正试着
45:09
find my way to a destination. There are certain things I know I need to decide certain points that
找到通往目的地的路。有些事情我知道自己必须决定,某些节点
45:14
kind of let milestones on the map. And there's there's a fog of war and that lovely metaphor just
有点像地图上的里程碑。而且还有,还有 fog of war,而那个很妙的比喻就
45:20
sort of carried me through designing the rest of the skill, right? Because you've got your map,
在某种程度上支撑我设计完了这个 skill 的其余部分,对吧?因为你有你的地图,
45:24
you've got your fog of war, you vaguely know where you're going. And every time you have a grilling
你有你的 fog of war,你大概知道你要去哪儿。而每次你有一个 grilling
45:28
session, it opens out more points on the map. And so you sort of figure out where you're going. And so
session,它就会在地图上展开更多节点。于是你就有点搞清楚自己要去哪儿了。所以
45:33
this is kind of like a directed a cyclic graph where you're walking down until you reach your final
这有点像 directed acyclic graph,你一路走下去,直到到达最终
45:38
destination. And so you've got the map. And then each individual session in there are tickets on
目的地。所以你有这张地图。然后里面的每个单独 session 都是 ticket,就在
45:44
that map. And I realize, okay, grilling is good. But what if you need to prototype? What if you need
那张地图上。然后我意识到,好吧,grilling 是不错。但如果你需要做 prototype 呢?如果你需要
45:49
to do research? What if you need to do like an arbitrary task like provisions and infrastructure or
做 research?如果你需要做那种任意任务,比如物资和 infrastructure,或者
45:53
something? Well, those are different types of tickets on the map. And we find it basically just
什么之类的?嗯,那些是地图上不同类型的 ticket。我们发现它基本上就是
45:59
guides you through this process. I've had maps that have, you know, at 50 or 100 tickets or something
带你走完这个过程。我遇到过一些地图,上面有,你知道,50 或 100 个 ticket 之类的,
46:04
until I finally reach my destination. I've actually been using it for course planning as well.
直到我终于到达目的地。其实我也一直用它来做课程规划。
46:08
So nontenical stuff, which is really great. I've been using it to build a garden office in my garden,
所以非技术性的东西,这真的很棒。我一直用它在我花园里建一个花园办公室,
46:14
right? It's, you know, a lot of these skills. We say, okay, these are great for engineering.
对吧?就是,你知道,很多这些技能。我们说,好吧,这些对 engineering 非常有用。
46:20
Then you realize, okay, engineering is just a discipline that what are we doing here? We're just
然后你会意识到,好吧,engineering 只是一个学科,那我们到底在这里做什么?我们只是
46:24
discussing something. We're doing things in real life like clicking around websites and stuff.
讨论一些东西。我们在现实生活中做事,比如在网站点点点之类的。
46:30
You realize how easily that can map onto other domains. So that's kind of maybe we can touch on
你会发现,这多容易映射到其他领域。所以这有点像,也许我们可以之后再聊
46:36
that a bit later, which is I am thinking how transposable this stuff is into different disciplines
这一点,就是我在想,这东西到底能多容易移植到不同的学科
46:41
and into different areas of life. So we find it has been great. Yeah, but if we think one interesting
以及生活的不同领域里。所以我们发现它一直很棒。对,但如果我们想一想一个有意思的
46:47
thing about engineering and software and during when Hill Wayne was on the podcast, he interviewed
关于 engineering 和 software 的事,还有当 Hill Wayne 上播客的时候,他采访了
46:52
engineers like we thought our real engineers chemical engineers mechanical engineers civil engineers
一些 engineers,比如我们以为的真正的 engineers、chemical engineers、mechanical engineers、civil engineers
46:58
and to try to find out his software engineering, real engineering and in the end, he found that it
然后想弄清楚 software engineering 到底算不算真正的 engineering,最后他发现它
47:02
probably is, but he said that one interesting thing with software that is very different to every
大概算,但他说 software 有一个很有意思的点,它跟每一个
47:08
other engineering profession is the materials that we work with. In every single place mechanical
其他 engineering 职业都非常不同,那就是我们打交道的 materials。在每一个地方 mechanical
47:13
engineering, civil engineering, even chemical engineering, you have a material that has a threshold
engineering、civil engineering,甚至 chemical engineering,你都有一种材料,它有一个 threshold,针对各种东西。
47:17
of things. You don't know exactly what it's like, you know, that it'll be like it can take about
你并不确切知道它到底是什么样,你懂的,就好像它能承受大概
47:22
this much to load, etc. But in software, the material is software, which is it just works like a
这么多 load,等等。但在 software 里,材料就是 software,也就是说它就像个
47:27
program, I mean, take out the non-deterministic, which maybe brings us to more of an engineering,
program 一样,我是说,先把 non-deterministic 拿掉,这也许让我们更接近一种 engineering,
47:33
but software, a code, you run it on a thousand times and it does the same thing a thousand times,
但 software,一段 code,你跑一千遍,它一千遍都做同样的事,
47:39
whereas in other fields, it doesn't. And he said that that he sees a big difference. But now,
而在其他领域,并不是这样。他说他看到有很大的区别。但现在,
47:44
I guess with LLMs, maybe we have this thing where we have a thing where you run a thousand times
我猜有了 LLMs,也许我们遇到这么个东西:你跑一千遍
47:48
and it will have these variants that most of engineering cast. So who knows if both what works with
它就会有这些 variants,而大多数 engineering 会 cast 掉。所以谁知道这两者到底什么能行得通,跟……
47:54
LLMs will be useful at other engineering where again, they all have this variant or we can take
LLMs 在其他工程领域也会有用,同样地,它们都有这种变体,或者我们可以采用
48:00
some approaches from other engineering professions that will maybe work nicely with working with
其他工程专业的一些方法,也许能很好地配合处理
48:06
this material called AI. I totally agree. What I think is interesting about software engineering and the
这种叫做 AI 的材料。我完全同意。我觉得 software engineering 有意思的一点,以及
48:11
way the reason the agents are good with it is it's all the inputs and all of the outputs are text-based
agents 之所以擅长它的原因,是因为所有输入和所有输出都是 text-based
48:19
everything. So the inputs, code, documentation, instructions for the agent on what to do, all text-based.
的一切。所以输入、code、documentation、给 agent 的指令说该做什么,全都是 text-based。
48:26
And the output is more code is test-weets, is type-checking results, linting, all that stuff is text-based.
而输出是更多 code,是 test-weets,是 type-checking 的结果,linting,所有这些全都是 text-based。
48:34
The thing that agents really struggle with is anything that's non-text-based. But you know,
agents 真正头疼的是任何 non-text-based 的东西。但你知道,
48:38
you see these amazing demos of people one-shotting a perfect UI first time. But what about if you have
你会看到那些惊人的 demo,人们第一次就 one-shot 出完美的 UI。但如果你有的是
48:44
an interaction problem in that UI? What if you're like hovering over something and the animation
那个 UI 里的一个交互问题?比如你悬停在某个东西上,然后动画
48:48
doesn't look right? How are you going to get that to the agent? I mean, you can record it a video,
看起来不对?你要怎么把那个给到 agent?我是说,你可以录个视频,
48:53
I suppose, and it sort of pauses on certain frames, let's say. But it's actually not that good in
我猜,然后它会在某些帧上停顿一下,比如说。但它其实在
48:58
terms of vision just yet. And so anything that's non-text-based is just garbage from the agent. It just
vision 方面还不太好。所以任何非 text-based 的东西对 agent 来说就是垃圾。它只是
49:05
can't handle it. And so I think in those sorts of professions, if you can turn, I assume they're
处理不了。所以我觉得在那些职业里,如果你能把,我猜他们是在
49:13
doing simulations. I assume they're doing some kind of, I don't know if you have a linter that
做 simulation。我猜他们在做某种,我不知道你们有没有一个 linter 可以
49:18
can work on architectural diagram. I'm sure you have some variety of that, right? Some simulation.
处理 architectural diagram。我确定你们有某种类似的东西,对吧?某种 simulation。
49:23
If you can make that text-based, if you can take the interactions that you have in your day-to-day
如果你能把它变成 text-based,如果你能把你们日常中的那些交互
49:27
life and turn them into text, which mostly there are anyway, then the agents are going to do a
生活,把它们转成文本,反正大多数本来就有,然后 agents 就会做得
49:31
pretty good job. That's something I'm trying to do currently is take all of the services that I use
相当不错。我现在正在尝试做的事,就是把我用的所有服务
49:37
and plug them into agents, make them available to the agents. But yeah, the more we can make
都接入 agents,让 agents 能用它们。但没错,我们越能让
49:42
our work agent friendly, the better results we're going to get.
我们的工作对 agent 友好,得到的结果就会越好。
49:45
Circling back to AI as a whole and then what has changed. It has changed so many things. But
回到 AI 整体来看,以及它改变了什么。它改变了太多东西。但
49:54
one thing that comes up with AI is often researchors and people working in AI companies is
关于 AI 经常会出现的一件事,就是研究人员和在 AI 公司工作的人常说的
50:00
no priors. With AI, you should let go of everything that we know before because this thing is different,
no priors。面对 AI,你应该放下我们之前知道的一切,因为这东西不一样,
50:04
start from scratch. The approaches might not work. In fact, let's assume they don't work and come
从零开始。那些方法可能行不通。事实上,我们就假设它们行不通,然后来
50:08
up with new approaches. Having been a developer before AI and actually you were really interested
想出了新方法。你在 AI 之前就是 developer,而且其实你真的很感兴趣
50:15
in building quality, great software. How much do you think AI has changed of everything including
在打造高质量、出色的 software 上。你觉得 AI 改变了多少东西,包括
50:22
the fundamentals? This is something that I thought too. I thought, right, AI has changed everything.
那些 fundamentals?这也是我当时的想法。我想,对,AI 改变了一切。
50:29
I'm going to throw the baby out with the bath water. I think we just need to look at everything
我打算把孩子和洗澡水一起倒掉。我觉得我们只需要把所有东西都
50:36
in a new way. I started doing that a lot. I was especially looking at light-spec-driven
用新的方式来看。我开始大量这么做。我尤其在看 light-spec-driven
50:39
developments, which is I have mixed feelings towards, I think, a strange term. It encompasses
developments,我对此心情复杂,我觉得这是个奇怪的术语。它涵盖了
50:45
too much. I thought, OK, maybe English is the hot new programming language, right?
太多东西。我想,好吧,也许 English 就是那个热门的新 programming language,对吧?
50:50
Which one viral? That's a sum of women under a capital city?
哪一个火了?那是首都城市下的一些女性?
50:54
Exactly. Maybe I can just write a spec and that specification is going to be persistent.
没错。也许我可以直接写一个 spec,而这个 specification 会一直保留下去。
50:59
It's going to be something I can edit and just get the agent to change it as it goes. As I
它会是我能编辑的东西,我可以让 agent 随着进展去改它。
51:04
experimented with it, I tried it a lot and I was just getting worse results than if I'd coded
我拿它做实验的时候试了很多次,结果反而比我手写 code 还差。
51:08
it by hand. It wasn't getting better as well. I noticed that every time I would run this loop
它也没有变得更好。我注意到,每次我跑这个 loop——改 spec、看 code 变化——code 都会变得更糟。
51:15
of change the spec, see the code change, the code would get worse. I'm not supposed to look at the
本来我不该看 code 的,当然了,但我还是看了,结果就是垃圾。
51:20
code, of course, but I looked at the code and it was garbage. I thought, how is the agent going
我想,agent 在这里怎么可能表现得好?它怎么可能跑得通?
51:24
to perform well in here? How is it going to work? The feedback loops are so important to the agent.
feedback loops 对 agent 太重要了。
51:29
If you have a bad test suite, the agent is going to get bad signal from it, just like a human
如果你的 test suite 很差,agent 从里面得到的 signal 就会很差,就跟人一样。
51:34
wood. I thought, how do I improve the test suite? How do I get this set up not like turning out
wood。我想,我该怎么改进 test suite?我该怎么把这套东西搭起来,不至于每次都搞出
51:41
garbage every time? I opened a book that I had on my shelf that I think was still wrapped in
垃圾?我打开一本放在我书架上的书,我觉得它可能还包着
51:47
plastic. The first time I took it out, which was the pragmatic programmer, which is everyone told
塑料膜。我第一次把它拿出来,那是 The Pragmatic Programmer,大家都跟我说
51:53
me to read it. Everyone said, yeah, this is the best book ever. You just got it and I bought it and
要读它。大家都说,是啊,这是有史以来最好的一本书。你刚拿到它,我买了它,但
51:58
I didn't read it for some reason. I opened it and it had a whole chapter, whole section on software
因为某种原因我没读。我打开它,里面有一整章,一整节都在讲 software
52:03
entropy and software entropy is the concept that, you know, entropy is the idea that things
entropy,而 software entropy 这个概念就是,你知道,entropy 的意思是事物
52:08
go towards a more disordered state that that is more likely than them going into an ordered state.
会走向更无序的状态,这比它们走向有序状态更可能。
52:12
And I realized, okay, software entropy is inevitable. What I'm seeing here is the agents are producing
然后我意识到,好吧,software entropy 是不可避免的。我在这里看到的是,agents 正在产出
52:17
software entropy at a higher rates than ever. And I started looking more into that book.
software entropy 正以比以往更高的速度发生。然后我开始更深入地研究那本书。
52:22
And almost every line I read, I thought, wow, this feels like it was written for today. You know,
而且我读到的几乎每一行,我都会想,哇,这感觉像是为今天写的。你知道,
52:26
you should go back to that book. These ideas of, like, don't outrun your headlights,
你应该回去再读读那本书。这些想法,比如,不要超出你的车灯范围,
52:30
always work within your feedback loops, programming by coincidence, traceable. It's so many smart
始终在你的 feedback loops 里工作,programming by coincidence,traceable。有这么多聪明的
52:36
ideas. And I realized this book has been out for 25 years, right? This is probably in the agents'
想法。然后我意识到这本书已经出版 25 年了,对吧?这很可能已经在 agents' priors 里了。
52:41
priors. Maybe if I just mention some of these concepts, especially the ones that are really
也许如果我只提一下其中一些概念,尤其是那些非常
52:45
pithy, like traceable, it's, for instance, which is the idea that you should always get feedback
精辟的,比如 traceable,它,比如说,指的是你应该始终获得 feedback
52:50
really quickly on the work that you're doing. I guess the idea of the traceable is, right,
非常快地,在你正在做的工作上。我猜 traceable 这个理念就是,对吧,
52:56
like a traceable that leaves a mark, you implement a path that works like an important piece of
就像一个会留下痕迹的 traceable,你实现的是一条路径,它就像某个重要部分的
53:03
a software instead of, like, building a database layer and the application layer and I don't know
一个 software,而不是,比如,构建一个 database layer 和 application layer,还有我不知道
53:07
whatever layer, like, building all three and then putting them together, like, just build one part
什么 layer,比如,把三个都构建出来然后再拼在一起,比如,只构建每个的
53:11
of each, but they should work together. That was the problem I was seeing with agents.
一部分,但它们应该能一起工作。这就是我在 agents 上看到的问题。
53:15
They would, you would get it to build a piece of software even with Ralph Loops. And you would,
它们会,你会让它去构建一个 software,即使有 Ralph Loops。然后你会,
53:18
it would build the entire database. And then it would build the entire application layer on top of
它会构建整个 database。然后它会构建整个 application layer,基于
53:23
that and it would build the entire React component library. Only at the end would it start actually
那之上,然后它会构建整个 React component library。只有到最后,它才会开始真正
53:28
plugging things together and getting feedback on what it was doing. And it was maddening because
把这些东西拼在一起,并针对它正在做的事情获得 feedback。而这让人抓狂,因为
53:32
things in the database, like, will affect what you show on the front end. You know, you only really
database 里的东西,比如说,会影响你在 front end 上展示的内容。
53:37
know whether things are actually making sense when you see it crossing those integration layers.
你知道,你真的只有看到它穿过那些 integration layers 时,才知道这些东西到底是不是说得通。
53:42
And so, another concept is vertical slices, right? Instead of these horizontal slices across
所以,另一个概念是 vertical slices,对吧?
53:46
these different deployable units, you have a vertical slice where it gets feedback on what it's
不是横跨这些不同 deployable units 的 horizontal slices,而是有一个 vertical slice,它能立刻得到关于自己在做什么的反馈,并从那里往外构建。
53:50
doing straight away and builds out from there. And so I just started using these phrases in
所以我就开始在跟 agent 说话时,把这些说法用到我的 prompts 里。
53:56
my prompts when I was talking to the agent. And I started noticing that it was saying those phrases
然后我开始注意到,它把这些说法又说回给我。
54:01
back to me. It was repeating them back to me. It was saying, okay, I'll turn this into a traceable
它把这些话重复回给我。
54:06
it. Because this is a traceable it, I'll do this. It was using the words that I was using in
它说,好吧,我会把这个变成一个 traceable it。
54:12
its own reasoning traces. And so this is what I call a leading word, a light word, let's say, which
它自己的 reasoning traces。
54:17
is a sort of fancy literary term, where you lead the agents just with a simple phrase that you
然后这就是我所说的 leading word,也可以叫 light word,这么说吧,它有点像一种花哨的文学术语,就是你只用一句简单的话来引导 agents,在 skill 和整个 prompt 里重复个几次,就能改变它的行为。
54:23
repeat a couple of times in the skill and all the prompt to change its behavior. And so traceable
所以 traceable 这个词特别棒。
54:28
it was a fantastic one. And I just started diving into different books. All the books I could find
然后我就开始翻各种书。
54:33
to try to mine them for leading words. And another one was John Astahouse book, a philosophy of
凡是能找到的书,我都想挖一挖里面的 leading words。
54:38
software design, where I picked up tons of great stuff like deep modules, which is a massive one
另一个来源是 John Astahouse 的那本书,a philosophy of software design,我从里面学到了很多很棒的东西,比如 deep modules,这对我来说特别重要。
54:44
for me. It's interesting to consider if these agents have always been trained on those books,
有意思的是,可以想想这些 agents 是不是一直都有用那些书来训练,而那些书现在还都能印得到。
54:48
just still available for print. And of course, there's arguments of like what they're doing with
当然,也有一些争论,比如他们到底拿这些做什么
54:52
those books, so whatnot. But if it's in their training data and the agents as they're trained,
那些书啊什么的。但如果它存在于他们的 training data 里,而 agents 在被训练时,
54:59
they connect all these different concepts. And yeah, these, I guess, leading words could
它们会把这些不同的概念连接起来。而且,嗯,这些,我猜,leading words 可能
55:05
invoke those concepts. And I wonder how if this is much different to when on a topic, talk with
唤起那些概念。我很好奇,这跟你在某个话题上、和
55:11
the professional, and you're trying to describe as an amateur, what you wanted, a professional
专业人士交谈时有多大不同,而你作为一个外行,试图描述你想要什么,一个专业人士
55:15
that says a word that does that. And a fellow professional gets it. And it was this jargon,
说了一个词就能达到这个效果。而同行的专业人士一下就懂了。而这就是这种行话,
55:19
right? And jargon on one end, it's not very inviting when you join a company and there's jargon.
对吧?而行话从一方面看,当你加入一家公司、到处都是行话时,它并不太友好。
55:25
But it just, we use it because it makes things faster, easier, fewer misunderstandings.
但它就是,我们用它是因为它让事情更快、更容易、误会更少。
55:30
Definitely. That was something that idea led me to, because obviously you've got these
确实。那个想法让我想到了一点,因为很明显你有这些
55:35
leading words that are in the agent's priors, right? Like traceable it's all that stuff.
那些就在 agent 的 priors 里的 leading words,对吧?比如 traceable,就是这些东西。
55:39
What about describing my application? What about describing my code? How do I get the agent to,
那描述我的 application 呢?描述我的 code 呢?我该怎么让 agent 去,
55:45
because the agents are just awfully verbose, right? Especially Opus 5 for some reason that people
因为 agents 就是特别啰嗦,对吧?尤其是 Opus 5,不知道为什么,大家
55:51
really go after that model for being verbose. And it really is. And I thought, how do I get it to be
真的会因为这个模型太啰嗦而揪着它不放。而且它确实就是。我就想,我怎么才能让它变得
55:57
less verbose? How do we start talking a common language between the agents, this communication
不那么啰嗦?我们怎么才能让 agents 之间开始说一种共同语言,又回到这个沟通
56:02
barrier again? And it led me to DDD domain driven design. Eric Evans, incredible book where he
障碍?然后这让我想到了 DDD,domain driven design。Eric Evans,那本了不起的书,他在其中
56:08
talks about ubiquitous language, a language, again, really deep in the agent's priors, it understands
谈到了 ubiquitous language,一种语言,同样,真的深深在 agent 的 priors 里,它理解得
56:13
it really well. I sort of started toying with the idea of maybe changing grill me a little bit,
非常透彻。我就开始琢磨,也许把 grill me 稍微改一改,
56:19
because grill me is a very simple skill. But what if we, while we were ideating, while we were
因为 grill me 是一个非常简单的 skill。但如果我们,在我们构思的时候,在我们还在
56:25
thinking about the application we were going to build, what if we were also building a domain
思考我们要构建的 application 的时候,如果我们同时也在构建一种 domain
56:29
language? What if we were also deciding on the right terms to use? And this turned into a skill
language?如果我们同时也在决定该用哪些正确的 terms 呢?然后这就变成了一个 skill
56:35
called grill with docs, which is terribly named skill, but essentially creates this domain language
叫 grill with docs,这名字起得糟透了,但本质上它会随着你推进创建出这种 domain language
56:40
as you go. And if you get the agent to use the domain language, the difference is night and day,
随着你推进。如果你让 agent 用上这种 domain language,差别简直是天壤之别,
56:47
because suddenly you're speaking the same language, you're able to describe the things you want
因为突然之间你们说的是同一种语言,你能描述你想
56:51
to change in so many fewer words. Like I had this app that I've sort of worked on. There's this
改的东西,用的词少得多。比如我有个自己算是做过一阵的 app。有这么
56:56
complicated interaction where there are ghost lessons and real lessons. And what happens when you turn
很复杂的交互,里面有 ghost lessons 和 real lessons。然后当你 turn 的时候会发生什么
57:01
a ghost lesson that's inside a ghost section inside a ghost course into a real lesson that means
把一个在 ghost course 里的 ghost section 里的 ghost lesson 变成一个 real lesson,这意味着
57:07
the ghost section needs to become real. The ghost course needs to become real. How do you explain
ghost section 得变成 real。ghost course 得变成 real。那你怎么解释
57:12
that? Well, that's the materialization cascade, right? And you came up with these terms with the agent,
这个?嗯,那就是 materialization cascade,对吧?这些术语是你跟 agent 一起想出来的,
57:17
right? The agent's actually really good at coming up with these terms. And so I have a domain modeling
对吧?agent 其实真的很擅长想这些术语。所以我有 domain modeling
57:22
skill. And we talk about jargon, but really it's domain language. And if you can integrate that,
skill。我们会聊到 jargon,但其实它就是 domain language。如果你能把它整合起来,
57:27
and integrate that not only with the way you talk about the app, but the app code itself,
而且不仅把它和你们谈论 app 的方式整合起来,还要和 app code 本身整合起来,
57:32
then you've got to do go in, right? Like it's very, very exciting. And it means that the agent can
那你就得深入进去,对吧?真的非常非常让人兴奋。而且这意味着 agent 可以
57:37
navigate your code base a lot easier. It can find the functions that mention that specific domain
更轻松地浏览你的 code base。它能找到提到那个特定 domain 的 functions
57:42
terminology, just with a simple graph. It's just gorgeous. So that's something I've been really
术语,只用一个 simple graph。简直太漂亮了。所以这就是我一直真正
57:46
integrating with every part of my setup is DDD. But this is so interesting because in an effort to
整合进我 setup 每个部分的,就是 DDD。但这太有意思了,因为为了
57:53
make these agents work more efficiently or do workflows that just mean that you can produce
让这些 agents 更高效地工作,或者做那些 workflows,而这些只是意味着你能产出
57:59
better software with fewer mistakes and these things. You start to go back in time, found this book
更好的 software、犯更少的错误,以及这些东西。你开始回到过去,找到这本书
58:04
that is now I think, what is it like 2030, 40 years old? And you're even still going back and
那本书现在我想,大概,怎么说,20、30、40 年了吧?而且你甚至还一直在往回翻,
58:12
finding jumps from as I'm sure somebody will get to the mythical man month. Yeah, I've got it already
发现一些跳跃,来自——我相信有人会提到的——the mythical man month。对,我已经有了
58:16
absolutely, which is more than 50 years. And you're trying to find the right words to describe
绝对是,那已经超过 50 年了。而且你在试着找合适的词来描述
58:22
things, which is very curious because when I talk with Kent back on how they used to program
事情,这非常有意思,因为当我和 Kent 聊起他们过去是怎么编程的时候
58:27
with word couldning them as they were coming up with the concept of actually just domain design
58:33
patterns. They had a Tzaris with them and they would look through trying to find the right word
58:38
that is that has right meaning and they had it on their desk. Right now, this feels we're going
58:42
back to the fundamentals, the how that people have been asking themselves and every now and then
58:48
people write it in books and it kind of spreads as wisdom and now we're back to where we started,
58:53
which is what you're trying to teach as the wisdom part is wild, right? Like because AI is so
59:00
different to humans, you need to optimize it. Imagine you essentially had a human who wakes up
59:07
every morning and cannot remember who they are, right? The guy from Memento, you know, this is
59:12
Memento driven development, right? We are trying to optimize our code bases for new status. So we're
Memento driven development,对吧?我们是在为新的 status 优化我们的 code base。所以我们要
59:17
trying to have the most healthy code base that we've ever had because if you a human can work
努力拥有我们有史以来最健康的 code base,因为如果是人类,你可以
59:24
around a bad code base, they just develop memory, they just slam their head against the wall again
绕过糟糕的 code base,他们只会形成记忆,他们就是一遍又一遍拿头撞墙,
59:28
again, again, until they've got there. But an agent can't do that. It starts fresh every single session
一遍又一遍,直到终于搞明白。但 agent 做不到。它每个 session 都从零开始,
59:35
and so you need to optimize your code base for that person. That leads you down into really interesting
所以你需要为那个“人”优化你的 code base。这会带你进入一些非常有意思的
59:40
paths and it turns out that software fundamentals have been saying we've been trying to do that
路径,而且事实证明,software fundamentals 一直在说,我们一直以来想做的就是这件事,
59:45
for the entire time, right? I am fully like, I don't know, Eric Evans peeled and fully laid
从头到尾都是,对吧?我完全就是,我不知道,Eric Evans 剥开了、完整铺开了,
59:51
like software fundamentals peeled. We are sort of changing the rules a little bit,
就像 software fundamentals 被剥开了一样。我们有点在稍微改变规则,
59:55
but maybe we're just emphasizing rules that we knew we were supposed to do, but maybe we didn't.
但也许我们只是在强调那些我们知道自己该做、但也许并没做到的规则。
60:01
And I find that really fascinating and it's definitely a lot of fun.
而且我觉得这真的特别有意思,绝对很好玩。
60:04
Now, okay, like I think it's easier to follow with this train of thought, why fundamentals matter,
现在,好吧,我觉得顺着这个思路会更容易理解,为什么 fundamentals 很重要,
60:10
but which fundamentals and if I'm an engineer, especially maybe someone who has been just kind of like
但哪些 fundamentals 才重要呢?如果我是一名工程师,尤其是那种可能一直
60:15
heads down coding, more tactical coding, how do I go about and find those fundamentals that matter
埋头 coding、更偏 tactical coding 的人,我该怎么去找到那些真正重要的 fundamentals,
60:21
and go back to what you found work? This is really tough question, right? It's really tough because
然后回到你发现有效的方法上?这真的是个很难的问题,对吧?真的很难,因为
60:27
strategic programming has always been really hard to learn. The reason for that is that the
strategic programming 一直都特别难学。原因是,它的
60:32
feedback loop on it is really long. You would often find like people who quit their jobs after six
feedback loop 真的很长。你经常会发现,比如那些在工作六个月后辞职的人
60:38
months, their strategic mistakes never catch up with them, right? Maybe that strategic mistake takes
几个月里,他们的战略错误从来不会找上他们,对吧?也许那个战略错误要
60:44
nine months to come back at you. I think of strategic learning strategic programming is kind of like
九个月后才回来找你。我觉得,战略学习、战略编程有点像
60:49
you've got a huge mixing desk in front of you with loads of these different sliders. Maybe one of those
你面前有一个巨大的调音台,上面有一堆不同的推子。也许其中一个
60:53
sliders is like the amount of deployable units that you have. You turn it up, you've got more microservices,
推子就像你拥有的 deployable units 的数量。你把它调高,你就有更多 microservices,
60:58
right? You turn it down, you've got a monolith. How do you make that decision? Where do you put that slider?
对吧?你把它调低,你就有个 monolith。你怎么做这个决定?你把那个推子放在哪儿?
61:03
Because it's kind of like you're mastering something, you're mixing some music, but you can't hear what's
因为这有点像你在做母带,你在给一些音乐混音,但你听不出哪里
61:08
wrong until nine months later, right? Until the mistakes come and get you. So I think the only thing
不对,直到九个月后,对吧?直到那些错误过来找上你。所以我觉得唯一能
61:14
that can make that feedback loop faster is moving faster. AI now lets you move faster, right? And so
让那个 feedback loop 变快的东西,就是移动得更快。AI 现在让你能移动得更快,对吧?所以
61:20
your strategic mistakes will come back at you quicker. They will come back at you quicker because
你的战略性错误会更迅速地反噬你。它们会更迅速地反噬你,因为
61:24
AI is just able to produce so much code. And so what you need to be thinking about is that
AI 就是能产出这么多 code。所以你真正需要思考的是,
61:29
your code is the environment the agent operates in, and you should always be thinking about
你的 code 就是 agent 运行的环境,你应该始终思考
61:34
improving that environment, thinking about how to do it better. And obviously that requires a
如何改进那个环境,思考怎么把它做得更好。显然,那需要一点
61:38
bit of tactical knowledge, right? You need to understand what code is and how it fits together and what
战术知识,对吧?你需要理解 code 是什么、它如何组合在一起,以及
61:43
the memory constraints are and all that stuff. But it's in order to get better at strategic programming,
memory constraints 是什么,诸如此类。但这是为了在 strategic programming 上变得更擅长,
61:48
you just need to be thinking on that level all the time. And I would say reading these books as well,
你就需要一直在这个层面上思考。而且我会说,也要读这些书,
61:52
because just having the language to explain that and understanding the difference between applying
因为仅仅是拥有解释它的语言,以及理解 applying 之间的区别
61:57
strategic techniques and not is the whole game. I mean, up to, you know, pre AI for senior developers,
战略技巧并不是全部。我的意思是,直到,你知道,pre AI 时代,对于 senior developers 来说,
62:07
senior engineer staff engineers, they were the people who often you didn't see a senior engineer
senior engineer、staff engineers,他们就是那些人,你通常看不到一个 senior engineer
62:12
under five years of experience, because you typically needed even in a fast-paced environment.
有不到五年经验的,因为在快节奏的环境中,你通常也需要。
62:16
You needed that much time to get the feedback loops to make the mistakes, make your own mistakes,
你需要那么多时间来获得 feedback loops,去犯错,犯你自己的错误,
62:21
and by the time people got to staff engineer, oftentimes around 10 plus years of experience,
而当人们成为 staff engineer 时,通常大约有 10 年以上的经验,
62:25
some people did it earlier, but they often just had paddle skulls all over them. And they would,
有些人更早做到,但他们往往浑身都是 paddle skulls。而且他们会,
62:30
you know, someone start a new project and they would go in and they would just make a tweak
你知道,有人开始一个新项目,他们会进去,然后只是稍微调整一下
62:34
and it wouldn't be clear why. And they were like, trust me on this, we were avoiding disaster and
而且原因不会很清楚。他们会说,相信我,我们是在避免灾难,而且
62:39
production or on call or whatnot. But all of this came to lived experience. Now AI speeds things up
62:47
it. It also makes it easier to fix mistakes. So I'm wondering how this might change. Like on one
62:52
end, I could see how it could just speed up experience. Like you can in a year, some people,
62:58
some teams will ship more projects than they have in four years or about the same as in, let's say,
63:02
three or four years before, so you get a lot more experience. But I wonder if sometimes the mistakes
63:07
that you make are just not as serious because you can fix them quickly. And now I wonder if the
63:12
learning is not as strong because again, like some of these battles cars, these war stories are,
63:16
it was just really bad outage. We lost a lot of money because we didn't have an item potent
63:20
key. And now, of course, now you know what item potency is. It's not an easy concept, but it's
关键。然后现在,当然,现在你知道 idempotency 是什么了。这概念不容易,但它
63:25
important if you've been heard by it and so on. If you're a company right now and you want to train
很重要,如果你曾经被它伤过之类的。如果你现在是一家公司,想培养
63:30
the next junior developer, like because this strategic programming knowledge is so valuable now,
下一个 junior developer,因为现在这种 strategic programming knowledge 太有价值了,
63:40
because you can use it at such higher leverage, are you really going to employ someone without it?
因为你能以高得多的 leverage 来用它,你真的会雇一个不具备它的人吗?
63:45
Like, why would you? Like, I was asking, I didn't interview with Uncle Bob Bill Day. And his
比如,你为什么会呢?比如,我当时在问,我没有采访 Uncle Bob Bill Day。而他的
63:51
recommendation was, okay, you just hire someone and you treat them as an agent for a while. You just
建议是,好吧,你就先雇个人,把他当 agent 用一阵子。你就
63:56
delegate to them. You keep them in that tactical mindset for a while until their mistakes start
把事 delegate 给他们。你先让他们保持那种 tactical mindset 一段时间,直到他们的错误开始
64:00
coming up at you. But that's such an enormous waste of money for people, right? Like when
冒到你面前。但那对人来说是多大的金钱浪费啊,对吧?就像当
64:05
software engineering, when the tactical stuff has gone below minimum wage in a lot of countries.
software engineering,当那些战术性的活儿在很多国家已经跌到最低工资以下的时候。
64:10
So I don't know is the answer. I only know that the strategic stuff, the understanding of the
所以答案就是“我不知道”。我只知道,那些战略性的东西,对
64:17
code, the understanding of the long view has gotten more valuable than it's ever been, right?
code 的理解,对长远大局的理解,已经变得比以往任何时候都更有价值,对吧?
64:23
Because you can just get so much leverage out of it.
因为你能从中获得巨大的杠杆效应。
64:26
I asked about interesting things. I'd like to know from you. And this is very
我问了一些有意思的事情。我想听听你的看法。而这非常
64:30
related to this. This person asked, like, how do you convince non-engineering stakeholders that
与此相关。这个人问,比如,你怎么说服非工程背景的利益相关方,让他们相信
64:34
investing in software fundamentals are important even if they might use the speed and productivity
投资 software fundamentals 很重要,即使他们可能会利用速度和生产力
64:38
on paper? I think the question here is, if some people advocate, like, look, we do want to
在纸面上?我觉得这里的问题是,如果有些人主张,比如说,你看,我们确实想
64:44
get the fundamentals right, which means we want to take it a bit slower, think about their
把基础搞对,这意味着我们想稍微放慢一点,想想他们的
64:48
decisions, maybe educate ourselves as well as opposed to just like turning it out.
决策,也许也给自己补补课,而不是就那样把它赶出来。
64:52
I mean, you could have asked the same question 10 years ago, right?
我的意思是,同样的问题你 10 年前也能问,对吧?
64:55
Would it still be relevant? You don't mean it like, except we're sort of top-off elements
它还会有意义吗?你不是那个意思吧,除非我们有点像 top-off elements
65:00
that we will have asked about, like, paying off tech debt. Exactly. And it's the same thing,
我们之后会问到的,比如还清 tech debt。没错。而这是一回事,
65:04
right? Like, we have been having the same conversation, which is quite satisfying to me,
对吧?就像,我们一直在进行同样的对话,这让我挺满足的,
65:08
because I mean, you need some sort of metric for, like, figuring this out. And it's a little easier
因为我的意思是,你需要某种 metric 来搞清楚这件事。而且这会稍微容易一点
65:13
to figure this out because agents allow you to move faster. And the first step to this is getting
去搞明白这件事,因为 agents 能让你行动得更快。而这件事的第一步就是做到
65:19
observability in your organization over every single agent on what it's doing and what it's
在你组织里,对每一个 agent 的 observability,看它在做什么,以及它的
65:23
success and failure rate is. We've never been able to have that with, like, developers before,
成功率和失败率是多少。以前我们对开发者从来没能做到这一点,比如说,
65:28
you know, it's kind of invasive for developers. I'm up for agents. It's like, it's okay.
你知道,这对开发者来说有点侵入性。对 agents 我倒是没问题。就像,没关系。
65:33
It's okay, right? We are paying for this service, right? We need to understand how well we're
没关系,对吧?我们是在为这个服务付费,对吧?我们需要了解我们到底有多
65:37
optimizing for it. The first step there is actually getting a harness or observability around your
为它做优化。第一步其实是要在你的
65:42
agents the entire organization to work out what's working and not. And you probably need someone
整个组织里的 agents 周围搞一个 harness 或者 observability,弄清楚什么有效、什么无效。而且你很可能需要有人
65:47
whose job it is or part of their job is to look at that data and figure out what we're doing.
专门做这件事,或者工作的一部分就是看那些数据,搞清楚我们在做什么。
65:52
Maybe some repose in your organization have better success rates than others. And so you take the
也许你组织里的某些 repos 成功率比其他的更高。然后你就把
65:57
the lessons that are in there and you pass them out. I also think that most organizations need to
里面的那些经验教训,你把它们分发出去。我还觉得大多数组织需要围绕一套共同的技能聚在一起。你需要一个共同的 software workflow process,这样每个人都能向它回馈,这样你就可以拿各种东西做实验。你可以做 AB test。你知道,你可以让一个团队做一套东西,另一个团队做另一套东西,然后事后问他们。所以任何组织里,任何跟 agents 打交道的人,都需要这种实验心态。你得想,我们怎么从我们正在花的这些 tokens 里榨出更多价值?而 observability 就是那里的第一步。对,我还想知道 Sunstabbed 里是不是有一个 human feedback loop。我是说,就跟你的同事聊聊,就像在,你知道,
66:02
gather around a common set of skills. You need a common software workflow process so that everyone
66:07
can contribute back to it so that you can experiment with things. You can AB test things. You know,
66:12
you can have one team doing one set of stuff and one team doing another set of stuff and then you
66:16
ask them afterwards. And so everyone working with agents in any kind of organization needs this
66:23
experimental mindset. You need to be thinking, how do we get more juice out of these tokens that
66:28
we're spending? And observability is the first step there. Yeah, and I also wonder if there's a
66:33
human feedback loop in the Sunstabbed. I mean, just talk to your colleagues like on like, you know,
66:39
we do have rituals, team meetings, company-wide meetings for a reason. Like there, share,
我们确实有仪式、团队会议、全员会议,这是有原因的。比如,分享,
66:45
here's what's working for me. Here's where it didn't work. Here's where I'm learning. Like in the
这是我这边有效的做法。这是没起作用的地方。这是我正在学习的地方。就像在
66:50
end, we are in charge of setting up the rules, deciding how we use them, where we use them, where we
最终,我们负责制定规则,决定我们怎么用它们、在哪儿用它们、在哪儿
66:55
don't use them, and where we say like, no, this needs to be humans need to take 100%. Like we're not
不用它们,以及在哪儿我们会说,不行,这必须由人类 100% 承担。就像我们不是——
67:00
if it getting AI involved, which again, will be different everywhere. And it's not only that like
如果让 AI 参与进来,这在不同地方又会不一样。而且不只是这样,
67:05
a lot of this stuff now, you don't need to be human in the loop for, right? You don't actually need
现在很多这种事情,你不需要 human in the loop,对吧?你实际上不需要
67:09
to delegate that much time in order to build up a better code base. I have loops that essentially
委派那么多时间,就能构建出更好的 code base。我有一些 loops,基本上
67:16
every morning, it will run my improve code base architecture skill and give me a proposal for the
每天早上,它会运行我的 improve code base architecture skill,并给我一个针对……的提案
67:21
something that I could improve in the code base. And then I can just press a button, I can say,
某个我可以在 codebase 里改进的地方。然后我只要按个按钮,就能说,
67:25
okay, turn that into tickets, and then let's ship that. That is pretty easy to do and it's pretty
好,把它变成 tickets,然后我们就 ship 出去。这做起来挺容易,而且挺
67:30
easy to stream that in with other work. And so I think that I don't know whether you need like 20%
容易把它和其他工作一起 stream 进来。所以我觉得,我不知道你是不是需要大概 20%
67:36
of your time focusing on the factory that builds your software as well as the software, because I
的时间,既关注构建你 software 的工厂,也关注 software 本身,因为我
67:41
feel like that's a massive, incredible investment into your future leverage. I'm not only your
觉得那是对你未来 leverage 的一笔巨大、惊人的投资。这不只是你
67:47
leverage with your work, but also your team's leverage and understanding and getting better at those
在工作中的 leverage,也是你团队的 leverage、理解,以及在这些
67:51
skills. But of course, you need results and you might need to hide that work for a bit before you
技能上变得更强。但当然,你需要结果,而且你可能需要先把那部分工作藏一阵子,再
67:55
actually reveal it to this is what we've been doing. Well, and this is down to your environment,
真正把它展示出来:这就是我们一直在做的事。嗯,而这取决于你的环境,
68:00
but yeah, and no one's going to be mad at you if you come back saying, oh, by the way, guys,
但话说回来,没人会生你的气,如果你回来说,哦,顺便提一下,各位,
68:04
I also did this. Yeah, exactly. I wanted to ask about your specific kind of how you use tools.
我也做了这个。对,没错。我想问问你具体是怎么用工具的。
68:11
First one is coding age, just local or in the cloud. And you recently posted a pretty provocative
第一个是 coding age,是只用 local 还是在 cloud 里?然后你最近发了一条挺有挑衅性的
68:17
tweet, which I'll quote you. I'm moving away from my local dev setup. Make zero sense to me now.
推文,我会引用一下你的话:我正在放弃我的 local dev setup。现在这对我来说完全没道理。
68:22
A lot of people ask me, how do you make your skills collaborative? How do you have a collaborative
很多人问我,你怎么让你的 skills 变得可协作?你怎么进行一场协作式的
68:27
grilling session? And the answer to that is that you need more than just your terminal and you,
grilling session?答案就是,你需要的不仅仅是你的 terminal 和你自己,
68:33
right? We're in a phase now where every dev has like 100 terminals available to them.
对吧?我们现在这个阶段,每个 dev 都有差不多 100 个 terminal 可以用。
68:40
And that seems crazy. It feels like you need those 100 terminals available to your entire
而这看起来太疯狂了。感觉你需要把那 100 个 terminal 提供给你整个
68:44
organization. You need to be able to collaborate in a shared space. You need to be able to ask
组织。你得能在共享空间里协作。你需要能请人把某人拉进你的拷问环节,然后说,好,做这个。所以对我来说,在你已经工作的地方进行很多这样的互动就非常合理,比如 Slack、discord、teams 或者 linear。这正是驱使我探索这件事的原因。我并没有特别跟一个团队一起工作,但我理解它的价值。我一直在尝试把这一点融入我的工作流。所以在这边的火车上,我在 discord 里跟我的 heads in a box 聊天,你知道,为我的课程做东西,或者修复学生们遇到的 bug。所以现在,当我有这个我可以……的设置时,我觉得只在本地做事的价值更少了。
68:48
someone tags someone in to your grilling session and say, okay, do this. And so it makes a lot of
68:54
sense for me to have a lot of those interactions in the place where you already work in Slack or
68:59
in discord or in teams, whatever, or linear. And that is really the thing that's driving me to
69:05
explore this. I don't work with a team, particularly, but I understand the value of that. And I've been
69:10
trying to build that into my flows. So on the train over here, I'm in discord chatting to my
69:15
heads in a box, you know, building stuff for my course or fixing bugs that students are coming across.
69:20
So I can see less value now in just doing things locally when I have this setup that I can
69:26
port forward into, let's say, and, you know, and like see the dev server as it's making changes. And
port forward 进去,比如说,然后,你知道,就像看着 dev server 在改东西。然后
69:32
I don't know, it just feels like it makes way more sense to me than having a very, very expensive
我不知道,我就是觉得这对我来说合理多了,比拥有一台非常非常贵的
69:37
laptop that can do this stuff. It feels like wasted compute. And especially because on that remote
笔记本电脑来做这些东西。感觉就是在浪费 compute。而且特别是因为在那个 remote
69:42
box, I can set up schedules. I know the box is always going to be on. I have like a morning stand-up
box 上,我可以设置日程安排。我知道那台 box 会一直开着。我有点像早晨 stand-up
69:47
with my agent where I get it, it's schedules my day for me. And like it understands all of my
跟我的 agent 一起,我会收到它,它会帮我安排一天。而且就像它懂我所有的
69:52
discord chats and all that. Yeah. Having that remote feels like it makes just so much more sense
discord 聊天记录之类的。嗯。有那个 remote 感觉就是合理太多了
69:57
for me. And the only thing I do locally now is debugging issues with the remote box.
对我来说。现在我本地唯一做的事,就是 debugging remote box 的问题。
70:01
Yeah. I think I wonder if there's a question of how easiest to replicate some pretty complicated
嗯。我在想,是不是有个问题,就是怎么最容易地 replicate 一些相当复杂的
70:07
local setups in the cloud, but once that becomes possible, it's probably a matter of when, not,
把 local setups 放到 cloud 里,但一旦这成为可能,那大概就只是早晚的问题,而不是
70:12
and if. Yeah. And if anything, people are having this similar issue with local setups, right?
会不会的问题。是啊。而且真要说的话,人们在 local setups 上也正遇到类似的问题,对吧?
70:17
With just a thousand Git work trees, just spamming their hard drive. And with how do I have a
光是有一千个 Git work trees,就把他们的 hard drive 塞爆了。还有,我怎么会有一个
70:22
work tree that I've got to run like five Docker containers in order to get my local dev setup?
work tree,得跑大概五个 Docker containers 才能把我的 local dev setup 跑起来?
70:28
Well, that's often a little bit easier in the cloud, because you can just provision the resources
嗯,这在 cloud 里往往还稍微容易一点,因为你只要 provision 你需要的 resources
70:31
that you need on demand. And by the way, we're seeing that companies like RAMP, a Stripe Uber,
on demand 就行。顺便说一句,我们看到像 RAMP、Stripe、Uber 这样的公司,
70:37
that have platform teams that manage to take a local dev's full setup and put it into the
他们有 platform teams,能设法把 local dev 的完整 setup 放进
70:43
cloud on a cloud machine that you can now invoke with the ads Slack or a website. They're seeing
cloud 上的一台 cloud machine,现在你可以通过 ads Slack 或一个 website 来 invoke。他们看到
70:47
people use these agents far more except for frontend work, which you still want to have that
人们用这些 agents 要多得多,除了 frontend 工作,你还是想要有那个
70:54
feedback loop that there are a few exceptions where you really want to have that like a local
feedback loop。有几个例外情况你确实会想要有那个,比如本地的
71:00
dev setup for latency or whatnot. But they're also seeing like 70, 80% of devs are just voluntarily
dev setup 来应对 latency 什么的。但他们也看到,大概 70%、80% 的 devs 只是自愿
71:07
going for the cloud. Yeah. I mean, I think you can just tunnel through and just get the,
选择用 cloud。对。我是说,我觉得你直接 tunnel 过去就行了,然后就能拿到,
71:11
if it's running a dev server, and you just have that appearing on your local machine, how is
如果它跑着一个 dev server,而你只是让它在你的 local machine 上显示出来,那
71:16
that different from having it locally, right? I don't know. I think I've not experimented with that,
跟在本地跑有什么不同,对吧?我不知道。我觉得我没试过这个,
71:21
but that's when I talked about that and said, oh, maybe frontend is a good exception. That was the
但那就是我聊到那个的时候说的,哦,也许 frontend 是个不错的例外。那是我
71:26
immediate response that I got. And it makes sense to me. I want to ask you about planning and
立刻得到的回应。而且这对我来说说得通。我想问你关于 planning 和
71:30
requirements of your big believer and grill me and plan and planning up front or getting the plan
你的 big believer 的需求,还有 grill me,以及计划和前期规划,或者先拿到计划
71:35
and then having the agent work, but there's a devil's advocate here. Agents are so fast at
然后再让 agent 干活,但这里有个反方观点。Agents 太快了,尤其是在
71:39
implementing. You can actually even have like several, like, few edges, implement different
实现上。你甚至可以有好几个,比如几个 edges,去实现不同的
71:43
architectures. What about the approach of like, well, they're, they're fast at implementing. So
architectures。那这种思路呢:嗯,它们,它们实现起来很快。所以
71:48
I might not need to do as much up front planning. I can just course correct as I go.
我可能不需要做那么多前期规划。我可以边做边修正。
71:52
It depends what type of work you're doing, right? Because I believe that you shouldn't be using
这取决于你在做什么类型的工作,对吧?因为我相信你不应该什么工作都用
71:57
grill me for everything. Essentially, you need grill me for pieces of work where the actual thing
grill me。本质上,你需要对那种实际要做的事情
72:04
being done is going to be quite large and hard to row back from. If you feel like, okay,
规模相当大、而且很难回退的活儿,用 grill me。如果你觉得,好吧,
72:09
this feature maybe it's a whole new page, maybe it's a big feature. This code, you think, if the
这个 feature 可能是一个全新的页面,也可能是一个大 feature。这段代码,你想,如果
72:15
agent gets it wrong, then the wrong code is going to be in its context window influencing
agent 搞错了,那么错误的代码就会进入它的 context window,影响
72:20
everything that comes afterwards. And actually going back and editing the stuff afterwards and
之后的一切。而且实际上事后回去编辑那些东西,然后
72:24
doing the alignment after the fact is going to be expensive. Whereas for those cases, it makes
事后做 alignment 会很贵。而对于那些情况,它
72:29
sense to align first to answer all of the tricky questions like your, you know, your Jason cookie
是有道理的,先 align 来回答所有棘手的问题,比如你的,你知道,你的 Jason cookie
72:34
or whatever your authentication token first and then do it. But for some cases like simple bug fixes
或者你的 authentication token 之类的,先做,然后再做。但对于一些情况,比如简单的 bug fixes
72:40
or just like move this button three pixels to the left, it's obvious that you don't need to align
或者就像把这个按钮向左移动三个 pixels,很明显你不需要 align
72:46
before that. You can see the thing if it's just like a five line change or something. You can align
在那之前。你能看到这东西,如果它只是像五行代码的改动之类的。你可以 align
72:51
afterwards. And so that's how I think of it is that where you can, you should shift right
之后。所以我的理解是,只要可以,你就应该尽量 shift right
72:58
as much as possible. And actually, there are actually certain features that I have a little
尽可能多。而且其实,在我的 video editor 里确实有一些小功能
73:02
in my video editor, I have a button that I can send feedback to it. And I often use this for
我有个按钮可以给它发 feedback。我经常用这个来
73:07
very simple tasks where I send the feedback. It goes into a GitHub issue. This immediately gets
处理非常简单的任务,我把 feedback 发出去。它会进到一个 GitHub issue。这个马上就会
73:13
picked up by an implementer agent gets just worked on immediately. Then a code review agent comes
被一个 implementer agent 接走,直接立刻开始处理。然后一个 code review agent 会进来
73:18
in reviews the code. And then I, at the end, I get to see this actual thing being fixed and I can
review 代码。最后,我能看到这个东西真的被修好,然后我就可以
73:24
do my alignment then. And that's what really well for things that are very easy to specify things
做我的 alignment。对于那些很容易说清楚的事情,这真的非常好用
73:28
that I don't need to grill on. So that those are the choices you've got is a small enough thing that
我不需要反复追问的事情。所以,你能有的选择就是,如果这件事小到
73:33
I can align afterwards. Then don't use grill me. Does it fit into a single session? Then use
我可以之后再 align。那就别用 grill me。它能放进单个 session 吗?那就用
73:38
grill me. Does it span multiple sessions? I need to align over the entire thing. Then use
grill me。它会跨多个 session 吗?我需要在整个事情上 align。那就用
73:43
wayfinder. Interesting because this is not all that different to where some tech companies landed
wayfinder。挺有意思,因为这和某些科技公司最终落到的地方并没有太大不同
73:48
years before, which is on the PRD, the product where I'm going to document. If it's something
几年前,也就是落在 PRD 上,我会记录的那个 product。如果它是
73:52
trivial, just build it. If it requires the team, it's a team level scope. I mean, right up here,
trivial,就直接 build。如果需要团队,那就是 team level scope。我的意思是,就在这儿,
73:59
these send out to the team, maybe CC some other teams, but it's not a blocker. And if it's something
这些发给团队,可能 CC 其他团队,但它不是 blocker。如果它是
74:05
bigger, then it's a blocker. We need to wait for feedback. Basically the way we would say it is
更大的,那它就是 blocker。我们需要等 feedback。基本上我们会这么说,就是
74:10
like, look, if it's like a one month project, spend two days, it's not a bad thing to spend one
就是,看,如果它像是一个月的 project,花两天,花一天也不是坏事
74:15
or two days planning it, because we're going to save time on it. But if it's a one day project,
或者花两天来规划它,因为我们会在这上面省时间。但如果是一个一天的项目,
74:20
forget about it. If it's a one year project, I mean, what are we doing? It should be smaller one.
那就别想了。如果是一个一年的项目,我是说,我们这是在干嘛?它应该是个更小的项目。
74:24
Totally. There's a bit of criticism I hear just from outside the room when you say that,
完全同意。当你说这话时,我从局外听到过一点批评,
74:29
which is that doesn't this sound like waterfall what we're doing? When I'm talking about wayfinder
就是说,我们做的这些听起来不像是 waterfall 吗?当我在聊 wayfinder
74:35
and when I'm doing any building up any kind of spec, I do a lot of upfront aggressive prototyping
而且当我在构建任何类型的 spec 时,我会在前期做很多激进的 prototyping,
74:42
before we get there. That's something that comes up again and again is like, this is just waterfall.
在到那一步之前。这种事会一次又一次冒出来,就像,这不就是 waterfall 吗。
74:47
What are we doing? Going back to the 70s, but agents give you this ability of just churning out
我们在干嘛?要回到 70 年代吗?但 agents 给了你这种能力,就是批量产出
74:52
slop. Sometimes you can use that to your advantage because a prototype, just getting a sense for
slop。有时候你可以利用这一点,因为一个 prototype,就是先感受一下
74:58
what it should look like. You can build out three or four different versions and just choose your
它应该是什么样子。你可以做出三四个不同的版本,然后直接挑你
75:02
favorite and iterate on it and just keep churning, churning, churning. That can be a really powerful
最喜欢的,在它上面 iterate,然后就不停地 churning、churning、churning。那可以是一种非常强大的
75:08
setup that we've not really had before. It was always expensive to produce prototypes.
setup,我们以前其实并没有真正有过。以前做 prototype 总是很贵。
75:13
Now it's the cheapest that it's ever been and that's an essential part of writing specs to me.
现在成本比以往任何时候都低,而对我来说,这是写 specs 的关键部分。
75:17
It's actually producing these prototypes. Yeah, but also with the waterfall criticism, I think
它实际上就是在产出这些 prototype。对,不过说到对 waterfall 的批评,我觉得
75:20
Creative Booch might have told me this as well. Don't forget, we should not criticize waterfall
Creative Booch 可能也跟我说过这个。别忘了,我们不应该批评 waterfall
75:26
because for example, a lot of big tech, a lot of the largest companies from Amazon, Microsoft,
因为比如说,很多 big tech,很多最大的公司,从 Amazon、Microsoft,
75:33
Google, Meta, you name it, they are kind of doing mini waterfall. Pre-AI, they've been doing
Google、Meta,你叫得上名字的,他们其实有点像是在做 mini waterfall。在 Pre-AI 时期,他们就一直在做
75:38
pretty many waterfall, which is let's do a plan. Let's agree on it. Let's build it. Let's ship it.
很多都是 waterfall,也就是:咱们做个计划。
75:42
This is all done in two weeks, a month, two months, three months, three months is kind of the
大家先达成一致。
75:47
extreme. The Creative Booch was saying, the problem was never this with waterfall. The problem with
开始构建。
75:50
waterfall was the planning was literally taking a year, like one year, and then the implementation
发布上线。
75:56
taking three years. By the time it was ready, four years later, it's not what we wanted. That was
这些全都在两周、一个月、两个月、三个月内完成,三个月差不多就是极限了。
76:01
the problem. The problem is not having a one or two month project or one week project with the
The Creative Booch 说过,waterfall 的问题从来不是这个。
76:07
waterfall. The problem was always this we're talking years and he said that the industry has not
waterfall 的问题在于,planning 真的会花一年,就一年,然后 implementation 又要花三年。
76:12
seen waterfalls for decades now. Here we're using this term, which is a bit like we're
等到它准备好,已经四年后了,它根本不是我们想要的。
76:18
and criticizing or many waterfalls were criticizing that one. It's actually that's not a bad thing
而且在批评,或者很多 waterfall 都在批评那个。其实这倒不一定是坏事
76:23
necessarily. It's a scarecrow that we're punching or something. Yeah, it's a pinata which
它就像我们在打的稻草人什么的。对,它是个 pinata,
76:28
stopped existing. It might exist in some crazy enterprise projects that none of us know about
已经不存在了。它可能存在于一些我们谁都不知道的疯狂企业项目里,
76:35
and regulate industries, but I feel even there it's probably kind of sound. I think it's like if
以及受监管的行业里,但我觉得即便在那里,它大概也还算靠谱。我觉得就像如果
76:39
we're hitting the pinata, I think it's actually a useful thing to have up there. It's like a
我们在打这个 pinata,我觉得把它立在那儿其实挺有用的。它就像一个
76:44
useful ghost or useful cautionary tale, right? Because what which one fits the agentic set up more
有用的幽灵,或者有用的警示故事,对吧?因为哪一个更贴合 agentic setup,
76:53
closely, it's going to be agile, right? Because the cost of labor has gone down so much. We can just
更接近,它就会是 agile,对吧?因为劳动力成本已经降了这么多。我们可以
76:59
make changes very, very quickly. I don't know. That feels like the right metaphor to me. So I don't
非常非常快地做出改变。我不知道。这对我来说感觉是合适的隐喻。所以我不
77:03
mind hitting on waterfall even though no one really does it anymore. Well, one other thing that
别管 waterfall 了,虽然现在已经没人真的这么做了。好吧,还有另一件事,
77:08
just is just one out of style. We didn't hate it, but test your end development, TDD. What is your
只是也已经过时了。我们并不讨厌它,但 test-driven development,TDD。你怎么
77:13
take on using them for agentics? Well, when I talk with Ken Beck, we talked about how this could be
看把它们用在 agentics 上?嗯,我和 Ken Beck 聊的时候,我们谈到这可能是一个
77:18
a great fit for many reasons, but I still don't see people really using it. I see people writing test
非常适合的用法,原因有很多,但我还是没看到人们真的在用。我看到人们写 test,
77:23
the agents also like write tests after the fact, which is how most people work, but I think you've
agents 也喜欢事后写 tests,大多数人都是这么工作的,但我觉得你
77:28
been an advocate for TDD, right? Yeah, so I have a TDD skill which I recommend using and this is
一直是 TDD 的倡导者,对吧?对,所以我有一个 TDD skill,我推荐用它,而且这
77:35
quite timely because I have been thinking about it. I haven't really posted about it yet. TDD
非常及时,因为我一直在想这件事。我还没真正发过相关内容。TDD
77:39
optimizes for having a very small working memory, right? You write one test and that test is
优化的是拥有非常小的 working memory,对吧?你写一个 test,那个 test 是
77:44
supposed to fail. And it means that even if you get distracted, you go for a coffee or something,
本来就应该失败。而且这意味着,哪怕你分心了,去喝杯咖啡或者干点别的,
77:49
you go for a long walk. When you come back, the test is still failing, reminding you of where you
去散个长步。等你回来时,test 还是没通过,提醒你目前
77:53
are in the implementation and guiding you to the next thing. Agents don't need that. Agents, the thing
在 implementation 中的位置,并引导你去做下一件事。Agents 不需要这个。Agents,最棒的一点
77:59
that's great about agents is that they have a much larger working memory than humans, right?
就是它们的 working memory 比人类大得多,对吧?
78:04
They can actually hold a lot more in their heads than humans can currently, which is very useful,
它们实际上能在脑子里记住比人类目前能记住的多得多的东西,这非常有用,
78:10
but they don't have an infinite working memory. And TDD, it's sort of aiming at the wrong problem,
但它们并没有无限的 working memory。而 TDD,它有点像在瞄错问题,
78:17
I think, but the thing that agents really do need is that they need to have feedback loops.
我觉得,但 Agents 真正需要的是,它们得有 feedback loops。
78:24
So they need to see what they're doing and how it's interacting with the environment of the code.
所以它们需要看到自己在做什么,以及它如何与代码环境交互。
78:30
They need to probe it all of the time. And having an agent that builds it builds the failure first,
他们得时时刻刻去探测它。而且让一个能构建它的 agent 先构建出 failure,
78:36
it's also very hard for an agent to cheat that. So not only are you forcing the agent to build
agent 也很难在这上面作弊。所以你不只是在强迫 agent 去构建
78:41
its own feedback loops, the agent is providing proof to you that the thing is actually working as it
它自己的 feedback loops,agent 还在向你提供证明,说明这个东西确实在
78:47
goes. And even if I'm not using TDD directly, where it writes the failure test first and fixes it,
正常运转。而且即使我没有直接使用 TDD,也就是它先写 failure test 再修复它,
78:55
and refactors, I will often say, provide proof that your change does the thing it's purported to do.
然后 refactor,我经常会说,提供证明,证明你的改动确实做到了它声称要做的事。
79:01
Give me TDD evidence, right? That it would fail without this change. And that's been really good
给我 TDD 证据,对吧?证明没有这个改动它就会失败。而这真的很有用
79:07
for just improving the feedback loops, essentially, because another thing with TDD that agents get wrong
基本上就是为了改进 feedback loops,因为 TDD 还有另一个 agents 容易搞错的地方
79:13
is they will often just write crap tests. They'll often just write, especially technological tests,
就是他们经常就会写些垃圾测试。他们经常就会写,尤其是 technological tests,
79:19
where the test is just asserting the implementation itself, it's just like a duplicate of it.
79:24
You know, it writes a constant, and then it says, expect this constant to be this value.
79:30
I mean, what's the point in that test? You know, it's just asserting the implementation.
79:34
So yeah, I have a mixed relationship with TDD. I do still recommend it,
79:39
just because it gives you so much more confidence in what you're building from a human perspective.
79:44
But yeah, I'm starting to see the counter-arguments. Let's talk about tech depth.
79:50
Jared Friedman at Y Combinator brought a tweet that I called from him.
79:56
It's a technical depth used to be something you just had to live with with a sufficiently large code
80:00
base no longer, and to which you replied, yes, now you can live with it even in a tiny code base.
base 不再了,而你回复说,是的,现在即使在一个很小的 code base 里,你也能接受它了。
80:05
That's good to read out loud, actually. You're really good for the sense of that. Well,
其实,这挺适合大声读出来的。你对那种语感把握得真好。嗯,
80:12
yeah, it's just so easy for agents to produce rubbish, right?
对,agents 就是太容易产出垃圾了,对吧?
80:17
I'm even really smart, powerful agents because they're unable to think strategically.
我是说,即便是非常聪明、非常强大的 agents,因为它们没法进行战略性思考。
80:23
They're just focused on what they're doing right now. It's very easy for them to produce tech depth.
它们只专注于自己眼下在做的事。它们非常容易产生 tech depth。
80:29
And what is tech depth? Right.
那什么是 tech depth?对吧。
80:31
Tech depth is anything that makes the code base harder to make modifications to over time.
Tech depth 就是任何会让 code base 随着时间推移更难修改的东西。
80:36
A good code base is one that's easy to change, easy to make a change in that
一个好的 code base 就是容易改动,容易在其中做修改——
80:41
doesn't result in cascading failures, right? So a code base with a solid test coverage
不会导致 cascading failures,对吧?所以一个有着扎实 test coverage 的 code base
80:47
and a good test suite is a code base that's easy to change. But it's so easy for agents to just
和一个好的 test suite,就是一个容易修改的 code base。但 agents 真的太容易只是
80:54
make a code base worse over time, and it's a really hard problem. And it's one that you need a
随着时间让一个 code base 变得更糟,而且这是个真的很难的问题。而且是一个你需要
80:59
strategic mindset to think about because one thing that I found works really well is automated
用战略性的思维方式去思考的问题,因为我发现效果特别好的一件事就是 automated
81:04
review. So you have one implementer agent to do the thing and then you have another automated review
review。所以你有一个 implementer agent 去做这件事,然后你还有另一个 automated review
81:10
agent that sort of imposes your coding standards that looks for these technological tests,
agent,它有点像在施加你的 coding standards,去寻找这些 technological tests,
81:15
improves the quality of the test suite over time. But then how do you know if the automated
随着时间提升 test suite 的质量。但然后你怎么知道这个 automated
81:19
review agent is doing a good job? And so even in tiny code bases, even in one line changes,
review agent 干得好不好?所以即使在很小的 code base 里,哪怕只是一行改动,
81:25
the agent can produce rap. And so I think it's just something we need to live within something
agent 可以产出一段 rap。所以我觉得,这只是我们必须与之共存的东西
81:31
we need to be in a constant battle against. What's also not a bad thing? We bring a bunch of
又必须不断对抗的东西。这也不是什么坏事?我们会带来很多
81:37
value when you understand what good code looks like when you can recognize what tech depth is.
价值,当你明白好的 code 长什么样、当你能识别什么是技术深度时。
81:43
And it's also a problem that we've always had. It hasn't gone away.
而且这也是我们一直以来的问题。它并没有消失。
81:48
It hasn't gone away. This is what I feel like we just have in the same conversation
它并没有消失。我觉得我们只是在同样的对话里
81:52
we've had for 20 years. It's just there's this new elephant in the room. I want to ask you about
已经聊了 20 年。只是现在房间里又多了一头新的大象。我想问问你关于
81:58
living in the UK and AI. This is a question that also came from one of the readers.
在英国生活以及 AI 的事。这也是其中一位读者提出的问题。
82:04
Now that you're based in the UK and outside of London, but you're now educating about AI
既然你现在常驻 UK,而且在 London 之外,但你现在又在做 AI 教育
82:10
is being further away from Silicon Valley and the HQ of the labs making things easier or harder
离 Silicon Valley 和那些实验室的总部更远,对你来说是更容易还是更难?
82:17
for you. I'm really just trying to plow my own furrow. What I realized quite early on is that I
我真的只是想耕好自己的一亩三分地。
82:22
have no power to predict the future. Because I'm so far away from things, I'm just a person
我很早就意识到,我没有能力预测未来。
82:27
in the field working with this stuff. I have no way of knowing what's coming. I don't know whether
因为我离那些事情太远了,我只是一个在一线跟这些东西打交道的人。
82:33
the model's going to improve. I don't have privileged access to stuff. So I'm just trying to focus
我没办法知道接下来会发生什么。
82:39
on what's working right now. And because of that, I think that's narrowed my scope a little bit.
我不知道这个 model 会不会变得更好。
82:45
That means I can just try to get my stuff working. And it's sort of quite surprising to me that
我没有特权去接触这些东西。
82:51
it's working as well as it is because I don't have this privileged access. I'm just trying to
所以我只是想把注意力放在现在能跑通的东西上。
82:57
make this one approach work. So I think, yeah, you're probably right. I probably would be able to do
让这一种方案行得通。所以我觉得,嗯,你大概说得没错。我可能确实能做
83:00
this stuff if I lived in San Francisco. But then I'd have to live in San Francisco. I don't want to
这些事,如果我住在 San Francisco 的话。但那样我就得住在 San Francisco。我不想
83:05
do that as miserable. I've got the great setup here. My parents are just down the road. You know,
那样做,那样太痛苦了。我这儿有很好的安排。我爸妈就在路那头。你知道,
83:10
I got my son growing up in the countryside. So it is what it is. And yeah, you're an educator
我儿子在乡下长大。所以就这样吧。而且,对,你就是个教育者,
83:16
at heart. How have you seen the business of teaching or educating software engineers change
骨子里就是。你觉得教 software engineers,或者说培养 software engineers 这件事,发生了怎样的变化
83:24
and also how people want to learn? If you've observed any trends from before, like already when
以及人们想怎么学习?如果你观察到一些以前的趋势,比如早在
83:30
you started, I feel you were on at the time where online courses and learning over video became
你刚开始的时候,我感觉你当时正好赶上了 online courses 和通过视频学习变得
83:36
a lot more popular as opposed to let's say a decade ago, where it was maybe tutorials and
更流行得多,而不是比如说十年前,那时候可能还是 tutorials 和
83:41
before they were books. Obviously, they still exist, but there are just different preferences.
在他们还是书之前。显然,它们仍然存在,只是有不同的偏好。
83:45
Yeah. It was around COVID time that sort of video tutorials really took off. I think
是的。大约在COVID时期,那种视频教程真正开始兴起。我觉得
83:49
it wanted a much richer learning experience. And I was kind of just after that wave, I suppose.
它想要一种更丰富的学习体验。而我也算是紧随那一波之后吧,我想。
83:56
I think that people's people way they've learned doesn't hasn't changed that much, right? And they're
我觉得人们学习的方式并没有太大变化,对吧?而且他们
84:03
desire for certain types of materials hasn't changed. I think it's very sexy, the idea that,
对某些类型材料的需求也没有改变。我觉得这个想法很吸引人,就是
84:09
you know, an agent can just come in and teach you everything. And that sort of works in some
你知道,一个agent可以进来教你一切。在某些情境下这确实可行。
84:15
contexts. But really, what you want is curation, right? You want a human to have come in,
但实际上,你真正想要的是curation,对吧?你希望有一个人参与进来,
84:21
understand the flow of the information. I always think of information as kind of like a graph,
理解信息的流动。我总是把信息想成类似一个graph,
84:26
right? You have a piece of information that's dependent on another piece of information,
84:31
dependent on another piece of information. And that turning that graph into a linear path
84:37
is how I think of my job, right? I'm just trying to teach you, like, find
84:42
Dijkstra's algorithm through the graph so that you can learn it in the most sense but way.
84:47
And that level of curation is just not something that, again, that's strategic, right? That's not
84:51
something that AI is particularly good at. So, I mean, I've obviously made this huge pivot
84:56
from typescript, from tactical stuff, really, to this strategic layer. And it's working okay
85:03
for me. I really can't speak for other folks doing this work. And I know that lots of people are
85:08
not having this level of success, I suppose. So, I think what it shows is that agents have just
我想,就是没能取得这种程度的成功吧。所以,我觉得这说明 agents 刚刚
85:17
changed the game in terms of what people value and what people prioritize and the industry has
改变了游戏规则,改变了人们看重什么、优先考虑什么,而整个行业已经
85:21
shifted in seven months faster than it's I think ever done. You know, this is a huge shift.
在七个月里发生了转变,我觉得这比以往任何时候都快。你知道,这是一个巨大的转变。
85:26
It doesn't mean we need to throw away our working practices, but it does mean that what we need to
这并不意味着我们需要抛弃我们的工作实践,但它确实意味着,我们需要
85:30
focus on is different. And I feel like I've been able to move with that quite well,
关注的重点不一样了。而且我觉得我一直能够很好地跟上这种变化,
85:35
whereas I think others just haven't because they're focused on different things.
而我觉得其他人只是没能做到,因为他们关注的是不同的东西。
85:39
And I wonder if in your case, it's also with total typescript and even before with typescript
而我想知道,在你这边,是不是也和 total typescript 有关,甚至更早和 typescript 有关,
85:45
and some of the things you shared, you were helping people use the very popular tool at the time.
还有你分享过的一些东西,你当时是在帮助人们使用那个非常流行的工具。
85:52
Typescript was gaining market share. There were migrations happening from JavaScript to Typescript,
Typescript 那时候市场份额在涨。有很多从 JavaScript 到 Typescript 的迁移,
85:56
from Python to Typescript, and so on. And so, developers wanted to get really good, a lot of them
从 Python 到 Typescript,等等。所以,开发者都想变得特别厉害,他们中的很多人
86:03
or for the top 10 percent or top 20 percent. You name it, wanted to get really, really good with
或者说前 10% 或前 20% 的人。不管你怎么说,都想变得非常非常擅长
86:07
typescript and they were looking for efficient ways of doing it. Now, AI is here is changing how
Typescript,而且他们在找高效做到这一点的方法。现在,AI 来了,正在改变
86:14
we work as software engineers, and I think it's pretty clear that building software is valuable.
我们作为软件工程师的工作方式,而且我觉得很明显,做软件是有价值的。
86:18
But there's a question of how do I use these tools more efficiently, which is more pressing right now
但有个问题是我怎么更高效地使用这些工具,这现在更紧迫,
86:22
than how do I write typescript efficiently, especially with agents. So, I wonder if you've kind of just
比起我怎么高效地写 Typescript,尤其是有了 agents 之后。所以,我想知道你能不能就
86:27
a little bit how you pivot it from voice acting to what you couldn't do from outside of London to a
稍微讲一下,你是怎么把它从配音转到你在 London 之外做不到的事情,再到一个
86:34
thing that you could do outside of London, which was still teaching. You've just pivoted to teaching
在 London 之外你还能做的事,其实还是教书。你才刚转去教
86:38
a different area, which right now is again, it's on so many people's minds.
另一个领域,而这个领域现在又成了很多人都在关注的事。
86:43
I think I've just been lucky, basically, of choosing the right thing at the right time.
我觉得基本上我就是运气好,在合适的时间选对了事情。
86:46
It would have been very easy for me to, and I actually took quite a fair bit of convincing to
对我来说,本来很容易就会……而且实际上,我确实是被劝了挺久才
86:50
move into AI. Like, back a couple of years ago, it was Joel, my business partner, who was pushing
进入 AI。就是,大概几年前,是我的生意伙伴 Joel 一直在推着
86:56
me to actually go, you've really got to try this. It's actually pretty good. And you can use it for
我,说:你真得试试这个。它其实相当不错。而且你可以拿它来
87:00
all sorts of stuff. And it took about three months of me actually trying it and failing and
做各种各样的事。而且我大概花了三个月,实际去试、去失败,然后
87:06
trying it and failing before I realized, okay, this is great. I just feel quite fortunate that I've
又试、又失败,才意识到,好吧,这太棒了。我只是觉得自己挺幸运,我已经
87:11
landed in the right place at the right time. And I try not to narrativeize it. I try not to think,
在对的地方、对的时间落地了。我尽量不把它叙事化。我尽量不去想,
87:16
oh, well done, Matt, you've been so smart, you know, making the right play at the right time.
哦,Matt,干得漂亮,你太聪明了,你知道的,在对的时间做出了正确的选择。
87:19
Because I could have made several mistakes as well. I could have easily found myself on a different
因为我也可能犯好几个错误。我本来很容易就会落到一个不同的
87:25
zone. And I mean, that's no bad thing. I would just go back to being an engineer. That's what I'd
领域。而且我是说,那也不是坏事。我大不了就回去当工程师。那正是我
87:29
love to put putting us back into the shoes of when you were someone just starting out in the
很想做的——把我们设身处地放回到你刚进入这个行业时的状态。
87:33
industry today. For people starting out in the industry, early career, junior folks, what would
对于今天刚入行的人、职业早期阶段的人、junior 同事,你会
87:39
you recommend them for tactical things to do? Like they will know, like, look, I want to get
推荐他们做哪些具体行动?比如他们会明白,就像,你看,我想获得
87:43
that experience. I want to get that judgment, that taste, those fundamentals, you'll need to get
那种经验。我想获得那种判断力、那种品味、那些基本功,你需要获得
87:48
repetitions. And if you found yourself on those shoes, how would you approach? Like, I want to be
重复。如果你处在那个位置,你会怎么着手?比如说,我想成为
87:53
a builder, a software engineer with all these AI tools, whatnot, which is now confusing because
一个 builder、一个 software engineer,手里有这些 AI tools 之类的,而现在这很让人困惑,因为
87:59
now there's a mix of do I use these AI tools just to do stuff for me? Do I get in the fundamentals,
现在有一个混杂的问题:我是用这些 AI tools 来帮我做事?还是我去学 fundamentals,
88:04
which is slow and so on. Yeah, I mean, I would love to be a junior right now. I would love to be
而这很慢,等等。是啊,我是说,我现在很想当一个 junior。我会很想成为
88:09
in the exact position I was in like 2014, where I was building these tools for my students, right?
处在像 2014 年时我所在的完全相同的位置,那时我正在为我的学生们做这些工具,对吧?
88:14
I would actually got really nostalgic for it on the other day. I thought, I'd love to get back
其实前几天我还真的对这件事特别怀念。我想,我很想回去
88:19
and do some singing teaching because just the ability to, like, I could finish a lesson and then
然后去教教唱歌,因为光是这种能力,比如说,我可以上完一节课,然后
88:23
just prompt the agent, okay, this tool didn't quite work in that way. I could maybe modify it a
直接 prompt 那个 agent,好吧,这个工具那样用不太行。我也许可以稍微改一下它
88:27
little bit and you know, see it working. I just think the right thing to do is to use these agents
一点点,而且你懂的,看到它跑起来。我就觉得正确的做法就是多用这些 agents
88:33
as much as possible because that's how people are going to be working now. And I think the
尽可能多用,因为人们以后就是这么工作的。而且我觉得
88:39
thing that I find valuable about my skill set is you're constantly in touch with the changes
我这套技能里我觉得有价值的一点是,你能一直接触到那些变化
88:44
that are happening. Grill me not only you're having a discussion with a senior developer, right?
正在发生的。来拷问我,不只是你在跟一个 senior developer 讨论,对吧?
88:50
That's beneficial for the developer, but it's also beneficial for you. Keeps you thinking about
这对 developer 有好处,但对你也有好处。让你不断思考
88:54
these deeper ideas and the absolute rubbish that I was churning out, you know, with my spectrogram
这些更深层的想法,还有我捣鼓出来的那些彻头彻尾的垃圾,你知道,用我的 spectrogram
89:01
analysis tool, that would have been so much better if I had an agent to work with. It ran like a pig,
分析工具,要是当时有个 agent 能跟我一起做,那会好太多了。它跑起来慢得像猪一样,
89:08
performance was absolutely terrible. If I'd have been able to say, okay, this frame rate is dropped
performance 简直糟透了。如果我当时能说,好吧,这个 frame rate 掉了
89:12
to 10 frames per second. How do I fix that? It would have seen the six nested four loops and gone,
到10 frames per second。我该怎么解决这个问题呢?它本来会看到那六个嵌套的四个循环,然后说,
89:17
okay, maybe you should do something different there. So I think that there's never been a more
好吧,也许你该在那里做点不一样的事情。所以我觉得从来没有一个更
89:22
empowering time to work on this stuff as long as you're interested in not only the code you're
赋能的时代来做这些事情,只要你对不仅仅是你写的代码
89:27
producing, but also the process of creating the code. There's never been a better time to be a
感兴趣,而且也对创造代码的过程感兴趣。从来没有一个更好的时机去做一个
89:33
kind of naval gazing programmer just constantly thinking about your own processes and being introspective.
那种自我审视的程序员,就是不断思考自己的过程并且内省。
89:38
This sounds like if you're motivated, you should be able to learn really fast compared to you've been
这听起来像是,如果你有动力,你应该能够学得非常快,相比你以前
89:43
before. Absolutely. It's just about being curious about being adaptable and that's the people that I
以前。绝对是这样。这就是关于保持好奇、保持适应能力,而这就是我
89:47
see who are thriving in this new environment are the same people who are thriving 10 years ago because
看到那些在新环境中茁壮成长的人,也是10年前茁壮成长的同一批人,因为
89:51
they're just interested in this work, interested in making better software and interest in their own
89:59
process. And I'm interested in making better softwares. I want to ask you about gardening,
90:03
a software engineer on X-Lauron posted, I'll quote her, every team needs a gardener. Someone
90:08
quietly watching the stream of PR flowing into your cold base, notice the smells, the lens
90:13
suppression is creeping like IV across your care for the fans garden, a steady hand intending the
90:17
weeds staff, which otherwise engulfed the garden and to which you replied, I'd argue the only thing
90:22
your team needs are gardeners. You probably do need a couple of other people.
90:26
But more specific, I want to ask you about this concept of gardening. I actually really love
90:32
how Lauron described the weeds taking over the garden and getting them out.
Lauron 是怎么描述杂草接管花园、然后把它们清除出去的。
90:37
I think I made it sweet a while ago that this was when I was thinking about Ralph and the agent looping
我觉得我刚刚已经说清楚了:那时候我正想着 Ralph 和 agent 反复处理东西这件事。
90:43
over stuff. We are essentially just Ralph's platform team. That's what we are now. We are our
我们本质上就是 Ralph 的平台团队。
90:49
agent's platform team. We are trying to build the environment for them to succeed. That's exactly
这就是我们现在所处的状态。
90:55
how you should be thinking about it. Again, it's strategic. And that gardener metaphor is nice,
我们就是我们 agent 的平台团队。
90:59
because it's very easy for the garden to itself just to suffer entropy, right? To gather weeds
我们在努力为他们搭建一个能让他们成功的环境。
91:06
and to do all that stuff. So understanding and diagnosing that stuff before it becomes a problem
你就应该这么去想这件事。
91:12
in your own co-bases, an essential skill and might be the essential skill. As long as you can
再说一次,这是战略性的。
91:18
queue up work for agents, as long as you can build these loops now that we're starting to see,
91:22
these processes where agents improve the code base based on bug reports and feedbacks,
91:27
that feels to me like really cool work and no more interesting work as well.
91:33
We talked about some great standout software endurance that you learned from. You got an
91:38
inspiration from today. What skillsets experience approach do you think makes a great software
91:46
engineer? I'll use an example, which is a large grandma of who works at Vaselle on the AI SDK.
91:53
Who had a chat with the other day. And he is building an entire software factory for his,
91:59
for his extremely popular open source library that gets a ton of issues. We're talking about plumbing
92:05
again. We're talking about gardening. We're like thinking about the processes of software development.
又来了。我们在聊园艺。我们就像是在思考 software development 的过程。
92:10
And I suppose if I had to put it in a word, it would be introspection. It would be looking at
我想,如果非要用一个词来概括,那就是 introspection。它意味着审视
92:15
yourself and the ability to take what you do and put that into something the AI can work with.
你自己,以及把你所做的事情转化成 AI 能处理的东西的能力。
92:22
You're essentially trying to put your process into words. And that's what I've been doing with
你本质上是在试着把你的过程用语言表达出来。而这正是我一直在做的,用
92:26
the skills. That's what I've been trying to do with the automation that I've been creating as well.
skills。这也是我一直在尝试用我创建的 automation 去做的事。
92:31
It's I just look at what I'm doing and think how could I do this better? And also how could I encode
就是我会看看我正在做什么,然后想我怎么能做得更好?还有,我怎么能把
92:37
this into this strange animal that I have in front of me? How can I make it work like I want to?
这些 encode 进我面前这个奇怪的动物里?我怎么能让它按我想要的方式运作?
92:44
And that attitude has been really, really helpful for me. It's something that I value in
而这种态度对我真的真的很有帮助。这是我很看重的一点,在
92:49
in Larsen. I value in all the people that I work with when they approach agents.
Ian Larsen。我珍视所有和我共事的人在接触 agents 时的态度。
92:54
And then as closing, what are what is a book that you would recommend or multiple books?
然后作为收尾,你有什么书可以推荐吗?或者多本也行?
92:59
I'll go with a pragmatic programmer, a philosophy of software design by John Asterhout.
我会选 A Pragmatic Programmer,还有 John Asterhout 的 A Philosophy of Software Design。
93:04
And I'd say the first like three chapters of DDD, the Eric Evans book, the Bixas language one.
然后我会说,DDD 的前三章左右,Eric Evans 那本书,ubiquitous language 那一章。
93:10
That one in particular, it's really great for the ubiquitous language concepts,
那一章尤其棒,它非常适合理解 ubiquitous language 概念,
93:14
the domain modeling, the actual sort of encoding it into code. I'm not such a huge fan of.
domain modeling,以及真正把它编码到代码里的那部分。我倒不是特别感冒。
93:18
But those three are the big three. Awesome, Math. Well, thank you. This was really interesting and
但这三个就是最重要的三个。太棒了,Math。好吧,谢谢你。这真的很有意思,而且
93:24
really fun. Great to finally be on the podcast here. Meet the famous guy himself. It's great.
真的很好玩。很高兴终于来到这个播客。见到这位名人本人。太棒了。
93:29
I've we've met before, obviously, but it's great to be here. It was so nice to sit down with,
93:33
Math, and I have to say knowing that he was a voice coach and actor makes me understand how talk
93:37
so smooth and how he's so pleasant to listen to. Probably the most amazing part from his
93:42
conversation was how, as Math was searching for how to work better with AI, it wasn't modern
93:47
approaches that he found really useful, instead he went back to classic software and junior books.
93:52
The pragmatic programmer, the philosophy of software design, and domain driven design.
93:56
There's some irony as to how the best practices documented 20 plus years ago, like tactical versus
94:02
strategic programming in this book. Not only do they still work, but they become more important when
94:07
writing code with AI agents. A really good point I want to emphasize is the importance of
用 AI agents 写代码。
94:11
leading words with AI. When Math started to use terms like tracer bullet or vertical slices,
我想强调的一个很好的点是,用 AI 时 leading words 的重要性。
94:17
the model started to follow his ideas better in planning. And if you think about it, this makes
当 Math 开始使用像 tracer bullet 或 vertical slices 这样的术语时,model 在 planning 时开始更好地跟上他的思路。
94:22
sense, because software engineering literature is part of LLM training, so these terms are also
你想想看,这其实很合理,因为 software engineering 文献也是 LLM training 的一部分,所以这些术语也是 model 的 priors 的一部分。
94:27
part of the model's priors. Just as interestingly, using the right words for describing her problem is
同样有趣的是,用正确的词来描述她的问题并不是一个新概念。
94:32
not a new concept. For example, when I had Ken back on the podcast, he talked about how 30 or 35
比如,当我请 Ken 再次上播客时,他谈到大概 30 或 35 年前,他和 WartCunningham 桌上放着一篇论文还是什么,他们会用它来试着找到最贴切的词,去描述他们当时在讲的那个具体东西。
94:38
years back, when him and WartCunningham had a thesis or else on their desks, they used it to try
这只不过是另一个 full
94:43
to find the best words for the specific thing they were describing. This was just another full
94:48
circle moment on how words do matter. Finally, I appreciated Math's push on how you should want a
用词真的很重要的 circle moment。最后,我很欣赏 Math 强调的一点:你应该想要一个
94:54
clean code base, not just because it's easier for human to navigate, although I think you
clean code base,不只是因为人更容易浏览,虽然我觉得你
94:58
really want to do it for that as well. But also, conveniently, agents do not have a long-term
其实也很想为了这个这么做。但另外,巧的是,agents 没有 long-term
95:03
memory, and they will look at your code base for the first time on every new run. And it's much
memory,而且每次新的 run,它们都会第一次看你的 code base。而且,在一个
95:09
easier to get around inside a well structured code base than one that is really messy. Check out
结构良好的 code base 里四处走动,要比一个乱糟糟的 code base 容易得多。看看
95:13
the show notes below for an interview with John Osterhoud, the author of a philosophy of software
下面的节目笔记,里面有对 John Osterhoud 的采访,他是 a philosophy of software
95:18
design, a book I really love, and related deep dyes for AI engineering and context engineering.
design 的作者,那本书我非常喜欢,另外还有与 AI engineering 和 context engineering 相关的 deep dyes。
95:22
If you liked this episode, please make sure to be subscribed in your podcast player and
如果你喜欢这期节目,请务必在你的播客播放器里订阅,并且
95:26
submitting a rating as always appreciated. Thanks, and see you in the next one.
提交评分,一如既往地感谢。谢谢,下期见。