The Pragmatic Engineer - 从 Chrome DevTools 到 AI 工程,与 Addy Osmani 封面

从 Chrome DevTools 到 AI 工程,与 Addy Osmani

From Chrome DevTools to AI Engineering, with Addy Osmani

本集简介

由以下赞助商提供: • Antithesis – 无需人工审查或传统集成测试即可验证系统的正确性,避免漏洞或服务中断。 • Google Cloud Run – 直接在 Google 可扩展的基础设施上运行代码和托管大语言模型(LLM),无需担心基础设施管理问题。 • Sentry – 被数百万开发者评为“还不错”的应用程序监控软件 — Addy Osmani 在谷歌工作了超过 14 年,曾参与 Chrome、DevTools、Core Web Vitals 以及最近的人工智能开发者体验项目。 如果你曾经打开过 Chrome DevTools,或者为 Core Web Vitals 优化过页面,你就已经使用过 Addy Osmani 构建的软件。在本期节目中,我与 Addy 进行了深入交流,探讨了他从 16 岁开始构建网页浏览器到成为谷歌总监的历程。我们讨论了他为数百万开发者构建工具时的经验教训、谷歌的工程文化,以及为何他在担任管理层职务后仍坚持亲自编写代码。我们还深入探讨了当今他如何与 AI 智能体协作、“认知投降”的风险、“循环工程”的方法论,以及为什么培养产品管理、市场进入策略等其他领域的技能是有益的。 — 时间戳 00:00 简介 02:50 Addy 当前的工作流程 05:11 Addy 进入科技行业的历程 15:04 Addy 在 jQuery 上的工作 16:44 TodoMVC 21:44 入职谷歌并参与 Chrome 开发 27:17 构建开发者工具 40:15 核心网页指标 45:42 Google 的工程文化 51:03 Addy 在 Google 的职业发展轨迹 57:55 Google 的总监角色 1:01:40 认知债务与认知妥协 1:03:03 与智能体协作 1:05:52 循环工程 1:12:55 软件工程师角色的演变 1:18:15 Addy 如何在写作中使用 AI 1:27:40 Addy 的未来规划 1:28:47 职业建议 — 本期节目相关的《The Pragmatic Engineer》深度文章: • 什么是循环工程? • 深入解读 Google 的工程文化 • AI 辅助编程将如何改变软件工程:残酷真相 • AI 智能体真的在拖慢我们的进度吗? • Claude Code 是如何构建的 • Codex 是如何构建的 • 从 IDE 到 AI 智能体(与 Steve Yegge 对话) • Google 的工程文化:播客版 — 制作与营销由 ⁠⁠⁠⁠⁠⁠⁠⁠https://penname.co/⁠⁠⁠⁠⁠⁠⁠⁠ 负责。如需咨询播客赞助事宜,请发送邮件至 podcast@pragmaticengineer.com。 在 newsletter.pragmaticengineer.com/subscribe 获取 The Pragmatic Engineer 完整访问权限

双语字幕

仅展示文本字幕,不包含中文音频;想边听边看,请使用 Bayt 播客 App。

Speaker 0

如果你曾经打开过 Chrome 开发者工具,或者优化过页面的核心网页指标(Core Web Vitals),那你其实就用过 Addy Osmani 参与开发的软件。

If you've ever opened Chrome DevTools or optimized a page for Core Web Vitals, you've used software built by Addy Osmani.

Speaker 0

Addy 在谷歌待了十四年,大部分时间都在做 Chrome 相关的工作,从一名软件工程师一路晋升为工程总监。

Addy spent fourteen years at Google, most of it on Chrome, going from software engineer to director of engineering.

Speaker 0

而且他刚入行科技圈的时候,还是个住在爱尔兰乡下的少年,就已经从零开始自己写了一个网页浏览器。

And when starting out in tech, as a teenager in rural Ireland, he built his own web browser from the ground up.

Speaker 0

今天我们要聊的话题包括:Chrome 开发者工具的幕后故事;它为什么成了谷歌最接近集成开发环境(IDE)的产品,以及像内存调试这类至今还没完全解决的问题;当你成为谷歌的工程总监后,工作会有什么不同;还有 Addy 是如何在带领五十多人的团队的同时,依然亲手参与软件开发工作的。

Today we talk about: The inside story of Chrome DevTools Why it became the closest thing Google has to an IDE and the problems that are still unsolved like memory debugging What becomes different when you become a director at Google and how Addy stayed hands on building software while building an engineering org with more than 50 people.

Speaker 0

人工智能如何改变软件工程、认知深度、认知让渡、循环工程以及软件工厂等等。

How AI is changing software engineering, cognitive depth, cognitive surrender, loop engineering and software factories and many more.

Speaker 0

如果你想听一位花了数十年帮助开发者理解网络,如今又深入思考人工智能如何改变软件工程的人分享见解,这期节目就是为你准备的。

If you want to hear from someone who has spent decades helping developers understand the web and is now thinking deeply about how AI changes software engineering, this episode is for you.

Speaker 0

本期节目由 Antithesis 赞助播出。

This episode is presented by Antithesis.

Speaker 0

如果你在使用智能体,你的工作就不再仅仅是写代码,而是去定义和测试它们。

If you work with agents, your job is no longer just writing code, it's specifying and testing it.

Speaker 0

而 Antithesis 是当今验证智能体代码最有效的方法。

And Antithesis is the most effective method of verifying agentic code today.

Speaker 0

在我们进入 Addy 在 Google 的经历之前,我想谈谈 Google 一个非常酷的产品——Google Cloud Run 以及他们最近推出的 Cloud Run 沙箱。

Before we get into Addy's journey at Google, I wanted to talk about a really cool product at Google, Google Cloud Run and their recently launched Cloud Run Sandboxes.

Speaker 0

当你构建 AI 应用或 AI 智能体时,你经常需要运行不受信任的程序,比如执行模型生成的 Python 代码,或者运行无头浏览器从网页获取数据,甚至执行用户提交的代码。

When you're building AI applications or AI agents, you often want to run untrusted programs like execute some Python code the model generated, or run a headless browser to fetch data from the web, or even execute code submitted by a user.

Speaker 0

但如何做到既快速又安全呢?

But how do you make this fast and secure?

Speaker 0

这正是 Cloud Run 沙箱所做的事情。

This is exactly what Cloud Run sandboxes do.

Speaker 0

Cloud Run 沙箱是临时的、隔离的 gVisor 环境,启动速度极快。

Cloud Run sandboxes are ephemeral isolated gVisor environments that spin up extremely fast.

Speaker 0

它们的设计初衷就是安全。

They were built with security in mind.

Speaker 0

它们强制实施凭据和环境隔离。

They enforce credential and environment isolation.

Speaker 0

基本上,它们无法访问你服务的环境变量或密钥。

Basically, they have no access to your service's environment variables or secrets.

Speaker 0

沙箱还限制了对互联网的出站网络访问,加速开发,消除基础设施的繁琐工作,并让你在Google Cloud Run上放心运行不受信任的工作负载。

Sandboxes also operate with lockdown network egress to the internet, accelerate development, eliminate infrastructure toil, and run untrusted workloads with confidence on Google Cloud Run.

Speaker 0

今天就到cloud.run试试Cloud Run沙箱吧。

Try Cloud Run Sandboxes today at cloud.run.

Speaker 0

Addy,很高兴你能亲自来到播客现场。

Addy, it's so nice to have you in person on the podcast.

Speaker 1

哦,谢谢你的邀请。

Oh, thank you for having me.

Speaker 0

在我们开始聊你的职业生涯和起步经历之前,我想先问一下,就在我们开始录制之前,我们聊到你的日常工作流程最近因为各种工具发生了很大变化,具体是怎样的?

And before we kick off into your career and how you got started, I wanted to ask just before we started recording, we're talking about how has your day to day workflow changed recently a bunch thanks to all these tools?

Speaker 1

智能体让我每天都能把不可能变成可能,方式既奇妙又古怪。

So agents have allowed me to take the improbable and turn it into the possible in ways that are kind of weird and wonderful every day.

Speaker 1

我现在很多生活上的事情都靠智能体来管理。

I I I manage a lot of my life now using agents.

Speaker 1

举个例子,就说这周吧,旧金山在办AI世界博览会。

And one example, just from, you know, this week, we've got the AI World Fair happening in San Francisco.

Speaker 1

我过两天要去做闭幕主题演讲。

I'm doing a closing keynote a couple of days in.

Speaker 1

所以我想确保我不会重复其他演讲者已经深入讲过的内容。

And so I wanted to make sure I wasn't repeating any beats that other speakers had gone into depth on.

Speaker 1

我也想让我的演讲和之前很多其他环节之间有很好的衔接。

And I also wanted to make sure there was good connective tissue from my talk to a lot of the other sessions that had happened.

Speaker 1

以前的话,你只能祈祷网上能有一些这些环节的内容,也许翻翻摘要。

Now normally, in the old days, you kind of pray and hope that there was any content from these sessions online, and maybe you'd look through the abstract.

Speaker 1

我能派出一堆智能体,去搜集过去几天所有能找到的关于这些演讲的信息,看看摘要、社交媒体上的内容,还有任何有用的相关信息。

I was able to fire off a bunch of agents, you know, go through everything that you can find about the talks from the last couple of days, look at the abstracts, any social content, anything around that that can be useful.

Speaker 1

这能帮我把我本来想讲的内容,塑造成一个更精炼的版本,希望能让听众从大会的其他部分,联系到我闭幕演讲的方式。

And that was able to help me kind of sculpt what I already wanted to talk about into something that I hope is refined and will give people a way to connect from other parts of this conference back to, you know, the way that I'm gonna close it up.

Speaker 1

这让我觉得非常有力量,以前这得花很长时间,甚至可能根本做不到,现在却变得很容易。

That for me just feels very empowering, something that would have taken a very long time if I would have even been able to do it at all is now very much within reach.

Speaker 0

然后你提到,感觉现在到处都是既有趣又混乱的状态,很多人也这么说,对吧?

And then you mentioned that it feels like, and a lot of people tell you, there's the kind of like both fun and chaos at the same time right now, everywhere, right?

Speaker 1

对,对,绝对是这样。

Yeah, yeah, absolutely.

Speaker 1

有趣又混乱,我觉得对我们很多人来说,当你有很多想法或者愿景的时候,你常常受限于时间或者自己到底能做多少事,而某种程度上,智能体把我们解放了?

Fun and chaos, I think that for many of us, when you have a lot of ideas or a lot of vision, you're often bounded by time or how much can I actually do, and in some ways, agents have unchained us?

Speaker 1

这也是为什么你一直听到,哦,嘿。

And this is one of those reasons why, you know, you keep hearing, oh, hey.

Speaker 1

你拿那些时间都干什么了?

What what are you doing with all of that time?

Speaker 1

智能体省出来的时间。

Agents have freed up.

Speaker 1

嗯,我在做更多的工作。

Well, I'm doing more work.

Speaker 1

我觉得对我们很多人来说,如果我们不喜欢工作,就不会用那些时间去做更多工作,但我们其实乐在其中。

I think for many of us, if we didn't enjoy it, we wouldn't be filling that time up with work, but we're having fun with it.

Speaker 1

所以在这种混乱中茁壮成长很有趣。

And so it's fun thriving in that chaos.

Speaker 0

但现在带我回到最初。

But now take me back to the very beginning.

Speaker 0

我们很多人都认识你,我认识你是在……

A lot of us know you, and I've gotten to know you when...

Speaker 0

通过你在谷歌的工作,通过你的书,但我想从更早的时候开始。

Through your work at Google, through your books, but I'd like to start from even before.

Speaker 0

你从哪里起步的?

Where did you start out?

Speaker 0

你第一次接触电脑是什么时候?你十几岁上高中时是怎么建浏览器的?

How did you have your first contact with computers, and how did you build a web browser when you were a teenager in high school?

Speaker 1

我一直对事物运作的原理很着迷。

So I've always been fascinated with understanding how things work.

Speaker 1

我在爱尔兰的乡村长大,那里有时,你知道,网络连接不一定很好。

And I grew up in rural Ireland, which was at times, you know, we didn't necessarily have the best Internet connectivity.

Speaker 1

那还是拨号上网的时代。

This was back in the days of dial up.

Speaker 1

所以我第一次接触电脑,大概是在八九岁的时候。

And so my first contact with computers was, you know, I was probably eight or nine years old.

Speaker 1

很幸运,我爸爸给我们弄来了第一台台式机。

We're very fortunate that my dad was able to get us, our first desktop machine.

Speaker 1

然后呢,我就会玩各种应用。

And, you know, I'd play around with apps.

Speaker 1

也会试着上网冲浪。

I'd play around with just, like, trying to browse the Internet.

Speaker 1

我一直觉得这很神奇,比如,这到底是怎么运作的?

And it was always fascinating to me, like, how does any of this work?

Speaker 1

我在地址栏里输入点什么,然后所有这些信息就不知怎么地显示出来了。

I'm just typing in something into an address bar, and all this information is just rendering somehow.

Speaker 1

我能看到文字、图片、视频。

I'm getting back text, photos, videos.

Speaker 1

这些东西到底是怎么运作的?

Like, how does any of this stuff work?

Speaker 1

所以随着时间推移,我就开始搭建网站。

And so over time, like, I would build out websites.

Speaker 1

我开始接触编程。

I'd start to get into programming.

Speaker 1

我学的第一门编程语言是Pascal。

My very first programming language was Pascal.

Speaker 1

所以我是Borland工具套件的超级粉丝。

So I'm a big big fan of the the Borland tool suite.

Speaker 1

我年纪很小的时候就学了C++。

I learned c plus plus when I was fairly young.

Speaker 1

有一年,我注意到我们有一个挺受欢迎的全国性科学竞赛,传统上这个竞赛主要是看学生们在物理、化学或者其他领域有没有有趣的突破或想法。

And there was one year when I noticed that we had a kind of popular national science competition, and traditionally, that competition was very much about, hey, do students have interesting breakthroughs or thoughts on physics or chemistry or any of those things?

Speaker 1

但是这次……

But this...

Speaker 1

我提到的那一年,是他们第一次真正开始认真对待计算机的年份。

The the year that I'm talking about was the first year where they actually started to really take computing seriously.

Speaker 1

而且就像我说的,我的网络连接不是很好。

And as I mentioned, I didn't have the best Internet connection.

Speaker 1

那段时间,尤其是青少年,开始对下载东西感兴趣,但那时候网速很慢。

This was also during the time when, especially, if you were a teenager, you started to get into learning about downloading stuff, and we didn't have fast internet connection back then.

Speaker 1

如果你想听一首歌,可能要等好几个小时才能下载完。

If you cared about checking out a song, you could be waiting hours for that to download.

Speaker 1

如果你想看个音乐视频,天哪,可能要等一个晚上,有时候甚至要两天才能下载下来。

If you cared about trying out a music video, man, that could be a a night, two days sometimes to download it.

Speaker 1

所以我试着去研究那些突然冒出来的下载管理器是怎么工作的。

And so I tried to to study how these kind of download managers that were popping up worked.

Speaker 1

下载管理器提供了一个思路。

And download managers kind of offered this one hook.

Speaker 1

就是说,与其只和服务器建立一条连接,不如同时开多个线程,建立多条连接,然后把内容分成小块来下载。

Well, rather than making one connection to a server, what if we spawned multiple threads and made multiple connections to a server, and we kind of chunked content?

