Pragmatic Engineer
From Chrome DevTools to AI Engineering, with Addy Osmani
2026-08-19 · 01:31:35
In this Pragmatic Engineer episode, Addy Osmani traces his path from early web development and open-source education to leading work on Chrome DevTools and Core Web Vitals at Google, then into AI engineering. He discusses how browser tooling evolved to address increasingly complex debugging and performance challenges, and how modern agentic workflows—software factories, loops, and automation—can accelerate development but also introduce risks like cognitive debt and weakened code quality. Osmani argues for intentional review, verification, and testing in AI-assisted engineering.
本期 Pragmatic Engineer 邀请 Addy Osmani,回顾他从早期 Web 开发、开源教育到在 Google 参与 Chrome DevTools 和 Core Web Vitals 的经历,并讨论他转向 AI engineering 的观察。节目主题是从浏览器开发者工具到 AI engineering 的演进。他谈到 Chrome DevTools 如何应对 Web 调试、性能与移动端体验的复杂性。进入 AI 时代,他关注 agents、software factories、loop engineering 等实践,认为这些能提升效率,但也可能带来 cognitive debt 和代码质量风险。因此他强调在使用 AI 生成代码时要保持 intentionality,进行 review、verification 和 testing。
00:00
If you've ever opened Chrome DevTools or optimized the page for Core Web Vitals, you've
如果你曾经打开过 Chrome DevTools 或者为 Core Web Vitals 优化过页面,那你就用过 Adios Mani 构建的软件。
00:04
used software built by Adios Mani.
Adi 在 Google 待了 14 年,大部分时间都在做 Chrome,从软件工程师一路做到工程总监。
00:06
Adi spent 14 years at Google, most of it on Chrome, going from software engineer to director
而他在科技行业起步的时候,还是爱尔兰乡下的一个青少年,从零开始自己构建了一个 web browser。
00:11
of engineering.
今天,我们来聊聊 Chrome DevTools 的内幕故事。
00:12
And when starting out in tech, as a teenager in rural Ireland, he built his own web browser
为什么它成了 Google 最接近 IDE 的东西,以及那些仍然未解决的问题。
00:15
from the ground up.
从头说起。
00:16
Today, we talk about the inside story of Chrome DevTools.
今天,我们来聊聊 Chrome DevTools 的内幕故事。
00:20
Why it became the closest in Google has to an IDE and the problems that are still unsolved
为什么它成了 Google 最接近 IDE 的东西,以及那些仍未解决的问题。
00:24
like memory debugging?
比如 memory debugging 之类的?
00:26
What becomes different when you become a director at Google and how Adi state hands-on
当你成为 Google 的 director 之后会有什么不同?Adi 又是如何在管理一个超过 50 人的 engineer org 的同时,还保持 hands-on 地构建软件?
00:29
building software while building an engineer org with more than 50 people?
AI 如何改变 software engineering,还有 cognitive depth、cognitive surrender、loop engineering、software factories 等等。
00:34
How AI is changing software engineering, cognitive depth, cognitive surrender, loop engineering,
如果你想听一位花了数十年帮助开发者理解 web、现在又在深入思考 AI 如何改变 software engineering 的人,那这期节目就是为你准备的。
00:39
and software factories, and many more.
还有 software factories,以及很多其他内容。
00:41
If you want to hear from someone who has spent decades helping developers understand
如果你想听一位花了几十年帮助开发者理解
00:45
the web and is now thinking deeply about how AI changes software engineering, this episode
web,并且现在正深入思考 AI 如何改变软件工程的人,那么这一集
00:50
This episode is presented by Antiscus.
本期节目由 Antiscus 呈现。
00:53
If you work with agents, your job is no longer just writing code, it's specifying and testing
如果你和 agents 打交道,你的工作就不再只是写 code,而是指定和测试它。
00:57
it.
Antiscus 是当今验证 agent code 最有效的方法。
00:58
Antiscus is the most effective method of verifying agent code today.
在我们进入 Adi 在 Google 的经历之前,我想聊一个 Google 上很酷的产品,Google Cloud Run,以及他们最近推出的 Cloud Run Sandboxes。
01:02
Before we get into Adi's journey at Google, I wanted to talk about a really cool product
当你构建 AI applications 或 AI agents 时,你经常需要运行不受信任的 programs,比如执行一些 model 生成的 Python code,或者运行 headless browser 去获取数据。
01:05
at Google, Google Cloud Run, and they're recently launched Cloud Run Sandboxes.
在 Google,Google Cloud Run,他们最近发布了 Cloud Run Sandboxes。
01:09
When you're building AI applications or AI agents, you often want to run untrusted programs
当你在构建 AI 应用或 AI agents 时,你经常需要运行 untrusted programs。
01:14
like execute some Python code, the model generated, or run a headless browser to fetch data from
比如执行模型生成的一些 Python 代码,或者运行一个 headless browser 来获取数据。
01:18
the web, or even execute code submitted by user.
web,甚至执行用户提交的 code。
01:22
But how do you make this fast and secure?
但你怎么让它既快又安全?
01:24
This is exactly what Cloud Run Sandboxes do.
这正是 Cloud Run Sandboxes 所做的。
01:27
Cloud Run Sandboxes are a femoral isolated GVisor environments that spin up extremely fast.
Cloud Run Sandboxes 是 fully isolated 的 GVisor environments,spin up 速度极快。
01:32
They were built with security in mind.
它们从设计上就注重安全性。
01:34
They enforce credential and environment isolation.
它们强制 credential 和 environment 隔离。
01:37
Basically, they have no access to your service's environment variables or secrets.
基本上,它们无法访问你的 service 的 environment variables 或 secrets。
01:42
Sandboxes also operate with lockdown network egress, denied by default, to the internet.
Sandboxes 还采用 lockdown network egress,默认拒绝访问 internet。
01:47
Accelerate development, eliminate infrastructure toil, and run untrusted workloads with confidence
加速开发,消除 infrastructure toil,并自信地运行 untrusted workloads。
01:51
on Google Cloud Run.
在 Google Cloud Run 上。
01:53
Try Cloud Run Sandboxes today at cloud.run.
今天就在 cloud.run 试用 Cloud Run Sandboxes。
01:56
Addy, it's so nice to have you in person on the podcast.
Addy,很高兴你能亲自来到播客现场。
01:59
Oh, thank you for having me.
哦,谢谢你的邀请。
02:01
And before we kick off into your career and how you got started, I wanted to ask just before
而且,在我们开始聊你的职业生涯和你是如何起步之前,我想问一下,就在刚刚。
02:06
we started recording, we were talking about how has your day-to-day workflow changed recently
我们开始录制的时候,聊到了你最近的日常工作流程变化。
02:12
a bunch thanks to all these tools?
变化挺大的,多亏了这些工具?
02:15
So agents have allowed me to take the improbable and turn it into the possible
所以 agents 让我能把不可能变成可能,而且每天都是以一种既奇怪又奇妙的方式。
02:20
in ways that are kind of weird and wonderful every day.
现在我生活里的很多事情都用 agents 来管理。
02:23
I manage a lot of my life now using agents.
举个例子,就在这周,AI World Fair 正在旧金山举行。
02:26
And one example, just from this week, we've got the AI World Fair happening in San Francisco.
活动开始几天后,我要做一个闭幕主题演讲。
02:33
I'm doing a closing keynote a couple of days in.
所以我想确保我不会重复其他演讲者已经深入探讨过的内容。
02:36
And so I wanted to make sure I wasn't repeating any beats that other speakers had gone into
我还想确保我的演讲和很多之间有良好的衔接。
02:43
And I also wanted to make sure there was good connective tissue from my talk to a lot
我还想确保我的演讲能和很多内容有很好的衔接。
02:47
of the other sessions that had happened.
关于其他已经发生的session。
02:49
Normally, in the old days, you kind of pray and hope that there was any content from these sessions
通常,以前的话,你基本上就是指望这些session能有点内容
02:56
And maybe you'd look through the abstract.
然后你可能会翻看一下abstract。
02:58
I was able to fire off a bunch of agents, go through everything that you can find about
我能放出一堆agents,把能找到的所有关于
03:03
the talks from the last couple of days, look at the abstracts, any social content, anything
过去几天的演讲,看看abstracts、任何社交内容,任何
03:08
around that that can be useful.
围绕这些的有用信息。
03:10
And that was able to help me kind of sculpt what I already wanted to talk about into something
而这就能帮我稍微把我本来想讲的东西,塑造成某种
03:16
that I hope is refined, and will give people a way to connect from other parts of this
我希望这部分内容能足够精炼,给大家一种方式,把大会其他环节和我最后的收尾连接起来。
03:22
conference back to the way that I'm going to close it up.
对我来说,这真的让人感觉很有力量,你知道,过去可能要花很长时间、甚至根本做不到的事,现在已经触手可及了。
03:25
That, for me, just feels very empowering, you know, something that would have taken
然后你提到说,而且很多人也会告诉你,就是现在好像到处都同时充满了乐趣和混乱,对吧?
03:29
a very long time, if it would have even been able to do it at all, is now very much within
对对,绝对是这样。
03:34
And then you mentioned that it feels like, and a lot of you will tell, you're like, there's
然后你提到说,感觉就像——而且很多人会告诉你,你会觉得——就是有
03:37
the kind of like both fun and chaos at the same time right now, like everywhere, right?
那种现在到处都同时充满乐趣和混乱,对吧?
03:42
Yeah, yeah, absolutely.
是的是的,完全没错。
03:44
And then chaos, I think that, you know, for many of us, when you have a lot of ideas
然后就是混乱,我觉得,你知道,对我们很多人来说,当你有好多想法或者好多愿景的时候,你常常受限于时间,或者“我到底能实际做多少?”而在某种程度上,agents 把我们解放了。这也是为什么你会一直听到,哦,嘿,你拿那些 agents 省下来的时间在干嘛?而我其实在做更多的工作。我觉得对我们很多人来说,如果我们不喜欢这件事,我们不会把那些时间都填满工作,但我们确实乐在其中。所以在这种混乱里 thriving 是很好玩的。
03:49
or a lot of vision, you're often bounded by time or how much can I actually do?
或者说,有大量vision的时候,你常常受限于时间,或者我到底能做什么?
03:55
And in some ways, agents have unchained us.
在某种程度上,agents把我们解放了。
03:58
And this is one of those reasons why, you know, you keep hearing, oh, hey, what are you
而这也是原因之一,你知道,你总听到,哦,嘿,你在
04:03
doing with all of that time, agents have freed up while I'm doing more work.
用那些被agents腾出来的时间做什么,而我却在做更多工作。
04:07
I think for many of us, if we didn't enjoy it, we wouldn't be filling that time up with
我觉得对我们很多人来说,如果我们不喜欢,就不会用那些时间填满
04:10
work, but we're having fun with it.
工作,但我们其实乐在其中。
04:12
So it's fun thriving in that chaos.
所以,在那种混乱中如鱼得水是很好玩的。
04:15
But now, take me back to the very beginning, a lot of us know you and I've gotten to know
但现在,带我回到最开始。我们很多人都认识你,我也通过你在Google的工作和你的书了解过你,但我想从更早的时候开始聊,你最初是从哪里起步的?
04:19
you went through your work at Google, through your books, but I'd like to start from even
你是怎么第一次接触到电脑的?
04:23
before, where did you start out?
还有,你高中十几岁的时候是怎么做出一个 web browser 的?
04:27
How did you have your first contact with computers?
所以我一直特别着迷于理解事物是怎么运作的。
04:31
And how did you build a web browser when you were a teenager in high school?
而且我在爱尔兰乡下长大,有些时候,你知道,我们不一定有 internet。
04:36
So I've always been fascinated with understanding how things work.
所以我一直对理解事物的运作方式很着迷。
04:40
And I grew up in rural Ireland, which was at times, you know, we didn't necessarily have
而且我在爱尔兰乡村长大,那里有时候,你知道,我们不一定有
04:46
the best internet connectivity.
最好的 internet 连接。
04:48
This was back in the days of dial-up.
那还是在 dial-up 的年代。
04:51
And so my first contact with computers was, you know, it was probably eight or nine years
所以我第一次接触电脑,你懂的,大概八九岁的样子。
04:57
old.
我们很幸运,我爸能给我们买到第一台台式机。
04:58
We were very fortunate that my dad was able to get us our first desktop machine.
然后你懂的,我会玩各种 apps,就是随便玩,但主要就是试着浏览 internet。
05:02
And you know, I'd play around with apps, I'd play around, but just like, trying to browse
而这一切总是让我觉得很奇妙,就像,这些东西到底是怎么运作的?
05:07
And it was always fascinating to me, like, how does any of this work?
而且我一直觉得特别神奇,就是,这些东西到底是怎么运作的?
05:12
I'm just typing in something into an address bar and all this information is just rendering
我就是往 address bar 里输入点什么,然后所有这些信息就这么 rendering
05:18
I'm getting back text, photos, videos, like, how does any of the stuff work?
我拿到的有 text、照片、video,像是,这些东西到底是怎么运作的?
05:23
And so over time, like I would build out websites, I'd start to get into programming.
所以随着时间推移,我会去搭 website,也开始接触 programming。
05:29
My very first programming language was Pascal.
我学的第一个 programming language 是 Pascal。
05:32
A big fan of the Borland tool suite, I learned C++ when I was fairly young.
我是 Borland tool suite 的忠实粉丝,很小的时候就学了 C++。
05:40
And there was one year when I noticed that we had a kind of popular national science competition.
有一年,我注意到我们有一个挺受欢迎的 national science competition。
05:47
And traditionally, that competition was very much about, you know, hey, do students have
而传统上,那个 competition 很大程度上是关于——你知道,就是“嘿,学生们有没有”
05:53
interesting breakthroughs or thoughts on physics or chemistry or any of those things?
在物理、化学或者其他那些方面,有没有什么有趣的突破或想法?
05:58
But this, the year that I'm talking about was the first year where they actually started
但我说到的这一年,是他们真的开始
06:02
to really take computing seriously.
把计算当回事的一年。
06:05
And as I mentioned, I didn't have the best internet connection.
而且像我说的,我的网络连接不是最好的。
06:09
This was also during the time when, especially if you were a teenager, you started to get
那段时间也正好是,尤其是如果你是个青少年,你开始
06:15
into, you know, learning about downloading stuff.
接触,你懂的,学着下载东西。
06:18
And we didn't have fast internet connection back then.
而且那时候我们的网速不快。
06:21
If you cared about, you know, checking out a song, you could be waiting hours for that
如果你,你懂的,想听一首歌,可能得等上几个小时。
06:28
If you cared about trying out a music video, man, that could be a night, two days sometimes
如果你想试着下载一个音乐视频,哥们,那可能得花一个晚上,有时候甚至两天,
06:36
And so I tried to study how these kind of download managers that were popping up worked.
所以我试着研究那些突然冒出来的 download manager 是怎么工作的。
06:43
And download managers kind of offered this one hook.
而 download manager 差不多提供了这么一种 hook。
06:46
Well, rather than making one connection to a server, what if we spawned multiple threads
嗯,与其只对 server 建立一条 connection,不如我们生成 multiple threads,
06:51
and made multiple connections to a server and we kind of chunked content, you know,
然后对同一个 server 建立 multiple connections,然后我们有点像是把内容 chunk 成小块,你懂的,
06:56
it's classical computer science, you know, breakdown problems into smaller chunks.
这是经典的 computer science,你知道的,把问题拆分成更小的 chunks。
07:00
And so that was one of the ways.
所以那只是其中一种方式。
07:01
And if the server supported, you know, chunking, you were able to in some cases actually get
而且如果服务器支持,你知道,chunking,你在某些情况下其实能让
07:07
your file downloaded a little bit faster.
文件下载得快一点点。
07:10
And so it dawned on me, like, hey, we're using this technique for downloading individual
然后我突然意识到,嘿,我们在用这个技术下载单个
07:17
Has anyone applied this to how we browse the web pages?
有没有人把这应用到我们浏览网页的方式上?
07:22
So obviously I couldn't, you know, do something complicated before I, you know, took my
所以显然我没法,你知道,在我,你知道,开始做之前搞什么复杂的东西——
07:28
first baby steps.
最初的小小一步。
07:29
And so I thought, okay, I'm going to try exploring how you build a browser.
于是我想,好吧,我要试着探索怎么构建一个browser。
07:33
I started to read, you know, specifications.
我开始阅读,你懂的,specifications。
07:35
I was probably 15 years old when I started this 15, 16, but I started to read specifications.
我大概15岁开始做这件事,15、16岁吧,但我就开始读specifications了。
07:42
HTML, CSS, JavaScript.
HTML, CSS, JavaScript。
07:44
One of the things that I gained a great deal of respect for and I still have a lot of
有一件事我极为尊重,而且至今仍然
07:48
respect for is developers throw all kinds of weird crap at browsers.
非常尊重,那就是developers会把各种乱七八糟的东西扔给browsers。
07:55
And yet they still render something, right?
但它们还是能 render 出点什么,对吧?
07:58
If you ever want, you know, if you ever want an interesting experiment in therapy, if
如果你想做个有趣的“治疗”实验——你知道,当你因为自己的 code 心情不好的时候,打开 dev tools,随便刷十分钟网页,看看会有多少东西出错。
08:04
you're ever feeling bad about your code, open up the dev tools and just browse the web
但你多半还是能和网站正常交互。
08:09
for 10 minutes, the number of things that will go wrong.
真的挺疯狂的。
08:13
And yet you'll still be able to probably interact with the site.
我也遇到过这种情况。
08:16
It's just wild.
说真的,你只要看看那些 warnings 和 errors 就行。
08:17
And I had that going wrong.
然后我那部分就出问题了。
08:18
You can just look at the warnings and errors honestly, just after that.
你就直接看 warnings 和 errors 就行,就在那之后。
08:22
And so that was one of the most complicated things when I was trying to build a browser.
所以那是我在尝试构建一个 browser 时遇到的最复杂的事情之一。
08:26
It was like, yeah, you can parse HTML, you can parse documents, you can load up images,
就好像,嗯,你可以 parse HTML,可以 parse 文档,可以加载图片,
08:32
but as soon as you run into pages that stop following those specs and they take a very
但一旦你遇到那些不遵循这些 specs 的页面,它们对支持的东西采取非常
08:38
loose interpretation of what's supported, you have to really, you know, roll your sleeves
宽松的解释,你就真的得,你知道,卷起袖子
08:44
up and try to behave the way that actual consumer browsers did.
去尝试表现得像实际 consumer browsers 那样。
08:48
And so I had my fun building out of browser, adding interactivity and JavaScript support
所以我挺享受把 browser 做出来的过程,添加 interactivity 和 JavaScript 支持
08:56
was very difficult, managed to get it working.
非常困难,但我设法让它跑起来了。
09:00
And then I'm a sucker for pain because I decided, well, I guess applets and flash and,
然后我就是自讨苦吃,因为我决定,嗯,applets 和 Flash 还有,你知道,那时候我们有 Windows Media Player,所以大家都在嵌入各种有趣的内容。
09:09
you know, we had Windows media player back then, so people were like embedding all kinds
我告诉自己,如果 browser 不支持所有这些其他东西,那就不算完整。
09:13
of interesting content.
所以我就添加了支持。
09:14
I told myself, well, it's not a complete browser if it doesn't support all these other
然后我终于可以去做我真正想做的事了,也就是探索在那种资源受限的时期,能不能加快 web browsing。
09:18
So I added support for them.
所以我给它们加了支持。
09:20
And then I could finally get on to what I actually wanted to work on, which was exploring
然后我终于能去做我真正想做的事了,就是探索能不能加快网页浏览速度,因为在那个时间点,资源有点受限。
09:24
if I could speed up web browsing for this point in time when you were kind of constrained
然后当他们宣布总冠军的时候,我特别震惊,因为我完全没想到会这样。
09:30
by the hardware and bandwidth that was available locally.
受限于本地可用的 hardware 和 bandwidth。
09:35
Back then, this was a personal pain because before I could get a good internet connection,
当时,这对我来说是个人的痛点,因为在我能获得好的 internet connection 之前,
09:41
I would literally every weekend, especially weird cargo pants that had a lot of pockets.
我每个周末真的都会——尤其是穿着那种有很多口袋的奇怪工装裤。
09:47
And I would fill my cargo pants with floppy disks.
然后我会把 floppy disks 塞满我的工装裤口袋。
09:50
And I would walk down to our local library that just happens to have a slightly faster
然后我会走到当地的图书馆,那里碰巧有稍微快一点的
09:55
internet connection.
internet connection。
09:57
And I would try to save as much as I could and go back home, check it out on my computer.
我会尽可能多地保存下来,然后回家,在我的电脑上查看。
10:02
And so this was a personal mission for me.
所以这对我来说是一个 personal mission。
10:04
I really, really wanted a faster internet connection.
我真的很、很想要更快的 internet 连接。
10:07
And I finally got to explore this idea.
然后我终于有机会探索这个想法。
10:11
And you know, back then, in many cases, there were servers that supported this idea.
你知道,当时在很多情况下,都有 servers 支持这个想法。
10:16
It did make things a little bit faster.
它确实让事情变快了一点。
10:18
And so I, you know, I ended up building something that worked for me.
所以,你知道,我最后做出了一个对我有用的东西。
10:24
I took it to the National Science Competition.
我把它带到了 National Science Competition。
10:28
I was nobody.
我当时就是个无名小卒。
10:30
I was nobody.
我以前也是个无名小卒。
10:31
I was just this kid.
我当时就是个小屁孩。
10:32
I was kind of half expecting to just leave the competition and go back home at the
我当时隐隐约约觉得,比赛结束了我就直接回家,然后说,是啊,你知道的,我给一些人看了些挺酷的东西。
10:37
end of it and say like, yeah, you know, I showed some people some cool stuff.
整个活动快结束的时候,现场有一大群观众。
10:40
There was like a big live audience at the tail end of this whole event.
就是那种,你懂的,电视直播什么的。
10:44
It was, you know, on live TV and everything.
然后他们宣布总冠军的时候,我震惊了,因为我根本没料到会……
10:47
And when they called out the overall winner, I was shocked because I didn't expect to
而当他们喊出总冠军时,我很震惊,因为我没想到会
10:53
And that was my kind of first taste of media attention.
那算是我第一次尝到媒体关注的滋味。
10:57
It was very strange.
这感觉非常奇怪。
10:59
The weekend right after, you know, your kid, you kind of want to sleep in on a Sunday
紧接着的那个周末,你知道,你还是个孩子,就会想在周日
11:05
You don't really have too many people back then, like calling your cell phone or ever.
那时候真的没多少人会打你手机,或者怎么着。
11:11
And my, my cell phone is just like not stopping ringing the first call is like from the Wall
然后我的,我的手机就一直响个不停,第一个电话好像是从 Wall
11:15
Street Journal.
Street Journal 打来的。
11:16
And basically, you kind of like went viral in a time where there was not even Twitter,
基本上,你在還沒有 Twitter 的年代就爆紅了,對吧?
11:22
right?
那時候根本沒有這些,對啊,就只有 Wall Street Journal、CNN。
11:23
Like there was like none of this just, yeah, it was like, yeah, it's Wall Street Journal
我那時候其實不太理解發生了什麼。
11:27
It's, I didn't really understand what was happening.
那段經歷讓我學到的一件事是,我仍然沒有完全理解自己在做的每件事。
11:30
But it was, it was my first taste of that world.
但那是我第一次接触那个世界。
11:33
One of the things that I learned from that experience was, I still didn't fully understand
我从那次经历中学到的一件事是,我仍然没有完全理解我所做的一切。
11:39
everything that I was doing.
事情是如何运作的。
11:41
You know, you're a teenager just because you can build an app that runs on your machine
你知道,当你是个 teenager 的时候,仅仅因为你能做出一个在自己机器上跑起来的 app,并且能实现某个目标,并不意味着你理解背后那些所有的 layer。
11:46
and accomplishes a goal, doesn't mean that you understand all of those layers behind
而那,我觉得,开启了我一生对知识的渴求,以及对事物运作方式的理解。
11:50
the scenes.
在某种程度上,我可以称自己为一个 one trick pony。
11:51
And that, I think, kicked off for me a lifelong thirst for knowledge and understanding
我在乎的是理解问题本身,以及,你知道,怎么去修复它们,它们背后是怎么运作的。
11:57
how things work.
在某种程度上,我可以称自己为一招鲜。
11:59
In some ways, I can call myself a one trick pony.
我关心的是理解问题,以及,你知道,怎么修复它们,它们背后是怎么运作的。
12:01
I care about understanding problems and how, you know, how to fix them, how they work
所以我启动 AOL browser app,然后我有我的工作机器。
12:07
I would go on to work at startups.
我后来就去 startup 工作了。
12:09
I worked at AOL at one point, again, continuing this theme of working with browsers.
我也在 AOL 工作过一段时间,还是延续了这个和 browser 打交道的主题。
12:15
When I joined AOL, at a very AOL moment, my first day, my manager was a very kind guy
我加入 AOL 的时候,正好是一个非常 AOL 的时刻,第一天,我的经理是个很和善的人,他说,嘿,对,你知道吧,去帮团队,就用 browser 登录进去,去帮团队。
12:24
said, like, hey, yeah, you know, go help the team, just log against the browser, go help
好吧,那我就这么办。
12:29
the team.
于是我就打开了 AOL 的 browser app,这是我的工作机器。
12:30
Well, I'll do that.
SAP 已经加载好了。
12:31
So I fire up the AOL browser app and I have my work machine.
所以我打开 AOL browser app,并且我有我的工作电脑。
12:37
The SAP has loaded up.
SAP 已经加载好了。
12:39
And before I can debug anything, the first thing it asks me for is my credit card.
而且我还没开始 debug 呢,它第一件事就是问我要信用卡。
12:43
I'm like, sorry, what?
我当时就说:不好意思,什么?
12:44
I need to enter in my credit card to even start my work.
我甚至要输入信用卡才能开始工作。
12:48
And my manager was busy.
而且我经理当时很忙。
12:49
So I don't know if there was like some work around.
所以我不知道有没有什么 workaround。
12:51
I was like, okay, I guess, I guess this is what I need to do to get started with work.
我当时就想:好吧,我猜,我猜这就是我开工前需要做的事。
12:57
Very different time.
那是一个非常不同的时代。
12:58
But years later, I would join Google and I would work on Chrome.
但几年后,我加入了Google,做Chrome相关的工作。
13:02
But something for me that's been very interesting is, you know, if you treat computing as this
但对我来说,一直很有意思的是,你知道,如果你把computing看作一个洋葱,一层一层地剥开,幕后总有一些有趣的东西。
13:09
onion where you just keep peeling back the layers, there's always something interesting
而你剥开并理解的层越多,我觉得在某种程度上,你就越能更好地为那个世界做optimize。
13:14
behind the scenes.
你知道,曾经有一段时间,我可能只理解了render的表面。
13:16
And the more of those layers that you can peel back and understand, I think in some ways,
而且那些 layers,你越能层层剥开并理解,我认为在某些方面,
13:21
the better you can optimize for that world.
你就能为那个世界优化得更好。
13:24
You know, there was a time when I maybe only understood the surface of how things render.
你知道,有段时间我可能只理解了东西 render 的表面。
13:29
But if you're talking about browsers, you know, there is the network.
但是如果你说的是浏览器的话,你知道,有 network。
13:33
There is compositing.
有 compositing。
13:35
There is the JavaScript engine.
有 JavaScript engine。
13:37
You go down another layer.
你再往下看一层。
13:40
There's memory.
有 memory。
13:42
And the more you understand about all of these different foundational pieces, the better
而且你对这些不同的基础部分了解得越多,就越好。
13:46
you can then optimize and build something that, you know, conserve people, even unconstrained
你可以随后去优化并构建一些东西,你知道,即使在不受约束的环境里也能节省人力。
13:51
environment.
如果你有一部稍微慢一点的手机,嗯,我现在明白为什么手机变慢了,以及哪些 constraints 可能会要求我们在构建那里的东西时换一种思路。
13:53
If you have a slightly slower phone, well, I understand now why the phone is slower and
所以我一直非常鼓励人们去理解事物是怎么运作的。
13:58
what constraints might require us to think slightly differently about what we're building
然后,本着理解你早期参与的一个项目的精神,你知道,你构建了自己的 custom browser,做了一些很酷的事,你懂的。
14:03
So I'm always a big fan of encouraging people to understand how things work.
所以我一直非常鼓励人们理解事物的运作方式。
14:06
And then in the spirit of understanding one project that you got involved on early
然后,为了理解你早期参与的一个项目,
14:11
on, you know, you built your custom browser that did some cool stuff and you understand
嗯,你知道,你构建了自己的 custom browser,做了一些很酷的东西,而且你明白
14:16
how to render a parse to some of these things.
怎么把 parse render 到其中一些东西上。
14:18
And then you join into the jQuery project.
然后你加入了 jQuery 项目。
14:21
How did that happen?
那是怎么发生的?
14:23
And in jQuery for a while after you joined, it became for a while the most used library in
而且在你加入之后,jQuery 有一阵子成了 JavaScript 生态系统中使用最多的库,所以基本上 web 是它说了算。
14:31
the JavaScript ecosystem, so basically it calls the web.
那样的情况持续了几年。
14:34
There were a few years of that.
嗯。
14:36
I think Fulcuto goes to John Recyc, the creator of jQuery.
我认为这主要归功于 jQuery 的创建者 John Recyc。
14:41
JQuery was really my first contribution to a big community open source project.
jQuery 真的是我第一次为大型社区 open source 项目做贡献。
14:47
And John was someone that was very welcoming and created an environment where people could
John 是一个非常热情的人,他创造了一个环境,让人们能够学习并成为更好的 open source contributors。
14:53
learn and become better open source contributors.
我从和负责 triage 和 issues 的团队一起工作开始,然后逐渐过渡到写博客文章,以及以其他方式贡献 code。
14:57
I started off working with the team of people that would deal with triage and issues and then
但正如你所说,它用得太广了,结果就是你会遇到人们各种各样的 use cases。
15:03
move down to like working on blog posts and contributing to code in other ways.
接着就是像写 blog posts 以及用其他方式贡献 code 这类工作。
15:08
But as you said, it was so widely used that you end up with so many different use cases
但正如你说的,它太普及了,最后你会遇到那么多不同的 use cases,
15:16
And a lot of the times back then, people would have very strong opinions about like, hey,
1. 而且那时候在很多情况下,人们会对一些事情有非常强烈的看法,比如说,‘嘿,’
15:20
this thing should be in the main library in core versus being a plugin.
2. 这个东西应该放在 core 的 main library 里,而不是作为一个 plugin。
15:26
And I got a lot of respect for how you effectively like work with a community while also holding
3. 而且我非常敬佩你如何有效地与社区合作,同时又能坚守
15:32
a line in terms of, you know, what decisions should be made to optimize for long term maintainability,
4. 立场,你知道,也就是在应该做出什么决定来优化长期 maintainability 这方面。
15:40
But it was a great experience.
6. 但那是一次很棒的经历。
15:42
And that helps me kind of carry those lessons on when I worked on my own open source projects.
7. 而这也帮助我在做自己的 open source 项目时,把那些经验都带了进去。
15:47
I was very grateful for that opportunity.
8. 我非常感激能有那个机会。
15:51
And one of your popular open source projects back in a day was called 2DMVC.
你以前有个很流行的开源项目叫 2DMVC。
15:55
Can we talk about what it was and what you started?
我们能聊聊它是什么,以及你是怎么开始做它的吗?
15:57
Yeah, absolutely.
嗯,当然可以。
15:58
There was a point in time back in the dark ages of JavaScript when we didn't have frameworks
在 JavaScript 的黑暗时代,曾有那么一段时间我们还没有 frameworks。
16:05
and we didn't have libraries.
也还没有 libraries。
16:07
Over time, those things started to pop up.
随着时间推移,这些东西开始出现了。
16:10
And we began to have quite a few of them and they all tried to accomplish in some cases
然后我们开始有了不少这样的东西,它们都在试图实现,在某些情况下
16:16
overlapping goals, sometimes adjacent goals, but we're talking about angular backbone,
目标重叠,有时候是相近的目标,但我们说的是 angular backbone,
16:26
And if, you know, if you're too young for any of these terms to mean anything, that's also
而且如果你太年轻,对这些术语完全没概念,那也
16:32
But there was this burgeoning community of libraries and frameworks that were starting
但当时有一个蓬勃发展的库和框架社区,开始
16:37
And one thing that I personally struggled with was, well, how do these things differ?
而我个人纠结的一点是,嗯,这些东西到底有什么区别?
16:43
You know, you can go and you can check out the landing page for any of these projects.
你知道,你可以去看看这些项目的 landing page。
16:46
And they all say, like, yeah, we're going to help you build apps no easier.
而且他们都会说,像是,对,我们会帮你构建 apps,没有比这更容易的了。
16:52
But I was very big into education and trying to understand how these things worked.
但我非常热衷于教育,也一直在想搞懂这些东西是怎么工作的。
16:58
So I started off by creating basically the same application in every one of these frameworks
所以我一开始就是在每一个 framework 里创建基本上相同的 application,
17:06
and try to standardize the functionality so that if you were in the same position I
并尝试把功能标准化,这样一来,如果你也处于和我当时一样的...
17:11
was and you just wanted to get a sense of, okay, well, how does the architecture philosophy
就是你想了解一下,嗯,好吧,这些不同东西之间的 architecture philosophy 是怎么变化的?syntax 有什么不同?如果他们让你构建一个 component 或者一块 UI,他们采取的立场跟别人有什么不同?所以我在构建这个东西的过程中获得了很大的个人价值,于是我就把它发布到世上了,我原本没指望它会有什么用。
17:16
change between these things?
在这些东西之间切换?
17:18
How does the syntax differ?
Syntax有什么不同?
17:20
If they're telling you to build a component or a piece of UI, what is the position they're
如果他们让你构建一个component或一段UI,他们跟别人的立场有什么不同?
17:24
taking on it versus somebody else?
所以我在构建这个东西的过程中得到了很多个人价值。
17:27
And so I got a lot of personal value out of the way that I was building this thing up.
所以我把它发布了出去。
17:32
So I put it out into the world.
我没想到它会有用。
17:34
I had no expectations of it being useful.
能够使用和推理,但我需要有足够的interactivity和足够的functionality,让你真的可以至少对某些functionality framework进行stress test。
17:37
But basically it was you implemented a to-do app or the same to-do app with a different
但基本上就是你实现了一个 to-do app,或者用不同的 framework 实现同一个 to-do app,这样就可以比较它们之间的差异。
17:41
framework so you could kind of compare how they differ.
对。
17:43
Yeah.
我的想法是,我想要一个足够简单的 application,几乎任何人都能使用和理解,但又需要有足够的交互性和功能,这样你才能真正地 stress test 一下这个 framework 提供的至少部分功能。
17:44
And the idea was, I wanted an application that was simple enough for almost anybody to
在某些情况下,比如 state management 或者 routing 之类的东西。
17:51
be able to use and reason about, but I needed to have enough interactivity and enough functionality
能够使用和推理,但我需要有足够的交互性和足够的功能。
17:56
that you could really kind of stress test at least some of that functionality framework
那样你才能真正对至少部分功能 framework 做 stress test。
18:01
In some cases, you know, that would be state management or routing or other things.
在某些情况下,你知道,那会是 state management 或 routing 或其他东西。
18:06
And so I put the silence to the world.
于是我就对外界保持了沉默。
18:09
I was kind of shocked at how many other developers were running into this exact same challenge
我挺震惊的,居然有这么多其他开发者都遇到了完全一样的挑战。
18:15
and the project quickly took off.
然后这个项目很快就火了起来。
18:18
It started to get a lot of stars back in the day.
当时它就开始收获很多 stars。
18:22
It got thousands and thousands of stars very quickly and I didn't quite know what was
它很快拿到了成千上万的 stars,我都没搞明白怎么回事。
18:26
happening.
没过多久,就有一些在做新 frameworks 或者 frameworks 新版本的人联系我,说,嘿,这很酷。
18:27
And before long, I had people who were working on new frameworks or new versions of
没过多久,就有一些在做新 frameworks 或新版本
18:31
frameworks reaching out to me saying like, hey, this is cool.
frameworks 的人来联系我,说,嘿,这很酷。
18:37
Here's my pull request with my framework.
这是我的 pull request,带着我的 framework。
18:40
Can we work together on standardizing it?
我们能一起把它标准化吗?
18:42
I met some of my first true open source friends through this project.
通过这个项目,我认识了我最早的一批真正的 open source 朋友。
18:47
People who are now, you know, very well established in their own means like Cinder Sorjas who's
这些人现在,你知道的,都各有成就,比如 Cinder Sorjas,
18:52
written quite a lot of node modules over time.
他这些年写了不少 node modules。
18:55
This idea of just giving people a simple enough application ended up becoming in some ways
这个想法,就是给人们一个足够简单的 application,后来在某种程度上
19:01
as a standard for a number of years.
成了好几年的一个标准。
19:02
I began to see that, you know, if a framework was giving people a tutorial about how to
我开始发现,你知道,如果一个框架给了人们一个教程,教他们怎么用,
19:08
use them, they would actually use it to do MVC app as their baseline.
他们其实会拿它来做 MVC app 作为他们的基线。
19:12
It's been so many years.
这都过去这么多年了。
19:13
That was sort of my career in many ways.
这在很多方面就像我的职业生涯一样。
19:16
Even this last year, I still see labs sometimes like showing off to do MVC apps when they're
甚至就在去年,我还是会看到有些 labs 在测试功能的时候,喜欢拿 MVC app 来展示,
19:21
trying to test out features and the longevity of this thing has been very surprising to me.
这种东西的生命力真的让我非常惊讶。
19:28
The other thing that was surprising was at one point when the project was taking off,
另一件让我惊讶的事情是,在项目起飞的时候,
19:34
Apple reached out to me, yeah, Apple reached out to me and specifically the people who
Apple 联系了我,对,Apple 联系了我,而且具体来说是那些……
19:39
are working on Safari and WebKit.
是在做 Safari 和 WebKit。
19:42
They said, you know, hey, we're interested in working on a browser benchmark to help
他们说,你知道,嘿,我们想做一个 browser benchmark 来帮助
19:49
browser vendors understand like, are they doing a good job at being responsive?
浏览器厂商明白,比如说,他们在 responsive 方面做得好不好?
19:54
And responsive here doesn't mean responsive in the mobile sense, but responsive in terms
这里的 responsive 并不是移动端那种 responsive,而是指
19:58
of interactivity.
interactivity 方面的 responsive。
19:59
And are we responding to clicks and taps quickly?
以及我们能否快速响应点击和轻点?
20:01
They reached out to me and they said, hey, would you like to collaborate with us on this
他们联系了我,然后说,嘿,你愿意和我们合作,一起做这个
20:06
And what that turned out to be was speedometer.
然后结果发现那就是 Speedometer。
20:11
Speedometer over the years has become the primary responsiveness benchmark, web application
Speedometer 这些年来已经成为了所有浏览器的主要 responsiveness benchmark,也就是 web application benchmark。
20:18
benchmark for all browsers.
而且你在构建,它就在旁边。
20:20
And it's continued to be for a very long time.
而且它已经持续了很长时间了。
20:22
Browser vendors now collaborate together on it.
现在浏览器厂商们会共同合作来维护它。
20:25
They've kept it up to date.
他们一直让它保持最新状态。
20:27
So as new frameworks, as new architectural paradigms have come out over the years, they've
所以随着这些年新的frameworks、新的architectural paradigms不断涌现,他们一直在持续更新它。
20:33
kept updating it.
这在很多方面都像是把这个项目的legacy一路传承到了今天。
20:34
And that in many ways is like carried that the legacy of that project through to today.
而且我一直非常高兴它能给人们带来任何形式的价值。
20:40
And I've been just very happy that it's given people value of any kind.
而且你正在构建的东西,就在旁边展示着。
20:43
And you're building, it's up on the side.
当时他们正在尝试构建一些 tooling,他们觉得可以很好地利用我的一些技能,但同时也想要一些普通的 evangelism。
20:45
You're also working at a consultancies AOL at different startups.
你也在一些咨询公司、AOL 和不同的初创公司工作过。
20:49
How did Google come along?
Google 是怎么来的?
20:50
So Google was an interesting one.
Google 是个挺有意思的经历。
20:54
I remember one of my first longer periods of time spent in the US was when I was visiting
我记得我在美国待得比较久的那几次,其中一次是去
21:02
my wife and her parents out in the Midwest.
看我妻子和她的父母,他们住在美国中西部。
21:06
And I was sitting, I remember in their room watching TV.
我记得我坐在他们家的房间里看电视。
21:12
And there's this documentary about Google that came on.
然后电视上播了一个关于 Google 的纪录片。
21:16
And they showed like, you know, early engineers that have been working there.
里面展示了,你懂的,那些早期就在那里工作的工程师。
21:20
And why they enjoyed the environment.
以及他们为什么喜欢那个环境。
21:22
And I told myself, you know, I would love to work in a place like that someday.
我对自己说,你知道的,我希望有一天能在那样的地方工作。
21:28
I continued to put out free education into the front end world and this JavaScript world
这些年来,我持续在前端、JavaScript 和 web app 领域免费输出教育内容。
21:34
web app world over the years.
到某个时候,我猜 Google 注意到这些内容对一些人很有用。
21:36
And at some point, I guess Google noticed that it was useful to some people.
于是他们联系了我,想面试我担任一个 dev rel 和 build role 的角色。
21:42
And so they reached out and wanted to interview me for a dev realm and build a role.
当时他们正在尝试构建一些 tooling,觉得能很好地用上我的一些技能,但同时也需要一些常规的 evangelism。
21:51
There was some tooling that they were trying to build out at the time that they thought could
我们当时没有像 ES 这样的东西,built-in,是的,我们并不一定在所有浏览器里都有标准化得很好的 JavaScript modules,你知道的。
21:55
be a good use of some of my skills, but also some just general evangelism they wanted
能很好地用上我的一些技能,但也有一些只是想要一般的 evangelism。
22:01
to do in the tech community.
在 tech community 里要做的事。
22:03
And you know, the star is aligned, just happened to work out and I ended up working on the
你知道,时机正好,碰巧就成了,最后我加入了
22:09
Chrome team.
Chrome team。
22:10
And then when you joined, can you tell us a little bit more about when you joined the
那当你加入的时候,能不能跟我们多讲讲,你是在什么时候加入
22:13
Chrome team?
Chrome team 的?
22:14
What was Chrome like?
当时的 Chrome 是什么样的?
22:16
What kind of work did you and the team do?
你和团队做了哪些工作?
22:19
Because now Chrome is sending them for web browser.
因为现在 Chrome 已经为 web browser 树立了标杆。
22:23
I know there's other browsers and every now and then, of course, they have some market
我知道还有其他浏览器,当然,它们时不时也会有一些市场
22:28
share, but Chrome has largely won the market.
份额,但 Chrome 已经基本赢得了市场。
22:30
But back then, when you joined, this was not the case just yet, was it?
但当时你加入的时候,情况还不是这样,对吧?
22:34
I remember back when I joined, it was a period when we were very excited about developers
我记得我刚加入的时候,我们特别兴奋,因为开发者们
22:45
bringing their creativity to the platform.
把他们的创造力带到平台上来。
22:48
So what can you do to push on the platform and show us both what's possible as well
那么你能做些什么来推动这个平台,向我们展示什么是可能的,以及
22:53
as the gaps so that we can potentially help fill those gaps and build better APIs?
还有哪些差距,这样我们就有可能帮助填补这些差距,并构建更好的 API?
22:58
So I remember there was this great Chrome experiment site that we had back in the
所以我记得我们当时有一个很棒的 Chrome 实验网站,就在
23:01
day where we would, you know, sometimes work with studios or work with developers and
有时候我们会和工作室或开发者合作,
23:06
just showcase like, hey, here's a cool WebGL example that maybe you wouldn't have otherwise
然后展示一些很酷的 WebGL 示例,就是那些你可能平时不会
23:12
And that served as inspiration for some people.
这给一些人带来了灵感。
23:15
It's maybe even go and then learn more about shaders or, you know, different libraries.
甚至可能让他们去学习更多关于 shaders 或者不同的 libraries 的知识。
23:20
It was also a period of time when I would say front-end tooling was still very much heavily
那段时间,我觉得 front-end tooling 还在非常
23:27
Yeah, we're talking 2012, 2013.
对,我们说的是 2012、2013 年。
23:29
Yeah, we're talking 2012, 2013.
对,我们说的是2012、2013年。
23:32
This was at a time prior to what I would now call meta frameworks.
那是在现在我会称之为 meta frameworks 的东西出现之前。
23:38
So like next JS, for example, a meta framework, it did not exist.
比如 next JS,一个 meta framework,当时并不存在。
23:42
So we were going all the way back to a time when we didn't have the best build tools, even
所以我们回到了一个连最好的 build tools 都没有的时代,甚至 front-end 的 build tools 也没有。
23:48
for front-end.
我们没有内置的像 ES 这样的东西,对,我们也没有在所有浏览器中都得到良好标准化的 JavaScript modules,你懂的。
23:49
We didn't have things like ES, built-in, yeah, we didn't necessarily have well standardized
我们没有像 ES 这样的内置东西,对,我们不一定有很好标准化的
23:55
JavaScript modules, you know, in all browsers.
JavaScript modules,你知道,在所有浏览器里。
23:59
People were still using, you know, AMD and UMDs, common JS, things like that.
大家还在用,你知道的,AMD、UMD,还有 CommonJS 之类的。
24:06
And you know, the build tooling and the scaffolding tooling was still very much evolving.
而且你知道,build tooling 和 scaffolding tooling 还在不断演进。
24:11
And so this was the period of time when you went through things like grunt for anyone
所以那段时期你会用到像 Grunt 这样的东西——对于任何经历过的人来说,
24:16
that, you know, maybe we're dating ourselves, but grunt as a built system.
你知道,也许我们在暴露年龄,但 Grunt 确实是个 build system。
24:21
And also when you debug the browser, you would use firebug, you would open it in Firefox
还有,当你在浏览器里 debug 的时候,你会用 Firebug,在 Firefox 里打开它,
24:25
and then hope that like an IE, it would work.
然后希望它在 IE 里也能正常工作。
24:28
But if it didn't, there weren't many good debugging tools in IE specifically.
但如果不行的话,IE 里确实没什么好的 debugging tools。
24:32
Later they became better, but back there was a time when there was no.
后来它们变得更好了,但早期有一段时间是没有的。
24:35
And I think that, you know, back in the heyday, there was a lot of workarounds, people
而且我觉得,你知道,在那个全盛时期,有很多 workaround,大家都在试着用这些来维持某种工具箱,在情况变得更好之前。
24:39
were trying to apply to still have a toolbox of some sort before things got much better.
我们投入了不少精力去跟那些构建 build tools、test runners 和 scaffolding tools 的人合作。
24:44
We put some work into working with, you know, the folks who were building out, build tools
那时候我们也做了一个自己的贡献,叫 Yoman。
24:51
and test runners and scaffolding tools.
而 Yoman 其实主要是——我不知道该不该这么说,你知道,第一个 meta-frame。
24:53
We worked on our own contribution called Yoman back in the day.
当年我们自己搞了个东西,叫 Yoman。
24:59
And Yoman was really about, I don't know that I'd call it, you know, the first meta-frame
而 Yoman 其实是在做,我不知道该不该这么说,你知道,可以说是第一个 meta-frame。
25:03
work, but I would call it an attempt at trying to bring just a little bit of organization
行得通,但我会称之为一种尝试,想给你的起点带来一点点的组织性。
25:11
to your starting point.
Yoman 是我们创建的 scaffolding tool,你会在 CLI 里得到一个 wizard,然后你会说,呃,对,我想建这个东西。
25:12
Yoman was the scaffolding tool we created where you would get a wizard in your CLI and
然后也许我对用这个 UI library 和那个 testing library 感兴趣。
25:18
you'd kind of say, well, yeah, I'm trying to build this thing.
也许我还想部署到某个 target。
25:21
And maybe I'm interested in using this UI library and this testing library.
现在对于正在听的人来说,这些想法听起来可能非常标准,而且是你现在常用的所有工具里都会有的东西,但在当时它们并不存在。
25:27
And maybe I'm interested in deploying to this target.
然后也许我感兴趣的是 deploy 到这个 target 上。
25:30
Now for folks who are listening in, those ideas might now sound very standard and things
现在对于正在收听的朋友们来说,这些想法听起来可能已经很标准了,什么的。
25:35
that you will find in all the tools you're regularly using back then they didn't exist.
你会在你日常使用的所有工具里找到这些,但在当时它们并不存在。
25:40
And I wouldn't be surprised if many of the modules we created back then are still being
而且如果当时我们创建的很多 modules 至今还在
25:43
used under the hood for some of your favorite tools.
为你最喜欢的工具在底层提供支持,我也不会感到意外。
25:46
So it was, it was very fun getting to be a part of that moment where we were trying to
所以那真的,真的很有趣,能成为那个时刻的一部分,当时我们试图
25:49
like figure things out and reduce friction.
搞清楚问题、减少摩擦。
25:52
But I will say that, you know, there was this long period where we kept changing tools
但我要说的是,你知道,有很长一段时间我们不停地在换工具,
25:56
what felt like every, every once in a while, right?
感觉就像每隔一阵子就换一次,对吧?
25:59
You went from grunt to gulp to webpack to, you know, to, to beat roll up all these,
你从 grunt 到 gulp 到 webpack,再到,你知道,到 beat、roll up,所有这些
26:05
all these things kept evolving.
东西都在不断进化。
26:07
And I was happy to see the evolution, but I'm also happy that things in some ways feel
我很高兴看到这样的演变,但我也很高兴事情在某种程度上感觉稳定下来了。
26:11
like they stabilized.
是啊。
26:12
Yeah.
有过,我觉得那是被扭转了,但我的意思是,那就是一种创新的发生。
26:13
There was, I think it was turned, but I mean, that's one innovation happens.
你做过 Google Chrome DevTools 吗?
26:17
Did you work on Google Chrome DevTools?
对。
26:20
How did that start?
因为我记得在 2012 年,我不确定有没有 DevTools,但再说,状态...
26:21
Because I remember in 2012, I'm not sure if there was DevTools, but again, the state
因为我记得在 2012 年,我不确定当时有没有 DevTools,但话又说回来,那种状态
26:25
of the art was firebug.
当时最先进的是 Firebug。
26:27
I wasn't, I think it was open source.
我不是,我觉得它是 open source 的。
26:29
It was actually just superior debugging on the web to anything before.
它其实就是在 web 上 debugging 比之前任何东西都强。
26:34
And I'm not sure at what point, but I do remember, you know, Chrome DevTools slowly
我不确定是什么时候开始的,但我确实记得,你知道,Chrome DevTools 慢慢出现,它带来了一堆新东西,比如你可以做 performance、monitoring 这些。
26:37
started to emerge and it started to bring a bunch of new stuff like you could do performance,
你能从内部讲讲它是怎么开始的吗?
26:41
monitoring some of those things.
你做了什么,你是怎么想出要做什么的?
26:42
Can you tell me from the inside how, how did it start?
你能从内部讲讲吗,它是怎么开始的?
26:47
What, what you built, how you figured out what to build?
你做了什么,你是怎么想出来要做什么的?
26:51
Give a shout out to Pavel Feldman, who was the tech lead for Chrome DevTools and really
在这里要特别提一下Pavel Feldman,他是Chrome DevTools的技术负责人,而且确实
26:57
played a very large role in helping it come to be originally.
在它的最初诞生中发挥了非常大的作用。
27:02
There was this period of time when Chrome was trying to figure out how it differentiates
曾经有一段时间,Chrome在试图弄清楚如何把developer tooling story
27:09
developer tooling story from WebKit, where we had the Safari Inspector, the WebKit Inspector.
从WebKit中区分开来,当时我们有的是Safari Inspector,也就是WebKit Inspector。
27:15
And I think there's a very specific direction that was developer centric and cared about
而且我认为有一个非常具体的方向,就是以开发者为中心,并且关注
27:21
the ecosystem that Pavel and his team were trying to help out with.
Pavel和他的团队想要去帮助的那个ecosystem。
27:27
And I noticed that they had a very good relationship talking to not just developer evangelist.
而且我注意到,他们和很多人关系都很好,不仅仅是developer evangelist。
27:32
This was the time when we had really sharp minds like Paul Irish around also like working
那是我们身边有像Paul Irish这样思维非常敏锐的人,同时也和Chrome DevTools团队合作非常密切的时期。后来我们还有了像Paul Backhouse这样的人,他现在以无可挑剔的设计能力而闻名。我觉得那段时期的一个好处是,拥有这些既是网页开发者典范、同时又是建设者的人——我自己、Paul、还有那位Paul。我们会尝试把这些见解带给DevTools团队,帮助他们理解,看,这里就是我们遇到的摩擦点。
27:38
very heavily with the Chrome DevTools team.
和 Chrome DevTools 团队非常紧密地合作。
27:41
We would later have folks like Paul Backhouse, who is now known for things like impeccable
后来我们有了像 Paul Backhouse 这样的人,他现在以无可挑剔的
27:47
skill for design.
设计能力而闻名。
27:49
And I feel like one of the nice things about that period of time was you had these people
我觉得那段时期的美好之处在于,你有很多这样的人,
27:55
who were web developer archetypes and were builders on the side, myself, Paul, the Paul's.
他们是 web 开发者原型,同时也是建设者,包括我自己、Paul、还有那些 Paul 们。
28:01
And we would try to bring those insights to the DevTools team and help them understand
我们会试着把这些见解带给 DevTools 团队,帮助他们理解
28:05
well, here the area is a friction that we are running into.
好吧,这里就是我们遇到摩擦的领域。
28:08
In some cases, you can't just build tools to help you out with them because you don't
在某些情况下,你不能只是构建工具来帮你处理它们,因为你没有
28:12
have the underlying instrumentation.
底层的 instrumentation。
28:15
And so I was very happy to see things like performance tooling heavily evolve over the
所以我非常高兴看到像 performance tooling 这样的东西在过去的
28:21
Like the DevTools performance panel is just an amazing piece of technology.
比如 DevTools performance panel 简直是一项令人惊叹的技术。
28:25
The fact that you can just hit record, start interacting with your page, and you get
你可以直接点击 record,开始与页面交互,然后你就会得到
28:30
a flame graph, you get very deep tracing about where all the time is being spent.
一个 flame graph,以及非常深入的 tracing,显示所有时间都花在了哪里。
28:35
And that continued to evolve over time.
而且这随着时间的推移持续演进。
28:38
And then we had really hard problems.
然后我们确实遇到了一些非常棘手的问题。
28:41
Some of the hardest problems have been around memory.
其中一些最难的问题一直围绕着 memory。
28:45
I would say sometimes, I don't know if it's controversial, that very few developers understand
我想说,有时候——我不知道这是不是有争议——真正理解 memory management 的开发者非常少。
28:50
memory management.
而这让 debug memory 问题变得更加困难。
28:52
And that makes it even harder to debug memory problems.
所以这些年来,memory debugging 的最新技术并没有太大发展。
28:56
And so the state of the art around memory debugging hasn't evolved all that much over
但这是一个难题。
29:02
But it's a hard problem.
但这是个难题。
29:03
The DevTools team tackled a lot of interesting hard problems.
DevTools 团队解决了很多有趣且困难的问题。
29:06
Can we talk about a part that you brought in something new because debugging memory just
我们能聊聊你带来新东西的那个部分吗?因为 debugging memory 只是……
29:13
back in a day, it's pretty much, I mean, if you have a language that has, let's say,
以前,基本上就是,我是说,如果你有一种语言,比如说,
29:16
heap, you can try to visualize what's on there.
heap,你可以试着可视化上面有什么。
29:19
You can attempt and maybe be successful at allocating our wish variables there are.
你可以尝试,也许能成功地在那边 allocate 你想要的 variables。
29:25
And then you can try to also, I mean, some of the variables are the easy part.
然后你还可以尝试,我是说,有些 variables 是容易的部分。
29:29
There's also stacks.
还有 stacks。
29:32
And it gets a little bit messy, but you basically have a memory and you're typically interested
然后事情就变得有点乱,但你基本上有一个 memory,而且你通常感兴趣的是……
29:37
in what is growing.
在增长的东西里。
29:39
And there's a part that I don't know that we got too far on that.
还有一部分,我不知道我们是否在那方面走得太远了。
29:43
But you're kind of trying to see, is this getting bigger?
但你有点想看看,这是不是在变得更大?
29:46
What are the loops?
这些 loops 是什么?
29:47
Where's my stack?
我的 stack 在哪里?
29:49
I would say that there are a few interesting arcs where we were seeing ourselves and developers
我想说的是,有几个有趣的发展阶段,我们看到自己和外部开发者遇到了某些摩擦,并与 DevTools team 合作以
29:55
externally running into certain kinds of friction and work with the DevTools team to
在外部遇到某些摩擦,然后和 DevTools 团队合作去。
30:01
try evolving some tooling in that direction.
试着往那个方向演进一些 tooling。
30:03
One of the big arcs was embracing the fact that developers were increasingly using
其中一个很大的转变,就是接受了一个事实:开发者们越来越多地使用 frameworks 和 libraries 来构建 web。
30:09
frameworks and libraries to build for the web.
那么,对于还记得那段黑暗时代的人来说,想象一下你有一个非常 interactive 的页面。
30:12
Now, for anyone that remembers those dark ages, imagine that you have a page that's
它用了很多不同的 libraries,你想 debug 一下到底发生了什么。
30:18
very interactive.
那段代码里,你真正在意的到底是哪部分?
30:19
It's using lots of different libraries and you're trying to debug what's happened.
你会在意那些在幕后驱动一切的 framework 代码吗?
30:23
How part of that code do you actually care about?
那部分代码你实际上关心多少?
30:26
Do you care about the framework code that is powering things behind the scenes?
你在乎背后驱动一切的 framework 代码吗?
30:31
Do you care about the plugins or the components sitting on top of it that you haven't written?
你会关心那些不是你写的、构建在它上面的 plugins 或 components 吗?
30:36
Do you care about the code you yourself have written?
你会关心你自己写的 code 吗?
30:39
And so you have all of these very nuanced aspects of debugging that need a solution.
所以你有所有这些非常细微的 debugging 方面,都需要一个解决方案。
30:44
One of the things that we tried to introduce was just this respect and understanding that,
我们试图引入的其中一点,就是这种尊重和理解,
30:49
yeah, developers are going to be using these different text acts.
是的,开发者会使用这些不同的 text acts。
30:53
We had a source maps story sitting there, where potentially we can start to reason about
我们有一个 source maps 的故事摆在那里,我们可以开始推理
30:59
You can map back to what part of the code, which is not trivial.
你可以映射回 code 的哪个部分,这并不简单。
31:02
Exactly, which is not trivial, and a lot of kudos to the team because I think we ended
没错,这事儿一点都不简单,真得给团队点个赞。因为我觉得我们最后在 source maps 上做出了一个很好的方案,哪怕你用的是很长的工具链,它也能帮你把逻辑理清楚。你看任何大网站的开发者工具链,Uber、Netflix,或者随便哪个大型网站,你可能都会低估同时跑起来的东西有多复杂、工具数量有多少。而在这个情况下,你还能让大家看清楚——嘿,这些才是你真正关心的文件。这确实是个难题。
31:07
up on a source maps story that really helps you reason well about even if you are using
一个关于 source maps 的故事,它真的能帮助你好好推理,即使你在使用。
31:13
a long tool chain of things, like if you take a look at any tools that developers, for any
一长串工具链的东西,比如你看看开发者用的任何工具,对于任何。
31:18
big site, whether it's Uber or Netflix or any large site, you probably underestimate
大型网站,不管是 Uber 还是 Netflix 还是任何大型网站,你可能会低估。
31:24
the complexity and the number of tools that you are running at any one time for any one
你在任何时刻为某一个任务所运行的工具的复杂性和数量
31:28
task, and being able to still allow people to see, well, hey, here's actually the files
任务,并且仍然能让人们看到,嘿,这些其实是你关心的文件。
31:34
that you care about.
这是个难题。
31:35
It's a hard problem.
在 DevTools 里搞一个不错的 device mode,让你预览你的网站在不同 viewport 尺寸下的样子。
31:36
I think that allowing people to get that view was part of the value that we brought.
我觉得,让人们看到那个视角,是我们带来的价值的一部分。
31:42
We introduced different kinds of black box views over the years so that you could say,
这些年来,我们引入了不同种类的 black box views,让你可以说,
31:47
well, hey, actually, I know that I don't care about you telling me there's an issue with,
好吧,嘿,实际上,我知道我不在乎你告诉我说有个问题,关于
31:52
for example, the React library, but I do want you to tell me that there's an issue with
比如说,React library,但我确实想让你告诉我说有个问题,关于
31:56
the React code that I wrote.
我写的 React code。
31:58
Giving you even those toggles, those controls, I think was very powerful for people, mobile
即使给你那些 toggles、那些 controls,我觉得对人们来说也非常强大。Mobile
32:03
was another big moment that changed everything.
是另一个改变一切的重大时刻。
32:08
If you think about mobile, today, I would say there's probably established best practices
如果你想想 mobile,今天,我想说大概已经有了 established best practices。
32:15
around the things to test.
关于要测试的那些东西。
32:17
You want to test out your viewport with your tap targets.
你想用 tap targets 来测试你的 viewport。
32:21
If I'm tapping on something, there are all these different kinds of sensors even that
如果我在点击某个东西,移动设备上甚至有各种不同的 sensors。
32:29
mobile devices have.
我们最初没有任何相关的 tooling,所以最后在 DevTools 里做出了一个很好的 device mode,让你可以预览你的站点在不同 viewport 尺寸下看起来什么样。
32:31
We didn't have tooling around any of this stuff originally, and so we ended up building
你可以很快地 toggle 一下,然后说,对,大概就是这个样子的。
32:36
out a nice device mode in DevTools that would allow you to preview what your site would
你可以很快地 toggle 一下,然后说,嗯,大概就是这个样子。
32:41
look like at different viewport sizes.
我猜 web apps 在成长起来,所以 PWA 就是 progressive web apps。
32:44
You can very quickly kind of toggle and say, yeah, this is what it roughly looks like
有一段时间,人们真的很想让 web 变得有竞争力,相比之下。
32:48
on an iPhone or a pixel device.
在 iPhone 或 Pixel 设备上。
32:51
Of course, the absolute best kind of testing would be trying it out on one of those accurate
当然,最好的测试方式肯定是在那些真实的设备上试一下,但即使只是快速感受一下方向对不对,对人们来说也很有价值。
32:57
devices, but even to quickly get a sense of whether you're heading in the right direction
我们会随着时间推移不断演进,因为更多 best practices 开始确立起来。
33:03
was very valuable to people.
我猜是 web apps 在成长吧,所以 PWA 就是 progressive web apps。
33:06
We would evolve that over time as more of those best practices started to establish.
有一段时间人们真的很想让 web 变得比 native 更有竞争力,所以你就会想,嗯,到底缺了哪些东西?
33:11
I guess the web apps growing up, so PWA is progressive web apps.
我猜 web apps 在成长,所以 PWA 就是 progressive web apps。
33:16
There was a period of time when people really wanted to make the web competitive compared
曾经有一段时间,人们真的很想让 web 变得有竞争力,相比之下
33:24
to native, and so you think about, well, what are the things that are missing?
to native,然后你会想,嗯,还有哪些东西是缺失的?
33:28
Well, you need a really good story for offline caching, push notifications, background
嗯,你需要为 offline caching、push notifications、background sync 提供一个非常好的方案。
33:34
sync.
这些能力我们之前不一定有很强的方案,而且因为它们都是不那么简单的功能,你需要为它们全都准备好 debugging 的方案。
33:36
All of these capabilities that we didn't necessarily have a strong story for, and
我们帮忙构建了 application panel,这样你就可以进去,并且对于任何这些功能,无论是 debugging service workers、debugging 你的 cache,还是 debugging 其他这些东西,你都能做到。
33:41
because these are non-trivial features, you need to have a debugging story around all
因为这些是 non-trivial 的功能,你需要有一个围绕所有这些的 debugging story。
33:45
of them.
我们帮助构建了 application panel,这样你可以进去,对于这些功能中的任何一个,无论是 debugging service workers,还是 debugging 你的 cache,还是 debugging 任何这些东西,你都能做到。
33:46
We helped build out the application panel so that you can go in and for any of these features,
它们在那里,是因为你总是会有你最喜欢的,你知道,editor。
33:50
whether it's debugging service workers or it's debugging your cache or debugging any of
现在我们说的是,你知道,你的 agents 的 control planes。
33:55
these things, you're able to do that.
这些事情,你是能做到的。
33:58
Even though the toolset has expanded over time for each of these errors, I feel like
即使说针对这些错误的工具集一直在扩展,我觉得
34:02
DevTools has been able to keep up, especially as the APIs in the browser has also been evolving
DevTools 还是跟得上的,尤其是浏览器里的 API 也在不断演化
34:08
over time to meet these moments.
来应对这些时刻。
34:10
Well, this is interesting because I usually, when I look through different companies and
嗯,这很有意思,因为我通常看不同公司以及
34:14
their strengths, Microsoft is amazing at building IDEs, and so is, for example, JetBrains.
它们的优势,Microsoft 在构建 IDE 方面非常出色,JetBrains 也是。
34:20
But for Google, I never felt that Google was any good at building IDEs except for inside
但 Google 嘛,我从来不觉得 Google 擅长构建 IDE,除了在
34:30
Whenever I have to debug a web application, the past like many, many years, I use Chrome
每当我需要调试 web application,过去很多很多年,我都是用 Chrome。
34:35
DevTools because it had, I mean, the kind of debug functionality I'm used to having
DevTools 因为它有,我是说,那种我习惯的调试功能
34:40
Visual Studio have, which is breakpoints, conditional breakpoints, all sorts of so many
Visual Studio 有的那种,就是 breakpoints、conditional breakpoints,各种各样的
34:45
debug options from as you just had performance, memory, being able to simulate some of
调试选项,就像你刚才提到的 performance、memory,能够模拟一些
34:51
So it's very interesting for me to see that it's almost as if I'm not sure if this was
所以对我来说很有意思,看到它几乎就像是,我不确定这是不是
34:55
you, your team, or Google as a whole, but they realize the browser is very important.
你、你的团队,还是 Google 整体,但他们意识到浏览器非常重要。
34:59
And so they built like almost like an ID inside of it, you can edit the things in line.
所以他们就在里面建了一个几乎像 ID 一样的东西,你可以直接内联编辑。
35:07
I think as engineers or as developers, unless you work in front and you never really
我觉得作为工程师或开发者,除非你是做 front 的,否则你从来没有真正
35:11
noticed this, but when you do, it's fascinating how it came together.
注意到了一点,但当你真正看到时,会发现这一切是怎么凑到一起的,真的很奇妙。
35:16
It's really fascinating.
真的非常奇妙。
35:17
And I think that are we an ID, aren't we an ID, is that a direction we want to go in,
而且我觉得,我们到底是不是一个 ID,要不要往那个方向走,一直都是团队里的热门话题。
35:22
was always a hot topic for the team?
然后我想最后大家达成的共识是,嗯,我们想在开发者所在的地方去满足他们,因为你总会有自己最喜欢的编辑器。
35:24
And I think that where things kind of landed was, well, we want to meet developers where
现在我们说的是,你懂的,你的 agents 的 control planes。
35:28
they're at because you're always going to have your favorite, you know, editor.
它们之所以是这样,是因为你总是会有你最喜欢的,你懂的,editor。
35:32
Now we're talking about, you know, your control planes for your agents.
现在我们说的是,你懂的,你的 agents 的 control planes。
35:35
You're always going to have a different surface, right, that you want to primarily work
你总是会有一个不同的表面,对吧,你主要想在其中工作。
35:38
in.
只要DevTools能在你需要的地方提供帮助,并且有用,我认为这就是团队一直在努力做的事。
35:39
And as long as DevTools can meet you where you're at and be useful, I think that that's
我们继续经历了其他时代。
35:43
been something the team has tried to do.
YonGao在Pavel之后成为我们的下一位技术负责人,并帮助我们度过了试图搞清楚AI已经出现的时代。
35:45
We continued having other eras.
而且我们也希望能够帮助人类在这海量数据中进行推理。
35:48
YonGao became our next tech lead after, after Pavel and helped us through the era of trying
Pavel 之后,YonGao 成为了我们的下一任 tech lead,帮助我们度过了那段摸索期——AI 现在已经入局了。
35:54
to figure out, AI is now in the picture.
我们想要同时帮助人类梳理这海量的数据。
35:57
And we want to both be able to help humans reason through this massive amount of data
他们还有 logs、replay、spans、profiles、metrics 等等,因为它们全都彼此关联,能让我在全程负责这个 bug 修复的同时,快速修复并闭环。
36:03
that the browser generates for you.
就是浏览器给你生成的那些东西。
36:04
As well as make it possible for you to connect your agent up to Chrome and DevTools and be
以及让你能够把你的 agent 连接到 Chrome 和 DevTools,并且
36:09
able to have it just automate, you know, a lot of these journeys for you.
能够让它自动完成,你懂的,很多这类流程。
36:13
And so I think that for the first of those problems, I remember any time I would work
所以我觉得,对于第一个问题,我记得每次我和一个大型网站
36:19
with a big site on their performance problems, you could easily spend half a day, you know,
解决性能问题的时候,你可能很容易就花上半天,你知道,
36:24
just looking at traces before you've even written any fixes at all.
光是看 traces,甚至还没写任何修复。
36:28
And now that we have LLMs, it's very quick to like reason through massive stack traces
而既然我们现在有了 LLMs,就很快能梳理海量的 stack traces
36:34
and actually be able to get down to fixes you can make.
并且真正能着手做你能做的修复。
36:36
And that's just been really, really wonderful to see happen.
能看到这一切,真的是非常非常令人高兴的事。
36:40
Addy just described using LLMs to go from massive sactresses to working fixes, which is
Addy 刚才描述了如何用 LLMs 从海量的 stack traces 到生成可用的修复方案,这正好是聊我们本季赞助商 Sentry 的完美切入点。
36:44
the perfect one to talk about our season sponsor, Sentry.
你可能已经知道 Sentry 是什么,因为你是个开发者。
36:48
You probably already know what Sentry is because you're a developer.
如果不知道,随便问个开发者他们就会告诉你。
36:50
If not, just ask a dev and they'll tell you.
我用 Sentry 来监控 pragmatic entry 的后端,查找所有错误。
36:52
I use Sentry to monitor the back end of the pragmatic entry for any and all errors.
当然,Sentry 不只是处理错误。
36:56
Of course, Sentry doesn't only do errors.
他们还有 logs、replay、spans、profiles、metrics 等等,因为这些功能都是连通的。
36:58
They also have logs, replay, spans, profiles, metrics and more because they're all connected
调试一下子变得更快、更容易了。
37:03
by the same trace.
通过相同的 trace。
37:04
One new capability Sentry has built that I'm really liking is the ability to fix errors.
Sentry 新增了一个我非常喜欢的能力:修复错误。
37:08
Let me show you.
让我给你演示一下。
37:09
Here's the list of errors on my admin backend.
这是我 admin backend 上的错误列表。
37:12
There's a recent error on all that I want to check out.
有个最近的错误出现在 all 上,我想看一下。
37:14
Let's have Seer run an autofix for us.
让 Seer 帮我们跑一个 autofix 吧。
37:17
Seer is Sentry's AI debugging tool.
Seer 是 Sentry 的 AI 调试工具。
37:19
First, it generates a root cause analysis.
首先,它会生成一个 root cause analysis。
37:22
It's finding some problem with HTTP versus HTTPS URLs.
它发现了 HTTP 和 HTTPS URL 之间的一个问题。
37:27
Now that we know what's going wrong, Seer can create a plan on how to go about fixing it.
现在我们知道了问题所在,Seer 就可以制定一个修复计划。
37:32
I could go and edit this plan but I'm happy with it so let's create an actual code fix.
我可以去编辑这个计划,但我对它很满意,所以我们来创建一个真正的 code fix。
37:37
Here's the code fix that Seer generated.
这就是 Seer 生成的 code fix。
37:39
Assuming it looks good, and in my case it does, let's draft a pull request.
如果它看起来没问题,而在我这也没问题,那我们就来起草一个 pull request。
37:43
And boom, the pull request is created, ready to merge.
然后 boom,pull request 就创建好了,可以直接合并。
37:47
What I love about autofix is how Sentry went from showing a list of errors inside my application
关于 autofix,我喜欢的是 Sentry 从显示我应用内部的一堆错误开始。
37:52
to offering me a fast way to fix it and close the loop while I say in charge of this
去 Sentry.io 看看 Sentry,来削减实际问题,并开始检测错误、诊断。
37:56
bug fix the whole time.
一直在修 bug。
37:58
Debugging just got a whole lot faster and a whole lot easier.
Debugging 变得快多了,也容易多了。
38:01
Check out Sentry at Sentry.io to slash pragmatic and start detecting errors, diagnosing
去 Sentry.io 看看 Sentry,削减务实,然后开始检测错误、诊断问题。
38:05
the root causes, and fixing issues and regressions today.
根本原因,以及如今修复 issues 和 regressions。
38:09
Addie mentioned things that change when we work with alums.
Addie 提到了当我们和 alums 合作时会发生的变化。
38:11
One thing is for sure.
有一件事是肯定的。
38:12
If your work with agents, your job is no longer writing code, it's specifying and testing
如果你和 agents 打交道,你的工作不再是写代码,而是做 spec 和测试。
38:18
And this leads us to our presenting sponsor, Antisys.
这就引出了我们的冠名赞助商,Antisys。
38:21
Antisys is the most effective method of verifying agent to code today.
Antisys 是当今验证 agent to code 最有效的方法。
38:24
Let me explain how it works.
我来解释一下它的工作原理。
38:26
Antisys runs your whole system in a hostile simulation.
Antisys 会在一个 hostile simulation 中运行你的整个系统。
38:28
By doing so, it finds every bug before users do.
这样一来,它就能赶在用户之前发现每一个 bug。
38:32
And because the simulation is fully deterministic, Antisys doesn't only find bugs, it gives
而且因为 simulation 是完全 deterministic 的,Antisys 不仅能发现 bug,还能为你完美复现每一个 issue。
38:36
you a perfect reproduction of every issue.
你得到每个 issue 的完美复现。
38:38
To create such a tool, the Antisys team needed to embed new kinds of debugging tools as
为了创造这样的工具,Antisys 团队还需要嵌入新型的 debugging tools。
38:42
well.
比如说,这就是所谓的 bug probability graph。
38:43
For example, here's what's called a bug probability graph.
x-axis 是 virtual time,y-axis 是 probability。
38:46
The x-axis is virtual time, and the y-axis is probability.
当 Antisys 运行 hostile simulations 时,它会绘制出 bug 概率增加的时间帧,这大大帮助我们找到 bug 的 root cause。
38:49
As Antisys runs the hostile simulations, it plots time frames when the bug probably
Antisys 也是一个 log visualizer。
38:54
increases, which greatly helps us find the root cause of bugs.
向下的垂直 lines 表示从同一状态分支出来的 events,以及它们的
38:58
Antisys is also as a log visualizer.
Antisys 也是一个 log visualizer。
39:00
Vertical lines going down represent events branching off from the same state, and their
垂直向下的线表示从同一状态分支出来的事件,以及它们的
39:04
purple dots are where the bug happens.
紫色的点就是 bug 发生的地方。
39:06
Antisys is as good as it gets being able to ship agent printing code.
Antisys 是能交付 agent printing code 的最佳选择。
39:09
It's what teams at Jane Street fly that IO and the etsyd community use to ship with full
这就是 Jane Street 的团队、fly that IO 和 etsyd 社区用来满怀信心地交付的东西。
39:13
confidence.
前往 Antisys 的 contact-primatic 了解更多。
39:14
Head to Antisys is a contact-primatic to learn more.
那么,让我们回到 Addy,聊聊 core web vitals。
39:17
And with this, let's get back to Addy and talk about core web vitals.
而你和团队真正推动行业一起前进的一个领域,就是 core web vitals。
39:21
And one area that you really pushed, you and the team pushed the industry together
而有一个你真正推动的领域,你和团队一起推动了整个行业。
39:26
is core web vitals.
就是 core web vitals。
39:27
These are a standardized set of metrics to just figure out the real world experience
这些是一套标准化的指标,用来衡量网页的真实用户体验。
39:32
to web pages.
而且其中一些,你知道,在这之前,作为开发者,你会去量,比如,它渲染多快,或者下载多快。
39:33
And some of the, you know, before this, again, you would, as a developer, you would measure
那都是很基础的东西,但后来引入了像 LCP(Largest Contentful Paint)、CLS(Cumulative Layout Shift)、FID(First Input Delay)、INP(Interaction to Next Paint)这些指标。就像你也在场一样。
39:38
like, right, how quick does it render, or how quick does it download?
比如说,对吧,它 render 有多快,或者 download 有多快?
39:42
It was a very simple stuff, but you introduced things like LCP, a large, just contentful
这本来是很简单的东西,但你引入了像 LCP、Largest Contentful Paint、CLS、cumulative layout shift、FIE、first input delay、还有 IMP interaction to next paint 这些。
39:46
paint, CLS, cumulative layout shift, FIE, first input delay, and then IMP interaction
就像你在场一样。
39:53
to next paint.
突然所有东西都被往下推,对吧,就因为广告终于加载出来了。
39:54
Like you were there.
所以 cumulative layout shift 基本上就是这么来的。
39:55
So it seems come up with these things there.
所以看起来就是在那里搞出了这些东西。
39:58
If you're not a web engineer, it takes a little time to understand them, but it does
如果你不是 web 工程师,要理解它们得花点时间,但确实
40:04
actually explain like how users feel.
确实解释了用户的感受。
40:07
Like, I feel you somehow inside of Google manage to connect the kind of feel to a number.
比如,我觉得你们在 Google 内部不知怎么地就能把这种感受对应到一个数字。
40:13
I think that the Chrome team has always had an appreciation for user experience research.
我觉得 Chrome 团队一直很看重 user experience research。
40:21
And again, every time there was a new moment for the web, would re-consult that research
而且,每次 web 迎来新时刻,他们都会重新参考这些研究
40:28
to understand, well, what are users' expectations and how can we help meet them?
去理解,嗯,用户的期望是什么,我们怎么帮忙满足它们?
40:33
The way that we used to reason about performance was very much like, hey, is a page loading,
我们过去思考 performance 的方式很像,嘿,page 是不是在加载,
40:40
and what does that even mean?
那到底是什么意思?
40:41
For many people, is the page ready?
对很多人来说,页面就绪了吗?
40:44
But what does ready mean?
但“就绪”是什么意思?
40:45
Does that mean that I see it?
这意味着我能看到它吗?
40:47
Does it mean that I can click around it and anything actually happens?
还是说我可以点击页面上的东西,并且真的有反应?
40:52
And so I think for a very long time, we had this almost nebulous way of thinking about
所以我觉得,很长一段时间里,我们几乎是以一种模糊的方式
40:58
page load times.
来思考 page load times。
41:00
And the team felt like it was finally time to come up with a more nuanced perspective
团队觉得,终于到了要提出一个更细致观点的时候了。
41:05
around how we reason about performance.
关于我们如何考量 performance。
41:08
And so if you break it down, there are a number of key moments across the user's journey
所以如果你拆开来看,在用户的 user journey 中有几个关键时刻。
41:14
that they care about.
他们很在意的。
41:16
Is anything loading?
有东西在 loading 吗?
41:17
Do you see a header, do you see a spinner, or do you see anything at all?
你看到 header 吗?看到 spinner 吗?还是什么都看不到?
41:21
Is there something useful there for you?
那里有没有对你有用的东西?
41:24
So maybe that's a header image, maybe it's a hero image, maybe it is a hero video, maybe
所以可能那是 header image,可能是 hero image,可能是 hero video,也许……
41:29
it's like the core piece of content on the page.
它就像是页面上最核心的那块内容。
41:36
And all of these different moments can correlate to these different metrics.
而所有这些不同的时间点都可以和这些不同的指标相关联。
41:39
So for things like your hero image, you can think about that as your largest contentful
所以对于像你的hero image这样的东西,你可以把它看作是
41:44
paint.
你的Largest Contentful Paint。
41:45
And that's not going to generalize across every page.
而这一点并不是在所有页面上都适用。
41:46
In some cases, the image may not be the most important thing.
在某些情况下,图片可能不是最重要的。
41:50
It might be, you know, the article text.
可能,你知道,是文章的文字内容。
41:52
There may be cases where, you know, you want to be able to interact fairly quickly
有时候,你知道,你可能希望能相对快速地
41:59
I can remember many times over the years when I might be shopping, and whether it's
我记得这些年来有很多次,当我在购物时,无论是在
42:04
on my phone or on my desktop, I will click like the add to cart button and just crickets.
手机上还是电脑上,我会点击“加入购物车”按钮,然后就没动静了。
42:10
Nothing will happen.
什么都不会发生。
42:11
Because JavaScript did not load or the event handler or the, or maybe the event handler
因为 JavaScript 没加载,或者 event handler,或者,也许 event handler
42:15
was not attached because not all elements finished loaded.
没有 attach 上,因为不是所有 elements 都加载完成。
42:19
We know as engineers what's happening, but as a user, it's like, yeah, as a user,
作为工程师,我们知道发生了什么,但作为用户,就像,对,作为用户,
42:23
like, wait, what's happening?
就像,等等,发生什么了?
42:25
And then stuff can happen where you just tap, tap, tap, tap.
然后可能会有那样的情况,你就不停地 tap, tap, tap, tap。
42:28
The event handler gets attached and now you're adding it like twice or three times, but
event handler 被 attach 上了,然后你现在相当于添加了它两三次,但
42:35
Humans are, humans are shockingly simple.
人类真是,人类真是出奇地简单。
42:37
You know, if you think about the experience you have with somebody that's just trying to
你知道,如果你想想那种体验,就是有人正试图
42:40
cross the street, if, you know, if the light doesn't turn, you know, it doesn't say
过马路,如果,你知道,如果灯不变,你知道,它不会够快地说
42:45
they can walk fast enough, they'll just keep hitting that button.
他们可以走了,他们就会一直按那个按钮。
42:48
That's the same experience they have on the internet.
他们在 internet 上的体验也是这样。
42:50
I think that there were other aspects of user experience that I think we acknowledged
我觉得 user experience 还有其他方面,我觉得我们承认了
42:55
were actually kind of problematic.
实际上有点问题。
42:58
One big one was over the years, obviously sites tried to monetize as heavily as they
其中一个大问题是,多年以来,显然网站都试图尽可能多地去
43:03
And so you would see not just banner at, but you'd see models, you'd see all of these things
所以你会看到不只是 banner,还会有 models,所有这些都直接甩到你面前。
43:07
thrown out in front of your face.
而且你知道,就算先不说,呃,也许企业需要变现是有一定道理的,但这些事不应该造成很糟糕的体验。
43:10
And you know, even if you set aside, you know, maybe there's some validity around a business
如果我在一个满是广告的页面上,我不应该开始读一篇文章,然后突然所有东西都被往下推,对吧,就因为广告终于加载出来了。
43:16
needs to monetize, those things shouldn't cause a really bad experience.
这就是 cumulative layout shift 这东西的来源。
43:21
If I'm on a page that has a bunch of ads, I shouldn't start reading an article and then
这个想法就是,嘿,我们应该——你得让页面保持稳定。
43:25
suddenly everything gets pushed down, right, just because the ad is finally loaded.
突然所有内容都被推下去了,对吧,就因为广告终于加载完了。
43:30
And so that's where cumulative layout shift kind of comes from.
所以这就是 cumulative layout shift 的由来。
43:33
It's this idea that, hey, we should, you're trying to keep that page stable.
这个想法就是,嘿,我们得尽量让页面保持稳定。
43:37
So the user has a good time.
所以用户会有良好的体验。
43:39
There was a lot of iteration around how do we define these metrics in a way that captures
我们做了很多 iteration,讨论如何定义这些 metrics,以便捕捉一些非常微妙且不同的 use cases,因为互联网并不是那么同质化。
43:45
a few of these different use cases that are very nuanced because the internet is not all
对于 page 的价值以及什么重要,人们有很多不同的思考方式。
43:49
that homogenous.
于是团队做了很多实验,尝试了许多不同的思路来思考这些 metrics,并且与 standards community 和 developers 合作得非常紧密。
43:50
There are lots of different ways that a person can think about the value of a page and what's
关于一个页面的价值以及什么才是重要的,人们有很多不同的理解。
43:54
important.
所以团队做了大量实验,尝试了很多不同的思路来看待这些 metrics,并且和 standards community 以及开发者们紧密合作。
43:55
And so the team did a lot of experiments, experimented with lots of different ways of thinking about
去关注那些对用户和最终结果真正重要的东西。
44:00
these metrics and worked very heavily with both the standards community and developers
还有很多公司,不管出于什么原因,比如时间不够,或者他们……
44:05
to validate, like, hey, do you actually believe that these things line up with how you
去验证一下,比如说,嘿,你真的相信这些东西跟你对页面价值的看法是一致的吗?
44:09
would say, you think about the value of your pages.
我一直觉得很有意思的是,有些公司是从零开始思考的,就像你面对一张白屏,什么才是对用户来说,以及最终来说,真正重要的。
44:13
One of the things that I always find fascinating is there are some companies where they have
然后还有很多公司,不管什么原因,时间不够或者只是没想过,他们都没有经历过这个过程。
44:19
thought from the ground up, like if you start from a blank white screen, what is actually
所以 core vitals 终于让他们能够就这个问题展开更有细微差别的讨论——
44:23
important to the user and to end.
对用户和最终端很重要。
44:26
And then there are many companies where they haven't, for whatever reason, time or they
然后有很多公司,出于某种原因,时间不够或者他们
44:29
just then think about it, they haven't gone through that journey.
就在那时想想看,他们还没有经历过那段旅程。
44:32
And so core vitals allowed them to finally get a more nuanced conversation going about
所以 core vitals 让他们终于能够进行更细致的对话,关于
44:38
like, hey, what's actually important to us?
比如说,嘿,对我们来说真正重要的是什么?
44:40
How can we make sure that whatever key action the user has to take?
我们怎么确保用户需要采取的任何关键操作,他们都能很快完成,并且保证不会遇到糟糕的体验?
44:43
They can do it pretty quickly and be guaranteed that they're not going to have a bad time.
你在 Google 内部待了 14 年。
44:47
You spent 14 years inside of Google.
其中大部分时间是在 Chrome 组织内部。
44:50
Most of it was inside a Chrome organization.
他们被调到了 Cloud AI,也和 Genevieve 一起工作。
44:52
They are moved over to Cloud AI and work with Genevieve as well.
我们之前研究过 Google 的工程文化。
44:57
We've done research before on Google's engineering culture.
但你能总结一下在那里工作的感受吗?从哪些方面来说,尤其是对比……
45:00
But can you summarize what it felt working there in terms of what, and especially comparing
但你能总结一下在那里工作的感受吗?尤其是和
45:06
to the startups that you worked before, you also talk with companies now outside of Google,
对于你之前工作过的 startups,你现在也和 Google 以外的公司交流,
45:11
what were things that were uniquely Google?
有哪些事情是 Google 独有的?
45:14
As part of my Google journey, there's a lot of work that I did on the developer side.
在 Google 的这段经历中,我做了很多 developer 方面的工作。
45:18
There's also a lot of work that I did on the consumer side.
在 consumer 方面我也做了很多工作。
45:20
So working on Chrome performance, for example.
比如,做 Chrome performance 相关的工作。
45:24
When you're working on something that goes out to billions and billions of users, which
当你做的东西会触达几十亿用户——
45:30
is the case for many Google products now, the way that you think about engineering culture,
这在现在的很多 Google 产品中都是如此,你思考 engineering culture、
45:37
velocity, experimentation is very, very different, I think, than sometimes how a startup might
velocity、experimentation 的方式,我认为,和 startups 有时候的方式非常非常不同。
45:43
approach things, especially if you're trying to move very fast.
处理事情,尤其是当你想推进得很快的时候。
45:46
When we try to make a change inside a browser that has a global audience with a lot of people,
当我们试图在一个拥有全球海量用户的浏览器里做出改变,
45:52
there's a lot of experimentation that has to happen, and a lot of experimentation that
就需要进行大量实验,而且有很多实验
45:57
also requires just like testing out, well, hey, does this problem not have one solution,
也需要去尝试,比如说,嘿,这个问题是不是没有唯一的方案,
46:03
but actually a couple of different ones depending on what market you're in, and how do you evaluate
而是实际上有多个不同的方案,取决于你所在的市场,以及你如何评估
46:09
success when maybe we have 20 other experiments or a hundred other experiments happening at
成功?尤其是当我们可能同时有20个甚至100个其他实验在
46:17
The A.B. testing culture, I would say, was a very big thing, and could us the Chrome team
A/B testing 文化,我觉得曾经是一件非常大的事情,而且对我们 Chrome 团队来说也意义重大。
46:23
for having what is now, I would say, a fairly stable and rigorous process for being able to try
因为拥有一个,我会说,现在相当稳定且严谨的流程,能够去尝试
46:28
those things out in the real world? I also felt that even though sometimes from the outside,
在现实世界中测试这些东西?我同时也觉得,即使有时候从外部来看,
46:33
it didn't necessarily always come across, zoomed out at the Google level, I did feel like there
这些并不总能传达出来,把视角拉远到Google层面,我确实觉得
46:39
were many people that cared a lot about developer goodwill and developer sentiment, but when
有很多人非常在乎开发者的善意和情绪,但当你
46:46
you have a very large company, obviously you're not, it's going to be very challenging to have
运营一家非常大的公司,显然你没法,让每个团队都互相沟通
46:52
every group talking to every other group, but we always made best efforts to try getting to
是非常困难的,但我们总是尽最大努力去达到
46:59
a place where we were doing the right things for developers as best we could, but I was glad to see
一个尽可能为开发者做正确事情的状态,但我很高兴看到
47:04
that sentiment and that level of care for the community and for our users. I also appreciated that
那种善意和对社区及用户的那份关怀。我也很感激
47:10
Google was open to change, so I would say if I had to summarize my one big change contribution
Google 对改变是很开放的,所以如果让我总结我对 Chrome 文化带来的那一个最大的改变,那就是去贴近 developers 的实际处境,接受人们会用任何他们想用的 tech。你不能老是告诉别人该用什么。他们就是要用自己想用的东西,你的工作是帮他们在你的 platform 上成功,也帮他们的用户有好的体验。我觉得这些年来我们做了很多决定,让这件事变得更加可行。我们和不同的 framework 团队合作得很好,我们会听他们关于 API 的反馈,也就是他们希望在 platform 上看到的 API,这变成了更多是和社区的合作,而不是自己猜。
47:20
to Chrome's culture, it would be meeting the developers where they're at and that embrace of
Chrome 的文化相比,那就是贴近 developers 的现状,以及那种接纳
47:26
people are going to use whatever tech they want to use. You can't tell people what to use very often.
人们会用他们想用的任何 tech。你往往不能告诉人们该用什么。
47:32
They're going to use whatever they want and your job is to help them be successful on your
他们会用任何想要的东西,你的工作就是帮助他们在你的
47:37
platform and to help their users have a great time. I think that there were a lot of decisions we
platform 上成功,并帮助他们的用户获得良好体验。我认为有很多我们
47:41
made over the years that helped make that a little bit more possible and we had good collaborations
在过去这些年里做出的决定,让这一点变得更容易实现,而且我们有良好的合作
47:49
with different framework teams, we took their feedback about APIs, they would like to see in the
与不同的 framework teams 合作,我们采纳了他们关于 APIs 的反馈,他们希望在
47:53
platform, it became a lot more of a collaboration with the community rather than kind of guessing
platform,它变得更加是一种与社区的合作,而不是靠猜。
48:00
what we thought the community needed to be successful, and so I was very happy to see that happen.
我们当时认为社区需要什么才能成功,所以我很高兴看到它真的发生了。
48:06
I would also say that Google was very good at allowing different parts of the company to
我还想说,Google 非常擅长让公司不同部门之间
48:14
share their learnings towards some point of convergence. For example, the software engineering
分享各自的经验,朝着某个共识点靠拢。比如,Google 的 software engineering
48:19
of Google, one of my favorite books, I was very happy to see different flavors of that over the
这本书是我最喜欢的书之一,我很高兴看到它
48:26
years internally at the company because you work at such a big company, you're always curious,
在公司内部的这些年里呈现出不同的风格,因为你在这么大的公司工作,你总是好奇,
48:32
what is best practice? Is there a best practice?
什么是 best practice?有没有一个 best practice?
48:36
There are internal writings of here is how this org is doing some parts of software engineering,
公司内部有一些文档,写着这个 org 是如何做 software engineering 的某些部分的,
48:41
building or experimentation or whatever. One of my favorite things to do was curious, my
比如 building 或 experimentation 之类的。我以前最喜欢做的事情就是好奇,我
48:47
team might have a perspective on testing or user experience, but how does the YouTube team
团队可能对测试或用户体验有自己的看法,但 YouTube 团队
48:54
think about it? Are there parallels? Are there things that we could learn from each other?
是怎么考虑的呢?有没有相似之处?有没有什么可以互相学习的?
48:59
There certainly were. Even looking at how other people think about the world can sometimes lead
确实有。甚至只是看看别人怎么看待世界,有时也能带来合作的机会。
49:03
to collaboration opportunities, we actually worked with the YouTube team to improve their
我们确实和 YouTube 团队合作过,改进他们的
49:09
core of vitals at one point. They were excited to see that they were just more refined metrics
core of vitals。他们当时很兴奋地发现,这些只是更精细的指标,
49:15
in ways of thinking about experience. I mean, I guess it's just more to point out that this
是思考体验的方式。我的意思是,这更多是要指出,这种
49:19
collaborative nature is not a given in all large companies. There are some companies
合作精神并不是所有大公司都天然具备的。有些公司——
49:24
don't want to name names right now but where organizations don't feel that they're incentivized
现在不想点名——但那些组织并不觉得自己有动力去这么做。
49:30
to work with each other because they might have different goals and it's not that they hate each
要彼此合作,因为他们可能有不同的目标,并不是他们讨厌彼此
49:33
other. They're just focused on themselves and it can feel a lot more political in that sense.
他们只是专注于自己,所以从那个意义上说,会感觉更政治化。
49:38
We talk a lot about high agency these days and I think that sometimes when you see those
我们最近经常谈论高主动性,我觉得有时候当你看到那些
49:46
collaborations happen, it's because there are people with enough agency on both sides that they
合作发生,是因为双方都有足够高主动性的人,他们
49:51
want to make it happen and they see the mutual value in collaborating because exploring
想要促成合作,并且看到了协作中的共同价值,因为探索
49:58
how to improve the user experience for something like YouTube, it was extremely nuanced, extremely
如何改善像 YouTube 这样的用户体验,极其微妙、极其
50:03
educational, very nuanced but also took a very long time and we just felt like the value was there.
有教育意义,非常细腻,但也花了很长时间,我们就是觉得有价值。
50:09
I was glad that we could happen. Can we talk about your specific career path inside of Google?
我很高兴我们能做到。我们能聊聊你在 Google 内部具体的职业发展路径吗?
50:14
So you spend 14 years there which is a very long tenure and I'm starting to develop a bias for
所以你在那里待了14年,那是非常长的任期,我开始对
50:20
it. It's nice to have long tenure somewhere. At some point in your career, there's a lot of
它产生一种偏爱。能在某个地方长期任职是很好的。在你职业生涯的某个阶段,有很多
50:24
values you were just talking with Simon, a founder of TurboPuffer, about this earlier.
价值,你刚才和Simon(TurboPuffer的创始人)聊过这个。
50:30
What level did you get in? How was your career progression? At what point did you become a manager?
你入职时是什么level?你的职业晋升情况如何?你是从什么时候开始成为经理的?
50:36
And how did you think about things like career, compensation, growing?
你又是如何看待职业、薪酬和成长这些事的?
50:42
Yeah, so I started my Google career back when I was living in the UK.
是的,我的Google职业生涯始于我住在英国的时候。
50:51
So I joined Google UK. Yeah, I joined Google UK originally and I believe I joined at a level
所以我加入了Google UK。是的,我最初加入Google UK,我记得我加入时的level是
50:57
four. That was one mid-level software engineer. Back then and I was a developer relations engineer.
因为。那是一位中级软件工程师。那时候,我还是一名开发者关系工程师。
51:05
So a person that's in DevRel but you're a little bit more focused on the builder side of things.
所以你是做 DevRel 的,但更偏向 builder 这一侧。
51:10
Over the years, I got promoted in that role to level five and level six. I became a manager
这些年来,我在这个角色里从 level five 一路升到 level six,然后成了 DevRel 的 manager。
51:18
within DevRel. When you were at level six at the staff level.
你当时在 level six,也就是 staff level 对吧?
51:21
Yeah, and then I was leading part of the DevRel team. At some point, maybe five or six years in,
对,后来我带着 DevRel 团队的一部分。大概五六年的时候,我开始觉得,我虽然很喜欢做 developer relations,但我骨子里其实是个 builder。我喜欢 engineering,也喜欢 product,所有这些我都喜欢。不过我也理解。
51:32
I started to feel like I loved doing develop relations but I am very much a builder at
我特别好奇在另一头会是什么感觉,因为进 Google 之前我一直是做 engineering 的。在那之前我没正式做过 DevRel 的职位,而且我当时……
51:40
heart. I love engineering and I love product. I love all of it. But I get it.
但是,我热爱工程,也热爱产品。我全都热爱。但我明白。
51:44
I was very curious what it would be like to be on the other side of that because I'd been an
我非常好奇在另一边的经历会是什么样,因为我曾经是一个
51:51
engineering prior to Google. I hadn't been an official DevRel position prior to that and I was
engineering,在加入 Google 之前。在那之前我没有担任过正式的 DevRel 职位,而且我
51:57
interested in going back down that direction. And so over the years, I transitioned back into
我對回到那個方向很感興趣。
52:03
software engineering and specifically like an engineering manager role. That gave me the
所以這些年來,我轉回了 software engineering,具體來說是 engineering manager 的角色。
52:09
flexibility to both do engineering work but also manage teams. But do you just have a smaller team
這給了我靈活性,讓我能同時做 engineering 的工作,也能管理團隊。
52:16
at that point? At the start had a smaller team and then it grew out. I would say the average at
但你那個時候團隊是不是比較小?
52:25
one point was probably in the 45s to 50s. I think that depending on where you are in your
一開始團隊比較小,後來就擴大了。
52:32
leadership or manager journey, success means different things. Not success from a career perspective
我會說,有一段時間平均大概在 45 到 50 人之間。
52:38
but just success for the organization because ultimately what you want to get to is a place where
我認為,取決於你在 leadership 或 manager 旅程中的哪個階段,成功代表的意義會不同。
52:45
ideally the team is almost self-sufficient. And I write about this a little bit in my book
不是從職涯角度看的成功,而是對組織而言的成功。
52:50
leading effective engineering teams but you want to get to a point where your machine, your org is
领导高效的 engineering teams,但你会希望达到一个状态:你的 machine、你的 org 足够自给自足,你只需要偶尔敲打一下,确保一切正常运转。如果不对,你可以纠偏。但这样你就腾出了精力,去专注组织接下来需要正面攻克的那批重要问题。这让我,比如说,真的能深入思考——嗯,model quality 开始变好了。这对 developers 意味着什么?对 developer tooling 意味着什么?对我们怎么看待 benchmarks、和 third-party vendors 的合作,还有所有其他属于 developer success 的事情,又意味着什么?所以我很庆幸自己有过那段时光,然后我可以把这些……
52:57
self-sufficient enough that you just need to occasionally tap the blimp, make sure that things
足够自主,只需要偶尔碰一下 blimp,确保所有事情
53:03
are working. You can course correct if it's not. But that frees you up to then focus on the next
都在正常运转。如果不行,你可以纠正方向。但那让你解放出来,能专注于下一个
53:08
important sets of problems that the org needs to tackle heads on. And that allowed me, for example,
重要的问题集,是 org 需要正面应对的。而那让我,比如说,
53:15
to really get deep into thinking about, well, model quality is starting to get better. What does
要真正深入思考,嗯,模型质量开始变得更好。这意味着什么呢
53:22
that mean for developers? What does that mean for developer tooling? What does it mean for how we think
这对开发者意味着什么?这对 developer tooling 意味着什么?这对我们如何看待
53:26
about benchmarks and collaborations with third party vendors and all of these other things that
关于 benchmarks、与第三方供应商的合作,以及所有那些
53:32
are part of developer success? And so I was glad that I had that time and then I could take those
构成开发者成功的一部分的事情?所以我当时很高兴能有那段时间,然后我可以把这些
53:39
learnings back to the team and work with them to evolve us into this moment where we could help
把这些学到的经验带回团队,和他们一起努力,让我们发展到这样一个阶段:能够帮助开发者最大化 DevTools 的用处,以及 DevTools 和 Chrome 对 agents 的用处。
53:44
developers maximize how useful DevTools can be and DevTools and Chrome can be for agents.
我理解得对吗?你当时是一名 individual contributor?
53:50
Do I understand correctly that you were an individual contributor? You were going up the career
你在往上爬职业阶梯,这在像 Google 这样的大公司里,如果有合适的经理和合适的组织结构,算是意料之中的事。
53:56
ladder, which is somewhat expected at a large company like Google with the right managers and
然后当你成为经理,你转换了角色,但你决定还是多做一点构建方面的工作。
54:02
the right structure. And then when you became a manager and you switched, but you decided to build
你后来专注于把一个不断成长的团队扩大到 40 人。
54:06
a bit more. You then focused on you sell a growing and increasing large team in 40 people. That's
那不是一个小团队,但你试图帮助团队解决各种问题,让他们基本上自己运转,这样你就有时间真正做一些 individual contributor 的工作。
54:11
not a small team, but you try to help the team fix any issues, help the mostly run by themselves
不是一个小团队,但你可以尽量帮助团队修复任何问题,让他们基本上自己运转
54:18
so that you would have some time to actually do some individual contributor like work.
这样你就有时间真正做一些 individual contributor 式的工作。
54:23
So you can keep your hands dirty, but also help the team. Do I understand that you just
所以你可以亲力亲为,同时也能帮助团队。我理解你是不是特意优先保证了那些时间来搞开发?因为当然了,作为经理,时间很容易被这些事全占掉。对,绝对。而且我不想小看达到那个状态要做的那些工作,因为很多管理工作就是在努力往那个方向走。你需要搭建起团队结构。比如有些情况下,你会有管理者管理着其他团队的管理者。而且我们有一个全球化的团队。当然,那就要处理时区、协调成本、沟通等等这些事。所以我觉得我们很幸运,能走到一个团队基本上非常高效的状态,而且我们也...
54:28
prioritized to have that time to build? Because of course, when your manager, this could
优先把时间留出来去 build?因为当然,当你是 manager 时,这可能会
54:33
easy to suck up all of your time. Yeah, absolutely. And I don't want to make small of all the work it
轻易吞掉你所有的时间。是的,完全如此。而且我不想低估所有那些
54:39
takes to get to that point because a lot of management is trying to work towards that point. You need to
为了达到那个状态所需的工作,因为很多管理工作的目标正是朝那个方向努力。你需要
54:45
build out a team structure. Like in some cases, you have managers managing managers right of other
搭建团队结构。比如在某些情况下,你会有管理者管理其他
54:53
teams. And we had a global team of people. Of course, that comes with navigating time zones and
团队。而且我们有一个全球性的团队。当然,这就得应对时区差异和协调成本,还有
55:00
coordination overhead and communication and all those things. And so I think that we were fortunate
沟通等等所有这些。所以我觉得我们很幸运
55:06
that we were able to get to a place where the team was largely pretty effective and we were
能够达到一个团队基本上相当高效的状态,而且我们正在
55:10
able to create more of the space. And then I take those learnings and I try to help some of my
能够创造更多的空间。然后我把这些学到的东西拿去帮助我其他的经理们,比如,你现在怎么创造空间,让你也能帮我们一起走上为AI时代做现代化的旅程?所以我从L6到L7再到director,在我的……其实director是L8或者L7。Director是L8。
55:14
other managers, like, how do you create the space now for you so that you can also help us on this
哦哇。那这确实挺厉害的,恭喜。每个级别都变得越来越难,据我所知,但你真的那么在意级别本身吗,还是更在意工作,然后这些自然就来了?我觉得很长一段时间,确实是在意工作,但另外,当你到了某个阶段,觉得组织已经处于一个健康的状态,你真的开始……
55:18
journey of modernizing for the AI moment? So I went from L6 to L7 to director in my...
为AI时刻进行现代化转型的旅程?所以我从L6到L7,再到总监在我的...
55:28
It's actually L8 or L7 as a director. Director's L8.
实际上总监是L8还是L7?总监是L8。
55:31
Oh wow. So that's kind of, well, congrats it. Every level becomes somewhat harder and harder
哇。所以那算是,嗯,恭喜你。每上一层都变得越来越难
55:39
as I understand, but did you care too much about the actual levels or was it more about the work
据我所知,但你真的那么在意实际的级别吗,还是更在意工作本身?
55:44
and things just followed? I think for a very long time, it was about the work, but also, like,
然后事情就这样顺其自然了?我觉得很长一段时间里,重点都在工作上,但也,怎么说呢,
55:49
as you get to a point where you feel like the organization is in a healthy place, you do start
当你到了某个阶段,觉得组织已经运作得很健康的时候,你就确实会开始
55:56
thinking about, okay, well, next level of my career, taking on different kinds of problems.
考虑,好吧,我职业生涯的下一阶段,去应对不同类型的问题。
56:00
Is there one more like a next challenge? Yeah, the next challenge. And so I was very much wanting to go
还有下一个挑战吗?是的,下一个挑战。所以我当时非常想要去争取
56:05
for a director kind of promotion for quite a while and I was working towards that. And I think
总监级别的晋升,我想了有一阵子了,也一直在为此努力。而且我觉得
56:11
that for anyone that's gone through career changes or promotions, you know that you kind of have
对于经历过职业变动或晋升的人来说,你知道你多少有点必须
56:17
to be doing the job for a while before you get it. And what kind of got you where you are when it's
在真正得到那个职位之前,先干一阵子那个工作。而且,让你走到今天这个位置的那些东西,
56:23
what's going to get you to that next level, right, it's a different set of challenges. And so
到了要帮你迈向下一级别的时候,对吧,就完全是另一套挑战了。所以
56:28
I was excited to get to start experiencing those kinds of challenges and working more across
我很兴奋能开始体验这些挑战,并在更广泛的范围内工作
56:33
Google, you know, working more with our VP and SVP layers to try figuring out, well, yeah, what
Google,你知道,更多地与我们的VP和SVP层级合作,试图弄清楚,嗯,是的,是什么
56:39
what is the next couple of years or what is the next year look like for Android, for Chrome,
未来几年或者明年,Android、Chrome
56:45
for different platform teams as we're going through these kind of revolutionary moments. We're
以及不同的平台团队会是什么样子?因为我们正在经历这种革命性的时刻。我们
56:49
trying to rethink everything. I did want to ask because we have a lot of pretty experienced viewers
试图重新思考一切。我确实想问一下,因为我们有很多经验相当丰富的观众
56:53
and listeners. What is the difference in becoming a director at Google specifically because
和听众。在 Google 成为总监具体有什么不同?因为
57:00
director, it does the first executive level, I mean, different companies called different, but
总监确实是第一个高管层级,我的意思是,不同公司叫法不一样,但
57:05
like it's the first one which it might be included in terms of responsibility, wait on your show
它是第一个在职责上可能被算进去的层级,等等,在你的节目上
57:12
because it does feel like that feels in the management chain. That is the biggest jump at a large
因为在管理链上确实感觉如此。这是最大的跳跃,在一个
57:16
company like this. I think that a good way to think about it is when I was coming up through
像这样的大公司里。我觉得一个好的思考方式是,当我当年一路升上来的时候
57:23
the ranks, your director was very often your first point of contact at the executive level.
在组织层级中,你的总监往往是你接触高管层的第一个对接人。
57:31
They would be the ones who would be keeping you on the hook for making sure that any of your
他们会督促你,确保你的年度目标、季度目标这些都按计划推进。
57:37
annual goals, quarterly goals, any of that was on track. They'd be the ones that you'd be looking
你需要找他们来支持大型项目、新项目之类的。
57:42
to sponsor any large programs, any new projects, things like that. If things were going like way
如果事情严重偏离轨道,而你被问责,总监们就会定期开评审会,确保整艘船还在正确的航向上。
57:47
off track and you were being held accountable, the directors were off in the ones that would be
在那个层级,人的责任感会更强。
57:52
having review forums regularly to make sure that that whole ship is actually still steering
你必须注重细节。
57:57
in the right direction. There was an increased feeling of accountability at that level.
我觉得你在那个角色上不会成功。
58:04
You have to pay attention to the details. I think that you can't be successful in that role
你必须注意细节。我认为在那种角色中你无法成功
58:09
if you're just letting go. When I say you want ideally to have a self running org,
如果你只是放手。当我说你理想情况下想要一个自我运行的组织,
58:15
it's not about letting go entirely at all, but it's about having enough of a system in place where
这并不是说要完全放手,而是说要有足够的系统,
58:22
you get the information you need, any decisions, any blocks that your teams are running into
让你得到你需要的信息,任何决策,你的团队遇到的任何阻碍
58:28
are surfaced quickly to use. You can help them unblock them. I think that that's really one of the
都能快速浮现出来供你使用。你可以帮他们解决这些问题。我认为这确实是
58:33
biggest pieces, like making sure that the business goals get done and making sure that people who
最重要的部分之一,比如确保业务目标达成,并确保那些
58:40
perhaps sometimes don't necessarily understand how to connect the tech that's being done back to
有时可能不一定理解如何将正在做的技术与
58:46
the business goals, like see that through line very clearly. I remember that. I was doing the
业务目标连接起来的人,能非常清晰地看到那条主线。我记得,我当时担任
58:52
director role through my time working on a Gemini and Cloud AI. I was responsible for some of our,
director 角色,那段时间我在做 Gemini 和 Cloud AI 的工作。我负责我们的一些,
58:58
one of our top goals for the year. You're expected to report on that every week or two and be held
这是我们今年的首要目标之一。
59:04
accountable. You need to do to make sure that everything happens to keep those numbers and those
你大概每一两周就要汇报一次,并且要承担相应的责任。
59:09
goals moving in the right direction. There's a lot of accountability, I would say, that comes with that level.
你得确保所有事情都落实到位,让那些数字和目标朝着正确的方向推进。
59:13
This sounds like it's almost like if you're juggling stuff, you're giving two extra balls,
说实话,到了那个级别,随之而来的责任和问责压力很大。
59:17
which is now you both the accountability, communicating upwards with execs, holding the business
这听起来就像你在玩杂耍,原本已经在抛球了,现在又多了两个球——一边要向上跟高管沟通、扛起问责,一边要盯着业务目标,同时还要管理一个可能更大的团队,还要能深入细节,让自己不断更新信息。
59:23
goals while doing everything else in terms of running a now probably larger team, being able to
有道理,你在一个组织里待得越久,掌握的上下文就越多,你就越有准备——
59:28
deep dive into the details of keeping yourself to update. It makes sense that there's a trajectory
深入细节,让自己保持更新。有一条轨迹是有道理的
59:34
where if the longer you work in an organization, the more context you'll have, the more ready you
在组织中工作的时间越长,你拥有的上下文就越多,你就越有准备
59:39
often become. Absolutely. I think an interesting anecdote that I think is we're sharing is
常常变成。绝对是。我觉得有个有趣的小故事,我想我们要分享的是
59:46
and I don't think this was specific to Google. One of the things I found most exciting
而且我不觉得这仅仅是 Google 特有的。最让我兴奋的一件事
59:51
than last couple of years was seeing as model qualities gotten better and harnesses and tools
在过去的几年里,就是看到随着 model 质量变得更好,harnesses 和 tools
59:57
have gotten better, how many people that were directors or VPs or SVPs or any of these levels,
也在变得更好,与此同时有多少 director、VP、SVP 或者任何这些级别的人
60:04
were actually rolling up their sleeves and trying things out. That was awesome to see because every
真的在卷起袖子亲自去试。看到这个真的很棒,因为
60:11
week you could then have conversations with people like, hey, what did you build at the weekend?
每周你都能跟人聊,比如,嘿,你周末做了什么?
60:15
What models are you trying out? What are you running into friction with? What workflows are you
你在试哪些 models?你在遇到什么阻力?你在用什么 workflows?
60:19
using? That's not something that was happening before execs were very typically focused on big company
这些在以前是不会发生的,高管们以前通常都专注于大公司
60:26
problems or big work problems, but that's been changing in the last couple of years.
问题,或者大的工作问题,但过去几年这种情况一直在改变。
60:30
Which is a very nice answer. The next topic, which is how AI in your observation and experience
这是个非常好的回答。下一个话题,就是根据你的观察和经验,AI 是怎样
60:35
is changing software engineering right before we start talking about one question that comes up to
改变 software engineering 的。不过在我们开始聊那个话题之前,有一个很多人都会提到的、
60:41
from a lot of people and you're also thinking about is this idea of cognitive surrender? Let's get
你也在思考的问题,就是 cognitive surrender 这个概念。让我们
60:47
into that. There's two pieces here. The first is cognitive debt. The more that you use AI,
进入这个话题吧。这里有两部分。首先是 cognitive debt。你越多使用 AI,
60:55
it's sort of the erosion of your ability to have good memory and have good understanding of the
它就越像是在侵蚀你的记忆力,以及你对正在处理的
61:00
problems that you're working on. The natural follow-up to that is cognitive surrender,
问题的理解能力。自然而然接着来的就是 cognitive surrender,
61:05
which is where you blindly give in to whatever the AI says as your answer. Its answer becomes your
也就是你会盲目接受 AI 说的任何东西作为你的答案。它的答案变成了你的。
61:13
answer. You start to really let go of critical thinking and your ability to solve problems just
答案是——你开始真正放弃批判性思维,解决问题的能力也就慢慢荒废了。我觉得这是我们需要避免的,因为我真的很喜欢现在看到的这条进化曲线,harness engineering、loop engineering、software factories 这些东西。我对它们非常兴奋,但与此同时,我觉得我们还是需要足够理解事情的运作原理,这样万一真出了什么问题,我们确实能去修好它,而不是只能祈祷 agent 自己能搞清楚。大概一年前,你写过一篇关于和 agent 合作时重要性的文章——那时候 agent 还没有今天这么强。当你在和 agent 合作时,要通读——
61:20
goes to the wayside. I think that's something we want to avoid because I'm a big fan of the
就会被抛到一边。我认为这是我们要避免的,因为我是……的忠实粉丝
61:28
evolution curve we're seeing with harness engineering and loop engineering and software factories
我们看到的演进曲线,与harness engineering、loop engineering和software factories相关
61:33
and all of these things. I'm very excited about them, but at the same time, I think that we still
还有所有这些,我对它们非常兴奋,但与此同时,我觉得我们仍然
61:39
need to understand enough about how things work so that if something does go wrong, we're actually
我们需要对事情的工作原理有足够的了解,这样万一真的出问题,我们才能实际
61:45
able to fix it and not just hope and pray that the agent is able to figure things out. It was
去修复它,而不是只能祈祷 agent 能自己搞清楚。那是
61:51
about a year ago where you wrote about the importance of when you're working with an agent,
大约一年前你写过的——关于和 agent 协作时的重要性的内容,
61:57
and this was before they were as capable as today. When you're working with an agent, read through,
而且那是在 agent 还没有今天这么能干之前。当你和 agent 协作时,通读
62:01
read through what it has, think through, and then when it generates the code, read through that code,
把它已经生成的内容读一遍,思考一下,然后当它生成 code 时,也把那段 code 读一遍,
62:06
make sure you understand so you're doing a review. Now we have a lot more powerful agents.
确保你理解了,这样你就是在做 review。现在我们有了强大得多的 agents。
62:12
We can now, some people work multiple agents. What is your thinking on the reading,
现在我们可以——有些人会让多个 agents 一起工作。你怎么看待阅读这件事,
62:19
the going at the same pace of the agent? There's this friction of it. It's now so much easier. It's
也就是跟上 agent 的节奏?这里面是有摩擦感的。现在容易多了。这
62:26
not like, go because you want to go and have cognitive depth. It's just like, they're faster and
不是说你想慢慢来、为了有认知深度才去读。而是它们更快,而且
62:30
it's pretty good for the most part. With many challenges people run into in life, there's a lack of
大多数情况下效果相当好。人们生活中遇到的很多挑战,其实是缺乏
62:37
intentionality around wanting to avoid them. This is one of those places where I see this happen
想要避开它们的主动意识。这就是我经常看到这种情况发生的地方之一。
62:41
quite a lot. My thinking on this has changed a little bit. A year ago, maybe you would have
我的想法有一点变化。一年前,也许你会
62:50
one thinking message from the agent saying, hey, I'm thinking in the background and you'd expand
来自agent的一条thinking message,说,嘿,我在后台思考,你可以展开
62:55
and you would see a trajectory and you'd see the summary of all the things that are happening.
然后你会看到一条trajectory,你会看到正在发生的所有事情的summary
62:58
It was in speed where you could follow as well. You could have every few seconds something coming.
当时速度也跟得上
63:04
Yeah. Now, if you're using quad code or codex, it's very possible that 20 or 30 sub agents have
每隔几秒就有新内容出现
63:11
fired. I am not going to click through 30 of those things to read through their trajectories,
对
63:16
but I do make sure that I do two things. The first thing I do is I try to make sure that if there is
现在,如果你用quad code或者codex,很可能已经有20到30个sub agents触发了
63:22
a summary at the very end, here are all the decisions that were made, I will read through that
我不会逐个点开那30个东西去读它们的trajectories
63:28
end-to-end. If there hasn't been, I will prompt or that decision process and you have to be careful
但我确实会确保自己做两件事
63:34
because you don't want a model to kind of BS you about the decisions that were made. Because
因为你不想让模型在决策上忽悠你。因为
63:38
sometimes it can just make things up, right? But as we know, it's not deliberate that
有时候它就是会瞎编,对吧?但我们也知道,这并非故意,而是
63:44
there's a bit of runs out of context window. Exactly. There's limitations to these things. Exactly.
有点像是超出了context window的范围。没错。这些东西是有局限性的。没错。
63:49
That goes on to the second thing. I'm a really big fan of this idea of mutual amplification.
这就引出了第二点。我非常喜欢这个mutual amplification的理念。
63:56
If you are working with an agent, a coding agent, there are a lot of things that you can do to make
如果你和一个agent合作,一个coding agent,你可以做很多事情来
64:03
sure that the agent is getting better every day and you as an engineer are getting better every day.
确保这个agent每天都在进步,而你作为工程师也每天都在进步。
64:08
There are simple things that could play into that. Things like even within this session or within
有一些简单的做法可以促成这一点。比如,即使在这个session里,或者在这个
64:12
this project, can you log your learnings from the session? Can you log any decisions that were made,
项目里,你能不能把这次session学到的东西记下来?能不能把做过的决策记录下来?
64:18
any friction that you ran into? Anything that you think is unique about how you've approached this
你遇到过什么摩擦吗?
64:24
problem that I should just keep in mind. That's intentionality. I want to understand how things work
你觉得你处理这个问题的方式有什么独特之处,是我该记住的吗?
64:30
behind the scenes. As long as you have that curiosity and that thirst for at least being just a
这就是一种有意为之。
64:36
little bit curious, I think that you can work with models in a way where you're still preserving
我想了解事情在幕后是如何运作的。
64:41
a little bit of your cognitive understanding about how things work. One new building block that's
只要你有那份好奇心,至少有保持那么一点点好奇的渴望,我觉得你就能在和模型协作时,仍然保留一点自己对事物运作方式的认知。
64:47
coming up in Genic Engineering is this idea of loop engineering and Peter Stainberger wrote about it,
在 Genic Engineering 中,一个正在兴起的新构建模块是 loop engineering 这个概念,Peter Stainberger 写过,Boris Churney 也写过,都是关于 running loops 的。
64:53
Boris Churney wrote about it, about running loops. A lot of us are trying to figure out what loops
我们很多人都在试图搞清楚 loops 到底是什么。
64:57
exactly are. You also wrote a post about loops. What do you think loops are? How should we think of
你也写过一篇关于 loops 的文章。
65:05
them? Is it just something that is useful for a few people? Where are you at with that? A good
它们?它只是对少数人有用的东西吗?你对此怎么看?一个好的
65:11
way to think about loops are part of this journey we are on to effectively create software factories
思考 loops 的方式是:它们是这段旅程的一部分,我们正在有效地创建 software factories
65:18
or some people. It's all software factory meaning like a thing where you give some instructions,
或者某些人。它完全就是 software factory 的意思,就像你给一些指令,
65:26
you're in a factory like I would like to produce a car and then there's a fully automated factory
你身处一个工厂,就像我想要生产一辆汽车,然后有一个全自动的工厂
65:33
and the car comes out. So instead of focusing on purely the prompting towards getting an outcome,
然后汽车就出来了。所以,不是纯粹专注于 prompting 来获得结果,
65:40
you're building the system that can do the prompting and generate the outcome, do the testing
你是在构建一个系统,它可以做 prompting、生成结果、进行 testing
65:45
and verification for you. And it's effectively the next step of every phase of software evolution
和 verification,为你完成。而这实际上就是 software evolution 每个阶段的下一个步骤
65:53
is just like a rising tide of abstractions. This is the next abstraction. And it comes with a lot
就像是 abstractions 的浪潮不断上升。这是下一个 abstraction。而且它带来了很多
65:57
of nuance because I think that if you tell someone, yeah, create a system that will just do all
这里面的微妙之处在于,因为我觉得如果你告诉某人,对,创建一个系统,它就能把你所有的工作都做了。
66:04
of your work for you. Anyone that's been in the industry for a while are going to have obvious
任何在这个行业待过一阵子的人都会有一些明显的问题,比如质量怎么办?
66:08
questions like what about quality? What are you actually, how are you making sure things aren't
你到底是怎么确保事情不会脱离轨道的?
66:12
going off the rails? And so I think that you have to be very intentional with, okay, well, what are
所以我认为你必须非常刻意地去考虑,好吧,那么在这个系统里,哪些部分你是要保持 human in the loop 的?
66:19
the parts of this where you're keeping the human and the loop? Are you having your system flag
你的系统会不会向你标记出来,嘿,有些被改动的地方其实触及了系统相当关键的部分,你很可能确实需要人工审查。
66:24
to you that, hey, there are changes that were touched that actually are hitting a pretty critical
但如果你只是让你的 loops 去构建一切,在 blast radius 周围没有任何 guardrails,没有 guardrails——
66:30
part of the system and you probably do want human review on this. But simply just having your loops
系统的一部分,而且你可能确实需要 human review。但如果只是让你的 loops
66:36
build everything without having some guardrails around the blast radius without having guardrails
去构建一切,却没有在 blast radius 周围设置 guardrails,没有 guardrails
66:41
around how you think about quality. I think it's a recipe for disaster. I hear the analogy of self
关于你如何看待质量。我认为这注定会成为一场灾难。我到处听到自我
66:46
fracture a lot of places. And again, and of course dark factory as well, dark factory, meaning it's
断裂的类比。还有,当然也有 dark factory,dark factory 的意思是
66:51
fully owned and the factories lights are turned off because the robots don't need to see and you save
完全自有的,而且工厂的灯是关着的,因为机器人不需要看见,你也节省
66:55
energy and money. But one thing that I keep thinking that is often this analogy is like, okay,
能源和金钱。但我一直觉得这个类比常常就像,好吧,
67:00
in a factory, you produce a thing, it could be a car, it could be a screw, it could be something,
在工厂里,你生产一样东西,它可以是汽车,可以是螺丝,可以是任何东西,
67:04
it's there and it's done. But with software, specifically SaaS and most software that we do,
它就在那里,然后就完成了。但对于软件,特别是 SaaS 和我们做的大多数软件,
67:11
it's not done. Like when it's finished, we release it to production and that's where it crashes,
它并没有完成。就像当它做完时,我们发布到 production,然后就在那里崩溃,
67:16
the bugs come out. So I wonder if this whole idea of like, okay, we'll have a factory that
bug 就出来了。所以我好奇,如果整个想法就像,好吧,我们会有一座工厂,它
67:21
produces the software and it does all the testing. If in production, it's not connected to how it's
它生成 software,并且做所有的 testing。
67:26
running and having that feedback. That's, you see what I mean? Yeah, so it's a different type of
如果在 production 中,它没有和它的运行方式以及 feedback 连接起来。
67:32
factory that we're talking about. So you hit the nail exactly on sort of the next phase of that.
就是这样,你明白我的意思吗?
67:38
You can, if you can have a system that can sort of decide what needs to get built, how to verify,
对,所以我们说的是一个不同类型的工厂。
67:46
how to test and all of those things. There's nothing stopping you from then connecting that up to
所以你正好一针见血地点出了那件事的下一阶段。
67:51
your telemetry, up to your other systems, up to user feedback, up to any other signals that can
你可以,如果你能有一个 system,它能大致决定需要 build 什么、怎么 verify、怎么 test,以及所有这些。
67:58
help build out the product. You can connect it up to the product backlog. And you can potentially
然后没有什么能阻止你把它连接到你的 telemetry、你的其他 systems、user feedback,以及任何其他能帮助构建 product 的 signals。
68:03
see a world where you then have this system that has access to all of these different signals for
你可以把它连接到 product backlog。
68:08
how the product can be improved to a point where maybe it even could get proactive.
产品要怎么改进,才能到也许它甚至能变得 proactive 的地步呢?
68:13
Yeah, and we're seeing there's so many examples that you can plug it up, for example,
是啊,我们看到有太多例子你可以把它接上去,比如,
68:17
using Century. Century has automations where like if an error fires in Century that is net new,
用 Century 来说。Century 有 automations,比如如果 Century 里触发了一个错误,而且是 net new 的,
68:23
you could have a hook that kicks off your favorite coding agent where it one shots a fix and it
你可以有一个 hook 来启动你最喜欢的 coding agent,让它 one-shot 出一个修复,然后它
68:28
puts you in your review. Now, of course, you could take it further and you could allow it to
把你放进 review 里。当然,你可以更进一步,允许它
68:33
automatically do it, which sounds like a bad idea today, but you could do it. And I wonder is
自动去做,这在今天听起来是个坏主意,但你可以做。我好奇的是
68:38
that when we're talking about loops, is this, for example, a loop that we say and maybe the loop is
当我们说到 loops 的时候,这个算不算,比如说,我们所说的一个 loop?也许 loop 这个词
68:44
just not a good word for it. Maybe it's, I think I heard workflow, I heard, like, or if I say feedback
并不是个好词。也许是 workflow?我听到过 workflow,嗯,或者如果我说 feedback
68:50
loop OK, that might be a better word. Maybe it's just a wording thing where like we're a little
loop,好吧,那可能是个更好的词。也许只是措辞上的问题,就像我们有点
68:54
bit confused with the, yeah, I mean, I think that given how fast things are moving, we are very likely
混淆了,是的,我的意思是,考虑到事情发展得这么快,我们很可能会
69:01
to see new terminology sprout out every month. And some of them will be good fits and some of them
看到新术语每个月都冒出来。其中一些会很贴切,另一些
69:06
will continue to require some refinement. So I could totally see workflow being a better fit
则还需要继续打磨。所以我完全能理解 workflow 是比 loop 更合适的选择。
69:11
than loop. But from a visual perspective, I do, I personally do see it as a loop workflow also
但从视觉角度来看,我个人确实觉得它也是一个 loop workflow,
69:17
also works. But, but then can you give me examples of loops that you've, you've used or
也说得通。不过,那你能否举一些你用过的或者见过的 loops 的例子,
69:23
you have seen people on your team or people in the industry use? Yeah, so I was just mentioning
比如你团队里的人或者业内其他人使用过的?是的,我刚才提到的是
69:30
being able to connect multiple signals up to, you know, your software. So, from production,
能够把多个 signals 连接到你的软件上,你懂的。所以从 production 的角度来看,
69:35
from production, may that be logs or errors or all of this? Yeah, so I have one app where I allow
从 production 那边,不管是 logs 还是 errors 还是所有这些?
69:43
people to submit issues to it if they run into any problems. And historically, yeah, like a bug report.
对,所以我有一个 app,如果有人遇到问题,可以提交 issues 给我。
69:50
And historically, I would, you know, manually go through everyone and whenever I had time and then
历史上,是的,就像 bug report。
69:56
make a call in terms of like, OK, I only have time to address someone's own. So I can't go through
而且以前,你知道,我会手动一个个看,等我有时间的时候,然后做个判断,比如,好,我只有时间处理一部分。
70:01
the full backlog. You can now connect up so many other sources of data. You can connect up your
所以我没法把整个 backlog 都过一遍。
70:06
Google Analytics. You can connect up, you know, if you're deploying to a certain hosting provider,
你现在可以连接非常多的数据源。
70:11
there are all kinds of logs that you might get from those sessions as well. You can connect it up
你可以连上 Google Analytics。
70:15
to that. And then you can end up with a system where it's able to make decisions and prioritization.
你还可以,比如如果你部署到某个 hosting provider,你会从那些 sessions 里得到各种 logs。
70:20
And then, of course, do the implementation based on not just one dimension of feedback. So, for
然后,当然,做 implementation 的时候不能只看单一的 feedback 维度。所以,比如说,如果我的产品里发现某个 view 特别特别慢,但它现在已经知道这对印度用户来说是这样,而且我有很多来自印度的 traffic,那它就能影响我对这件事有多在乎的 priority。现在,当一个 agent 能翻遍你的整个 backlog 并实现所有东西时,priority 还有多重要?我觉得还是要看你是不是在乎要手动进去做一些工作,比如看看,好吧,你说你提升了 performance,那你到底改了什么?我得有多大程度自己亲手在这些设备上手动测试这个东西?因为我可以...
70:25
example, if in my product, it's noticing that there is a particular view that is really, really slow.
比如,在我的产品里,它注意到某个 view 真的非常非常慢。
70:33
But it now knows that that's happening for users in India, but that I'm getting a lot of traffic
但它现在知道这种情况发生在印度的用户身上,而且我这边有大量 traffic。
70:38
from people in India, it can influence the priority of how much I care about that.
来自印度的人们,这会影响到我对那件事的优先级。
70:42
Now, how much does priority matter these days when an agent can go through your whole backlog and
现在,当一个 agent 能浏览你的整个 backlog 并实现所有东西时,优先级还有多重要?我认为这仍然取决于你是否在乎需要进去手动做一些
70:46
implement everything? I think it still depends if you care about having to go in and manually do some
工作,比如说,去看一眼,好吧,你说你提升了性能。你到底改了什么?
70:53
work to like, take a look, OK, well, you said you improved performance. What do you actually change?
我需要在那些类型的设备上自己手动测试多少?因为我可以
70:58
How much do I have to manually test this thing on these kinds of devices myself? Because I can
所以我对 alpha 的定义就是优势,对吧?那目前有什么是模型还
71:03
tell you to go and, you know, do some emulated testing. I'm sure it'll help. But for me, it's just
叫你去,你懂的,做一些 emulated testing。
71:07
about being able to make more refined product decisions without having to sift through all the
我肯定这会有帮助。
71:15
different signals myself. I do see more and more people experimenting trying to put these things
但对我来说,关键是要能做出更精细的产品决策,而不需要自己去筛选所有不同的信号。
71:19
in place again, like from the one shotting the buck fix. There's really no excuse to like not act
我确实看到越来越多的人在尝试把这些东西重新用起来,比如从 one-shot 搞定 bug fix 开始。
71:25
on errors, on logs, open source projects, popular ones now have things like when people submit an
真的没有理由不去处理 errors 和 logs,open source 项目,特别是流行的那些,现在都有这样的东西:当有人提交 issue,就会有个 bot 尝试复现它,诸如此类。
71:31
issue, there's a bot that tries to reproduce it, all of these things. So, I see them as loops.
所以,我把它们看作 loops。
71:36
One question that does come up though is, OK, well, we are, there's a lot of stuff that
有一个确实会出现的问题就是,好吧,我们... 有很多事情是软件工程师过去常做的。
71:41
software engineers used to them. We didn't have all the time for it, but we did a lot of it.
我们当时没有足够的时间去做,但确实做了很多。
71:45
And what this means for the future of the profession, Ryan Dahl, the creator of Node.js wrote,
那么,这对这个职业的未来意味着什么?Node.js的创造者Ryan Dahl写过这样的话,我给他打了电话。
71:49
and I called him. This has been said a thousand times before, but I'll allow him to add my own
这句话已经被说过一千遍了,但我会让他用自己的声音再说一遍。
71:54
voice. The era of humans writing code is over, disturbing for those of us who identify as software
人类写代码的时代已经结束了——这对我们这些自认为是软件工程师的人来说很不安,但这是事实。
71:59
engineers, but no less true. That's not to say software engineers don't have work to do, but writing
但这并不是说软件工程师没有活干,只是写代码已经不是他们的活了。
72:03
since I directly is not it. And a lot of our time spent, I remember when I interviewed
我们很多时间都花在写代码上。我记得在Uber面试人的时候,我会告诉他们:“嗯,我们至少会花50%的时间写代码,所以我们考的就是写代码。”
72:08
people at Uber, I would tell them like, well, we're going to spend at least 50% writing code,
这种事正在消失。
72:12
so we're testing you on writing code. This is kind of vanishing. What do you see replacing it?
你觉得什么会取代它?
72:18
And what do you see the essence of software engineers, builders, AI engineers, however,
那你觉得软件工程师、构建者、AI工程师的本质是什么,不管怎么说?
72:24
who call them B? I always go back to what is alpha. So my definition of alpha.
谁叫他们B?我总会回到alpha是什么。所以我对alpha的定义就是优势,对吧?那目前models不太擅长做的事情是什么?Alpha会随着每次model发布或一系列model发布以某种方式衰减,所以它会随时间变化。所以对于软件工程师,我们经常说你的alpha体现在:我们是否在构建正确的东西?我们把精力放在哪里?我们正在构建的东西真的好吗?而且,你知道,有时候人们会说,是啊,但一个agent可以告诉你它好不好,我会反驳这一点。一个agent可以告诉你一个东西看起来是否正确,是否匹配spec,但这并不一定意味着它能告诉你什么是好的。
72:30
So my definition of alpha is advantage, right? So what is the current thing that models are not
太擅长做的?alpha 会以某种方式随着每次模型发布或每个系列而衰减。
72:36
very good at doing? Alpha is going to decay in some way with every model release or every series
非常擅长做什么?Alpha 会随着每一次模型发布或每一个系列以某种方式衰减
72:43
of model releases, so it's going to change over time. So for software engineers, we very often say
说到 model releases,所以它会随着时间变化。所以对于 software engineers,我们经常说
72:48
that your alpha is entased in terms of, are we building the right thing? Where are we putting our
你的 alpha 是根據「我們是不是在做正確的事」來定義的?我們把我們的
72:56
energy? Is the thing that we're building actually good? And good, you know, sometimes people say,
精力放在哪裡?我們正在構建的東西真的好嗎?而且,你知道,有時候人們會說,
73:02
yeah, but an agent can tell you if it's good, I push back on that. An agent can tell you if a thing
是的,但 agent 可以告訴你它好不好,我反駁這點。Agent 可以告訴你某個東西
73:07
looks correct, if it's matching a spec, it doesn't necessarily mean it can tell you what's good.
看起來是否正確,是否符合 spec,但它不一定能告訴你什麼是好的。
73:12
I think that good can mean good from a user experience perspective could be delightful,
我觉得“good”从 user experience 的角度来看,可以意味着令人愉悦,
73:18
could be something that a person will actually want to come back to. And it is still something that
可以是那种人们真的愿意再回来的东西。而且这仍然是一件
73:23
is sufficiently nuanced, that I think it's going to take time for models to actually catch up to
足够微妙的事,我觉得 models 要真正赶上还需要时间,
73:28
a point where they can replace that fully. We tell people that judgment, verification, all of these
才能达到完全取代它的程度。我们告诉大家,judgment、verification 以及所有这些
73:34
other aspects continue to be important. And I do believe that. But even if you if you follow through
其他方面仍然很重要。我确实相信这一点。但即使你顺着这个思路想下去,
73:39
and you say, okay, well, maybe a year or two from now models will catch up these different aspects,
然后说,好吧,也许一两年后 models 就能在这些不同方面追上来,
73:45
we still need engineers to be answerable for these different systems and to be accountable, right?
我们仍然需要 engineers 为这些不同的 systems 负责,并且可问责,对吧?
73:53
Yes, accountable, answerable. And that's something that doesn't just happen overnight. That happens when
对,accountable、answerable。这不是一夜之间就能实现的。那是当
73:57
you understand a system, people trust you and you have that expertise. An example I've been telling
你理解一个系统,人们信任你,你也有那种专业能力。举个例子,我这周一直在跟
74:03
people this week is back when I worked on Chrome, you know, Chromium is a massive code basis,
人们说,就是早前我在 Chrome 工作的时候,你知道,Chromium 是一个巨大的 code base,
74:09
one of the largest code bases in the world. And it's sufficiently complex that for every key part
是世界上最大的 code base 之一。而且它复杂到对于每个关键部分
74:16
of that system, you will have a directory with an owner's file. And that owner's file is going
你都会有一个带 owner's file 的目录。而这个 owner's file 会
74:23
to contain a small number of people who are effectively accountable for that part of the system.
包含少数几个人,他们实际上是对系统那部分负责的人。
74:28
They might not have written all of the code for it in the same way that, you know, we may not have
他们可能没有编写所有的代码,就像,你知道,我们可能没有
74:32
written all of the code. Our agents may have written, you know, written some of the code, but they're the
编写所有的代码。我们的 agents 可能写了,你知道,写了一些代码,但他们才是
74:37
person that's on the hook for understanding, for gating, for making sure that someone is deciding
那个需要负责理解、负责 gating、确保有人在做决定的人。
74:43
what ships, what's blocked, what do we differ. And so I think that that is something that engineers
什么能交付,什么被阻塞了,我们有什么分歧。所以我认为,这正是工程师们将继续发挥价值的地方。这将帮助我们确保我们构建的东西是稳定、可靠的,人们实际上,你知道,能有一定信心去使用它。我确实同意这一点,因为我认为问责制是很多企业能够运作的原因。这就是为什么律师总能有工作,因为法规就在那里。你可以看看所有的法庭案例,了解法律是如何被解释的,但他们已经这么做了。而且他们通常会承担一定程度的责任。事实上,如果他们严重失职,你实际上有一个选择,比如说,对他们公司采取法律行动。
74:50
are going to continue to be valuable for. And that's going to help us to make sure we're building
將繼續有價值。而這會幫助我們確保我們正在構建
74:55
stuff that is stable, reliable, people can actually, you know, use it with some confidence.
穩定、可靠的東西,讓人們實際上能,你知道,帶著一些信心去使用它。
75:00
I do agree with this because I think accountability is something that that's why so many businesses
我確實同意,因為我認為問責制就是這樣,這就是為什麼那麼多企業
75:06
are working. That's why lawyers always have a job because the regulation is there. And you can
都在運作。這就是為什麼律師總有工作,因為監管就在那裡。而且你可以
75:13
look about all the court cases and you could understand how the law is interpreted, but they've done
看看所有这些法庭案件,你就能理解法律是如何被解释的,但他们已经做了
75:17
this. And they often take some level of accountability. In fact, if they grossly not do their job,
这件事。而且他们通常会承担一定程度的责任。事实上,如果他们严重失职,
75:25
you actually have an option to, for example, take legal action against a firm if they would have
你实际上有一个选择,比如,如果一家公司会
75:31
be proven to actually just ignore what they're doing. And I guess that's a good example where
被证明实际上只是无视他们正在做的事。我觉得这是一个很好的例子,就是
75:37
we're in software. And anywhere where there's value, this will be valuable. Again, if you're
我们在软件领域。而任何有价值的地方,这都会很有价值。再说,如果你在
75:42
renovating your house, if it's not a big deal, you might do it yourself. If it's a big deal,
翻新房子,如果不是什么大事,你可能会自己做;如果是大事,
75:46
you just call it a professional. And I think there's two related notes to this topic. Every time
你直接请专业人士就好了。我觉得这个话题还有两个相关的点。每一次
75:53
that we've made it easier to create software, we've exponentially created more of it. So the
我们让创建软件变得更容易,都会以指数级创造出更多软件。所以这个
75:59
Toyota Addressable Market for builders. It's happening right now. It's happening right now.
builders 的 Toyota Addressable Market。现在正在发生,现在正在发生。
76:04
iOS app releases websites, all of that. Yeah. It's going through the roof. And that's not
iOS app 发布、网站,所有这些。对,正在飙升。而且这并非
76:09
without nuance. That's not to say, you know, that every single app that's being created has the same
没有细微差别。这并不是说,你知道,每一个正在被创建的 app 都有同样的
76:15
value. Right. We of course have these conversations about like, yes, if your app is like a prompt
价值。对。我们当然会聊到这些,比如,如果你的 app 就像是差一个 prompt,
76:20
away from somebody else copying it, you know, it's a different world that we live in. But that still
就会被人复制,你知道,我们活在一个不同的世界里。但这仍然
76:25
doesn't change the fact that we have a much larger number of people that can build now. And
不改变一个事实:现在能构建的人要多得多。
76:29
that's a lot more potential businesses and startups that could potentially thrive. Yeah.
这就意味着有更多潜在的企业和初创公司可能会蓬勃发展。是的。
76:33
I continue to be very excited about the profession from that aspect. I also think that every
从这个角度来看,我依然对这个职业感到非常兴奋。我还认为,每一个
76:40
point in time in human history when automation or form of automation has come into the picture,
人类历史中的时刻,当自动化或某种形式的自动化出现时,
76:46
we've automated away certain kinds of jobs and then replace them with other kinds of jobs.
我们自动化掉了一些类型的工作,然后用其他类型的工作取代了它们。
76:52
And so I think a big question for the future is, what are those jobs going to be in this new
所以我认为未来的一个大问题是,那些工作会变成什么样,在这个新的
76:56
knowledge economy? We may not necessarily have exact, you know, frames for what they're
知识经济?我们可能还不一定有确切的框架,你知道,去描述它们未来会是什么样。
77:02
is they're going to look like just yet. But I do think those are going to come. Yeah.
但我确实觉得这些框架会出现的。是的。
77:06
And I wanted to talk to you about your writing as a fellow writer to a fellow writer. You've
而且我想跟你聊聊你的写作,就像作家和作家之间的对话。
77:12
been a really prolific writer in terms of books released just in the past few years. You're
你真的是个非常多产的作家,单看过去几年出版的书。
77:18
written the short book software and during the soft part, a free book about 50 pages, a really
你写了那本短书《Software》和《The Soft Part》——一本免费的书,大概50页,非常好读。
77:23
good read. You've written leading effective teams two years ago and last year vibe coding.
你两年前写了《Leading Effective Teams》,去年写了《Vibe Coding》。
77:30
I want to ask and on top of this, you regularly write long form on social media, LinkedIn,
我想问的是,除此之外,你还会定期在社交媒体、LinkedIn、X、你的博客和 newsletter 上写长文。
77:36
X your blog, your newsletter. You write a lot for someone who actually has a full-time job and I
对于一个有全职工作的人来说,你写得真的很多,而且我……
77:41
can tell you when my full-time job often involves writing, how has your workflow changed
你能告诉我,当你的全职工作经常涉及写作时,你的 workflow 发生了怎样的变化?
77:48
in writing when it comes to now, especially if you have AI tools or other tools?
在写作方面,尤其是现在,如果你有 AI tools 或其他工具的话?
77:52
I would say that now that it is very easy for anyone to use an agent to create a body of text,
我会说,现在任何人用 agent 来生成一段文本都非常容易,
78:01
I think it's more important than ever for us to make sure that the ideas are putting out in
我觉得我们比以往任何时候都更需要确保这些想法发布到
78:06
the world are actually worth people reading because if you're asking somebody to spend 5, 10,
世界上是真正值得人们阅读的,因为如果你要别人花5、10、
78:12
15 minutes reading a thing, like actually put some effort into it, my workflow has changed quite a
15分钟去读一个东西,真的得投入一些精力,我的 workflow 已经改变了
78:18
lot in the last couple of years. I've now published I think 18 books, I've worked with O'Reilly
很多,在过去的几年里。我现在已经出版了大概18本书,我和 O'Reilly 合作过
78:23
on many, many titles over the years. I think the agents have helped me the most probably with just
在很多很多本书上了。我觉得 agent 对我帮助最大的可能只是
78:29
being able to reason about the thoughts in my head. And especially try to connect those back to
能够理解我脑子里的想法。尤其是试着把这些和
78:36
how other people are thinking about related problems. So on any given week, we can take loop
其他人如何看待相关问题。所以在任何一个星期,我们可以拿loop
78:42
engineering as one example because I was recently putting together a piece on that. When I'm working
engineering作为一个例子,因为我最近在写一篇相关的文章。当我在做
78:46
on a piece these days, I'm always curious like what are other people thinking that it's related to
一篇文章的时候,我总是好奇,比如其他人在想什么与之相关的东西
78:52
this? And so I can fire off a ton of deep research agents to go and check out hacker news or Twitter
这个?所以我可以启动一大堆deep research agents去查看Hacker News或者Twitter
78:59
or other places. And just give me a sense of what are things people have tried out? What are things
或者其他地方。
79:04
where people have particularly strong opinions either way? What is considered contentious?
然后让我了解一下人们尝试过哪些东西?
79:11
What are people excited about? And what do they have big questions around? And that's not to say,
有哪些事情人们特别有强烈看法?
79:17
hey, agents now write the text for me. It's about forming a thesis about what people are struggling
嘿,现在 agents 会帮我写文本。这涉及到形成一个论点:人们在哪些方面有困难,以及围绕这些困难,什么样的教育内容会对他们有用。所以 agents 在我的研究中非常有用。说到写作本身,这非常有趣。我觉得现在很多人在纠结如今应该如何运用 agents 和这些工具。当我有一个写作想法时,我经常会做两件事。我会先手写一个个人化的版本。同时,我也会让一个 agent 或不同的 models 写出一个文本版本。然后我会比较一下,比如,好吧,我以一个论点开头。那些 other agents 是如何推理这个论点的?它们是否有很不同的——
79:24
with and what educational content could be useful for them around that. And so agents have been
哪些是有争议的?
79:29
very useful for me in my research. When it comes to writing itself, this is a very interesting one.
人们对什么感到兴奋?
79:35
I think that a lot of people struggle with like how should we be using agents and these tools these
他们又在哪些方面有大问题?
79:39
days? I will very often do two things when I've got an idea for a piece. I will start to write out
这并不是说,以及什么样的教育内容对他们在这方面会有用。
79:46
a personal kind of handwritten version of a thing. And I'll also have an agent or different models
所以 agents 在我的研究中一直非常有用。
79:51
write out a version of the text as well. And I'll compare sort of, okay, well, I started out with
把文本的一个版本也写出来。然后我会比较一下,呃,好吧,我一开始是带着
79:56
a thesis. How did those other agents reason about this thesis? Did they take in a very different
一个论点。那些其他 agent 是怎么推理这个论点的?他们是不是接受了一个非常不同的
80:02
direction to what I was thinking about? Or did they be all kind of converge on the same thing roughly
是朝着我原本想的方向吗?还是说它们大致都收敛到同一个东西上了?
80:08
and there's not really a lot of value that they're offering me? Once I actually feel like I've got
而且它们其实没给我提供多少价值?一旦我真的觉得自己已经
80:12
the ideas then pulled for my piece, for me, readability is important. And so even if I've had written
把这些想法提炼出来用在我的文章里,对我来说,可读性很重要。所以即使我已经写了
80:20
a thing, I will often put that through a model to try improving readability. And that's a hard
一个东西,我经常会把它丢给模型过一遍来提高可读性。而这有时候很难
80:26
thing sometimes because I still feel like models are sometimes not the best at writing human looking,
有时候是因为我仍然觉得模型有时并不擅长写出像人写的东西,
80:34
even if you're editing something, writing human looking text. I remember the other day I was
即使你是在编辑某个东西,要写出像人写的文本。我记得前几天我
80:40
trying to play around with Hey, can I improve my workflow? And I feel like I easily wasted three
想试着折腾一下“嘿,我能改进我的workflow吗?”然后我觉得我轻轻松松就浪费了三个
80:45
hours of time because no matter what I did, one of the models I was using continue to generate
小时的时间,因为不管我怎么做,我在用的其中一个模型还是继续在生成
80:51
text that looked like it had triads and these patterns, you know, of a written text. And
看起来像是带有三元结构和这些模式的东西,你知道,就是书面文字的那种。我确实很纠结,因为感觉像是,你知道,用这些可读性数据是不是收益递减?嗯,具体来说是 loop engineering。所以 Navi,也就是 neat code,他做了一个视频,专门看 loop engineering,特别是你那篇文章。他读了那部分关于 automation 的内容,那是很难啃的部分,他读了几段。他说感觉很抽象,感觉有些术语像是 AI 会写出来的。他说,嗯,要么这是 AI 生成的,要么可能是某个人的想法,但后来是 AI 把它整理出来的。而且当我读到那篇特别是 loop engineering 的文章时,也有同感。
81:00
I really struggled with that because it feels like, you know, is it diminishing returns trying
我对此真的很纠结,因为感觉像是,你知道,是不是收益递减,尝试
81:04
to use these readability data? Well, specifically on loop engineering. So Navi, aka neat code,
去使用这些 readability data 吗?嗯,具体来说是在 loop engineering 上。所以 Navi,也就是 neat code,
81:10
he did a video where he looked at the loop engineering, specifically your post as well. And he was
他做了一个
81:15
reading it. He was reading the part automations. This is the hard beat and he kind of read a few
读它。他读的是 automations 部分。这是难点,然后他好像读了几
81:19
paragraphs. And he was saying it felt abstract. It felt that there were like terms that an AI would
段。然后他说感觉很抽象。感觉里面有一些术语,是 AI 会
81:24
have done. And he said that, well, either this is AI generated or it might be someone's thoughts,
写出来的。然后他说,嗯,要么这是 AI 生成的,要么可能是某人的想法,
81:29
but then an AI put it out. And when I also read it in that specifically that loop engineering piece,
但后来是一个AI把它发出来的。而且当我再读到那篇,就是那篇loop engineering文章的时候,
81:36
like I missed the specifics right now, we talked about like, all right, here's the things that
比如我现在记不清具体细节了,我们当时聊到,好吧,这些就是
81:40
you have been doing. And I was wondering on like, how did you write this? And how do you feel about
你一直在做的事情。我就在想,你是怎么写出这篇的?你现在对
81:47
that specific piece now? For that piece specifically. So I started off with a handwritten piece.
那篇文章有什么感觉?就那篇来说。最开始我是手写的。
81:55
I did a number of like editorial passes myself. I then handed it off to a model to try
我自己做了几轮编辑,然后交给一个model来尝试
82:02
improving the readability pass. And that's where I start to struggle because I'm a fan of structured
提升可读性。而正是在那里我开始纠结,因为我很喜欢结构化的
82:08
writing. I'm a big fan of very structured writing. I am not a fan. I remember the kind of writing
写作。我非常喜欢结构化的写作。我不喜欢——我记得自己
82:15
I was writing 10 years ago, maybe even. And I remember, you know, you were mentioning people who
十年前写的那种东西,甚至更早。而且我记得,你知道,你提到过那些……
82:21
like to write struggle with time. I would very often write articles in the 15 minutes I had before
我喜欢写作,但总是苦于没时间。
82:27
my next meeting. And I just tried to add more paragraphs in. It wasn't as structured or as high
我的下一个会议。
82:32
qualities I'd like. And so I sometimes struggle with our people looking for authenticity even when
然后我试着加进去更多段落。
82:42
it's not that structured. So for example, I might have the version of loop engineering. I started out
写出来的东西不够有条理,质量也达不到我的预期。
82:48
with even after a few iterations. Did it have a good enough line through or thread through the whole
所以有时候我挺纠结的,因为我们的同事想要真实感,即使它不那么结构化。
82:55
thing that made sense? Probably not. Or at least that's how I felt at the time. But using an agent
比如,我可能有一个“loop engineering”的版本。
83:03
to try helping rework that. So it did have a clearer line through it. I felt better about the
我最初的那个版本,即使经过了几轮迭代。
83:09
piece. But somebody else reading it may felt like, okay, well, actually, I would have felt better
它有没有一条足够清晰的线索或主线贯穿整个内容,让人读起来说得通?
83:14
if it wasn't a structure. It was a bit more raw that you did not tell that good about. Yeah.
可能没有。
83:19
And you know, you can say the same thing about typos, about, oh, well, hey, is the article
我经常在只有15分钟的空档里写文章。
83:27
following a consistent structure or beats compared to a final piece? So that's something I struggle
你知道,错别字也是一样。比如,呃,这篇文章相比最终成品,有没有遵循一致的结构或节奏?
83:33
with. Yeah, because the final piece don't give me wrong. Like, you know, when we look at views and
所以这正是我纠结的地方。
83:38
comments, a lot of people appreciate it. And when you read through again, I'll link it in the show
是的,因为最终成品——别误会我的意思。
83:42
notes below to read it. It did have a clear top level structure. To me, it felt that it was maybe
你知道,从浏览量和评论来看,很多人都很欣赏它。
83:49
more wordy than it needed to be. And it just lacked the specifics. But I do see by the other people
而且你再次通读时会发现——我会在下面的 show notes 里放上链接。
83:55
experimenting with this as well. I talked with Michael Novari who was criticized for a post which
它确实有清晰的顶层结构。
84:01
he actually worked a lot with. But it sounded very AI because in the end, he did it. And later,
他其实合作过很多。但听起来很AI,因为最后确实是他做的。后来,
84:05
he wrote another post which looked a lot better and asked him what he's changed. I said, like, oh,
他写了另一篇看起来好很多的帖子,然后问我改了什么。我说,哦,其实我只是更多地去调整 output,因为他也特别爱把想法一股脑倒出来,再找人帮忙梳理结构。而且实际上,你知道,在幕后花了很多时间,让文章值得一读。嗯。而且我觉得,即使现在有更好的工具,很多时候如果人们看到我发的文章,我很可能至少花了三到七天去反复琢磨。你知道,因为酝酿,嗯嗯嗯。如果某样东西出来得非常非常快,那很可能是因为我对想说的话有着非常清晰——但令人惊讶地清晰——的愿景,但很多时候它都需要花...
84:09
I'm actually just like tweaking the output a lot more because he's also a big fan of dumping his
我其实更像是大幅调整输出,因为他也很喜欢倒出他的
84:13
thoughts, getting some help for structure. And actually, you know, like behind the scenes spending
想法,然后寻求结构上的帮助。而且实际上,你懂的,就像在幕后花
84:19
a lot of time, like, world is be worth reading. Yeah. And I think that even, even with access to
很多时间,像是要让文字值得一读。对。而且我觉得即使,即使现在有了
84:25
better tools these days, very often if people see an article that I put out, I very likely spent
更好的工具,很多时候如果人们看到我发的文章,我可能确实花了
84:31
probably at least three to seven days just trying to work through it. You know, because
至少三到七天来反复打磨。你知道,因为
84:36
brewing, yeah, yeah, yeah. If something comes out very, very quickly, it's probably because I had
酝酿,嗯嗯嗯。如果某篇东西出来得特别快,那很可能是因为我当时
84:43
a very clear, but a surprisingly clear vision for what I wanted to say, but very often it takes
对想说的话有一个非常清晰——而且出奇清晰——的想法,但很多时候还是需要
84:48
a while for something to bake well. And I do end up going through every line of text very often
让东西好好酝酿需要一段时间。
84:55
before publishing it a few times. And I think that for those of us that are working with tools,
而且我确实经常在发布之前反复检查每一行文字,好几次。
85:03
with AI tools, you start to question, well, am I being influenced by the way? Yeah.
而且我觉得,对于我们这些使用工具、使用AI tools的人来说,你会开始质疑,嗯,我是不是被影响了?对。
85:08
That the models, because the models are going to, in some cases, I think, provide a homogenous
因为模型在某些情况下,我觉得,会对写作的样子给出一种同质化的处理。是的。
85:12
take on what writing looks like. Yes. And you start to feel like, wait, what was my writing style?
然后你开始觉得,等等,我原来的写作风格是什么来着?
85:18
You know, you feel you're kind of in this middle right now, a little bit. Yeah, I very much do. And
你知道,你会觉得自己现在有点介于中间,有一点。对,我非常有这种感觉。而且
85:23
there's a part, you know, you, you take it to the experimentation phase and there will be,
有一部分,你知道,你会把它带入实验阶段,然后会有,
85:29
you know, maybe there are people who will say, hey, you should train a custom model on your old writing.
你知道,也许有人会说,嘿,你应该用你以前的写作去train一个custom model。
85:34
I was a different person when I did my old writing and I had a different set of perspectives,
我写以前那些东西的时候,还是另一个人,我有另一套视角,
85:39
a different set of nuances that I cared about. And so I wouldn't, I would feel, I would feel a
我在意的那些细微之处也不一样。所以我不会——我会,我会对那个人写出的
85:44
certain way about that person writing, you know, these new pieces too. So I think that we're still
这些新东西也有某种感受。所以我觉得我们还在
85:50
learning what the best practices around this are. And I also, you know, I started, I remember,
摸索这些方面的最佳实践。而且我,你知道,我开始了,我记得
85:57
the other week, I was just curious, like if people are checking out these posts using pangram or
前几个星期,我很好奇,如果人们用 pangram 或者
86:03
GPT's or any of these things, how does that change my workflow? And I was just getting very frustrated
GPTs 之类的工具来检查这些帖子,那会怎么改变我的 workflow?然后我就变得很沮丧,
86:07
because I would literally type out like human sentences or human paragraphs and I'd paste it into
因为我真的是打出像人类写的句子或段落,然后粘贴到
86:12
pangram. If you're like, no, this isn't look human written. I'm like, wow, okay. And that's not
pangram 里。结果它说,不,这看起来不像人写的。我就想,哇,好吧。而这并不是……
86:16
to say anything bad about pangram. It's just to say that I don't, I think that there's
倒不是说 pangram 有什么不好。只是说,我不——我觉得有
86:21
opportunity for tools to help writers, you know, flag black things and then help them understand,
机会让工具帮助写作者,你知道,把那些不好的东西标出来,然后帮他们理解,
86:28
like, okay, well, how do you get back to your human way of writing? Yeah. So as, as closing, you've
比如说,好吧,你怎么回到你作为人的写作方式?对。所以作为结尾,你已经
86:34
just closed down 14 years at at the Google you've announced a big decision last year leaving
刚刚结束了在 Google 的 14 年,去年你宣布了一个重大决定:离开。
86:38
congratulations. I know it must have been like a, you know, like a big one to decide on. What is next
恭喜。我知道那一定是一个,你知道,很难下的决定。接下来
86:44
for you? What are you looking at? What are you excited about? What I am most excited about right
对你来说是什么?你在关注什么?你对什么感到兴奋?我现在最兴奋的是
86:51
now is helping developers and businesses kind of meet this next moment of software engineering
帮助 developers 和企业某种程度上迎接 software engineering 的下一时刻
86:58
changing. I think there are a lot of open questions. Every single company I talk to who's got so
变革。我觉得有很多悬而未决的问题。我聊过的每一家公司,都有很多
87:03
many questions about what the future is going to look like. But there's also a lot of opportunity
关于未来会是什么样子,有很多问题。但其中也有很多机会
87:08
in there to help and to figure it out with them. So I'm excited about that. I'll be sharing,
去帮助他们,和他们一起弄清楚。所以我很兴奋。我会分享,
87:15
you know, next couple of months, what my next thing is, but I'm definitely going to be staying
你知道,接下来几个月,你们会知道我的下一步是什么,但我肯定会继续留在这个领域
87:19
very much in the space and I'm someone that enjoys working with developers, working with the
我很喜欢和开发者合作,和整个生态一起工作
87:25
ecosystem. So I will very much still be staying in a role that allows me to do that.
所以我仍然会待在一个能让我做这些事的角色上。
87:29
The right as you're exploring your next career step, you know, made up, be joining another
正当你探索自己的下一步职业规划,你知道,也许加入另一家公司
87:33
company, an exciting role who knows if you'll do something yourself. Clearly you're thinking a
一个令人兴奋的职位,谁知道你会不会自己做点什么呢。显然你对自己的职业想了很多
87:38
lot about your own career. What advice would you have to someone who has some experience in the
关于你自己的职业。对于在你的领域有一定经验的人,你会给出什么建议?
87:43
industry working at a software engineer and engineering manager, and they might be in a similar
在行业里做软件工程师和工程经理的人,可能也会有类似的处境,他们会想:好吧,是时候改变了。我要为未来的成功做好准备。
87:47
shoe where they are like, all right, it's time for me for a change. I want to set myself up for
你会建议他们投资哪些技能?
87:52
success looking ahead. What skills would you advise that they invest in? What activities,
哪些活动,怎么看待人脉,你觉得未来几年什么会很重要,才能站在行业的核心位置?
88:00
how to think about their network, what do you think will be important in the next couple of
接下来我们很可能会看到的工程职业,以及产品和其他角色的发展,就是这些职业的 unbundling。
88:03
years to stay at the front, like the meat of the industry? What we are very likely to see happen
你知道吗,这种 unbundling,就是我们开始看到这些角色越来越多地 converge。
88:10
next with engineering careers, as well as product and other roles is the unbundling of these careers.
所以,那个同时有 product sense 的工程师,那个同时有 engineering sense 和 UX sense 的产品人员——
88:17
You know, where we unbundling, where we begin to see more of these roles converge. So the engineer
你知道,我们正在 unbundling,开始看到更多这些角色融合。所以工程师
88:23
that also has product sense, the product person that also has engineering sensor, UX sense,
有产品 sense,产品人员也有工程 sense、UX sense,
88:28
the UX person that also cares about product. So the guidance that I would give people is think
UX 人员也关心产品。所以我会给人们的建议是思考
88:35
beyond just that narrow lens of engineering. There are many people, especially if you are senior
超越仅仅工程这个狭窄的视角。有很多人,尤其是如果你是 senior
88:40
that have already had to think about these different aspects of success. If you are not someone that
那些已经不得不思考成功的这些不同方面的人。如果你不是那种有机会思考产品、technical evangelism,或者任何 go-to marketing,或者任何其他这些通常像不同拼图一样构成企业成功要素的方面,那就想想那些非工程的事情。我觉得那里有很多价值。而且如果你能展示……
88:46
has had a chance to think about product or technical evangelism or about any or go to marketing or
有机会去思考产品、技术布道,或者任何营销
88:54
any of these other aspects that are generally different puzzle pieces, how businesses are successful,
任何这些其他方面,它们通常是不同的拼图,企业如何成功
89:00
think about the non-engineering things. I think there's a lot of value there. And if you can show
思考非工程的事情。我觉得那里有很多价值。如果你能展示
89:05
employers that you are not just a builder, but you're someone that can help them as these roles
对于雇主来说,你不仅仅是一个构建者,而是能在这些角色
89:12
start to become a little bit fuzzier, I think that you can be successful in these times. Don't
开始变得有些模糊时帮助他们的人,我认为在这些时期你可以成功。不要
89:18
just be an engineer. So it sounds like it's one of your core values go back to being curious,
就做个工程师吧。
89:23
learn, and see where you can help beyond just building. Yeah, be a lifelong learner, be endlessly
所以听起来,其中一项核心价值观就是回归好奇、学习,看看在构建之外还能帮上什么忙。
89:29
curious. And I think that there will be roles for you in the future. Adi, thank you very much.
是的,做一个终身学习者,永远保持好奇。
89:33
Thank you so much. This is great. Thank you for having me. I really enjoyed this chat with Adi and
而且我觉得未来会有适合你的角色。
89:37
I hope you did as well. I do feel that Adi's career shows that working hard at always going a
Adi,非常感谢你。
89:42
layer deeper pays off over time. But he was a teenager. Adi already built a web browser from scratch,
非常感谢。
89:48
which is a massive project. He never stopped being curious about web browsers, then developer tools,
这太棒了。
89:53
and today he brings his same curiosity to AI agents. The concept I like that Adi mentioned was
感谢你邀请我。
89:58
this idea of cognitive surrender. The more capable AI agents become, the easier it is to let them do
这种“认知投降”的想法。
90:05
what they do. For example, a year back, you could still follow along how an agent worked step by step.
AI agent 的能力越强,你就越容易任由它们做自己那套。
90:10
But today, if you are multiple sub agents in parallel, there's no way you'll keep up with every step.
比如一年前,你还能一步步跟上 agent 的工作过程。
90:16
This creates this weird paradox. AI makes it easier than ever to build software,
但今天,如果有多个 sub agents 并行运行,你根本不可能跟上每一步。
90:21
but it also makes it easier than ever to whose understanding of the software that we're building.
这就产生了一个奇怪的悖论。
90:26
Adi had a really good counterpoint to this, which was mutual amplification. You want to amplify
AI 让构建软件变得比以往任何时候都容易,
90:31
your own understanding as the agents get better. So, have the agent's record decisions,
但也让我们比以往任何时候都更容易失去对自己正在构建的软件的理解。
90:36
document what it learned, and explain unusual choices. It's just no longer feasible to understand
对此,Adi 提出了一个很好的反驳观点,叫 mutual amplification。
90:42
how or why every single token was generated, but you want to keep understanding the important
每个 token 是怎么或为什么生成的,但你依然想理解你的任何 agent 所做的那些重要决策。
90:47
decisions that any of your agents make. Finally, I liked our conversation about what happens to
最后,我很喜欢我们聊的:当写代码只占工作的一小部分时,软件工程师会怎样。
90:51
software engineers when writing code is a smaller part of a job. Adi's answer is that accountability
Adi 的回答是,问责依然是一项工作。
90:56
remains a job. For example, inside of Chromium, specific software engineers own parts of the code base.
比如,在 Chromium 里,特定的软件工程师负责代码库的某些部分。
91:02
They obviously have not origin every line of code in that part that they own, but they understand
他们显然没有编写自己负责的那部分代码的每一行,但他们了解这个领域,他们决定什么重要、什么不重要,并且要对自己负责的部分能否良好运行承担责任。
91:07
the area, they decide what matters and what doesn't, and they are accountable for their part
我认为可以合理地假设,AI 会让这种问责对所有软件工程师来说都更加可见。
91:11
working well. I think it's reasonable to assume that AI will push this kind of accountability to
一定要去节目笔记里查看相关内容。
91:16
be more visible for any and all software engineers. Do check out the show notes for related
对所有软件工程师变得更加显眼。请务必查看节目笔记以获取相关内容。
91:20
the pragmatic and geodip types on Google's engineering culture and AI engineering. If you've enjoyed
Google的工程文化和AI工程中的pragmatic和geodip类型。
91:25
this podcast, please do subscribe on your favorite podcast platform and on YouTube. A big thank you
如果你喜欢这期播客,请记得在你喜欢的播客平台和YouTube上订阅。
91:30
if you also leave a rating on the show. I appreciate it and see you in the next one.
如果你还能顺便给节目留个评分,那就太感谢了。我很感激,下期再见。