Speaker 1

你知道,这是经典的计算机科学。

You know, it's classical computer science.

Speaker 1

你知道,把问题拆分成更小的部分。

You know, break down problems into smaller chunks.

Speaker 1

所以这就是其中一种方法。

And so that was one of the ways.

Speaker 1

而且如果服务器支持分块,你有时候确实能更快地下载文件。

And if the server supported, you know, chunking, you were able to, in some cases, actually get your file downloaded a little bit faster.

Speaker 1

所以我突然想到,嘿,我们正在用这种技术下载单个文件。

And so it dawned on me, hey, we're using this technique for downloading individual files.

Speaker 1

有没有人把它应用到我们浏览网页的方式上?

Has anyone applied this to how we browse the

Speaker 0

网页。

web?

Speaker 0

页面。

Pages.

Speaker 1

所以,显然,我不能……

And so, obviously, I can't...

Speaker 1

我不能在迈出第一步之前就去做复杂的事情,所以我想,好吧。

I couldn't, you know, do something complicated before I, you know, took my first baby steps, and so I thought, okay.

Speaker 1

我打算尝试探索如何构建一个浏览器。

I'm gonna try exploring how you build a browser.

Speaker 1

我开始阅读规范。

I started to read, you know, specifications.

Speaker 1

我大概15岁开始做这件事,15、16岁。

I was probably 15 years old when I started this, 15, 16.

Speaker 1

但我开始阅读规范,好的,HTML、CSS、JavaScript。

But I started to read specifications, okay, HTML, CSS, JavaScript.

Speaker 1

我获得了很多尊重,而且我仍然非常尊重的一点是,开发者们向浏览器扔各种乱七八糟的东西,但它们仍然能渲染出一些东西。

One of the things that I gained a great deal of respect for, and I still have a lot of respect for, is developers throw all kinds of weird crap at browsers, and yet they still render something.

Speaker 1

如果你想做一个有趣的实验,如果你对自己的代码感到沮丧,打开开发者工具,随便浏览网页十分钟。

If you ever want an interesting experiment in therapy, if you're ever feeling bad about your code, open up the DevTools and just browse the web for ten minutes.

Speaker 1

会出现那么多问题,但你还能和网站互动,这真是太不可思议了。

The number of things that will go wrong, and yet you'll still be able to probably interact with the site, is just wild.

Speaker 1

而且我当时

And I had

Speaker 0

对,出错的时候,你其实可以看看警告和错误信息,真的,就这样。

that Yeah, and going wrong, you can just look at the warnings and errors, honestly, just that.

Speaker 1

所以这是我尝试构建浏览器时遇到的最复杂的事情之一。

So was one of the most complicated things when I was trying to build a browser.

Speaker 1

就像,是的,你可以解析HTML,解析文档,加载图片,但一旦遇到那些不遵循规范、对支持的内容解释得很宽松的页面,你就得真的撸起袖子,像真正的消费级浏览器那样去处理。

It was like, yeah, you can parse HTML, you can parse documents, you can load up images, but as soon as you run into pages that stop following those specs and they take a very loose interpretation of what's supported, you have to really roll your sleeves up and try to behave the way that actual consumer browsers did.

Speaker 1

所以,我构建浏览器的过程挺有趣的。

And so I had my fun building out a browser.

Speaker 1

添加交互性和JavaScript支持非常困难。

Adding interactivity and JavaScript support was very difficult.

Speaker 1

但我还是设法让它跑起来了。

Managed to get it working.

Speaker 1

然后我真是个受虐狂,因为我决定,好吧,我想,Applets 和 Flash,还有,你知道,那时候我们有 Windows Media Player。

And then I'm a sucker for pain because I decided, well, I guess, Applets and Flash and, you know, we had Windows Media Player back then.

Speaker 1

所以人们会嵌入各种有趣的内容。

So people were embedding all kinds of interesting content.

Speaker 1

我告诉自己,好吧,如果不支持这些其他东西,那就不算一个完整的浏览器。

I told myself, well, it's not a complete browser if it doesn't support all these other things.

Speaker 1

所以我就加了支持。

And so I added support for them.

Speaker 1

然后我终于可以开始做我真正想做的事情了,那就是探索如何加快网页浏览速度,因为那时候你会受到本地硬件和带宽的限制。

And then I could finally get on to what I actually wanted to work on, which was exploring if I could speed up web browsing for this point in time when you were kind of constrained by the hardware and bandwidth that was available locally.

Speaker 1

那时候,这对我来说是个个人的痛点,因为在我能获得好的网络连接之前,我每个周末都会,特别是穿那种有很多口袋的工装裤,然后我会把工装裤里塞满软盘。

Back then, this was a personal pain because before I could get a good internet connection, I would literally every weekend, I'd especially wear cargo pants that had a lot of pockets, and I would fill my cargo pants with floppy disks.

Speaker 1

然后我会走到当地的图书馆,那里碰巧有稍微快一点的网络连接。

And I would walk down to our local library that just happened to have a slightly faster connection.

Speaker 1

然后我会尽量保存尽可能多的东西,然后回家,在我的电脑上查看。

And I would try to save as much as I could, then go back home, check it out on my computer.

Speaker 1

所以这对我来说是个个人使命。

And so this was a personal mission for me.

Speaker 1

我真的很想要更快的网络连接。

I really, really wanted a faster Internet connection.

Speaker 1

但我终于有机会去探索这个想法了。

But I finally got to explore this idea.

Speaker 1

它成功了,而且在某些……

It worked, and in some...

Speaker 1

你知道,那时候,在很多情况下,有些服务器支持这个想法。

You know, back then, in many cases, there were servers that supported this idea.

Speaker 1

确实让事情变得快了一点。

It did make things a little bit faster.

Speaker 1

所以我最终做出了一个对我有用的东西。

And so I, I ended up building something that worked for me.

Speaker 1

我把它带到了那个全国科学竞赛上。

I took it to this national science competition.

Speaker 1

我那时候就是个无名小卒。

I was nobody.

Speaker 1

我现在是无名小卒,以前也是。

I am nobody, I was nobody.

Speaker 1

我那时候就是个小孩,本来想着比赛结束就回家,然后说,对,我给一些人看了些酷玩意儿。

I was just this kid, and I was half expecting to just leave the competition and go back home at the end of it and say, Yeah, I showed some people some cool stuff.

Speaker 1

整个活动快结束的时候,现场有很多观众。

There was a big live audience at the tail end of this whole event.

Speaker 1

还上了电视直播什么的。

It was on live TV and everything.

Speaker 1

当他们宣布总冠军的时候,我特别震惊,因为我本来没指望能赢。

When they called out the overall winner, I was shocked because I expect to win this thing.

Speaker 1

那算是我第一次尝到媒体关注的滋味。

And that was my kinda first taste of media attention.

Speaker 1

感觉特别奇怪。

It was very strange.

Speaker 1

紧接着的那个周末,你知道,你还是个孩子。

The weekend right after, you know, you're a kid.

Speaker 1

你有点想在星期天早上睡个懒觉。

You you kind of, like, wanna sleep in on a Sunday morning.

Speaker 1

那时候没多少人会给你打手机什么的。

You don't really have too many people back then calling your cell phone or whatever.

Speaker 0

然后

And

Speaker 1

我的手机就一直响个不停。

my cell phone is just not stopping right now.

Speaker 1

第一个电话是《华尔街日报》打来的。

The first call is from the Wall Street Journal.

Speaker 0

基本上,你算是火了,那时候连推特都还没有。

Basically, you kinda went viral in a time where there was not even Twitter.

Speaker 0

这些东西都还没出现呢。

There was none of this just yet.

Speaker 1

《华尔街日报》、CNN。

Wall Street Journal, CNN.

Speaker 1

当时我其实不太明白发生了什么,但那是我第一次尝到那个世界的滋味。

Didn't really understand what was happening, but it was it was my first taste of that world.

Speaker 1

从那次经历中学到的一件事是,我仍然没有完全理解我所做的一切。

One of the things that I learned from that experience was I still didn't fully understand everything that I was doing.

Speaker 1

你知道,那时候你只是个 teenager。

You know, you're a teenager.

Speaker 1

仅仅因为你能做一个在你自己电脑上跑起来、能达成目标的 app,并不代表你理解背后那些层层的原理。

Just because you can build an app that runs on your machine and accomplishes a goal doesn't mean that you understand all of those layers behind the scenes.

Speaker 1

而我觉得,那件事开启了我对知识和对事物运作方式的一生的渴求。

And that, I think, kicked off for me a lifelong thirst for knowledge and understanding how things work.

Speaker 1

从某些方面来说,我可以称自己为“一招鲜”。

In in some ways, can call myself a one prick pony.

Speaker 1

我在乎的是理解问题,以及怎么去解决它们,它们背后是怎么运作的。

I I care about understanding problems and how, you know, how to fix them, how they work behind the scenes.

Speaker 1

后来我去了初创公司工作。

I would go on to work at start ups.

Speaker 1

我曾在AOL工作过一段时间。

I worked at AOL at one point.

Speaker 1

还是老主题,跟浏览器打交道。

Again, this theme of working with browsers.

Speaker 1

我加入AOL的时候,正好赶上AOL的一个关键时刻。第一天上班,我的经理人很好,对我说:嘿。

When I joined AOL, at a very AOL moment, my first day, my manager was a very kind guy, said, hey.

Speaker 1

去帮帮团队吧。

Go help the team.

Speaker 1

直接登录浏览器。

Just log in to the browser.

Speaker 1

去帮帮团队吧。

Go help the team.

Speaker 1

我当时想,好的。

I was like, okay.

Speaker 1

好的。

Cool.

Speaker 1

好的,我会去做的。

I'll I'll do that.

Speaker 1

于是我打开AOL浏览器应用,用我的工作电脑。

So I fire up, the AOL browser app, and I have my work machine.

Speaker 1

这个应用已经加载好了。

This app is loaded up.

Speaker 1

在我能调试任何东西之前,它首先问我要信用卡。

And before I can debug anything, the first thing it asks me for is my credit card.

Speaker 1

我当时就说,不好意思。

I was like, sorry.

Speaker 1

什么?

What?

Speaker 1

我需要输入我的信用卡才能开始工作吗?

I need to enter in my credit card to even start my work?

Speaker 1

而且我经理当时很忙,我也不知道有没有什么变通的办法。

And my manager was busy, I didn't know if there was, like, some workaround.

Speaker 1

我当时就想,好吧。

I was like, okay.

Speaker 1

我想这就是我为了开始工作必须要做的事情吧。

I guess I guess this is what I need to do to to get started with work.

Speaker 1

哇。

Wow.

Speaker 1

真是不同的时代。

Different time.

Speaker 1

完全不同的时代。

Very different time.

Speaker 1

但两年后,我加入了谷歌,负责Chrome浏览器的工作。

But two years later, I would join Google, and I would work on Chrome.

Speaker 1

但对我来说,非常有趣的一点是,如果你把计算看作一个洋葱,一层一层地剥开,幕后总会有一些有趣的东西。

But something for me that's been very interesting is, if you treat computing as this onion where you just keep peeling back the layers, there's always something interesting behind the scenes.

Speaker 1

而且我觉得,你能剥开并理解的层数越多,某种程度上,你就能更好地为那个世界做优化。

And the more of those layers that you can peel back and understand, I think in some ways, the better you can optimize for that world.

Speaker 1

你知道,曾经有一段时间,我可能只了解渲染的表面。

You know, there was a time when I maybe only understood the surface of how things render.

Speaker 1

但如果你说的是浏览器,你知道,有网络。

But if you're talking about browsers, you know, there is the network.

Speaker 1

有合成。

There is compositing.

Speaker 1

有JavaScript引擎。

There is the JavaScript engine.

Speaker 1

再往下一层。

You go down another layer.

Speaker 1

有芯片。

There's chips.

Speaker 1

有内存。

There's memory.

Speaker 1

还有GPU。

There's GPU.

Speaker 1

而且你对这些不同的基础组件了解得越多,就越能优化并构建出即使在资源受限的环境下也能服务用户的东西。

And the more you understand about all of these different foundational pieces, the better you can then optimize and build something that can serve people even on constrained environments.

Speaker 1

所以,如果你的手机稍微慢一点,我现在明白为什么手机会慢,以及哪些限制可能要求我们在构建时稍微改变思路。

So if you have a slightly slower phone, well, I understand now why the phone is slower and what constraints might require us to think slightly differently about what we're building there.

Speaker 1

所以我一直非常鼓励人们去理解事物是如何运作的。

So I'm always a big fan of encouraging people to understand how things work.

Speaker 0

然后,本着理解你早期参与的一个项目的精神——你知道,你构建了自己的自定义浏览器,做了一些很酷的事情,你理解如何渲染和解析,做这些事情。

And then in the spirit of understanding one project that you got involved on early You know, you built your custom browser that did some cool stuff and you understand how to render a parse, do some of these things.

Speaker 0

然后你加入了jQuery项目。

And then you join into the jQuery project.

Speaker 0

那是怎么发生的?

How did that happen?

Speaker 0

在jQuery里,你加入后的一段时间里,它成了JavaScript生态系统中使用最广泛的库。

And in jQuery, for a while after you joined, it it it became for a while the most used library in the JavaScript ecosystem.

Speaker 0

所以基本上在整个互联网上,那几年都是这样。

So basically across the web, there there were a few years of that.

Speaker 1

我觉得这完全要归功于jQuery的创造者约翰·雷西格。

I think full kudos goes to John Ressick, the creator of jQuery.

Speaker 1

jQuery真的是我第一个参与的大型社区开源项目。

JQuery was really my first contribution to a big community open source project.

Speaker 1

约翰非常热情,创造了一个让人们可以学习并成为更好的开源贡献者的环境。

And John was someone that was very welcoming and created an environment where people could learn and become better open source contributors.

Speaker 1

我一开始是和负责分类和问题处理的团队一起工作,后来开始写博客文章,并以其他方式为代码做贡献。

I started off working with the team of people that would deal with triage and issues and then moved on to working on blog posts and contributing to code and other ways.

Speaker 1

但正如你所说,它被广泛使用,所以你会遇到很多不同的使用场景。

But as you said, it was so widely used that you end up with so many different use cases people have.

Speaker 1

那时候,很多时候人们会有非常强烈的意见,比如,嘿。

A lot of the times back then, people would have very strong opinions about, hey.

Speaker 1

这个东西应该放在核心库中,而不是作为插件。

This thing should be in the main library in Core versus being a plugin.

Speaker 1

我非常敬佩你如何有效地与社区合作,同时又能坚持原则,做出有利于长期维护的决策。

And I got a lot of respect for how you effectively work with a community while also holding a line in terms of what decisions should be made to optimize for long term maintainability, for example.

Speaker 1

但那是一次很棒的经历,帮助我把这些经验带到了我自己的开源项目中。

But it was a great experience, and that helped me kind of carry those lessons on when I worked on my own open source projects.

Speaker 1

我非常感激那次机会。

I was very grateful for that opportunity.

Speaker 0

你以前有一个很受欢迎的开源项目叫TodoMVC。

And one of your popular open source projects back in the day was called TodoMVC.

Speaker 0

我们能聊聊那是什么以及你为什么开始做吗?

Can we talk about what it was and why you started?

Speaker 1

当然可以。

Absolutely.

Speaker 1

在JavaScript的黑暗时代,我们既没有框架也没有库。

There was a point in time back in the dark ages of JavaScript when we didn't have frameworks and we didn't have libraries.

Speaker 1

随着时间的推移,这些东西开始出现,我们开始有了不少。

Over time, those things started to pop up, and we began to have quite few of them.

Speaker 1

它们都试图实现各自的目标,有些情况下目标还重叠,有时则是相邻的。

And they all tried to accomplish, in some cases, overlapping goals, sometimes adjacent goals.

Speaker 0

我们说的是 Angular,还有

And we're talking about Angular We're

Speaker 1

Backbone。

talking about Backbone.

Speaker 1

Angular、Backbone、YUI、XJS。

Angular, Backbone, YUI, XJS.

Speaker 1

如果你对这些术语完全没概念,那也完全没问题。

And if you're too young for any of these terms to mean anything, that's also totally okay.

Speaker 1

当时有一大批新兴的库和框架开始涌现。

But there was this burgeoning community of libraries and frameworks that were starting to pop up.

Speaker 1

我个人遇到的一个困惑是,它们之间到底有什么区别?

And one thing that I personally struggled with was, well, how do these things differ?

Speaker 1

你可以去查看这些项目的官网,上面都会说,对,我们会帮你更轻松地构建应用。

You can go and you can check out the landing page for any of these projects, and they all say, yeah, we're gonna help you build apps easier.

Speaker 1

但我非常热衷于学习和理解这些东西是怎么运作的。

But I was very big into education and trying to understand how these things worked.

Speaker 1

所以我一开始是在每个框架里都做了同一个应用,尽量把功能标准化,这样如果你也处于我当时的处境,只是想了解一下,嗯,这些框架之间的架构理念有什么不同?

So I started off by creating basically the same application in every one of these frameworks and try to standardize the functionality so that if you were in the same position I was and you just wanted to get a sense of, okay, well, how does the architecture philosophy change between these things?

Speaker 1

语法上有什么差异?

How does the syntax differ?

Speaker 1

如果它们让你构建一个组件或一个界面元素,它们各自持什么立场,跟别人比又有什么不同?

If they're telling you to build a component or a piece of UI, what is the position they're taking on it versus somebody else?

Speaker 1

所以我从自己构建这些东西的过程中收获了很多个人价值。

And so I got a lot of personal value out of the way that I was building this this thing up.

Speaker 1

然后我就把它发布出去了。

And so I put it out into the world.

Speaker 1

我本来没指望它会有什么用。

I had no expectations of it being useful.

Speaker 0

但基本上,你就是用不同的框架实现了同一个待办事项应用,然后可以比较它们之间的差异。

But but, basically, it was you implemented a to do app or the same to do app with the different frameworks, and you could kind of compare how they differ.

Speaker 1

我的想法是,我想要一个足够简单的应用,几乎任何人都能使用和理解,但它需要有足够的交互性和功能,这样你才能真正对框架提供的某些功能进行压力测试。

And the idea was I wanted an application that was simple enough for almost anybody to be able to use and reason about, but it needed to have enough interactivity and enough functionality that you could really kinda stress test at least some of that functionality a framework offered.

Speaker 1

在某些情况下,这可能是状态管理、路由或其他方面。

In some cases, that would be state management or routing or other things.

Speaker 1

然后我就把这个发布到了网上。

And so I put this out into the world.

Speaker 1

我有点惊讶,有这么多开发者都遇到了同样的问题。

I was kind of shocked at how many other developers were running into this exact same challenge.

Speaker 1

这个项目很快就火了起来。

And The project quickly took off.

Speaker 1

那时候它开始获得很多星标。

It started to get a lot of stars back in the day.

Speaker 1

很快它就获得了成千上万的星标,我当时都有点懵。

It got thousands and thousands of stars very quickly, and I didn't quite know what was happening.

Speaker 1

没过多久,就有一些开发新框架或新版本框架的人联系我,说,嘿,这个挺酷的。

Before long, I had people who were working on new frameworks or new versions of frameworks reaching out to me, saying, like, hey, this is cool.

Speaker 1

这是我的拉取请求,带着我的框架。

Here's my pull request with my framework.

Speaker 1

你能加上它吗?

Can you add it?

Speaker 1

我们能一起合作,把它标准化吗?

Can we work together on standardizing it?

Speaker 1

通过这个项目,我遇到了我最早的一批真正的开源朋友,这些人现在在自己的领域里已经很有成就,他们多年来写了很多Node模块。

I met some of my first true open source friends through this project, people who are now very well established in their own means, who's written quite a lot of node modules over time.

Speaker 1

这个给人们提供一个足够简单应用的想法,最终在某种程度上成了多年的标准。

This idea of just giving people a simple enough application ended up becoming, in some ways, a standard for a number of years.

Speaker 1

我开始看到,如果一个框架给人们提供使用教程,他们实际上会用TodoMVC应用作为基线。

I began to see that if a framework was giving people a tutorial about how to use them, they would actually use a TodoMVC app as their baseline.

Speaker 1

这么多年过去了。

It's been so many years.

Speaker 1

那在很多方面是我职业生涯的开始。

That was at the start of my career in many ways.

Speaker 1

就在去年,我还看到一些实验室在测试功能时展示TodoMVC应用,这个东西的生命力让我非常惊讶。

Even this last year, I still see labs sometimes showing off TodoMVC apps when they're trying to test out features, and the longevity of this thing has been very surprising to me.

Speaker 1

还有一件让我惊讶的事是,当这个项目火起来的时候,苹果公司主动联系了我。

Another thing that was surprising was at one point when the project was taking off, Apple reached out to me.

Speaker 1

不会吧。

No way.

Speaker 1

苹果联系了我,具体来说是Safari和WebKit团队的人,他们说,嘿。

Apple reached to me, specifically the people who are working on Safari and WebKit, and they said, hey.

Speaker 1

我们想做一个浏览器基准测试,帮助浏览器厂商了解他们在响应性方面做得怎么样。

We're interested in working on a browser benchmark to help browser vendors understand, are they doing a good job at being responsive?

Speaker 1

这里的响应性不是指移动端的响应式设计,而是指交互性,也就是我们点击和触摸时响应得够不够快。

And responsive here doesn't mean responsive in the mobile sense, but responsive in terms of interactivity and are we responding to clicks and taps quickly.

Speaker 1

他们联系了我,说,嘿。

They reached out to me and they said, hey.

Speaker 1

你愿意和我们一起合作做这件事吗?

Would you like to collaborate with us on this thing?

Speaker 1

结果那个项目就变成了Speedometer。

And what that turned out to be was Speedometer.

Speaker 1

多年来,Speedometer已经成为所有浏览器的主要响应性基准测试,也就是网页应用基准测试,而且这个地位一直保持了很久。

Speedometer, over the years, has become the primary responsiveness benchmark, web application benchmark, for all browsers, And it's continued to be for a very long time.

Speaker 1

现在浏览器厂商们一起合作维护这个项目。

Browser vendors now collaborate together on it.

Speaker 1

他们一直在更新它。

They've kept it up to date.

Speaker 1

所以,随着这些年新框架和新架构模式的出现,他们一直在不断更新。

So, as new frameworks, as new architectural paradigms have come out over the years, they've kept updating it.

Speaker 1

这在很多方面把这个项目的遗产延续到了今天。

And that in many ways has carried the legacy of that project through to today.

Speaker 1

而且我一直很高兴它给人们带来了任何形式的帮助。

And I've been just very happy that it's given people value of any kind.

Speaker 1

你当时在做什么项目来着?

And you were building stuff

Speaker 0

业余时间也在做。

on the side.

Speaker 0

当时我们还在咨询公司、AOL,还有几家不同的初创公司工作。

Were also working at consultancies, AOL, at different startups.

Speaker 0

那谷歌是怎么出现的呢?

How did Google come along?

Speaker 1

谷歌的情况挺有意思的。

So Google was an interesting one.

Speaker 1

我记得有一回我在美国待了挺长一段时间,那是去中西部看望我妻子和她的父母。当时我正坐在他们房间里看电视,突然播了一部关于谷歌的纪录片。

I remember one of my first longer periods of time spent in The US was when I was visiting my wife and her parents out in the Midwest, and, I was, sitting, I remember, in in their room watching TV, and there's this documentary about Google that came on.

Speaker 1

片子里展示了像工程师……

And they showed, like, you know, engineer...

Speaker 1

那些早期在那里工作的工程师,以及他们为什么喜欢那里的工作氛围。

Early engineers that have been working there and why they enjoyed the environment.

Speaker 1

我当时就在心里想,要是有一天能在那样的地方工作就好了。

And I told myself, you know, I would love to work in a place like that someday.

Speaker 1

这些年来,我一直在前端领域、JavaScript 领域和 Web 应用领域持续发布免费教育内容。

I continued to put out free education into the front end world, this JavaScript world, web app world over the years.

Speaker 1

后来,我想 Google 注意到这些内容对一些人挺有用的,于是他们主动联系我,想让我面试一个开发者关系和开发者布道师的角色。

And at some point, I guess Google noticed that it was useful to some people, and so they reached out and wanted to interview me for a DevRel and builder role.

Speaker 1

当时他们想开发一些工具,觉得我的技能可能派得上用场,同时他们也想在技术社区做一些推广工作。

There was some tooling that they were trying to build out at the time that they thought could be a good use of some of my skills, but also some just general evangelism they wanted to do in the tech community.

Speaker 1

然后,你知道,一切都很顺利,正好就成了,我最后加入了 Chrome 团队。

And, you know, the stars aligned, just happened to to work out, and I ended up working on the Chrome team.

Speaker 0

那你加入的时候,能多讲讲你是什么时候加入 Chrome 团队的吗?

And then when you joined, can you tell us a little bit more about when you joined the Chrome Chrome team?

Speaker 0

Chrome 当时是什么样子的?

What was what was Chrome like?

Speaker 0

你和团队都做些什么工作?

What kind of work did you and the team do?

Speaker 0

因为现在 Chrome 就是浏览器的代名词。

Because now Chrome is synonym for web browser.

Speaker 0

我知道还有其他浏览器,当然,时不时地,它们也会有一些市场份额,但Chrome基本上已经赢得了市场。

I know there's other browsers, and every now and then, of course, they have some market share, but Chrome has largely won the market.

Speaker 0

但那时候你加入的时候,情况还不是这样,对吧?

But back then when you joined, this was not the case just yet, was it?

Speaker 0

我记得我加入的时候,那是一个我们对开发者非常兴奋的时期。

I remember back when I joined, it it was a period when we were very excited about developers

Speaker 1

把他们的创造力带到这个平台上。

bringing their creativity to the platform.

Speaker 1

那么,你能做些什么来推动这个平台,向我们展示什么是可能的,以及还有哪些不足,这样我们也许能帮助填补这些空白,构建更好的API呢?

So what can you do to push on the platform and show us both what's possible as well as the gaps so that we can potentially help fill those gaps and build better APIs?

Speaker 1

我记得我们当时有一个很棒的Chrome实验网站,我们有时会与工作室或开发者合作,只是展示一下,比如,嘿,这里有一个很酷的WebGL示例,你可能不会在其他地方看到,这给了一些人灵感,也许他们甚至会去学习更多关于着色器或不同库的知识。

So I remember there was this great Chrome experiment site that we had back in the day where we would sometimes work with studios or work with developers and just showcase like, hey, here's a cool WebGL example that maybe you wouldn't have otherwise come across, and that served as inspiration for some people to maybe even go and then learn more about shaders or different libraries.

Speaker 1

那也是一个前端工具仍然在大力发展的时期。

It was also a period of time when I would say front end tooling was still very much heavily evolving.

Speaker 0

我们说的是2012年、2013年。

We're talking 2012, 2013.

Speaker 1

对,我们说的是2012、2013年。

Yeah, we're talking 2012, 2013.

Speaker 1

那是在我所说的元框架出现之前,比如Next。

This was at a time prior to what I would now call meta framework, so like Next.

Speaker 1

比如Next.js,一个元框架,它

Js, for example, a meta framework It

Speaker 0

还不存在。

did not exist.

Speaker 1

不存在。

Didn't exist.

Speaker 1

所以我们回到了一个连前端构建工具都不太好的时代。

So we're we're going all the way back to a time when we didn't have the best build tools even for front end.

Speaker 1

我们甚至没有

We didn't have

Speaker 0

我们甚至没有像ESB这样的东西。

We we didn't have things like ESB, even.

Speaker 1

我们不一定在所有浏览器里都有标准化的JavaScript模块。

We didn't have we didn't necessarily have well standardized JavaScript modules in all browsers.

Speaker 1

大家还在用AMD、UMD、CommonJS这些。

People were still using AMD and UMDs, CommonJS, things like that.

Speaker 1

而且,构建工具和脚手架工具那时候还在不断发展中。

And, you know, the build tooling and the scaffolding tooling was still very much evolving.

Speaker 1

所以那段时间,大家会用到像Grunt这样的工具,你知道的……

And so this was the period of time when you went through things like Grunt for for anyone that, you know...

Speaker 1

可能我们有点暴露年龄了,但Grunt确实是个构建系统。

Maybe we're dating ourselves, but Grunt as a as a built system.

Speaker 0

还有,调试浏览器的时候,会用Firebug。

And also when you debug the browser, would use Firebug.

Speaker 0

你会在Firefox里打开它,然后希望IE里也能用,但如果不行,IE里真的没什么好的调试工具。

You would open it in Firefox and then hope that, like, in IE, it would work, but if it didn't, there weren't many good debugging tools in IE specifically.

Speaker 0

后来这些工具变好了,但那时候确实没有。

Later, they became better, but back there was a time when there was not.

Speaker 1

我觉得在那个黄金时期,大家为了在情况好转之前还能有个趁手的工具箱,可是没少想办法找对策。

And I think that, back in the heyday, there was a lot of workarounds people were trying to apply to still have a toolbox of some sort before things got much better.

Speaker 1

我们当时也花了不少精力,去跟那些开发构建工具、测试运行器和脚手架工具的人合作。

We put some work into working with the folks who were building out build tools and test runners and scaffolding tools.

Speaker 1

那时候我们自己还搞了一个叫 Yeoman 的项目,算是我们的贡献吧。

We worked on our own contribution called Yeoman back in the day.

Speaker 1

Yeoman 嘛,我不太确定能不能叫它第一个元框架,但我觉得它主要是想给你的项目起点带来一点条理和秩序。

Yeoman was really about, I don't know that I'd call it the first meta framework, but I would call it an attempt at trying to bring just a little bit of organization to your starting point.

Speaker 1

Yeoman 是我们开发的一个脚手架工具,它在命令行里会引导你走一个向导流程。你会像这样想:好吧,我打算搭建这个项目,可能我想用某个 UI 库和测试库,还要部署到特定的目标环境。

Yeoman was a scaffolding tool we created where you would get a wizard in your CLI, and you'd kind of say, well, yeah, I'm trying to build this thing, and maybe I'm interested in using this UI library and this testing library, and maybe I'm interested in deploying to this target.

Speaker 1

现在听节目的朋友可能会觉得这些想法很常规,也是你们日常使用的各种工具里标配的功能。

Now for folks who are listening in, those ideas might now sound very standard and things that you will find in all the tools you're regularly using.

Speaker 1

但在当时,这些功能还不存在。

Back then, they didn't exist.

Speaker 1

如果当年我们写的那些模块,至今还在某些你喜欢的工具的底层默默运行着,我一点都不意外。

And I wouldn't be surprised if many of the modules we created back then are still being used under the hood for some of your favorite tools.

Speaker 1

所以能参与那个摸索和减少摩擦的时期,真的很有意思。

So it was it was very fun getting to be a part of that moment where we were trying to figure things out and reduce friction.

Speaker 1

但我要说,有一段时间我们老是换工具,感觉隔三差五就换一次。

But I will say that there was this long period where we kept changing tools, what felt like, every once in a while.

Speaker 1

从Grunt到Gulp,再到Webpack,然后是Vite、Rollup,这些工具一直在进化,我很高兴看到这种变化,但也很高兴现在有些方面感觉稳定下来了。

You went from Grunt to Gulp to Webpack to to Vite, Rollup, all these all these things kept evolving, and I was happy to see the evolution, but I'm also happy that things in some ways feel like they've stabilized.

Speaker 0

我觉得,那其实是...

There was, I think, it's it's...

Speaker 0

那是动荡,但正是创新发生的时候。

It was churn, but, I mean, that's when innovation happens.

Speaker 0

你参与过Google Chrome DevTools的开发吗?

Did you work on Google Chrome DevTools?

Speaker 0

那是怎么开始的?

How did that start?

Speaker 0

因为我记得在2012年,我不确定有没有DevTools,但那时候又有...

Because I I remember in 2012, I'm not sure if there was DevTools, but again, there was a...

Speaker 0

当时最先进的就是Firebug。

The state of the art was Firebug.

Speaker 0

它并不是……

It wasn't...

Speaker 0

我记得它是开源的。

I think it was open source.

Speaker 0

它确实是当时网络上最强大的调试工具,比之前任何工具都强。

It it was actually just superior debugging on the web to anything before.

Speaker 0

我不确定具体是什么时候开始的,但我记得Chrome DevTools慢慢出现了,它带来了一些新功能,比如性能监控之类的。

And I'm not sure at what point, but I do remember, you know, Chrome DevTools slowly started to emerge and it it started to bring a bunch of new stuff like you could do performance monitoring, some of those things.

Speaker 0

你能从内部讲讲吗?

Can can you tell me from the inside?

Speaker 0

它是怎么开始的?

How how did it start?

Speaker 0

你做了哪些东西?

What you built?

Speaker 0

你们是怎么确定该做哪些功能的?

How you figured out what to build?

Speaker 1

我得特别提一下 Pavel Feldman,他是 Chrome DevTools 的技术负责人,在最初推动这个项目落地方面发挥了非常关键的作用。

So I have to give a shout out to Pavel Feldman, who was the tech lead for Chrome DevTools, and really played a very large role in helping it come to be originally.

Speaker 1

当时有一段时间,Chrome 正在琢磨怎么让自己的开发者工具跟 WebKit 区分开来,毕竟我们已经有 Safari 的 Inspector 和 WebKit 的 Inspector 了。

There was this period of time when Chrome was trying to figure out how it differentiated its developer tooling story from WebKit, where we had the Safari inspector, the WebKit inspector.

Speaker 1

我觉得 Pavel 和他的团队走了一条非常明确的路子,就是以开发者为中心,并且很在意整个生态系统的建设。

And I think there's a very specific direction that was developer centric and cared about the ecosystem that Pavel and his team were trying to help out with.

Speaker 1

我注意到他们跟开发者布道师的关系处得特别好。

And I noticed that they had a very good relationship talking to not just developer evangelists.

Speaker 1

那时候,像 Paul Irish 这样头脑敏锐的人也在身边,他们跟 Chrome DevTools 团队的合作非常紧密。

This was the time when we had really sharp minds like Paul Irish around also, working very heavily with the Chrome DevTools team.

Speaker 1

后来我们还迎来了像 Paul Backhouse 这样的人,他现在以 impeccable 这个产品闻名,在设计方面有着极高的造诣。

We would later have folks like Paul Backhouse, who is now known for things like impeccable, the impeccable skill for design.

Speaker 1

我觉得那段时期挺不错的一点是,大家都是以 Web 开发者的身份为原型,同时又是业余的构建者,比如我自己、Paul,还有那几位叫 Paul 的朋友。

And I feel like one of the nice things about that period of time was you had these people who were web developer archetypes and were builders on the side, myself, Paul, the Pauls.

Speaker 1

我们会把这些发现带给 DevTools 团队,帮助他们理解哪里存在摩擦点。

And we would try to bring those insights to the DevTools team and help them understand, well, here are the areas of friction that we're running into.

Speaker 1

有些情况下,你不能光靠构建工具来解决问题,因为底层没有相应的检测支持。

In some cases, you can't just build tools to help you out with them because you don't have the underlying instrumentation.

Speaker 1

所以我很高兴看到性能工具这些年有了很大的发展。

And so I was very happy to see things like performance tooling heavily evolve over the years.

Speaker 1

比如,DevTools 的性能面板简直是一项了不起的技术。

Like, the DevTools performance panel is just an amazing piece of technology.

Speaker 1

你可以直接点击录制,开始与页面交互,然后就能得到火焰图,还能非常深入地追踪时间都花在了哪里,而且这个功能还在不断改进。

The fact that you can just hit record, start interacting with your page, and you get a flame graph, you get very deep tracing about where all the time is being spent, and that continued to evolve over time.

Speaker 1

然后我们遇到了非常棘手的问题。

Then we had really hard problems.

Speaker 1

最棘手的问题之一就是内存管理。

Some of the hardest problems have been around memory.

Speaker 1

我想说,有时候——不知道这么说会不会有争议——真正懂内存管理的开发者其实很少。

I would say sometimes, I don't know if it's controversial, that very few developers understand memory management.

展开剩余字幕(还有 480 条)
Speaker 1

这会让内存问题的调试变得更加困难。

And that makes it even harder to debug memory problems.

Speaker 1

所以这些年来,内存调试的最新技术并没有太大的进步。

And so the state of the art around memory debugging hasn't evolved all that much over the years.

Speaker 1

这是一个难题。

It's a hard problem.

Speaker 1

DevTools 团队解决了很多有趣且困难的问题。

The DevTools team tackled a lot of interesting hard problems.

Speaker 0

我们能不能谈谈你带来的一些新东西?

Can can we talk about a part that...

Speaker 0

你带来了一些新的东西。

Where you brought in something new?

Speaker 0

因为,你知道,以前调试内存问题,基本上就是……

Because, you know, debugging memory, just back in the day, it's pretty much...

Speaker 0

我的意思是,如果你有一种语言,比如说有堆,你可以尝试可视化堆里有什么。

I mean, if you have a language that has, let's say, heap, you can try to visualize what's on there.

Speaker 0

你可以尝试,也许能成功分配出哪些变量在那里。

You can attempt and maybe be successful at allocating which variables there are.

Speaker 0

然后你也可以试着...

And then you can try to also...

Speaker 0

我的意思是,有些变量是容易的部分。

I mean, some of variables are are the easy part.

Speaker 0

还有栈。

There's also stacks.

Speaker 0

而且,你知道,这会变得有点乱,但你基本上有内存,而且你通常关心的是什么在增长。

And, you know, it gets a little bit messy, but you you you basically have a memory, and and you're typically interested in what is growing.

Speaker 0

还有一部分,我不确定我们在这方面进展了多少,但你有点想看看,是不是...

And there's a part that I I don't I don't I don't know that we got too far on that, but you're kind of trying to see, is it...

Speaker 0

这是不是变大了?

Is this getting bigger?

Speaker 0

循环是什么?

What are the loops?

Speaker 0

在哪里

Where is

Speaker 1

我的栈?

my stack?

Speaker 1

当然。

Absolutely.

Speaker 1

我觉得有几个有趣的阶段,我们看到自己和外部开发者遇到某些摩擦,然后和 DevTools 团队合作,尝试朝那个方向改进工具。

I would say that there are a few interesting arcs where we were seeing, you know, ourselves and developers externally running into certain kinds of friction and, you know, work with the DevTools team to try evolving some tooling in that direction.

Speaker 1

其中一个重要的阶段是接受开发者越来越多地使用框架和库来构建网页这个事实。

One of the the big arcs was embracing the fact that developers were increasingly using frameworks and libraries to build for the web.

Speaker 1

是的。

Yep.

Speaker 1

现在,对于记得那些黑暗时代的人来说,想象一下你有一个非常交互式的页面,用了很多不同的库,你正在尝试调试发生了什么。

Now, for anyone that remembers those dark ages, imagine that you have a page that's very interactive, it's using lots of different libraries, and you're trying to debug what's happened.

Speaker 1

你真正关心的是那段代码的哪一部分?

What part of that code do you actually care about?

Speaker 1

你关心的是那些在幕后驱动一切的框架代码吗?

Do you care about the framework code that is powering things behind the scenes?

Speaker 1

你关心的是那些你还没写的插件或组件吗?

Do you care about the plugins or the components sitting on top of it that you haven't written?

Speaker 1

你关心的是你自己写的代码吗?

Do you care about the code you yourself have written?

Speaker 1

所以,所有这些微妙的调试方面都需要一个解决方案。

And so you have all of these very nuanced aspects of debugging that need a solution.

Speaker 1

我们试图引入的一件事就是尊重和理解,是的,开发者会使用这些不同的技术栈。

One of the things that we we tried to introduce was respect and understanding that, yeah, developers are gonna be using these different tech stacks.

Speaker 1

你知道,我们有一个源映射的故事摆在那里。

You know, we had a source maps story sitting there

Speaker 1

在那里,我们可能开始推理什么

Where potentially we can start to reason about what's

Speaker 0

在映射回代码的哪一部分时,没错。

in You you map back to, like, what part of the code Exactly.

Speaker 0

这可不是件简单的事。

Which is not trivial.

Speaker 1

没错。

Exactly.

Speaker 1

这确实不简单。

Which is not trivial.

Speaker 1

而且我要大大表扬一下团队,因为我觉得我们最终搞定的那个源码映射方案,真的能帮你很好地理清思路,哪怕你用的是一长串工具链。

And a lot of kudos to the team because I think we ended up on a source map story that really helps you reason well about, you know, even if you were using a long tool chain of things.

Speaker 1

比如说,你随便看看开发者用的那些工具……

Like, if you take a look at any tools that developers...

Speaker 1

对于任何大型网站,不管是优步、奈飞,还是推特这种大平台,你很可能低估了同时运行的工具数量和复杂度,就为了完成一个任务。

For any big site, you know, whether it's Uber or Netflix or any large Twitter, any large site, you probably underestimate the complexity and the number of tools that you're running at any one time for any one task.

Speaker 1

还能让用户看到,嘿,这些才是你真正关心的文件。

Being able to still allow people to see, well, hey, here's actually the files that you care about.

Speaker 1

这真是个难题。

It's a hard problem.

Speaker 1

我觉得让用户能看到那个视图,是我们带来的价值之一。

I think that allowing people to get that view was part of the value that we brought.

Speaker 1

这些年来我们引入了各种黑盒视图,这样你就可以说,嘿,其实我不在乎你告诉我,比如,React 库有问题。

We introduced different kinds of black box views over the years so that you could say, well, hey, actually, I know that I don't care about you telling me there's an issue with, for example, the React library.

Speaker 1

但我确实想让你告诉我,我写的 React 代码有问题。

But I do want you to tell me that there's an issue with the React code that I wrote.

Speaker 1

所以,给你这些开关和控制,我觉得对用户来说非常有用。

And so giving you even those toggles, those controls, I think was very powerful for people.

Speaker 1

移动端是另一个改变一切的转折点。

Mobile was another big moment that changed everything.

Speaker 1

如果你想想移动端,今天,我觉得可能已经有了关于测试什么的成熟的最佳实践。

If you think about mobile, today, I would say there's probably established best practices around the things to test.

Speaker 1

你想测试你的视口宽度、点击目标,我是不是点得够大。

You wanna test out your viewport width, your tap targets, if I'm It's tapping big on something enough.

Speaker 1

没错,

Exactly,

Speaker 0

在大屏幕上呢?

it it on big screen?

Speaker 1

对,移动设备甚至还有各种不同的传感器。

Exactly, there are all these different kinds of sensors even that mobile devices have.

Speaker 1

我们最初并没有针对这些东西的工具,所以最终我们在开发者工具里建立了一个不错的设备模式,让你可以预览你的网站在不同视口尺寸下的样子。

We didn't we didn't have tooling around any of this stuff originally, and so we ended up building out a nice device mode in DevTools that would allow you to preview what your site would look like at different viewport sizes.

Speaker 1

你可以很快地切换,然后说,对,这大概就是它在iPhone或Pixel设备上的样子。

You can very quickly toggle and say, yeah, this is what it roughly looks like on an iPhone or a Pixel device.

Speaker 1

当然,最好的测试方式当然是在那些真实的设备上试一试,但即使只是快速了解你是否走对了方向,对人们来说也是非常有价值的。

And, of course, the absolute best kind of testing would be trying it out on one of those app, those accurate devices, but even to quickly get a sense of whether you're heading in the right direction was very valuable to people.

Speaker 1

随着更多的最佳实践开始确立,我们会随着时间的推移不断改进这一点。

We would evolve that over time as more of those best practices started to establish.

Speaker 1

我想,随着Web应用逐渐成熟,比如PWA(渐进式Web应用),有一段时间人们真的想让Web与原生应用竞争。

I guess the web apps growing up, so PWAs, Progressive Web Apps, there was a period of time when people really wanted to make the web competitive compared to native.

Speaker 1

所以你会想,还缺什么呢?

And so you think about, well, what are the things that are missing?

Speaker 1

嗯,你需要一个很好的方案来处理离线缓存、推送通知、后台同步,这些我们之前都没有特别好的解决方案。

Well, you need a really good story for offline caching, push notifications, background sync, all of these capabilities that we didn't necessarily have a strong story for.

Speaker 1

而且因为这些功能都不简单,你需要为它们都提供调试方案。

And because these are nontrivial features, you need to have a debugging story around all of them.

Speaker 1

所以我们帮助构建了应用程序面板,这样你可以进去,对于这些功能中的任何一个,无论是调试 Service Worker、调试缓存还是调试其他任何东西,你都能做到。

And so we help build out the application panel so that you can go in, and for any of these features, whether it's debugging service workers or it's debugging your cache or debugging any of these things, you're able to do that.

Speaker 1

所以尽管工具集随着每个时代的发展而扩展,我觉得 DevTools 一直都能跟上,尤其是浏览器中的 API 也在不断演变以应对这些时刻。

And so even though the toolset has expanded over time for each of these eras, I feel like DevTools has been able to keep up, especially as the APIs in the browser has also been evolving over time to meet these moments.

Speaker 0

嗯,这很有趣,因为我通常……

Well, that's interesting because I I usually...

Speaker 0

当我观察不同公司及其优势时,微软在构建 IDE 方面很出色,JetBrains 也是如此。

When I look through different companies and their strengths, Microsoft is amazing at building IDEs and so is, for example, JetBrains.

Speaker 0

但对谷歌来说,我从来不觉得谷歌擅长构建 IDE,除了在 Chrome 内部。

But for Google, I never felt that Google was any good at building IDEs except for inside of Chrome.

Speaker 0

比如,每当我需要调试一个 Web 应用时,我总是……

Like, whenever I I have to debug a web application, I always...

Speaker 0

我……

I...

Speaker 0

过去这么多年,我一直用 Chrome DevTools,因为它有……

The past, like, many many years, I used Chrome DevTools because it it had...

Speaker 0

我的意思是,那种我习惯在 Visual Studio 里用的调试功能,比如断点、条件断点,还有各种调试选项,就像你……

I mean, the kind of debug functionality I'm used to having Visual Studio have, which is breakpoints, conditional breakpoints, all sorts of so many debug options from as you as you...

Speaker 0

我们刚才提到的性能、内存,还有模拟这些场景的能力。

We just said performance, memory, being able to simulate some of those things.

Speaker 0

所以对我来说,看到这些真的很有意思。

So it's very interesting to for me to see that.

Speaker 0

感觉就像……

It's almost as if...

Speaker 0

我不确定这是你、你的团队,还是整个 Google 的决定,但他们意识到了浏览器非常重要。

I'm not sure if this was you, your team, or Google as a whole, but they realized the browser is very important.

Speaker 0

所以他们几乎像是建了一个……

And so so they built, like, almost like an...

Speaker 0

这几乎就像里面内置了一个IDE。

It's almost like an IDE inside of it.

Speaker 0

你可以直接在里面编辑内容。

You can you can edit the things in line.

Speaker 0

我觉得作为工程师或开发者,除非你做前端,否则你很难注意到这一点,但一旦你注意到了,就会觉得它怎么整合得这么神奇。

And I think as engineers or as developers, unless you work in front end, you never really notice this, but when you do, it's fascinating how how how it came together.

Speaker 1

确实很神奇。

It's really fascinating.

Speaker 1

而且我觉得,我们是不是一个IDE,要不要往IDE方向发展,一直是团队里热议的话题。

And I think that are we in IDE, aren't we in IDE, is that a direction we wanna go in, was always a hot topic for the team.

Speaker 1

我觉得最终的共识是,我们想贴近开发者,因为你总会有自己偏爱的编辑器。

And I think that where things kind of landed was, well, we wanna meet developers where they're at because you're always gonna have your favorite editor.

Speaker 1

现在我们说的是你代理的控制平面。

Now we're talking about your control planes for your agents.

Speaker 1

你总会有不同的界面,对吧,你主要想在那里工作。

You're always gonna have a different surface, right, that you wanna primarily work in.

Speaker 1

而且只要开发者工具能在你所在的地方发挥作用,并且有用,我觉得那……

And as long as DevTools can meet you where you're at and be useful, I think that that...

Speaker 1

这一直是团队努力在做的事情。

That's been something the team has tried to do.

Speaker 1

我们继续经历了其他阶段。

We continued having other eras.

Speaker 1

严高在帕维尔之后成为了我们的下一位技术负责人,并带领我们度过了试图弄清楚AI已经出现的时代,我们既要能够帮助人类理解浏览器为你生成的海量数据,也要让你能够将你的代理连接到Chrome和开发者工具,让它自动为你完成许多这样的流程。

Yan Gao became our next tech lead after Pavel and helped us through the era of trying to figure out AI is now in the picture, and we wanna both be able to help humans reason through this massive amount of data that the browser generates for you, as well as make it possible for you to connect your agent up to Chrome and DevTools and be able to have it just automate a lot of these journeys for you.

Speaker 1

所以,我认为对于第一个问题,我记得每次和大型网站合作解决性能问题时,你很容易花上半天时间查看跟踪记录,甚至还没开始写任何修复。

And so, I think that for the first of those problems, I remember anytime I would work with a big site on their performance problems, you could easily spend half a day just looking at traces, before you've even written any fixes at all.

Speaker 1

现在有了大语言模型,就能很快地推理海量的堆栈跟踪,真正找到可以做的修复。

And now that we have LLMs, it's very quick to, like, reason through massive stack traces and actually be able to get down to fixes you can make.

Speaker 1

看到这一切真的非常非常棒。

And that's just been really, really wonderful to see happen.

Speaker 0

Addy刚刚描述了用大语言模型从巨大的问题到实际修复的过程,这正好是谈论我们经验丰富的赞助商Sentry的完美时机。

Addy just described using LMs to go from massive tax issues to working fixes, which is the perfect moment to talk about our seasoned sponsor Sentry.

Speaker 0

你大概已经知道Sentry是什么了,因为你是个开发者。

You probably already know what Sentry is because you're a developer.

Speaker 0

如果你不知道,随便找个开发者问问,他们就会告诉你。

If not, just ask a dev and they'll tell you.

Speaker 0

我用Sentry来监控pragmatic engineer的后端,捕捉所有错误。

I use Sentry to monitor the back end of the pragmatic engineer for any and all errors.

Speaker 0

当然,Sentry不只是处理错误。

Of course, Sentry doesn't only do errors.

Speaker 0

他们还有日志、回放、追踪片段、性能分析、指标等等,因为这些都是通过同一个追踪ID关联起来的。

They also have logs, replays, spans, profiles, metrics, and more because they're all connected by the same trace.

Speaker 0

Sentry最近新增的一个我很喜欢的功能是修复错误的能力。

One new capability Sentry has built that I'm really liking is the ability to fix errors.

Speaker 0

让我给你演示一下。

Let me show you.

Speaker 0

这是我管理后台的错误列表。

Here's the list of errors on my admin back end.

Speaker 0

认证那边最近有个错误,我想看看。

There's a recent error on auth that I wanna check out.

Speaker 0

让SEER帮我们自动修复一下。

Let's have SEER run an auto fix for us.

Speaker 0

SEER是Sentry的AI调试工具。

SEER is Sentry's AI debugging tool.

Speaker 0

首先,它会生成一个根本原因分析。

First, it generates a root cause analysis.

Speaker 0

它发现HTTP和HTTPS的URL之间有问题。

It's finding some problem with HTTP versus HTTPS URLs.

Speaker 0

不错。

Cool.

Speaker 0

现在我们知道哪里出错了,SEER可以制定一个修复计划。

Now that we know what's going wrong, seer can create a plan on how to go about fixing it.

Speaker 0

我可以去修改这个计划,但我对它很满意。

I could go and edit this plan, but I'm happy with it.

Speaker 0

那我们就来生成一个实际的代码修复吧。

So let's create an actual code fix.

Speaker 0

这是SEER生成的代码修复。

Here's a code fix that seer generated.

Speaker 0

假设看起来没问题,对我来说也确实没问题,那我们就来起草这个拉取请求。

Assuming it looks good, and in my case it does, let's draft the pull request.

Speaker 0

然后,啪的一下,拉取请求就创建好了,可以直接合并了。

And boom, the pull request is created, ready to merge.

Speaker 0

我喜欢Autofix的一点是,Sentry从仅仅显示我应用里的错误列表,变成了给我一个快速修复并闭环的途径,而且整个过程中我始终掌控着这个bug修复。

What I love about Autofix is how Sentry went from showing a list of errors inside my application to offering me a fast way to fix it and close the loop while I stay in charge of this bug fix the whole time.

Speaker 0

调试变得更快、更简单了。

Debugging just got a whole lot faster and a whole lot easier.

Speaker 0

去sentry.io/pragmatic看看Sentry吧,今天就开始检测错误、诊断根本原因、修复问题和回归。

Check out Sentry at sentry.io/pragmatic and start detecting errors, diagnosing the root causes, and fixing issues and regressions today.

Speaker 0

Addy提到了我们使用LLM时会发生的一些变化。

Addy mentioned things that change when we work with LLMs.

Speaker 0

有一点是肯定的,如果你和智能体一起工作,你的工作就不再是写代码,而是指定和测试代码。

One thing is for sure, if you work with agents, your job is no longer writing code, it's specifying and testing it.

Speaker 0

这就把我们带到了我们的赞助商,Antithesis。

And this leads us to our presenting sponsor, Antithesis.

Speaker 0

Antithesis 是当今验证智能体代码最有效的方法。

Antithesis is the most effective method of verifying agentic code today.

Speaker 0

让我解释一下它是如何工作的。

Let me explain how it works.

Speaker 0

Antithesis 在一个对抗性的模拟环境中运行你的整个系统。

Antithesis runs your whole system in a hostile simulation.

Speaker 0

通过这样做,它能在用户之前发现每一个错误。

By doing so, it finds every bug before users do.

Speaker 0

而且因为模拟是完全确定性的,Antithesis 不仅能发现错误,还能完美复现每一个问题。

And because the simulation is fully deterministic, Antithesis doesn't only find bugs, it gives you a perfect reproduction of every issue.

Speaker 0

为了创建这样的工具,Antithesis 团队还需要发明新的调试工具。

To create such a tool, the Antithesis team needed to invent new kinds of debugging tools as well.

Speaker 0

比如,这里有一个所谓的bug概率图。

For example, here is what's called a bug probability graph.

Speaker 0

横轴是虚拟时间,纵轴是概率。

The x axis is virtual time and the y axis is probability.

Speaker 0

当Antithesis运行宿主单元模拟时,它会标出bug概率增加的时间段,这对找出bug的根本原因非常有帮助。

As Antithesis runs the host cell simulations it plots timeframes when the bug probability increases which greatly helps with finding the root cause of bugs.

Speaker 0

而且Antithesis还有一个日志可视化工具。

And Antithesis also has a log visualizer.

Speaker 0

向下的竖线代表从同一状态分叉出的事件,紫色点就是bug发生的地方。

Vertical lines going down represent events branching off from the same state, and the purple dots are where the bug happens.

Speaker 0

Antithesis是发布由代理编写的代码时最好的选择。

Antithesis is as good as it gets being able to ship agent written code.

Speaker 0

Jane Street、fly.io和etcd社区等团队都在使用它,以便满怀信心地发布。

It's what teams at Jane Street, fly.io, and the etcd community use to ship with full confidence.

Speaker 0

请访问antithesis.com/pragmatic了解更多信息。

Head to antithesis.com/pragmatic to learn more.

Speaker 0

那么,有了这个,我们回到Addy那里,聊聊Core Web Vitals。

And with this, let's get back to Addy and talk about Core Web Vitals.

Speaker 0

你真正推动的一个领域……

And one area that you really pushed...

Speaker 0

你和团队一起推动整个行业前进的,就是Core Web Vitals。

You and the team pushed the industry together is Core Web Vitals.

Speaker 0

你知道,这些是一套标准化的指标,用来衡量网页的真实用户体验。

You know, these are a standardized set of metrics to just figure out the real world experience to web pages.

Speaker 0

还有一些……

And some of the...

Speaker 0

你知道,在这之前,你可能会……

You know, before this, again, you would...

Speaker 0

作为开发者,你会去测量,比如,渲染有多快,或者下载有多快。

As a developer, you would measure, like, alright, how quick does it render or how quick does it download.

Speaker 0

那都是些很简单的东西。

It was very simple stuff.

Speaker 0

但你引入了像LCP、最大内容绘制、CLS、累积布局偏移、FIE首次输入延迟,然后我还……

But you introduced things like LCP, largest Contentful Paint, CLS, cumulative layout shift, FIE first input delay, and then I n...

Speaker 0

INP,即交互到下一次绘制。

IMP interaction to next paint.

Speaker 0

就像,你在场一样。

Like, you were there.

Speaker 0

比如,团队是怎么想出这些的?

Like, how did the team come up with these things?

Speaker 0

它们……

They're...

Speaker 0

如果你不是网络工程师,还是会有……

If you're not a web engineer, there's still...

Speaker 0

理解它们需要一点时间,但它确实能解释用户的感受。

It takes a little time to understand them, but but it does actually explain, like, how users feel.

Speaker 0

我觉得你们在谷歌内部不知怎么就把那种感受和数字联系起来了。

Like, I feel you somehow inside of Google managed to connect the kind of feel to a number.

Speaker 1

我觉得Chrome团队一直都很重视用户体验研究。

I think that the Chrome team has always had an appreciation for user experience research.

Speaker 1

而且,每当网络出现新情况时,我们都会重新参考那些研究,来了解用户的期望是什么,以及我们如何帮助满足这些期望。

And, again, every time there was new moment for the web, would reconsult that research to understand, well, what are users' expectations and how can we help meet them?

Speaker 1

我们过去思考性能的方式,很大程度上就是,嘿,页面加载了吗?

The way that we used to reason about performance was very much like, hey, is a page loading?

Speaker 1

那到底是什么意思?

And what does that even mean?

Speaker 1

对很多人来说,就是页面准备好了吗?

Well, for many people, is the page ready?

Speaker 1

但“准备好了”又是什么意思?

But what does ready mean?

Speaker 1

是指我能看到它吗?

Does that mean that I see it?

Speaker 1

还是指我能点击它,而且真的有反应?

Does it mean that I can click around it and anything actually happens?

Speaker 1

所以我觉得在很长一段时间里,我们对页面加载时间的思考方式几乎是模糊不清的。团队觉得是时候对性能的考量方式提出一个更细致的视角了。

And so I think for a very long time, we had this this almost nebulous way of thinking about page load times, And the team felt like it was finally time to come up with a more nuanced perspective around how we reason about performance.

Speaker 1

所以如果你把它拆开来看,用户旅程中有几个他们关心的关键节点。

And so if you break it down, there are a number of key moments across the user's journey that they care about.

Speaker 1

开始了吗?

Is it happening?

Speaker 1

有没有东西在加载?

Is anything loading?

Speaker 1

你看到页眉了吗?

Do you see a header?

Speaker 1

你看到加载图标了吗?

Do you see a spinner?

Speaker 1

你看到任何东西了吗?

Do you see anything at all?

Speaker 1

那里有没有对你有用的内容?

Is there something useful there for you?

Speaker 1

所以可能那是一个头部图片。

So maybe that's a header image.

Speaker 1

可能是一个主图。

Maybe it's a hero image.

Speaker 1

可能是一个主视频。

Maybe it is a hero video.

Speaker 1

可能那是页面上的核心内容。

Maybe it's the core piece of content on the page.

Speaker 1

它有用吗?

Is it useful?

Speaker 1

它好用吗?

Is it usable?

Speaker 1

那里……

There...

Speaker 1

所有这些不同的时刻都可以与这些不同的指标相关联。

And all of these different moments can correlate to these different metrics.

Speaker 1

所以对于像你的主图这样的东西,你可以把它看作是最大的内容绘制。

So for things like your hero image, you can think about that as your largest contentful paint.

Speaker 1

但这并不是每个页面都通用的。

And that's not gonna generalize across every page.

Speaker 1

在某些情况下,图片可能不是最重要的。

In some cases, the image may not be the most important thing.

Speaker 1

可能是文章的文字。

It might be the article text.

Speaker 1

有些情况下,你可能希望页面能很快地进行交互。

There may be cases where you wanna be able to interact fairly quickly with a page.

Speaker 1

我记得多年来有很多次,我在购物时,不管是在手机上还是在电脑上,点击“加入购物车”按钮,结果却毫无反应。

I can remember many times over the years when I might be shopping and whether it's on my phone or on my desktop, I will click the add to cart button and does crickets.

Speaker 1

什么都不会发生。

Nothing will happen.

Speaker 0

因为JavaScript没有加载,或者事件处理...

Because JavaScript did not load or the event hand...

Speaker 0

或者,或者……

Or or the...

Speaker 0

或者,也许是因为不是所有元素都加载完了,所以事件处理器没有绑定上。

Or maybe the event handler was not attached because not all elements finished loading.

Speaker 0

我们作为工程师知道发生了什么,但作为用户,感觉就是……

We know as engineers what's happening, but as a user, it's like

Speaker 1

作为用户,等等。

As a user, wait.

Speaker 1

这……这是怎么回事?

What's what's happening?

Speaker 0

有时候可能会发生这种情况,你就是一直点、点、点。

Stuff can happen where you you just tap, tap, tap.

Speaker 0

然后事件处理器绑定了,结果你点了两三次,但你根本不知道。

The event handler gets attached, now you're adding it, like, twice or three times, but you don't know.

Speaker 1

其实简单得惊人。

Are are shockingly simple.

Speaker 1

你知道吗?

You know?

Speaker 1

如果你想想一个人想过马路时的体验,如果灯不变绿,或者没有及时提示可以走,他们就会一直按那个按钮。

If you think about the experience you have with somebody that's just trying to cross the street, if the light doesn't turn, doesn't say they can walk fast enough, they'll just keep hitting that button.

Speaker 1

他们在网上的体验也是一样的。

That's the same experience they have on the internet.

Speaker 1

我觉得还有其他方面的用户体验,我们其实也承认是有问题的。

I think that there were other aspects of user experience that I think we acknowledged were actually problematic.

Speaker 1

一个很大的问题是,这些年来,网站显然想尽办法尽可能多地变现,所以你不仅会看到横幅广告,还会看到弹窗,所有这些都直接甩在你脸上。而且就算你暂且不说商业变现的合理性,这些也不应该导致很糟糕的体验。

One big one was, over the years, obviously sites tried to monetize as heavily as they could, and so you would see not just banner ads, you'd see modals, you'd see all of these things thrown up in front of your face, And even if you set aside maybe there's some validity around a business needs to monetize, those things shouldn't cause a really bad experience.

Speaker 1

如果我在一个有很多广告的页面上,我不应该刚开始读一篇文章,然后突然所有内容都被挤下去,对吧,就因为广告终于加载完了。

If I'm on a page that has a bunch of ads, I shouldn't start reading an article and then suddenly everything gets pushed down, right, just because the ad is finally loaded.

Speaker 1

所以,累积布局偏移这个概念就是由此而来的。

And so that's where cumulative layout shift kind of comes from.

Speaker 1

这个想法就是,嘿,我们应该尽量保持页面稳定,这样用户才能有好的体验。

It's this idea that, hey, we should be trying to keep that page stable so that the user has a good time.

Speaker 1

我们反复推敲,试图用一种能涵盖多种细微差异场景的方式来定义这些指标,因为互联网其实并不那么单一。

There was a lot of iteration around how do we define these metrics in a way that captures a few of these different use cases that are very nuanced because the Internet is not all that homogenous.

Speaker 1

不同的人对页面价值的看法以及看重的方面,往往大不相同。

There are lots of different ways that a person can think about the value of a page and what's important.

Speaker 1

所以团队做了大量实验,尝试了各种思考这些指标的维度,并与标准社区和开发者紧密合作进行验证,看看大家是否真的认为这些指标能反映你们对自己页面价值的认知。

And so the team did a lot of experiments, experimented with lots of different ways of thinking about these metrics, and worked very heavily with both the standards community and developers to validate, hey, do you actually believe that these things line up with how you would say, you think about the value of your pages?

Speaker 1

我一直觉得很有意思的是,有些公司从底层设计开始就考虑到了这一点。

One of the things that I always find fascinating is there are some companies where they have thought from the ground up.

Speaker 1

比如,用户打开页面时面对的是一个空白屏幕,对他们来说,从头到尾真正重要的东西到底是什么?

Like, you start from a blank white screen, what is actually important to the user end to end?

Speaker 1

然后还有很多公司,不管是因为时间不够还是压根没想过这个问题,都没经历过这种用户体验的梳理过程。

And then there are many companies where they haven't, for whatever reason, time or they just didn't think about it, they haven't gone through that journey.

Speaker 1

所以 Core Web Vitals 的出现,让他们终于能展开更细致的讨论,比如:对我们来说,真正重要的是什么?

And so Core Web Vitals allowed them to finally get a more nuanced conversation going about, like, hey, what's actually important to us?

Speaker 1

我们怎么确保用户在执行关键操作时能快速完成,并且保证他们不会遇到糟糕的体验?

How can we make sure that whatever key action the user has to take, they can do it pretty quickly and be guaranteed that they're not gonna have a bad time.

Speaker 0

你在谷歌待了十四年。

Now you spent fourteen years inside of Google.

Speaker 0

你……

You...

Speaker 0

大部分时间都在Chrome团队。

Most of it was inside a Chrome organization.

Speaker 0

后来你转到了云AI,也接触了通用AI。

Later, you moved over to to Cloud AI and work work with general AI as well.

Speaker 0

我们之前研究过谷歌的工程文化,但你能概括一下在那里工作的感受吗?特别是……

We've done research before on Google's engineering culture, but can you can you summarize, like, what it felt working there in terms of what...

Speaker 0

尤其是和你之前工作的初创公司相比。

And especially comparing to the start ups that you work before.

Speaker 0

你现在也和谷歌以外的公司交流。

You also talk with with companies now outside of Google.

Speaker 0

有哪些是谷歌独有的特点?

What were things that are uniquely Google?

Speaker 1

在谷歌的这段经历里,我做了很多开发方面的工作。

As part of my Google journey, there was a lot of work that I did on the developer side.

Speaker 1

同时,我也做了很多面向消费者方面的工作。

There's also a lot of work that I did on the consumer side.

Speaker 1

比如,专注于Chrome的性能优化。

So working on, Chrome performance, for example.

Speaker 1

当你做的东西要面向几十亿用户时,就像现在谷歌的很多产品那样,你对工程文化、速度和实验的思考方式,我觉得会和初创公司很不一样,尤其是当你想快速推进的时候。

And when you're working on something that goes out to billions and billions of users, which is the case for for many Google products now, the way that you think about engineering culture, velocity, experimentation is very, very different, I think, than sometimes how a startup might approach things, especially if you're trying to move very fast.

Speaker 1

当我们试图在拥有全球大量用户的浏览器里做出改变时,需要进行大量的实验。

When we try to make a change inside a browser that has a global audience with a lot of people, there's a lot of experimentation that has to happen.

Speaker 1

很多实验还需要测试,比如,这个问题是不是没有唯一解,而是根据你所在的市场,其实有好几个不同的方案?

A lot of experimentation that also requires testing out, well, hey, does this problem not have one solution, but actually a couple of different ones, depending on what market you're in?

Speaker 1

而且,当可能同时有20个或100个其他实验在进行时,你如何评估成功?

And how do you evaluate success when maybe we have 20 other experiments or 100 other experiments happening at the same time?

Speaker 1

所以,我觉得A/B测试文化是非常重要的一块。

And so, the AB testing culture, I would say, was a very big thing.

Speaker 1

要感谢Chrome团队,现在他们有一个相当稳定和严谨的流程,能在现实世界中测试这些改动。

Kudos to the Chrome team for having what is now, I would say, a fairly stable and rigorous process for being able to try those things out in the real world.

Speaker 1

我也觉得,虽然有时候从外部看不一定总是这样,但从谷歌整体来看,我确实觉得有很多人非常关心开发者的好感和情绪,但当你公司很大的时候,显然你不可能……

I also felt that even though sometimes from the outside it didn't necessarily always come across, zoomed out at the Google level, I did feel like there were many people that cared a lot about developer goodwill and developer sentiment, but when you have a very large company, obviously, you're not...

Speaker 1

要让每个团队都互相沟通,那是不可能的。

It's gonna be very challenging to have every group talking to every other Impossible.

Speaker 1

我们总是尽力去做到为开发者做正确的事情,尽我们所能。

We always made best efforts to try getting to a place where we were doing the right things for developers as best we could.

Speaker 1

但我很高兴看到这种对社区和用户的关心和重视。

But I was glad to see that sentiment and that level of care for the community and for our users.

Speaker 1

我也很欣赏谷歌愿意接受改变。

I also appreciated that Google was was open to change.

Speaker 1

所以,如果让我总结我对Chrome文化的一大贡献,那就是要适应开发者的需求。

So I would say if if I had to summarize my my one big change contribution to Chrome's culture, it would be meeting the developers where they're at.

Speaker 1

并且要接受人们会使用他们想用的任何技术。

And that embrace of people are gonna use whatever tech they wanna use.

Speaker 1

你通常没法告诉别人该用什么。

You can't tell people what to use very often.

Speaker 1

他们想用什么就用什么,你的工作是帮他们在你的平台上成功,并帮助他们的用户获得好的体验。

They're gonna use whatever they want, and your job is to help them be successful on your platform and to help their users have a great time.

Speaker 1

我觉得我们多年来做的很多决定,让这件事变得更容易实现一些。

I think that there were a lot of decisions we made over the years that helped make that a little bit more possible.

Speaker 1

我们和不同的框架团队有很好的合作,我们采纳了他们关于希望平台提供哪些API的反馈。

And we had good collaborations with different framework teams, we took their feedback about APIs they would like to see in the platform.

Speaker 1

这变得更像是和社区的协作,而不是我们自己去猜测社区需要什么才能成功。

It became a lot more of a collaboration with the community, rather than guessing what we thought the community needed to be successful.

Speaker 1

所以,我很高兴看到这种情况发生。

And so, I was very happy to see that happen.

Speaker 1

我还想说,谷歌非常擅长让公司不同部门分享他们的经验,朝着某个共同点靠拢。

I would also say that Google was very good at allowing different parts of the company to share their learnings towards some point of convergence.

Speaker 1

比如,《谷歌软件工程》这本书,是我最喜欢的书之一。

So, for example, the Software Engineering at Google book, one of my favorite books.

Speaker 1

我很高兴多年来在公司内部看到各种不同的做法,因为你在这么大的公司工作,你总是好奇,什么才是最佳实践?

I was very happy to see different flavors of that over the years internally at the company, because you work at such a big company, you're always curious, well, what is best practice?

Speaker 1

有没有最佳实践?

Is there a best practice

Speaker 0

所以他们就像是在说,一般性的写作,比如这个组织在软件工程、构建、实验等方面是怎么做的。

So they were like, general writing, like, here's how this org is doing some parts of software engineering or building or experimentation or whatever.

Speaker 1

我最喜欢做的事情之一就是,你知道,我很好奇,我的团队可能对测试或用户体验有自己的看法,但YouTube团队是怎么想的呢?

One of my favorite things to do was, you know, I was curious, well, my team might have a perspective on testing or user experience, but how does the YouTube team think about it?

Speaker 1

有没有相似之处?

And are there parallels?

Speaker 1

有没有什么可以互相学习的地方?

Are there things that we could learn from each other?

Speaker 1

当然有。

And there certainly were.

Speaker 1

即使只是看看别人怎么看待这个世界,有时也能带来合作的机会。

Even looking at how other people think about the world can sometimes lead to collaboration opportunities.

Speaker 1

我们实际上曾与YouTube团队合作,改善他们的核心网页指标,他们很高兴看到有更精细的指标和体验思考方式。

We actually worked with YouTube team to improve their Core Web Vitals at one point, and they were excited to see that there were just more refined metrics and ways of thinking about experience.

Speaker 0

我想需要指出的是,这种协作性质在任何……

I I guess it's just important to point out that this collaborative nature is not a given in any...

Speaker 0

在所有大公司中都不是理所当然的。

In all large companies.

Speaker 0

有些公司,我现在不想点名,但有些组织觉得彼此合作没有动力,因为他们可能有不同的目标。

There are some companies, don't wanna name names right now, but where organizations don't feel that they're incentivized to work with each other because they might have different goals.

Speaker 0

并不是他们互相讨厌,只是他们专注于自己,那样感觉上会更有政治色彩。

And it's not that they hate each other, they're just focused on themselves, and it can feel a lot more political that sense.

Speaker 1

现在经常谈论高主动性,我认为有时你看到这些合作发生,是因为双方都有足够主动性的人想要促成它。

Talk a lot about high agency these days, and I think that sometimes when you see those collaborations happen, it's because there are people with enough agency on both sides that they wanna make it happen.

Speaker 1

他们看到了合作中的共同价值,因为探索如何改善像YouTube这样的用户体验,非常微妙,非常有教育意义,非常细致,但也花了很长时间。

And they see the mutual value in collaborating because exploring how to improve the user experience for something like YouTube, it was extremely nuanced, extremely educational, very nuanced, but also took a very long time.

Speaker 1

我们只是觉得价值就在那里。

And we just felt like the value was there.

Speaker 1

我很高兴我们做到了。

I was glad that we made it happen.

Speaker 0

我们能谈谈你在谷歌的具体职业道路吗?

Can we talk about your specific career path inside of Google?

Speaker 0

你在那里待了十四年,这是很长的时间,而且我开始觉得,在职业生涯的某个阶段,长期待在一个地方是件好事。

So you spent fourteen years there, which is a very long tenure, and I'm starting to develop a bias for, like, it's nice to have long tenure somewhere at some point in your career.

Speaker 0

这有很多价值。

There's a lot of values.

Speaker 0

你之前和Turbo Puffer的创始人Simon聊过这个。

You were just talking with with Simon, the founder of Turbo Puffer, about this earlier.

Speaker 0

你入职时是什么级别?

What level did you get in?

Speaker 0

你的职业发展是怎样的?

How was your career progression?

Speaker 0

你是什么时候成为经理的?

At what point did you become a manager?

Speaker 0

那你是怎么考虑像职业薪酬增长这些事情的?

And how did you think about things like career compensation growing?

Speaker 1

其实我是在英国生活的时候开始我的谷歌职业生涯的。

So I started my Google career back when I was living in The UK, actually.

Speaker 0

所以你是加入了谷歌英国?

So you joined Google UK?

Speaker 1

我最初加入的是谷歌英国,我记得是以四级加入的,就是那个,对。

I joined Google UK originally, and believe I joined at a level four, like at the Yeah.

Speaker 0

那是一个。

That that was one.

Speaker 0

中级软件工程师。

The mid mid level software engineer.

Speaker 1

那时候。

Back then.

Speaker 1

我是一名开发者关系工程师,就是做DevRel的,但更侧重于开发者体验,你懂的。

And I was a developer relations engineer, so a person that's in DevRel, but you're a little bit more focused on, you know, the builder Yeah.

Speaker 1

从开发者的角度来说。

Side of things.

Speaker 1

这些年来,我在这个职位上逐渐晋升到了五级和六级。

Over the years, I kind of got promoted in that role to level five and level six.

Speaker 1

我成为了DevRel部门的一名经理。

I became a manager within DevRel.

Speaker 0

当你处于六级,也就是高级工程师级别的时候。

When you were at level six at the staff level.

Speaker 1

是的,那时我负责带领DevRel团队的一部分。到了某个时候,大概五六年之后,我开始觉得,我非常喜欢做开发者关系的工作,但我骨子里其实是个工程师。

Yeah, and then I was was leading part of the DevRel team, and at some point, maybe five or six years in, I started to feel like, you know, I I loved doing developer relations, but I I am very much a builder at heart.

Speaker 1

我喜欢工程,也喜欢产品。

I engineering and I love product.

Speaker 1

我全都喜欢,你懂的,但是……

I love all of it, you know, but

Speaker 0

我明白。

I get it.

Speaker 1

我很好奇,你知道,站在那个位置会是什么感觉。

I was very curious, you know, what it would be like to be on the other side of that.

Speaker 1

因为我在谷歌之前做过工程。

Because I'd been in engineering prior to Google.

Speaker 1

在那之前我没有正式做过开发者关系的工作,我对回到那个方向很感兴趣。

I hadn't been in an official DevRel position prior to that, and I was interested in going back down that direction.

Speaker 1

所以这些年来,我转回了软件工程,特别是工程经理的职位。

And so over the years, I transitioned back into software engineering and specifically an engineering manager role.

Speaker 1

这让我既能做工程工作,又能管理团队。

That gave me the flexibility to both do engineering work, but also manage teams.

Speaker 1

但你

But you

Speaker 0

那时候团队比较小?

just had a smaller team at that point?

Speaker 1

开始的时候团队比较小,后来就扩大了。

At the start, had a smaller team, and then it grew out.

Speaker 1

我估计平均人数一度大概在四十五到五十人左右。

I would say the average at one point was probably in the 40 fives to fifties.

Speaker 1

我觉得,在你领导或管理生涯的不同阶段,成功的定义是不一样的。

I think that depending on where you are in your leadership or manager journey, success means different things.

Speaker 1

而且我说的不是职业上的成功,而是对组织而言的成功。

And not success from a career perspective, but just success for the organization.

Speaker 1

因为最终你要达到的目标是,理想情况下团队几乎能自我运转。

Because ultimately, what you want to get to is a place where ideally the team is almost self sufficient.

Speaker 1

我在我的书《Leading Effective Engineering Teams》里也提到过一点,你要让你的机器、你的组织足够自给自足,这样你只需要偶尔轻轻碰一下,确保一切正常运转。

And I write about this a little bit in my book, Leading Effective Engineering Teams, but you wanna get to a point where your machine, your org is self sufficient enough that you just need to occasionally tap the blimp, make sure that things are working.

Speaker 1

如果出了问题,你可以及时纠正。

You can course correct if it's not.

Speaker 1

但这样你就能腾出手来,专注于组织接下来需要重点解决的重要问题。

But that frees you up to then focus on the next important sets of problems that the org needs to tackle heads on.

Speaker 1

这让我能够深入思考,比如,模型质量开始变好了,接下来该怎么办。

And that allowed me, for example, to really get deep into thinking about, okay, well, model quality is starting to get better.

Speaker 1

这对开发人员意味着什么?

What does that mean for developers?

Speaker 1

这对开发工具又意味着什么?

What does that mean for developer tooling?

Speaker 1

这对我们如何看待基准测试、与第三方供应商的合作,以及构成开发者成功的所有其他因素有什么影响?

What does it mean for how we think about benchmarks and collaborations with third party vendors and all of these other things that are part of developer success?

Speaker 1

所以我挺庆幸自己有了那段沉淀的时间,然后把这些经验带回去跟团队一起打磨,让我们走到今天这个阶段,能够帮开发人员把 DevTools 和 Chrome 对智能体的效用最大化。

And so I was I was glad that I had that time, and then I could take those learnings back to the team and work with them to evolve us into this moment where we could, you know, help developers maximize how useful DevTools can be, and DevTools and Chrome can be for agents.

Speaker 0

所以我理解得对吗?你之前是独立贡献者,也就是个人 Contributor?

So do I understand correctly that, you know, you you were an individual contributor?

Speaker 0

然后你在职业阶梯上往上走,这在像 Google 这样的大公司里,如果有合适的导师和架构,算是比较正常的晋升路径吧?

You were going up the career ladder, which is somewhat expected at a at a large company like Google with the right mentors and the right structure?

Speaker 0

后来你转做管理了,方向也变了,但你觉得应该再拓展一下,于是把重心放在了……

And then when you became a manager and you switched, but you decided to build a bit more, you then focused on...

Speaker 0

你带了一个不断扩大的大团队,大概有四十人左右。

You saw a growing and increasing large team, like 40 people.

Speaker 0

这可不是个小团队,但你已经……

That's that's not a small team, but you've...

Speaker 0

你试着帮团队解决问题,让他们基本上能自己运转,这样你就有时间做一些个人贡献者的工作,既能保持动手能力,也能帮助团队。

You try to help the team fix any issues, help them mostly run by themselves so that you would have some time to actually do some individual contributor like work so you can keep your hands dirty, but also help the team.

Speaker 0

所以,看起来你……

So like, it it seems like you...

Speaker 0

我理解得对吗?你就是优先留出时间来搞开发?

Do I understand that you just prioritized to have that time to build?

Speaker 0

因为当然,当经理的话,很容易把所有时间都占掉。

Because, of course, when you're a manager, this could easily suck up all of your time.

Speaker 1

哦,对。

Oh, yeah.

Speaker 1

当然。

Absolutely.

Speaker 1

而且我不想贬低达到那个目标所做的所有工作,因为很多管理工作的目标就是朝着那个方向努力。

And I don't want to make small of all the work it takes to get to that point, because a lot of management is trying to work towards that point.

Speaker 1

你需要搭建团队结构,比如,有时候要有经理管理经理。

You need to build out a team structure, like, in some cases, have managers managing Managers.

Speaker 1

对,就是管理其他团队的经理。

Managers, right, of other teams.

Speaker 1

而且我们有一个全球团队,当然,这涉及到时区协调、沟通成本以及所有这些事情。

And we had a global team of people, of course, that comes with navigating time zones and coordination overhead and communication and all those things.

Speaker 1

所以,我觉得我们很幸运,能够达到一个团队效率相当高的状态,并且能够创造更多的空间。

And so, I think that we were we were fortunate that we were able to get to a place where the team was largely pretty effective, and we were able to create more of the space.

Speaker 1

然后我吸取这些经验,尝试帮助我的其他经理。

And then I take those learnings and I try to help some of my other managers.

Speaker 1

比如,你怎么为自己创造这个空间,这样你也能帮助我们进行面向AI时代的现代化转型?

Like, how do you how do you create this space now for you so that you can also help us on this journey of modernizing for the AI moment?

Speaker 1

所以,我从L6升到L7,再到总监,在我的……

So I went I went from l six to l seven to director in my...

Speaker 0

总监是L8还是L7?

Is director L eight or l seven?

Speaker 1

总监是L8。

Director's L 8.

Speaker 1

总监是L8。

Director's L 8.

Speaker 0

哦,哇。

Oh, wow.

Speaker 0

所以那……

So that...

Speaker 0

那有点……

That's kind of...

Speaker 0

嗯,恭喜。

Well, congrats.

Speaker 0

这真是……

It's it's...

Speaker 0

它变成了……

It becomes...

Speaker 0

据我了解,级别会变得越来越难,但你真的那么在意实际级别吗,还是更看重工作本身,事情自然就跟着走了?

Level becomes somewhat harder and harder as I understand, but did you care too much about the actual levels, or was it more about the work and things just followed?

Speaker 1

我觉得在很长一段时间里,我确实更看重工作本身。

I think for a very long time, it was about the work.

Speaker 1

但当你觉得组织运行得比较健康的时候,你确实会开始想,好吧。

But also, like, as you as you get to a point where you feel like the organization is in a healthy place, you do start thinking about, okay.

Speaker 1

接下来我的职业发展,去解决不同类型的问题。所以如果……

Well, next level of my career, taking on different kinds of problems So if

Speaker 0

更像是下一个挑战,对吧?

a little more like a next challenge, right?

Speaker 1

对,下一个挑战。

Yeah, the next challenge.

Speaker 1

所以我一直很想争取总监的晋升,而且我也一直在为此努力。

And so I was very much wanting to go for a director promotion for quite a while, and I was working towards that.

Speaker 1

我觉得对于任何经历过职业变动或晋升的人来说,你都知道你得先在这个职位上干一段时间才能得到它,而且让你走到今天这一步的能力,不一定能帮你达到下一个高度。

And I think that for anyone that's gone through career changes or promotions, you know that you kind of have to be doing the job for a while before you get it, and what kind of got you where you are isn't what's gonna get you to that next level.

Speaker 1

这是另一套挑战。

It's a different set of challenges.

Speaker 1

所以,我很兴奋能开始体验这些挑战,并在谷歌内部更广泛地合作,更多地与我们的副总裁和高级副总裁层级合作,试图弄清楚,嗯,是的,接下来几年或者接下来一年安卓、Chrome以及我们不同的平台团队会是什么样子,因为我们正在经历这些革命性的时刻。

And so, I was excited to get to start experiencing those kinds of challenges and working more across Google, working more with our VP and SVP layers to try figuring out, well, yeah, what what is the next couple of years or what does the next year look like for Android, for Chrome, for our different platform teams as we're going through these these kind of revolutionary moments?

Speaker 1

我们正在尝试重新思考一切。

We're trying to rethink everything.

Speaker 0

我确实想问一下,因为我们有很多经验丰富的观众和听众。

I did wanna ask because we have a lot of pretty experienced viewers and and listeners.

Speaker 0

在谷歌,成为总监具体有什么不同?

What is the difference in becoming a director at Google, specifically?

Speaker 0

因为总监是第一个高管层级。

Because director, it does the first executive level.

Speaker 0

我的意思是,不同公司叫法不同,但这是第一个在责任上、在肩上的重量上可能被包括在内的层级。

I mean, different companies call different, but, like, it's the first one which it it might be included in terms of responsibility, the weight on your shoulder?

Speaker 0

因为在这样的大公司里,感觉在管理链条中这是最大的跳跃。

Because it does feel like that feels in the management chain that is the biggest jump at a large company like this.

Speaker 1

我觉得可以这样理解:在我一步步晋升的过程中,总监通常就是你在高管层面的第一联系人,就像你刚才说的。

I think that a good way to think about it is when I was coming up through the ranks, your director was very often your first point of contact, as you said, at the executive level.

Speaker 1

他们会负责督促你确保年度目标、季度目标等各项指标都按计划推进;当你需要推动大型项目或启动新计划时,他们也是你会去寻求支持的人。

They would be the ones who would be keeping you on the hook for making sure that any of your annual goals, quarterly goals, any of that was on track, they'd be the ones that you'd be looking to sponsor any large programs, any new projects, things like that.

Speaker 1

如果工作严重偏离轨道,你需要承担责任,那么总监通常会定期主持复盘会议,确保整个团队的方向没有跑偏。

If things were going way off track and you were being held accountable, the directors were often the ones that would be having review forums regularly to make sure that that whole ship is actually still steering in the right direction.

Speaker 1

所以到了这个层级,责任感会明显增强。

So there is an increased feeling of accountability at that level.

Speaker 1

你得关注细节。

You have to pay attention to the details.

Speaker 1

我觉得如果你只是放手不管,在那个职位上是做不好的。

I think that you can't be successful in that role if you're just letting go.

Speaker 1

我说理想状态下团队能自主运转,并不是说完全撒手不管,而是要建立好足够的机制,让你能及时获取所需信息,团队遇到的任何决策问题或障碍都能迅速反馈给你,这样你才能帮他们排除阻碍。

When I say you want, ideally, to have a self running org, it's not about letting go entirely at all, but it's about having enough of a system in place where you get the information you need, any decisions, any blocks that your teams are running into are surfaced quickly to you so you can help them unblock them.

Speaker 1

我觉得这是最关键的一点之一,就是确保业务目标得以实现,并且让那些可能不太清楚如何将技术与业务目标联系起来的人,也能非常清晰地看到这条主线。

I think that that's really one of the biggest pieces, like making sure that the business goals get done and making sure that people who perhaps sometimes don't necessarily understand how to connect the tech that's being done back to the business goals, like, see that through line very clearly.

Speaker 1

我记得,我在做总监的时候,负责Gemini和Cloud AI的项目。

I remember that, you know, I was doing the director role through my time working on Gemini and Cloud AI.

Speaker 1

我负责我们的一些……

I was responsible for some of our...

Speaker 1

比如,我们当年的一个首要目标。

Like, one of our top goals for the year.

Speaker 1

你每两周左右就要汇报一次,并且要承担责任。

You're expected to report on that every week or two and be held accountable.

Speaker 1

所以你得确保一切进展顺利,让这些数字和目标朝着正确的方向前进。

So you need to make sure that everything happens to keep those numbers and those goals moving in the right direction.

Speaker 1

所以我觉得,这个职位确实承担了很多责任。

So there's a lot of accountability, I would say, that comes with

Speaker 0

对,到了那个级别。

that level.

Speaker 1

所以听起来……

So it sounds like it's

Speaker 0

差不多就像你在同时处理好几件事的时候,突然又多了两个球要接,也就是说,现在你……

almost like if you're juggling stuff, you're given, like, two extra balls, which is, like, now you...

Speaker 0

既要承担那些责任,向上跟高管沟通业务目标,又要兼顾日常运营等其他工作。

Both the accountability, communicating upwards with with execs owning the business goals while doing everything else in terms of, like, running an...

Speaker 0

现在带的团队可能更大了,还得能深入细节,随时掌握最新动态。

Now probably larger team, being able to deep dive into the details, so keeping yourself to date.

Speaker 0

所以,对,我想这挺合理的:在一个组织里待得越久,积累的背景信息就越多,通常也会准备得更充分。

So, yeah, well, I guess it kinda makes sense that there's a trajectory where if the longer you work in an organization, the more context you'll have, the more ready you often become.

Speaker 1

没错。

Absolutely.

Speaker 1

确实如此。

Absolutely.

Speaker 1

我觉得有个挺有意思的例子值得分享一下,而且我觉得这不只是谷歌的情况。过去几年里,让我最兴奋的一点是,随着模型质量和工具的不断优化,我看到很多总监、副总裁甚至高级副总裁级别的高管都亲自上手,尝试各种新东西。

And I think an interesting anecdote that I think is worth sharing is, and I don't think this was specific to Google, one of the things I found most exciting in the last couple of years was seeing as model quality's gotten better and harnesses and tools have gotten better, how many people that were directors or VPs or SVPs or any of these levels were actually rolling up their sleeves and trying things out.

Speaker 1

看到这样的场景真是太棒了,因为每周我都能和这些人展开交流,比如:嘿。

And that was was awesome to see because every week, could then have conversations with people like, hey.

Speaker 1

你周末做了什么?

What did you build at the weekend?

Speaker 1

你在试哪些模型?

What models are you trying out?

Speaker 1

你在哪些地方遇到困难了?

What are you running into friction with?

Speaker 1

你在用哪些工作流程?

What workflows are you using?

Speaker 1

这在以前是不会发生的。

And that's not something that was happening before.

Speaker 1

高管们通常只关注公司的大问题或工作上的大问题。

Execs were very typically focused on big company problems or big work problems.

Speaker 1

但最近几年情况变了。

But that's been changing in the last couple of years.

Speaker 0

这让我们很自然地过渡到下一个话题,那就是根据你的观察和经验,AI 正在如何改变软件工程。在我们开始讨论之前,你经常被很多人问到一个问题,你自己也在思考,那就是“认知投降”这个概念。

Which received us very nicely into the next topic, which is how AI in your observation and experience is changing software engineering right before we started talking about one question that comes up to you from a lot of people and you're also thinking about is this idea of, like, cognitive surrender.

Speaker 0

那我们进入这个话题吧。

Let's get into that.

Speaker 1

这里其实有两部分。

So there's two pieces here.

Speaker 1

第一部分是认知负债。

The first is cognitive debt.

Speaker 1

也就是说,你越用AI,你的记忆力和对正在处理的问题的理解力就会逐渐退化。

So the more that you use AI, it's it's sort of the erosion of your ability to have good memory and have good understanding of the problems that you're working on.

Speaker 1

随之而来的自然结果就是认知投降,也就是你盲目接受AI给出的任何答案。

And the natural follow-up to that is cognitive surrender, which is where you blindly give in to whatever the AI says as your answer.

Speaker 1

它的答案就成了你的答案。

Its answer becomes your answer.

Speaker 1

于是你开始真正放弃批判性思维,解决问题的能力也就慢慢荒废了。

And so you start to really let go of critical thinking, and your ability to solve problems just goes to the wayside.

Speaker 1

我觉得这是我们要避免的,因为,你知道,我……

I think that that's something we wanna avoid because, you know, I'm I'm...

Speaker 1

我个人非常看好Harness工程、Loop工程以及软件工厂这些技术的发展趋势。

Personally, I'm a I'm a big fan of the evolution curve we're seeing with harness engineering and loop engineering and software factories and all of these things.

Speaker 1

我对它们的前景感到非常兴奋。

I'm very excited about them.

Speaker 1

但与此同时,我认为我们仍需深入理解其运作原理,这样一旦出现问题,我们才能切实解决,而不是单纯指望AI代理能自行搞定。

But at the same time, I think that we still need to understand enough about how things work so that if something does go wrong, we're actually able to fix it and not just hope and pray that the agent is able to figure things out.

Speaker 0

大约一年前,你曾撰文强调在与AI代理协作时的重要性,当时它们的能力远不如现在。

And it was about a year ago where you wrote about the importance of when you're working with an agent, and this was before they were as capable as today.

Speaker 0

但当你在使用智能体时,要仔细阅读它生成的内容,仔细思考,然后当它生成代码时,也要通读一遍代码,确保自己真正理解。

But when you're working with an agent, read through read through what it it has, think through, and then, you know, when it generates a code, read through that code, make sure you understand.

Speaker 0

就像是在做一种审查工作。

So, like, you're kind of, like, doing a review.

Speaker 0

现在我们有了功能更强大的智能体。

Now we have a lot more powerful agents.

Speaker 0

我们现在可以……

We can now...

Speaker 0

有些人会同时用多个代理。

Some people work, like, with multiple agents.

Speaker 0

你觉得跟着代理的节奏去读、去理解,你怎么看?

What is your thinking on the kind of the reading, the going at the same pace of the agent?

Speaker 0

而且,你知道,因为现在放手太容易了,因为你想放手,然后欠下认知债。

And and, you know, like, because there's friction of, like, it's now so much easier to, like, not not let go because you wanna let go and have cognitive debt.

Speaker 0

就是,它们更快,而且大部分时候都挺好。

It's just, like, they're faster, and it's pretty good for the most part.

Speaker 1

生活中遇到的很多挑战,其实都是因为缺乏主动避免它们的意识。

With many challenges people run into in life, there's a lack of intentionality around wanting to avoid them.

Speaker 1

我经常看到这种情况发生。

This is one of those places where I see this happen quite a lot.

Speaker 1

我的想法有点变了。

And my thinking on this has changed a little bit.

Speaker 1

一年前,你可能会收到代理的一条思考消息,说,嘿,我在后台思考。

A year ago, maybe you would have one thinking message from the agent saying, hey, I'm thinking in the background.

Speaker 1

然后你展开它,就能看到整个轨迹,还有所有正在发生的事情的总结。

And you'd expand it, and you would see a trajectory, and you'd see the summary of all the things that are happening.

Speaker 0

而且速度也跟得上,你能看明白。

And it was in speed where you could follow as well.

Speaker 0

每隔几秒就有新东西冒出来。

Like every few seconds, something coming.

Speaker 1

现在呢,如果你用 quad code 或者 Codex,很可能已经有二三十个子代理在跑了。

And now, if you're using quad code or Codex, it's very possible that 20 or 30 sub agents have fired.

Speaker 1

我可不会一个个点开那三十个东西去读它们的轨迹,但我一定会做两件事。

I am not gonna click through 30 of those things to read through their trajectories, but I do make sure that I do two things.

Speaker 1

第一件事,我会确保如果最后有个总结,把所有做的决定列出来,我会读一遍;如果没有,我会要求它给出决策过程。

The first thing I do is I try to make sure that if there is a summary at the very end, here are all the decisions that were made, I will read through that end If to there hasn't been, I will prompt for that decision process.

Speaker 1

而且你得小心,因为你不希望模型在那些决策上糊弄你。

And you have to be careful because you don't want a model to kinda BS you about, like, these decisions that were made.

Speaker 1

因为它有时候真的会瞎编。

Because sometimes it can just, like, make things up.

Speaker 1

但它运行……

But It run...

Speaker 1

而且而且而且,作为作为

And and and as as

Speaker 0

我们知道,这不一定是故意的,但它超出了上下文窗口。

we know, it's not deliberate necessarily, but it runs out of context window.

Speaker 1

就像,它……

Like, it's...

Speaker 0

这些东西是有局限性的。

There's limitations to these things.

Speaker 1

没错。

Exactly.

Speaker 1

而且那里……

And there...

Speaker 1

这就引出了第二点。

And that goes on to the second thing.

Speaker 1

我非常喜欢这种相互促进的想法。

I'm a really big fan of this idea of mutual amplification.

Speaker 1

如果你和一个智能体合作,一个编程智能体,你可以做很多事情来确保这个智能体每天都在进步,而你作为工程师,也在每天进步。

If you are working with an agent, a coding agent, there are a lot of things that you can do to make sure that the agent is getting better every day, and you, as an engineer, are getting better every day.

Speaker 1

有一些简单的事情可以做到这一点。

There are simple things that can play into that.

Speaker 1

比如,即使在会话中或在这个项目中,你能记录下你从会话中学到的东西吗?

Things like, even within the session or within this project, can you log your learnings from the session?

Speaker 1

你能记录下做出的任何决定吗?

Can you log any decisions that were made?

Speaker 1

你遇到的任何摩擦,你认为你处理这个问题的方式有什么独特之处,我应该记住的?

Any friction that you ran into, anything that you think is unique about how you've approached this problem that I should just keep in mind?

Speaker 1

这就是有意为之。

That's intentionality.

Speaker 1

这就像,我想了解事情在幕后是如何运作的。

That's like, I I want to understand how things work behind the scenes.

Speaker 1

而且只要你有那种好奇心,至少保持一点点好奇的渴望,我觉得你就可以和模型合作,同时还能保留一些你对事物运作方式的认知理解。

And as long as you have that curiosity and that thirst for at least being just a little bit curious, I think that, you know, you can work with models in a way where you're still preserving a little bit of your cognitive understanding about how things work.

Speaker 0

基因工程中即将出现的一个新构建块是循环工程的概念,彼得·斯坦伯格写过相关文章。

One new building block that's coming up in genetic engineering is this idea of loop engineering, and Peter Steinberger wrote about it.

Speaker 0

鲍里斯·丘尼也写过关于运行循环的内容。

Boris Churney wrote about it, about running loops.

Speaker 0

我们很多人都在试图弄清楚循环到底是什么。

A lot of us are trying to figure out what loops exactly are.

Speaker 0

你也写过一篇关于循环的文章。

You also wrote a post about loops.

Speaker 0

你觉得循环是什么?

What do you think loops are?

Speaker 0

我们应该怎么理解它们?

How should we think of them?

Speaker 0

还是说这只是一些……

Or is is just some...

Speaker 0

这是对少数人有用的事情吗?

Something that is useful for a few people?

Speaker 0

你在这方面进展如何?

Where are you at with that?

Speaker 1

一个好的思考方式是……

A good way to think about...

Speaker 1

所以,循环是我们旅程的一部分,目的是为了有效地创建软件工厂,或者有些人喜欢称之为……

So loops are part of this journey we are on to effectively create software factories or some people like

Speaker 0

软件工厂的意思是,你给出一些指令,就像在工厂里,我想生产一辆汽车,然后有一个全自动的工厂,汽车就出来了。所以……

Software factory meaning like a thing where you give some instructions, you're like, in a factory, I would like to produce a car and then there's a fully automated factory, and the car comes So

Speaker 1

而不是仅仅专注于提示以得到结果,你是在构建一个系统,这个系统可以处理提示、生成结果,并为你进行测试和验证,这实际上是软件演进每个阶段的下一步。

instead of focusing on purely the prompting towards getting an outcome, you're building the system that can do the prompting and generate the outcome, do the testing and verification for you, and it's effectively the next step of every phase of software evolution.

Speaker 1

这就像抽象概念的不断上升的浪潮。

It's just like a rising tide of abstractions.

Speaker 1

这是下一个抽象。

This is the next abstraction.

Speaker 1

这里面有很多细微之处需要考虑。我觉得如果你直接告诉别人,对,搞个系统帮你把所有活儿都干了,那些在行业里待过一阵子的人肯定会有些显而易见的疑问,比如质量怎么保证?

And it comes with a lot of nuance because I think that if you tell someone, yeah, create a system that will just do all of your work for you, anyone that's been in the industry for a while are gonna have obvious questions like, what about quality?

Speaker 1

你怎么确保事情不会跑偏呢?

How are you making sure things aren't going off the rails?

Speaker 1

所以我认为你得想清楚,哪些环节需要让人保持在流程中参与进来。

And so, I think that you have to be very intentional with, okay, well, what are the parts of this where you're keeping the human in the loop?

Speaker 1

你的系统是不是应该提醒你,嘿,有些改动涉及到了系统里挺关键的部分,你可能还是得让人工审核一下。

Are you having your system flag to you that, hey, there are changes that were touched that actually you know, are hitting a pretty critical part of the system, and you probably do want human review on this.

Speaker 1

但如果只是让循环去构建一切,却没有设置好控制影响范围的护栏,也没有对质量把控建立相应的约束,我认为这简直是灾难的预兆。

But simply just having your loops build everything without having some guardrails around the blast radius, without having guardrails around how you think about quality, I think is a recipe for disaster.

Speaker 0

我听到很多地方都在用软件工厂这个比喻,再说一遍,它……

I hear the analogy of software factory a lot of places, again, it...

Speaker 0

当然还有黑灯工厂。

And and, of course, dark factory as well.

Speaker 0

黑灯工厂的意思是工厂里灯火通明,灯都关了,因为机器人不需要照明,这样还能省电省钱。

Dark factory meaning it's fully on in factories, lights are turned off because the robots don't need to see and save energy and money.

Speaker 0

但有一件事我一直在想……

But one thing that I'm...

Speaker 0

我一直在想,这个类比通常就像,在工厂里,你生产一个东西。

I keep thinking that is often this analogy is like, in a factory, you produce a thing.

Speaker 0

它可能是一辆车。

It could be a car.

Speaker 0

它可能是一颗螺丝。

It could be a screw.

Speaker 0

它可能是别的东西。

It could be something.

Speaker 0

它就在那里,完成了。

It's it's there and it's done.

Speaker 0

但对于软件,特别是SaaS和我们做的大多数软件来说,它并没有完成。

But with software, specifically SaaS and most software that we do, it's not done.

Speaker 0

当它完成时,我们发布到生产环境,然后就在那里崩溃,bug就出来了。

When it's finished, we release it to production and that's where it crashes, the bugs come out.

Speaker 0

所以我在想,这种整个想法,比如,好吧,我们有一个工厂生产软件,并且它做了所有的测试。

So I wonder if this whole idea of like, okay, we'll have a factory that produces the software and it does all the testing.

Speaker 0

如果在生产环境中,它没有与运行方式连接起来,没有那种反馈,那...

If in production, it's not connected to how it's running and having that feedback, that's...

Speaker 0

你明白我的意思吗?

You you see what I mean?

Speaker 0

就像,...

Like, the...

Speaker 0

我们说的是一种不同类型的工厂。

It's a different type of factory that we're talking about.

Speaker 1

所以你完全说中了下一阶段的关键。

So hit you hit the nail exactly on sort of the next phase of that.

Speaker 1

你可以...

You can...

Speaker 1

如果你能有一个系统,能够决定需要构建什么,如何验证,如何测试,以及所有这些东西,那么没有什么能阻止你将它与遥测、其他系统、用户反馈以及任何其他有助于构建产品的信号连接起来。

If you can have a system that can sort of decide what needs to get built, how to verify, how to test, and all of those things, there's nothing stopping you from then connecting that up to your telemetry, up to your other systems, up to user feedback, up to any other signals that can help build out the product.

Speaker 1

你可以把它连接到产品待办事项列表,然后你可能会看到一个世界,在这个世界里,这个系统可以访问所有这些不同的信号,了解产品如何改进,甚至可能达到主动改进的程度。

You can connect it up to the product backlog, and you can potentially see a world where you then have this system that has access to all of these different signals for how the product can be improved to a point where maybe it even could get proactive.

Speaker 0

我们正在看到……

And we're seeing...

Speaker 0

有很多例子可以接入,比如你正在使用 Sentry。

There are so many examples that you can plug it up, for example, if you're using Sentry.

Speaker 0

Sentry 有自动化功能,比如,如果 Sentry 中触发了一个全新的错误,你可以设置一个钩子,启动你最喜欢的编码代理,它一次性修复问题,然后交给你审查。

Sentry has automations where, like, if an error fires in Sentry that is net new, you could have a hook that kicks off your favorite coding agent where it one shots a fix and it puts you in your review.

Speaker 0

当然,你把它……

Now, of course, you took it...

Speaker 0

你可以更进一步,允许它自动执行,这在今天听起来是个坏主意,但你可以做到。

You could take it further and you could allow it to automatically do it, which sounds like a bad idea today, but you could do it.

Speaker 0

我在想,这是否……

And I wonder is...

Speaker 0

当我们谈论循环时,这是否,比如说,我们所说的一个循环?

When when we're talking about loops, is this, for example, a loop that we say?

Speaker 0

也许“循环”这个词不太合适。

And maybe the the loop is just not a good word for it.

Speaker 0

也许它更像是……

Maybe it's...

Speaker 0

我听到的是“工作流”。

I I heard workflow.

Speaker 0

我听到的是,比如……

I heard, like...

Speaker 0

或者如果我说“反馈循环”。

Or if I say feedback loop.

Speaker 0

好的。

Okay.

Speaker 0

比如,那可能是个更好的词。

Like, that might be a better word.

Speaker 0

也许……

Maybe...

Speaker 0

这只是一个用词的问题吗,比如我们对这个词有点困惑?

Is it just a wording thing where, like, we're a little bit confused with the

Speaker 1

我的意思是,考虑到事情发展得这么快,我们很可能会看到每个月都有新术语冒出来。

I mean, I I think that given how fast things are moving, we are very likely to see new terminology sprout out every month.

Speaker 1

其中一些会很合适,而另一些则还需要进一步完善。

And some of them will be good fits, and some of them will continue to require some refinement.

Speaker 1

所以我完全能理解,用“工作流”可能比“循环”更贴切。

So I could totally see workflow being a better fit, than loop.

Speaker 1

但从视觉角度来看,我确实……

But from a visual perspective, I do...

Speaker 1

我个人确实觉得它像一个循环。

I personally do see it as a loop.

Speaker 1

“工作流”也说得通。

Workflow also also works.

Speaker 0

但是,你能给我举一些例子吗,比如你用过或见过你团队里的人或行业里的人用过的循环?

But but then can you give me examples of loops that you've you've used or you have seen people on your team or people on the industry use?

关于 Bayt 播客

Bayt 提供中文+原文双语音频和字幕,帮助你打破语言障碍,轻松听懂全球优质播客。

继续浏览更多播客