The Peterman Pod - OpenAI Codex技术负责人谈他的职业发展及如何使用Codex | 迈克尔·博林 封面

OpenAI Codex技术负责人谈他的职业发展及如何使用Codex | 迈克尔·博林

OpenAI Codex Tech Lead On How His Career Grew And How He Uses Codex | Michael Bolin

本集简介

这是迈克尔·博林,开源 Codex 仓库的技术负责人,曾任 Meta 的杰出工程师。我们讨论了他的职业道路、OpenAI 工程师如何使用 Codex,以及研究驱动型与工程驱动型公司文化之间的差异。 🔸 我的键盘项目:https://read.compose.llc/p/our-keyboard-design-reveal 𝗣𝗼𝗱𝗰𝗮𝘀𝘁 链接: • YouTube:https://youtu.be/hN5ZFzWFhhg • Apple:https://podcasts.apple.com/us/podcast/the-peterman-pod/id1777363835 • 文稿:https://www.developing.dev/p/openai-codex-tech-lead-on-how-his 𝗧𝗶𝗺𝗲𝘀𝘁𝗮𝗺𝗽𝘀: 00:00:00 - 引言 00:00:56 - Chickenfoot 00:02:45 - 在谷歌工作 00:06:34 - 重构 Facebook 的构建系统 00:16:36 - 重写 Facebook 的 IDE 00:26:01 - 晋升为主工程师(E8)后的挣扎 00:28:39 - 为 Facebook 构建虚拟文件系统 00:35:47 - 延迟晋升杰出工程师(E9)及所学 00:39:56 - 加入 OpenAI 00:43:05 - 研究驱动型 vs 工程驱动型文化 00:44:53 - Codex 背后的故事 00:51:00 - 他如何使用 Codex 00:57:00 - 为什么 Codex 的测试框架是开源的 00:59:50 - 最佳技术书籍推荐 01:05:02 - 为什么深度技术能力依然有价值(目前如此) 01:11:07 - 如何良好地启动项目 01:14:27 - 关于写作与职业规划的建议 01:17:06 - 给年轻时自己的建议 01:19:10 - 结尾 𝗪𝗵𝗲𝗿𝗲 𝘁𝗼 𝗳𝗶𝗻𝗱 𝗠𝗶𝗰𝗵𝗮𝗲𝗹: • 他的个人博客 - https://blog.bolinfest.com/ • Twitter/X - https://x.com/bolinfest • Threads - https://www.threads.com/@bolinfest • LinkedIn - https://www.linkedin.com/in/michael-bolin-7632712 𝗪𝗵𝗲𝗿𝗲 𝘁𝗼 𝗳𝗶𝗻𝗱 𝗥𝘆𝗮𝗻: • 通讯:https://www.developing.dev/ • X/Twitter:https://x.com/ryanlpeterman • LinkedIn:https://www.linkedin.com/in/ryanlpeterman/ • Threads:https://www.threads.com/@ryanlpeterman • Instagram:https://www.instagram.com/ryanlpeterman • TikTok:https://www.tiktok.com/@ryanlpeterman

双语字幕

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

Speaker 0

你问代理的问题会影响你得到的结果的质量。

The questions that you asked the agent is gonna affect the quality of the thing that you get out.

Speaker 1

这是迈克尔·博林,开源Codex仓库的技术负责人,前Meta首席工程师,我们聊了聊他的职业发展。

This is Michael Bolin, tech lead for the Open Source Codex repository and former Distinguished engineer at Meta, and we talked about how his career grew.

Speaker 0

所以我想,好吧,黑客马拉松,肯定要搞一个新的构建系统。

So I was like, alright, Hackathon, totally gonna, like, make a new build system.

Speaker 0

你知道,很快我就弄出了一个明显好得多的东西,至少快了两倍。

You know, like, relatively quickly had something that was dramatically better, like, at least, like, twice as fast.

Speaker 1

他分享了OpenAI工程师是如何使用Codex的。

He shared about how OpenAI engineers actually use Codex.

Speaker 2

我几乎觉得

I almost feel a

Speaker 0

亲手写代码有点糟糕。

little bad writing code by hand.

Speaker 2

你觉得自己写的代码中有多少百分比是人工编写的?

What percent of your code would you say is human written?

Speaker 0

你知道吗,每次我坐下来,都会想:我该不该写这段代码?

You know, because every time I sit down, I'm like, should I write this?

Speaker 0

我的意思是,答案几乎总是不写。

I mean, the answer is almost always no.

Speaker 1

我们还讨论了人工智能研究与大型科技工程文化的差异。

And we discussed AI research versus big tech engineering cultures.

Speaker 2

你对这种研究主导的文化与工程主导的文化有什么看法?

What are your thoughts on that research led culture versus engineering led culture?

Speaker 0

我的意思是,这确实需要适应。

I mean, was certainly an adjustment.

Speaker 0

对吧?

Right?

Speaker 0

我的意思是,任何来这里却说不用适应的人,都是在撒谎。

I mean, I think of anyone who comes here and says otherwise is a liar.

Speaker 2

这是完整的一期节目。

Here's the full episode.

Speaker 2

我深入浏览了你的网站,发现几乎所有我能找到更多信息的内容都指向一件事,那就是你当时非常感兴趣的一件事,但我找不到任何关于它的信息,因为所有

I was looking deep into your website, and there was something most everything I could find more information about was this one thing that you seem to be pretty excited about at the time, but I couldn't find any information about it because all

Speaker 0

链接都失效了。

the links were dead.

Speaker 0

Chickenfoot 是什么?

What is Chickenfoot?

Speaker 0

天啊,这居然意外地相关,因为那是我的硕士论文项目。

Oh, man, that's strangely relevant because it's, it was my master's thesis project.

Speaker 0

它是一个 Firefox 扩展,可能是最早用 JavaScript 编写的 Firefox 扩展之一,而且还是作为论文项目开发的。

It was a Firefox extension, probably one of the very few that was written, you know, in JavaScript for Firefox as a thesis project.

Speaker 0

它实际上是一个嵌入在 Firefox 侧边栏的小型编码工具,像个小型 REPL,叫做端用户编程,也就是面向网页的端用户编程,里面有一些像 enter 和 click 这样的函数。

And it was actually a little coding tool in a sidebar Firefox, and it was like a little REPL, it was called end user, yeah, it was end user programming for the web, and so there were functions like enter and click and things like that.

Speaker 0

你只要输入 enter,然后传入字符串参数,它就会自动找到输入框,然后你输入 click search 之类的指令。

And you'd say enter, and you'd, you know, pass the string arg, and it would like find the box and you'd say click search or whatever.

Speaker 0

当时很多工作都是在后台构建各种启发式规则,比如你输入 'enter first name',系统会识别 'first' 和 'name' 这两个词,找到离它们最近的文本框,再通过 JavaScript 将其作为输入。

And, you know, lot of the work was all these heuristics that we built under the hood that if you said, you know, enter first name, finding the, like, the words first and name and finding the text box that was closest, and then, like, using that and then through JavaScript, like, using that as the input.

Speaker 0

我现在回想起来觉得特别有趣。

And I just think about that now because it's really funny.

Speaker 0

我们当时做了很多工作,而这正是现在这些智能体正在做的大部分事情。

We did all you know, a lot of work, and that's, you know, a lot of what these agents are doing right now.

Speaker 0

对吧?

Right?

Speaker 0

差不多是类似的。

It's, like, similar.

Speaker 0

但现在是真正意义上的自然语言,而不是

But now actually truly a natural language, like, not

Speaker 2

在这个小小的JavaScript REPL里。

in this little, like, JavaScript REPL.

Speaker 2

哦,有意思。

Oh, interesting.

Speaker 2

所以它能解析前端,并提供一个REPL,你可以输入类似‘找到第一个姓名字段’这样的指令,你知道的

So it parsed the front end and had this REPL where you could say, I don't know, find the the first name field and, you know

Speaker 0

是的。

Yeah.

Speaker 0

我们会用,比如,无障碍标签和图片的替代文本,你知道的,那样做效果很好。

We'd use, like, you know, the the accessibility tags and alt alt text for images, and we'd you know, how and and it worked well.

Speaker 0

实际上在Craigslist上特别好用,因为那是你能找到的最简单的网站之一。

It was really good at Craigslist, actually, because that's one of the simplest websites you could you could use.

Speaker 0

但我有一些朋友,他们用这个工具自动化任务,真的靠这个赚了钱,对吧。

But I had I had friends who, like, made, like, automated tasks and, like, made real money off of things they automated with this tool Right.

Speaker 2

这真的很有趣。

Which is really fun.

Speaker 2

你刚进入这个行业时,对去谷歌工作,尤其是参与Google日历项目感到非常兴奋。

When you entered the industry, you were really excited about going to Google and specifically working on Google Calendar.

Speaker 2

对。

Yep.

Speaker 2

那是什么吸引你去谷歌的?那段经历怎么样?

So what drew you to Google and what was that like?

Speaker 0

是的。

Yeah.

Speaker 0

我的意思是,你知道,我在九十年代就上网了。

I mean, you know, so I, you know, got online in the nineties.

Speaker 0

对吧?

Right?

Speaker 0

我记得,那时候浏览网页,你得试五个不同的搜索引擎,才有可能找到你想要的东西。

I remember, you know, browsing the web, and it was at a time you'd go to like, you try five different search engines to hopefully find the thing that you wanted.

Speaker 0

有趣的是,我清楚地记得2000年3月,我的室友对我说:嘿,有个新网站,这个搜索引擎看起来好一点。

And it's funny because I distinctly remember my roommate in March 2000 saying like, hey, there's this site, this search engine that looks a little bit better.

Speaker 0

我想那时候它还叫 stanford.google.edu。

I think it was still stanford.google.edu.

Speaker 0

我当时就想:哦,这个更好用。

And I was like, oh, this is better.

Speaker 0

然后你开始使用,发现它们真的完全不同。

And then you started reading, and they were just so different.

Speaker 0

雅虎的界面非常杂乱,而他们则努力保持简洁,当时在设计理念上似乎更坚持原则。

Yahoo was all very cluttered, and they tried to be very sparse and were more, I think, principled about it at that time.

Speaker 0

然后,你知道,就像很多事一样,你开始看到一些人去了那里工作,心里就想:天啊。

And then, you know, like a lot of things, you start seeing people who, you know, who gets a job there, and you're like, oh, man.

Speaker 0

他们招的都是真正优秀的人。

They're they're taking really good people.

Speaker 0

我想和那些人一起工作。

Like, I wanna work with with those people.

Speaker 0

我觉得他们真的懂互联网,尤其是在那个时代,微软当时完全放弃了Internet Explorer项目,我就想:这是进入互联网的门户,你们却在把它拆掉。

And I felt like they just, you know, really got the web, like, especially at that time when, like, Microsoft didn't around that time, Microsoft killed the Internet Explorer project altogether, and I was like, this is the portal into the web, and you guys are, you know, dismantling it.

Speaker 0

而谷歌则明显更注重网络本身,再加上他们卓越的工程质量和影响力,毫无疑问,这是我毕业时非常向往的地方。

Whereas, you know, Google was way more, you know, web forward, and so between that and, like, the quality of engineering and the and the impact they were having, you know, certainly a place that I was really excited to go to coming out of school.

Speaker 2

那时候那里的文化怎么样?

And what was the culture like there at the time?

Speaker 2

我记得你的一些文章里提到过产品和基础设施的区别。

Like, I think in some of your writing you talked about like, products versus infrastructure.

Speaker 2

你知道,很多公司,

You know, a lot of

Speaker 0

尤其是像那样做大之后,我觉得创始人总是对最初擅长的东西情有独钟,对吧?

companies, especially once they get big like that, you know, it's kind of like whatever they're good at first is I feel like the founders always have a soft spot for, right?

Speaker 0

所以,信息检索和基础设施确实是推动公司成长的关键。

So certainly information retrieval and infrastructure, right, were like key to growing that company.

Speaker 0

而我当时被吸引过去,是因为他们推出了像Gmail这样的产品,虽然这些产品当时还比较模糊,但在我看来,它们在公司内部的影响力还是不如搜索这类核心业务。

And whereas I was drawn there at the time because like, you know, they put out things like Gmail, right, which were vague, right, but it didn't it still, I think, didn't have the the same cache inside the company, right, as the as search and that sort of thing.

Speaker 0

所以,当我负责日历项目时,它主要还是面向消费者。

And so, you know, we when I was working on it, calendar, it was still, like, mostly consumer.

Speaker 0

它也确实卖给企业客户,

It was, like, kinda it was also sold to enterprises.

Speaker 0

对吧?

Right?

Speaker 0

但我们并不是那个赚钱的部门。

But, like, we were not the ones making the money.

Speaker 0

那时候,我们简直就像个呼叫中心。

Like, we were probably a call center, right, at that point in time.

Speaker 2

我后来看到你最终离开了谷歌,从你的帖子来看,感觉挺复杂的。

I saw eventually you you ended up leaving Google, and I mean, from your post, it looks like it was pretty bittersweet.

Speaker 2

是什么让你决定离开谷歌的?

So what left you to leaving Google?

Speaker 0

我在那里待了四年,说实话,投资这件事开始变得可行了。

I had been there for four years, and, you know, I mean, realistically, like, investing was a thing.

Speaker 0

那四年结束后,我的财务状况确实发生了变化。

Like, finances definitely changed after that four year period ended.

Speaker 0

但你知道,那段时间也确实很艰难。

But, you know, also it was just tough.

Speaker 0

我当时有个不太好的习惯,就是特别投入地做那些对我来说很重要、但对谷歌可能没那么重要的事情。

Like, I I had a, I guess, a bad habit at that point of working really hard on things that, like, really were important to me, but maybe weren't important to to Google.

Speaker 0

对吧?

Right?

Speaker 0

所以我当时在做日历项目。

So, like, I worked on calendar.

Speaker 0

那还挺重要的。

That was pretty important.

Speaker 0

然后我做了Google任务,那是日历里的一个很小的功能。

And then I worked on Google Tasks, which was, like, a very small feature within calendar.

Speaker 0

对吧?

Right?

Speaker 0

它的用户量可能少两到三个数量级。

It's, like, probably at least two to three orders of magnitude fewer users.

Speaker 0

对吧?

Right?

Speaker 0

但我对它非常热衷,而且我也非常热衷于JavaScript基础设施和Closure这一整套JavaScript工具。

But I was really passionate about it, and then I was really passionate about the, like, the JavaScript infra and the the Closure, that that suite of JavaScript tools.

Speaker 0

你知道,这很棒。

And, you know, it's great.

Speaker 0

我的意思是,我享受并为我投入这些工作中的所有努力感到自豪。

I mean, I enjoyed and I'm proud of all the effort that I put into the things.

Speaker 0

你知道,我写了一本关于Closure的书,因为我非常有动力,但从职业角度来看,这可能不是最好的决定,对吧?

You know, that I went and wrote the book on closure because I was so motivated, but career wise maybe not the best move, right?

Speaker 0

你会想,但我一直在做这么高质量的工作,却看到其他人得到认可。

You're like, but I'm doing all this high quality stuff, and you see other people getting recognized.

Speaker 0

你会想,但我这么努力工作,你知道,这有点像是那种‘更努力而不是更聪明’的错误。

You're like, but I'm working so hard, you know, like that's, you know, kind of like the the harder not smarter type of mistake.

Speaker 0

所以,你知道,我应该去别处试试别的东西,看看我真正感兴趣的事情是否

And so, you know, it's kind of like I should go somewhere or try something else and see if, like, the things that I'm excited about are the

Speaker 2

是我所在公司最感兴趣的事情。

things that, like, the company I'm working at is most excited about.

Speaker 2

后来,你又回到了大公司,而且

Later, you came back into big tech, and

Speaker 0

你,是的。

you Yeah.

Speaker 2

你开始在Facebook工作。

You started working at Facebook.

Speaker 2

我知道当时你可以说是JavaScript专家,而你在Meta的第一个重要项目之一是构建Android代码库中的工具。

I understand that you were kind of like a JavaScript expert at the time, and then one of your first big projects at at Meta was kind of build tooling in the Android code base.

Speaker 2

所以我想知道你是如何参与这个项目的背后故事。

So I want to know the story behind how you got involved in that.

Speaker 0

当时,Facebook打算推出一款手机,对吧?

So at the time, it was like Facebook's going to make a phone, right?

Speaker 0

实际上,之前有过一些失败的项目,但这次真的要成了。

Actually, were some failed projects, but it was like this time it's really going to happen.

Speaker 0

我们要和HTC合作,对Android进行分叉,做一些事情。

We're going to partner with HTC, we're going to, like, fork Android and, you know, and do some stuff.

Speaker 0

这看起来非常令人兴奋,作为一个刚加入公司的人,对吧?

And, you know, so that seemed super exciting, right, as a person, you know, just coming into the company.

Speaker 0

而且,我确实做过不少Java开发。

And and I, you know, I'd done, like, quite a bit of Java.

Speaker 0

我当时更擅长JavaScript。

I was more JavaScript.

Speaker 0

但到了这个时候,他们称之为FaceWeb,就是把HTML5版的Facebook放到手机上,显然这行不通。

But at this point, this is also where, you know, they called it FaceWeb, the version of, like, they kinda, put HTML five Facebook on the phone, and, like, that was clearly not working.

Speaker 0

很明显,移动设备将是未来的趋势。

And it was clear that, like, you know, mobile was gonna be the future.

Speaker 0

这对公司来说是成败的关键。

That was kind of make or break for the company.

Speaker 0

突然间,有个朋友跟我说:嘿。

And suddenly, you know, a friend was like, hey.

Speaker 0

我知道你很喜欢JavaScript,但你真的应该去学Java或者Objective-C,好好掌握它,否则你只能做个产品人员。

Like, I know you really like JavaScript, but, like, you should really pick Java or Objective C and, like, get good at this or you wanna be a product person.

Speaker 0

这真是非常棒的建议。

And that was really, really great advice.

Speaker 0

于是我决定:那就学Java吧。

And so was like, well, like Java.

Speaker 0

我不喜欢Objective C,所以咱们走吧。

I don't like Objective C, so like, let's go.

Speaker 0

于是我就这样参与了那个项目。

And so that's how I, you know, found myself on that project.

Speaker 0

而且我们知道时间非常紧,因为与其他几乎所有项目不同,这个项目有硬性截止日期。

And I, you know, we had a very short timeline because unlike almost every other project, there was a hard deadline.

Speaker 0

通常来说,你是在准备好了之后才发布。

Usually, you know, you ship when it's ready.

Speaker 0

但这次不一样,我们必须向HTC交货,因为他们打算在3月1日左右把我们的东西烧录到手机里,不管具体是哪天。

This was like, Nope, we got to send a bill to HTC because they're going to like burn it into phones on, like, March 1 or whatever it

Speaker 2

是。

was.

Speaker 2

所以,

So,

Speaker 0

那真是手忙脚乱。

you know, it was really a scramble.

Speaker 0

但最初的Android代码库,很大一部分其实是Google从一个承包商那里继承来的。

But and the original Android code base was or a bunch of it was also, like, inherited from a contractor that Google paid.

Speaker 0

就像Facebook不想做原生应用,就雇了个人,然后应用就上架了,他们说:‘好了,代码现在归你了。’

Like, it's like Facebook didn't wanna make, like, a native app, and they paid some guy, and then it was, like, the app in the store, and they're like, here, the code's yours now.

Speaker 0

我们本该把这堆代码扔掉的,但我们没这么做。

And we should have thrown it away, but we didn't.

Speaker 0

所以很多让人沮丧的事情,还有迭代时间,对吧?

And so a lot of things that were frustrating, but also like iteration time, right?

Speaker 0

我觉得对每个人来说,如果你长期做网页开发,早就习惯了编辑后刷新的流程,但Android的构建系统真的很糟糕,对吧?

I think for everybody, if you had been a web developer for such a long time, you're used to this edit refresh, and then, you know, like the Android build system was was rough, right?

Speaker 0

它用的是Ant的一些构建工具,根本没法把项目从构建系统中模块化出来。

It was this, like, some build tools in Ant, and it, like, there were no there was no way to modularize it out of the bot.

Speaker 0

我们不得不拼命 hacked 才能勉强分成四五个模块,做任何事情都痛苦不堪,于是我心想:我得把构建系统改掉。

Like, we had to hack it up just to even have, four modules or five modules or something like that, and it was so painful to get anything done that I was like, I need I need to fix the build system.

Speaker 0

我当时想,我对Java可是很熟悉的。

I was like, I know I've done a lot with Java.

Speaker 0

我知道,从本质上讲,像这样迭代开发不应该这么慢。

I know it's not like fundamentally this slow to like iteratively, you know, build this sort of thing.

Speaker 0

所以,Facebook 有一种黑客马拉松文化,我就想:好吧,既然有黑客马拉松,那我干脆做个全新的构建系统,就照着 Google 的构建系统风格直接搞。

And so, you know, Facebook has this hackathon culture, so I was like, alright, hackathon, totally gonna like make a new build system, you know, like unceremoniously in the style of Google's build system.

Speaker 0

实际上,还有一个叫 fb build 的构建系统,它也是 Google 构建系统的一个不同分支。

And there's actually another build system called f b build that was already a different mirror of of the Google build system as well.

Speaker 0

那个系统是用 Python 写的。

That one's written in in Python.

Speaker 0

它只支持 C++,不过 yeah。

It only did c plus plus But yeah.

Speaker 0

我当时就想,要么我就把这个搞定,要么我就干脆安心做个开发者,不然我都不知道能不能待下去了,因为再这么搞下去我非得急得掉头发不可。

And I was like, either I'm gonna make this work or and, like and I'm then I'm gonna be happy to be a developer or, like, I don't even know if I'm gonna make it here because it's gonna be, like, tearing my hair out, you know, working on this thing.

Speaker 0

如果你不解决这个问题,你就会

And if you didn't fix this, you would

Speaker 2

如果这样下去,你早就辞职了

have quit the company if it

Speaker 0

嗯,我的意思是,我当时想,至少我可以换个项目什么的。

not Well, mean, it was I was like, well, I'll at least switch projects or something.

Speaker 0

或者我得找到一个让自己开心的方式,每天来上班。

Or I need to find a way to find a happy place, right, and come in to work every day.

Speaker 0

难道我不想写代码吗?

Like, can't I want to write code.

Speaker 0

我想做事情。

I want to do work.

Speaker 0

我只是想尽我所能,把工作做到最好。

I just want you know, try to do my best work.

Speaker 0

所以这挺讽刺的。

And so it was funny.

Speaker 0

实际上,我要给很多人点赞。

Actually, I give people credit.

Speaker 0

很多人告诉我,我正在做的这件事是个非常糟糕的主意。

A lot of people told me what I was doing was a very bad idea.

Speaker 0

几乎每个人,除了一个人。

Almost everybody except one person.

Speaker 0

我是一名高级Android工程师,但没有人说不,你知道的;而我觉得在谷歌,人们说‘不’的情况更多。

I was a senior Android engineer, but nobody said no, you know, whereas I felt like at Google, like, people said no more.

Speaker 0

所以我顺其自然,很快——相对很快地——做出了一个明显更好的东西,至少快了两倍左右。

And so I just rolled with it, and, you know, I quickly, relatively quickly had something that was dramatically better, like at least twice as fast or something like that.

Speaker 0

于是,这改变了很多人的看法,大家都说:‘好吧,我想我们就选这个吧,对吧?’

And so that, you know, it turned a lot at pets, people were like, Okay, know, I guess we Yeah, we'll go with that one, right?

Speaker 2

对我来说,有趣的是,似乎所有的不利条件都堆在一起了。

I think the interesting thing to me is it seemed like all the odds were stacking.

Speaker 2

如果很多工程师都注意到了同样的问题,他们可能不会选择启动这个项目,因为已经有一个现成的了,而且谷歌自己也有一个竞争项目,你可能赢不了那个。

If you're a lot of people who are engineers noticed the same problem would not have chosen to start the project because there's an existing one, and then also Google's got some competing one, maybe you're not going to beat that one.

Speaker 2

是什么让你坚信你的项目能胜过其他项目并成为默认选择?

What gave you the conviction that your project could beat the other ones and become the default?

Speaker 2

是的,我想有几点原因。

Yeah, I mean, guess a couple of things.

Speaker 0

我的意思是,就像我说的,我之前做过其他Java相关的东西。

I mean, one, like I said, I'd done other Java stuff.

Speaker 0

我觉得,这不应该这么慢。

I was like, like, this shouldn't be that slow.

Speaker 0

作为一名软件工程师,这从根本上就不该这么慢。

Or just as a software engineer, like, this fundamentally should not be as slow as it is.

Speaker 0

而且确实如此。

And there yeah.

Speaker 0

实际上,大部分反对意见都是这样的:如果我们偏离了标准方案,我们就无法使用标准方案了。

Most of the actually, most of the pushback was of the nature, like, well, if we deviate from the standard thing, you know, we're not gonna be on the standard thing.

Speaker 0

如果下周它变得快了100倍,那我们岂不是被你的方案绑住了?

And what if it gets, like, a 100 x better next week, and now we're stuck on your thing?

Speaker 0

当你仔细想想,这其实很讽刺,因为有很多类似的情况,比如他们自己开发PHP虚拟机或编程语言。

Which is really funny when you think about it because there's, like, so many things like, you know, making their own, you know, PHP virtual machine at language.

Speaker 0

对吧?

Right?

Speaker 0

他们确实多次选择走自己的路。

Like, they've certainly embraced doing their own thing many times.

Speaker 0

为什么这一次不一样呢?

Why this one was different?

Speaker 0

我不知道。

I don't know.

Speaker 0

我的意思是,当时关于移动开发,大家都在想:该怎么让这个东西运行起来?

I mean, it was it was just I guess everything about mobile was like, how are gonna make this work?

Speaker 0

我想,当时充满了恐惧,还有时间表的压力。

I guess there was just, like, a lot of fear and, you know, again, like timelines.

Speaker 0

好像那位资深人士打算去搞一个独立的项目。

It's like, have the senior person, like, why it seems like sounds like they're going go off and do a signer's project.

Speaker 0

我们有个严格的截止日期。

We have a hard deadline.

Speaker 0

这真的是我们时间的最佳用法吗?

Like, is that the best use of our of our time?

Speaker 0

但你知道,结果还不错。

But, you know, it it worked out.

Speaker 0

结果还不错。

It worked out.

Speaker 0

我还要说另一件事,我也试着稍微委婉一点表达。

I will say another thing too was I also tried to to couch it a little bit.

Speaker 0

我当时说,嘿。

I was like, hey.

Speaker 0

我只是想做一个Android构建系统。

I'm just I'm just trying to make an Android build system.

Speaker 0

我不是想接管公司。

I'm not trying to, like, take over the company.

Speaker 0

我不是想改变别人的项目。

I'm not trying to change anyone else's project.

Speaker 0

对吧?

Right?

Speaker 0

因为我确实觉得那样会引发更多摩擦,我会招来更多反对。

Because I certainly felt that that was gonna cause more I was gonna invite more friction.

Speaker 0

所以,你知道,我明白这一点,我试着让这个系统能支持公司更多的需求,但我从未强推它。

And so, you know, I knew that it it I tried to make it in a way that it could support more of the company, but I never I never pushed it.

Speaker 0

因此,大约一年后,当iOS团队对我说:‘嘿’的时候,我感到非常欣慰。

And so I was, like, really heartened when the year or so later, the iOS people were like, hey.

Speaker 0

我们的构建系统太烂了。

Our build system sucks.

Speaker 0

我们能用Buck吗?

Can we you know, can we use Buck?

Speaker 0

我当时说,是的。

I was like, yeah.

Speaker 0

当然可以。

Sure.

Speaker 0

我的意思是,你们尽管来加入吧。

Like, I don't you know, come on board.

Speaker 2

是的

Yeah.

Speaker 2

这其实也很有意思,因为你刚来的时候并没有多少威信。

That that's also another interesting because you you came in and you didn't have a whole lot of credibility.

Speaker 2

你只是刚被雇佣。

You were just hired.

Speaker 0

是的

Yeah.

Speaker 2

然后你试图去构建一些东西,想让每个人都参与进来,但当时人人都说别这么做。

And then you're trying to build something and get every and I also, everyone's saying don't do this.

Speaker 2

然后你必须说服他们,嘿,这才是正确的方向。

And then you have to convince them, hey, this is the right direction.

Speaker 2

你没有任何威信的情况下,是怎么推动这种改变的?

How'd you influence that change without any credibility?

Speaker 0

我的意思是,我借了一些。

I I mean, I borrowed some.

Speaker 0

有一位资深的Android工程师,你知道的,他也是前谷歌员工,叫约翰·珀洛,他说过,我觉得他说的是对的吧?

There's one senior Android engineer, you know, who was also ex Google, John Perlow, and he was like I think he said right?

Speaker 0

他说,你就去做吧。

He's like, you're gonna do it.

Speaker 0

赶紧做,别等别人把你给叫停了什么的。

Just do it fast before, like, anyone gets you know, it cancels you or something.

Speaker 0

他说,只要你能把这事做成,我就支持你。

He's like, well, I'll support you if you if you get this done.

Speaker 0

所以他是最早支持我的人之一,而且他是个非常高产的程序员。

So he was one of the first people and he was a very prolific coder.

Speaker 0

所以他真的很高兴能有更快的开发周期。

So he was, like, genuinely very happy to have a faster dev cycle.

Speaker 0

因此他是最早给予肯定的人之一,我觉得这帮助很大。

So he was one of the first people to, you know, give it kudos, and I think that that helped a lot also.

Speaker 0

但我要说,我在刚进去的时候犯了一些重大错误,你提到过没有信誉的问题,你知道的,我来自谷歌,我以为这里就是XPEL实验室的人,都是些特别厉害的人物。

But I will say, you know, I I made a big some big mistakes on my way in there, you you mentioned, like, about having no credibility is like, you know, I came from Google, and I was like, oh, this is where, you know, the XPEL Labs people are, like, all these, like, great people.

Speaker 0

然后你去Facebook一看,觉得这不就是一群大学生吗?

And then you go to, like, Facebook and you're like, oh, it's a bunch of college kids.

Speaker 0

他们怎么可能知道他们在做什么?

How could they possibly know what they're doing?

Speaker 0

有几次,我确实犯了错误,比如:我们在Google就是这样做的。

A few times, certainly, made the mistake, well, Google, we did it this way.

Speaker 0

人们却说:我们根本不在乎。

And people were like, we really don't care.

Speaker 0

在大多数情况下,他们是对的,因为在那里有效,并不意味着在这里也会有效。

And they were right in in most cases, right, that, like, just because it worked there didn't mean it was gonna work here.

Speaker 2

关于这个话题,最后一点是,你打造的东西在性能上远超其他方案,快了不止好几倍。

One one last thing on this topic is, I mean, what you built was way more performant than anything else by, you know, many multiples.

Speaker 2

背后的直觉是什么?技术上的直觉是什么,让你当时能做到如此高效?

What's the intuition, like, technical intuition behind what was then and what you did that made it so much more efficient?

Speaker 0

我觉得关键在于,我坐下来仔细研究了Google的那个工具,然后想:它到底在做什么?

I think the big thing was is that I just sat down and looked at the tool from Google, and I was like, what is it actually doing?

Speaker 0

而且我认为关键在于,Google 的那个工具一旦你做了任何修改,就会从头开始重新构建。

And where and I think the big thing is that the Google one would kind of just, if you changed anything, it would just start over from scratch.

Speaker 0

所以这就是为什么它特别慢,尤其是在增量构建时。

And so that's why it was so slow, especially for incremental builds.

Speaker 0

于是我开始深入理解:到底哪些东西依赖于哪些东西?

And so then I started really understanding, like, but what depends on what?

Speaker 0

因为还有像 Android 资源这样的东西,它们有自己的特殊机制,非常复杂。

Because there is these, there's still Arbsher, like Android resources, which had like a very bespoke thing, and it was it was complicated.

Speaker 0

正因为这种复杂性,我默认的做法就是直接清空一切,从头再来。

And because it was somewhat complicated, I think that's probably why just by default I blew everything away and started over.

Speaker 0

但当我真正深入进去后,我才意识到:哦,原来如此。

But once I got in there and I was like, oh, okay.

Speaker 0

我们可以利用这一点。

You know, we can take advantage of it.

Speaker 0

如果这些内容没有变化,那我们就可以缓存这一步的结果。

If these things don't change, then, you know, we can cache this result from this step.

Speaker 0

我们不必重新做一遍。

We don't have to redo it.

Speaker 0

然后,突然间,事情变得快了不少。

And, like, suddenly, you know, that made things, like, quite a bit faster.

Speaker 0

而且,甚至支持可以拥有超过我们原有四个模块的想法。

And then also just even supporting the idea that you could have more than, like, the four modules that we had.

Speaker 0

我的意思是,每次有人添加一个模块,都得写大约200行XML的AMP构建脚本,而这些脚本几乎没人能看懂,所以这根本行不通。

I mean, I think I think every time someone added a module, you know, they had to add, like, 200 lines of XML of, like, AMP build script that, like, nobody really understood, and so it was not.

Speaker 0

所以没人愿意去添加模块。

So no one no no one wanted to module wise anything.

Speaker 0

对吧?

Right?

Speaker 0

你不想为此负责。

You didn't wanna be responsible for that.

Speaker 0

所以Buck的一个重大改进就是让添加新模块变得简单得多。

So a big thing with Buck was making it that it was, like, a lot simpler to add a new module.

Speaker 0

因此,这也意味着我们最终拥有了更多的模块,构建也因此变得更加增量式。

And so then that also meant we ended up with more modules, and then builds are more incremental as a result.

Speaker 0

对吧?

Right?

Speaker 0

所以这实际上是一种思维模式的转变。

So it's really a change in the the mindset.

Speaker 2

基本上就是减少了重复劳动。

It was less redundant work, basically.

Speaker 2

是的。

Yeah.

Speaker 2

在你解决了Android构建的这些问题后,我后来去了公司更后面的部门。

After you solved this build problems, I guess, in Android builds, I obviously, I went later to further parts of the company.

Speaker 2

我注意到你们开始更多地投入到IDE方面的工作。

I saw that you started to work more on like the IDE.

Speaker 2

你在IDE中发现了什么问题,让你想要深入这个领域?

What was the problem that you saw that you saw in IDEs that made you wanna get into that?

Speaker 0

所以,是的。

So I yeah.

Speaker 0

在Buck之后,我短暂地参与了Messenger的iOS开发。

I took I did a brief stint after Buck on messenger, iOS Messenger.

Speaker 0

所以我想,好吧。

So I was like, okay.

Speaker 0

我已经做过Android了。

I've done Android.

Speaker 0

也许我应该尝试一下别的领域,尽管我不喜欢。

Maybe I should actually branch out even though I don't like it.

Speaker 0

我仍然不喜欢。

And I still didn't like it.

Speaker 0

人们甚至没有意识到,在Objective-C中,长期以来一直有一个叫做ARC的东西,也就是自动引用计数。

I people don't even realize in in Objective C, there's a thing that happens for a long time now called ARC, like the automatic reference counting.

Speaker 0

如今,编译器会自动插入它。

Like, nowadays, the compiler injects it.

Speaker 0

但以前你必须在 Objective C 里手动添加代码,为每一个内存分配进行显式的引用计数吗?

But you used to have to, like, actually add code in Objective C to do every, like, reference count, like, explicit For memory allocation?

Speaker 0

或者,你创建的每一个引用,都得手动处理。

Or, like, every reference that you created, like, you would have to do it.

Speaker 0

大多数人可能从未见过这种代码,但通过收购进入的 iOS Messenger 代码非常老旧,仍然采用这种方式编写,简直痛苦至极。

And and the and and most people have never seen this type of code, but the iOS messenger code that came in through acquisition was so old that it was still written in this other way, and it's it's it's incredibly painful.

Speaker 2

我想是的

I guess

Speaker 0

现在你可能会用 Codex 之类的工具来清理,但当时我们只能硬着头皮接受,Xcode 对我来说就是感觉不对劲。

now you'd have, like, Codex cleaned it up or something like that, but at the time we just sucked it up, and just Xcode just didn't, you know, feel right to me.

Speaker 0

我不喜欢头文件和实现文件。

I didn't like header files and implementation files.

Speaker 0

我到现在还是不喜欢。

I still don't.

Speaker 0

而且,无论是 Android 还是 iOS,Facebook 一直以来都有最大的应用。

And and also the I would say for both Android and iOS, you know, Facebook always had, like, the biggest app.

Speaker 0

对吧?

Right?

Speaker 0

我们有一个应用,里面集成了所有功能,然后我们就直接发布。

We had, like, one app with every with every feature in it, and we, you know, ship it.

Speaker 0

而谷歌不一样,他们会有Drive应用、笔记应用、Sheets应用之类的。

As opposed to Google, like, they'd have, like, a drive app and a note you know, a sheets app or whatever.

Speaker 0

但他们还拥有其中一个平台,所以能默认预装二十个应用。

But they also owned one of the platforms, so they could put 20 apps by default on there.

Speaker 0

这意味着,Facebook总是比其他人更早遇到每个移动开发工具的扩展极限,这很痛苦,但作为一名开发工具人员,这其实挺有意思的,因为我们能解决一些前所未有的问题。

And so what that meant was is that Facebook was always hitting the scaling limits of every mobile developer tool before everybody else, which was painful, but, you know, actually as a DevTools person, it was kind of interesting because we got to solve problems that nobody had solved before.

Speaker 0

而且不仅仅是作为科研项目,而是因为这

And not just as a science project, but because it

Speaker 2

确实带来了真实的商业价值。

was like real business value.

Speaker 2

而且

And

Speaker 0

所以Xcode也是这样,我们和苹果沟通,跟他们说:嘿,Xcode根本没法支撑我们的项目规模。

so Xcode similarly, we talked to Apple and we were like, hey, Xcode's not really scaling to our project.

Speaker 0

他们说:你的项目太大了。

They're like, your project's too big.

Speaker 0

你应该把它缩小。

You should make it smaller.

Speaker 0

这就是我们从他们那里得到的反馈。

Like that was kind of the feedback that we got from them.

Speaker 0

因此,自己开发一个编辑器看起来是合理的。

And so it seemed justifiable to like go and build an editor.

Speaker 0

情况类似,我当时就想:IDE到底在做什么呢?

It was similar thing, was like, I was like what is, know, what is an IDE doing, right?

Speaker 0

它其实就是和Clang、语言服务器之类的工具在交互。

It's like it's talking to Clang, like the language server and that sort of stuff.

Speaker 0

我想,我们可以在上面构建一个更友好的界面,而且那时候我们公司已经开始从Git转向Mercurial了。

I was like, we could build like a nicer shell on top of that, you know, and then we had started by that point deviating from Git and switching to Mercurial as a company.

Speaker 0

没人会原生支持 Mercurial。

Was like, no one's gonna support Mercurial out of the box.

Speaker 0

对吧?

Right?

Speaker 0

所以,这种情况应该改变。

And so like, that should happen.

Speaker 0

然后,如果 Buck 要成为我们的构建系统,那 Xcode 根本不可能支持所有这些 Facebook 特有的功能。

And then, like, oh, actually, if if Buck is gonna be our build system, then, like, we really like, know, like, that's Xcode's never gonna do all of these bespoke Facebook things.

Speaker 0

对吧?

Right?

Speaker 0

所以,投入时间去改善这个体验似乎是合理的。

So it seemed justifiable to, like, invest the time to to try to, like, improve that experience.

Speaker 0

但我对 Android 不这么觉得,因为 IntelliJ 其实已经很不错了,我们已经找到了让它规模化运行的方法。

And I didn't feel that way about Android because IntelliJ was actually, like, quite good, and we had figured out how to make that work at scale.

Speaker 0

但那时 Xcode 要更难处理一些。

But but Xcode was a little more difficult at that point.

Speaker 2

所以当时有Xcode,它很糟糕,不符合现有的需求,同时还有另一个团队在开发另一个IDE。

So there's Xcode, which was bad, didn't fit the existing needs, and then there was another IDE that another team was building.

Speaker 2

我觉得它是基于网页的,如果我没记错的话。

I think it was web based, if I

Speaker 0

它是基于网页的。

It was web based.

Speaker 0

我在这一点上没有撒谎。

I'm not lying at that part.

Speaker 0

这部分没问题。

That part's fine.

Speaker 0

它是基于一个被放弃的Google开源项目构建的,该项目使用GWT(Google Web Toolkit),你用Java编写代码,它会生成JavaScript代码来处理所有内容,我尝试在他们已有的基础上进行改进。

It was but it was built off of an abandoned Google open source project written in GWT, which is Google Web Toolkit where you would write Java, and it would code gen to JavaScript for everything, and I tried to build on what they had.

Speaker 0

我试图建立一些可信度。

I tried to build some credibility.

Speaker 0

它甚至确实加快了他们的构建速度,但同样,当我观察迭代时间时,我也觉得这是个被放弃的开源项目。

It even actually sped up their build a bit, but again kind of like looking at the iteration times, and also I was like this is an abandoned open source project.

Speaker 0

它是用 Google Web Toolkit 写的,那时候我们已经是 React 公司了。

It's written in Google Web Toolkit, and I was like, we are the React company at that point.

Speaker 0

对吧?

Right?

Speaker 0

既然如此,我们为什么不让那些想开发开发工具的人,使用我们作为行业领导者、而且真正热爱的技术呢?因为我们确实认为自己在这方面非常出色。

Like, how why why would we not empower, you know, people who wanna build dev tools to use you know, to build on a, you know, technologies that we are the leader in and actually really like because, you know, we think we're actually really good.

Speaker 0

所以我觉得你们真是疯了。

So I was like, you guys are crazy.

Speaker 0

于是我开始了,这和我之前提到的和机器人团队合作的情况类似,我最初是把它当作一个 Java 构建工具,而不是

And so so I started And and it's similar to the thing where I, you know, I mentioned with the bot guys, like, I started it as the the Java build tool, not

Speaker 2

一个全功能的构建工具。

the everything build tool.

Speaker 2

对吧?

Right?

Speaker 0

我当时觉得这情况很相似。

I was like it was a similar thing.

Speaker 0

我当时说,嘿。

I was like, hey.

Speaker 0

我要过去开始搞另一个编辑器,但我们只专注于iOS。

I'm gonna go over here and start this other editor, but we're just we're just gonna focus on iOS.

Speaker 0

我不是想接管什么。

Like, you I'm not trying to take things over.

Speaker 0

是的。

Yeah.

Speaker 0

你也不想搞出所有

You didn't want all

Speaker 2

摩擦。

the friction.

Speaker 2

而且,那支团队其实已经拥有所有现有用户了。

And, I mean, that team, they had all the existing users though.

Speaker 2

对吧?

Right?

Speaker 2

他们有数千名工程师。

They had thousands of engineers.

Speaker 2

I

Speaker 0

甚至可能有一千人,我觉得。

even maybe a thousand, I think.

Speaker 2

最终,管理层支持了最终成为NewClyde的方案,也就是你所构建的那个。

Eventually, leadership sided with what eventually became NewClyde, which is what you what you built.

Speaker 2

但既然你们的共享项目没有任何用户,他们为什么选择支持你们呢?

But why did they side with you when you didn't have any users on your your shared profit?

Speaker 0

是的。

Yeah.

Speaker 0

我觉得这是两方面因素的结合。

I mean, I think it was a combination of two things.

Speaker 0

我觉得,我当时提出的关于技术栈选择的理由起到了作用。

I mean, I think the the arguments that I made in favor of, like, the technology stack to build on.

Speaker 0

另一个原因是NewClyde是一个桌面应用,而且如果它真要成为iOS的Xcode替代品,人们肯定希望它能与模拟器通信,或者连接手机之类的。

Another was that NewClyde was a desktop application, and part of it was if this is actually going to be an iOS, you know, Xcode replacement, like, people are going to want to use it needs to able to talk to the simulator or plug in the phone or whatever.

Speaker 0

理论上,我们可以通过网页来完成所有这些功能,但这显然会多出很多额外的工作量。

Like, in theory, we could go through the web and do all those things, but it just seems like a lot more, a lot of extra work.

Speaker 0

我认为另一部分原因是,我之前在Buck项目上积累了一些信誉,让他们愿意冒险支持我。

And I think the other part is that, you know, I had built up some credibility with buck thing that they're willing to, like, take a gamble.

Speaker 0

我的意思是,上次那个项目不是也成功了吗?

Like, well, the last thing paid, you know, worked out.

Speaker 0

等等。

Like, wait.

Speaker 2

让我试试这个。

Let me try this one.

Speaker 2

我注意到,这一点加上你其他的一些工作,促成了你晋升为E8级别,也就是首席工程师。

I saw that this, in combination with some of your other work, led to your promotion to E8, which is also known as Principal Eng industry.

Speaker 2

当时你对这个晋升有什么反应?

What was your reaction to that at the time?

Speaker 0

是的。

Yeah.

Speaker 0

我的意思是,我当然非常兴奋。

I mean, certainly, I was I was very excited.

Speaker 0

你知道,我觉得,就我之前跟大家步调不一致的地方而言,我感到,当你在谷歌的时候,这不仅是对你工作的认可,也说明我不仅在技术上成长了,还开始理解什么是真正与雇主目标一致的工作。

You know, I felt like, you know, in the ways that I, had been out of step, I felt like, you know, when I was at Google, I was like, this is also not just it was also validation that, like, oh, now I'm also growing not just like technically, but like understanding like what it means to kinda, you know, do the things that like are in line with your employer.

Speaker 0

所以,这也同样有价值,同样令人满足。

And so like that also just, you know, was equally valuable or satisfying.

Speaker 2

我知道NewClient是开源的,如果我没记错的话,Buck也是开源的。

I I know that NewClient was open source and I think Buck was as well, if I recall correctly.

Speaker 2

那么,开源的初衷是什么?比如,你构建的技术开源有哪些优缺点?

What's the rationale for open sourcing if Yeah, like what are the pros and cons of open sourcing technology that you build?

Speaker 0

是的,让我想想。

Yeah, I mean, let's see.

Speaker 0

Buck更有趣一些。

Buck is the more interesting one.

Speaker 0

NuClide 并没有在外部得到广泛采用。

NuClide kind of didn't really get adopted externally.

Speaker 0

我认为在这两种情况下,这些公司都从开源中受益良多,因此大家总觉得,如果不是核心机密,那就和别人分享吧。

I think in both cases, I think all these companies have benefited so much from open source, like there I think there's just a feeling of like, if it's not really the secret sauce, let's share this with other people.

Speaker 0

对吧?

Right?

Speaker 0

比如 Codex,还有我职业生涯中的其他一些项目也是如此。

Like, I mean, like Codex as well, and a number of other things in my career.

Speaker 0

所以我确实觉得,信息共享本身就是好事。

So I do feel like that sharing of information is just good.

Speaker 0

即使没人使用你的工具,仅仅作为别人参考如何实现某个功能的范例,也已经很有价值了。

Even if no one uses your tool just as like seeing as a reference of like how a thing could be done, could be great.

Speaker 0

在更好的情况下,你实际上还能收到有意义的贡献和其他回馈。

You know, in the better scenarios, you actually get meaningful contributions back and things like that.

Speaker 0

我记得,Uber 曾经采用了 Buck。

And I remember, I think Uber adopted Buck.

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

我觉得Airbnb也用了。

I think Airbnb did.

Speaker 0

说来有趣,正如我所说,Facebook是最大的应用,所以我们最先遇到这些问题。

It was funny, Like I said, Facebook was the biggest app, so we would hit all these problems first.

Speaker 0

然后下一波公司也开始遇到这些问题,就会想,咱们去看看那些人是怎么做的。

And then this next wave of companies would start hitting these things, and be like, let's check out what these guys did.

Speaker 0

我想,说实话,在谷歌内部叫Blaze,外部叫Bazel。

I think, I mean, honestly, we also, you know, at Google, it was internally it's Blaze, externally it's Bazel.

Speaker 0

所以我们是先开源的,我们一直会想,如果我们施加一些压力,比如,你知道的,我们最终确实做到了。

So we were open source first, and we always do kind of wonder like, if we put some pressure on, like, you know, we get, and ultimately they did.

Speaker 0

我想,从那些参与过这个项目的人那里,我们非正式地获得了一些认可。

I think I think I think we've gotten a little bit of credit from that unofficially from, some of the folks who worked on that.

Speaker 0

但我认为,这也是一种招聘手段,或者说是展示一种理念:嘿,如果你想要站在这个技术领域的最前沿,想一直做这类事情,而不仅仅是个偶尔贡献者,那这就是我们的所作所为,这就是我们的身份。

But I think also that, you know, we you know, it's also like a recruiting thing too, or just showing like, hey, if you want to like, know, being at like the leading edge in like whatever area this technology is, and you wanna do this all the time, not just as like a drive by contributor, like, you know, this is what we do, this who we are.

Speaker 2

那么这个开源的决定,是工程师们自下而上决定要做的,还是也有领导层的认可,觉得这会很有价值?

And then this decision to open source, is this was this a bottoms up decision where engineers said we're just gonna do this, or is this kinda also leadership buy in, hey, this is gonna be valuable, and

Speaker 0

你有文档吗?

you got like a doc?

Speaker 0

是的。

Yeah.

Speaker 0

我认为这两种情况都是自下而上的。

I think both cases it was certainly like bottoms up.

Speaker 0

我不这么认为,像 React 和 PyTorch 这样的项目是巨大的成功案例,它们给公司带来的价值是无可争议的。

I don't think so you know, things like React and PyTorch, those are like the the big success stories, right, where where the value back to the company is like unquestionable.

Speaker 0

然后还有一长串其他项目,我认为根据经济状况和其他因素,如果管理者觉得工程师花太多时间在开源上,他们就会有怨言。

And then there's this longer tail of things where I think depending on the economy and other things, the managers get grumbly if they feel like their engineers are doing too much open source or things like that.

Speaker 0

所以在我看来,几乎总是自下而上的。

So it's almost always, I feel like, bottoms up.

Speaker 0

是的,我通常认为情况就是这样。

Yeah, I would say that's often the case.

Speaker 0

但当时并没有遇到太多阻力,通常你会得到一两场不错的大会演讲和一篇不错的博客文章。

But it wasn't like met with a lot of resistance, you know, and you usually get like a good conference talk or two and a nice blog post.

Speaker 0

这些博客文章,我觉得,随着时间的推移会带来回报。

Those blog posts like, you know, do, I would say, dividends over time.

Speaker 0

对。

Right.

Speaker 0

吸引人才之类的事情。

Drawing, recruiting stuff.

Speaker 0

是的。

Yeah.

Speaker 0

我觉得它们的使用寿命比人们意识到的要长得多。

I like they have like a longer shelf life than I think people realize.

Speaker 2

好的。

Okay.

Speaker 2

到目前为止你已经有了E8的推广,我猜你心里的期望值可能也稍微提高了,现在你得去找一个E8级别的问题了,我想。

So you got your E8 promo at this point, and I imagine the expectations maybe in your mind are kind of going up a little bit, and now you need to go and find an E8 problem, I guess.

Speaker 2

你被冻结之后做了什么?

So what'd you do after you got frozen?

Speaker 0

我觉得我当时有点越界了,试图去改善网页速度,我想我就是这么做的。

I think that's where I did a I got a little over my skis, and I tried to help with web speed, I think is what I did.

Speaker 0

因为again,网页加载速度这个问题对facebook.com来说确实非常严重。

Because again, it was a thing that was like a really big problem for the like the just the load time of facebook.com was not in great shape.

Speaker 0

你知道,当时的架构有点过时了。

You know, the architecture was a bit stale.

Speaker 0

而且这个问题实在太大了。

And it was just The problem was so big.

Speaker 0

我觉得,很多长期在Facebook做网页相关工作的人,都已经在这个领域待了很久。

And I didn't have, I think the a lot of people who had worked on web at Facebook had worked on it for a long time.

Speaker 0

而我当时专注于移动端和开发者工具。

And I had put myself in mobile and DevTools.

Speaker 0

我其实并不在那个领域里。

I actually wasn't in that world.

Speaker 0

我记得我当时想,我们到底该怎么做?

And I remember I was like, you know, what do we do?

Speaker 0

我的意思是,我其实坐下来和另一个人一起讨论。

I mean, actually I sat down with another person.

Speaker 0

我们开始从源码编译 V8,试图看看是否能改变我们生成 JavaScript 的方式,让它对 V8 更友好。

We started like compiling V eight from source and trying to see like if we could like change the way that we generated JavaScript, if it was like it'd be friendlier to V eight.

Speaker 0

我们只是尝试了一些疯狂的想法,但这些都没成功。

Like we were just trying like wacky things, none of which panned out by the way.

Speaker 0

不同的人擅长不同的项目,我觉得这个项目就不适合我。

And I just it was it was there's different there's different people who are like good for different projects, and I think that was just not the one.

Speaker 0

我更适合从零开始写大量代码的项目,而这类项目更像是要分析数据、和很多人沟通,而这些并不是我的强项。

Like, I'm better in a project that involves writing a lot of code from the beginning, and I think a project like that was, like, more about, like, looking at data and talking to a lot of people, and, like, I just that's not my strength.

Speaker 2

我想你提到过,在你职业生涯的这个阶段,有一种英雄之旅的想法。

I think you mentioned that at this point in your career, the the idea of a hero quest.

Speaker 0

是的。

Yeah.

Speaker 0

那是什么意思?

What's what's that mean?

Speaker 0

这个想法是,你知道的,它让人感到尴尬,因为这涉及到某种自我 ego 的问题。

The idea that, you know, that it's like, you know, it's embarrassing because there's, like, something about ego.

Speaker 0

这个想法是,你知道的,就像一个戈尔迪之结,所有工程师都在想,如果有人能进来解决这个工程问题就好了。

This idea that, you know, there's this, like, you know, Gordian knot and all these engineers are like, if only someone would come in and, like, solve this, you know, engineering problem.

Speaker 0

我当时就想,我现在可是懂 JavaScript 的。

I was like, I know JavaScript right now.

Speaker 0

好吧。

Okay.

Speaker 0

就那样直接进来,但我并没有这么做。

Just come in that way and but I didn't.

Speaker 0

我确实没有这么做,你知道的?

I I definitely did not, you know?

Speaker 0

我认为这是一个重要的教训,我不得不重新学习过至少一次:我能做很多事情,但真正让我享受、并且能让我更成功的,只是其中一小部分事情。

And I think that it's been an important learning, and I've had to relearn it, like, least one other time that, you know, I can do a lot of things, but there there is a smaller subset of things that I genuinely enjoy doing and that I'm gonna be a lot more successful, right, if I stay in the things that I genuinely enjoy doing.

Speaker 0

你知道的,我试图随着时间推移扩大这个范围,但并不是每个人都必须在所有事情上都做到最好。

You know, I I try to expand that over time, but, you know, we don't all have to be the best at everything.

Speaker 0

对吧?

Right?

Speaker 0

我认为,如果你接受并拥抱它的话。

I think that's if you accept it and, you know, embrace it.

Speaker 2

那之后你是怎么找到E8问题的?

So then how'd you find the E8 problem after that?

Speaker 2

接下来的挑战是什么?

Like, what was the next dare you?

Speaker 0

那也有一点运气成分。

That was, I think, a bit of luck as well.

Speaker 0

或者可以说,我们有时会举办一些小型的工程师聚会,用来头脑风暴未来可能遇到的问题。

Or I guess, you know, we had we had sometimes we'd have these little summits with, like, smaller proofs of engineers about, like, brainstorming what's gonna bite us in the future.

Speaker 0

我提到过,仓库一直在增长,迟早会遇到扩展性问题。

And I mentioned that, was like, know, the repo keeps growing, know, they're gonna have some scaling problem at some point.

Speaker 0

有个人,后来成了我的经理,布莱恩·奥沙利文,他决定召集一些人,尝试开发一个虚拟文件系统,提前解决这个问题。

And a person or my manager, then he became my manager, Brian O'Sullivan, he decided to get some people together to like work on making a virtual filesystem try to get ahead of that problem.

Speaker 0

于是我们找了我自己、阿姆·辛金斯和韦斯·弗隆,都是极其出色的工程师。

And so we got myself and Am Simpkins and Wes Furlong, both tremendous engineers.

Speaker 0

我其实觉得自己是团队里最差的工程师,

I actually thought I was the worst engineer on the

Speaker 2

在相当长一段时间里都是这样。

project for quite a bit.

Speaker 2

你提到了虚拟文件系统。

You mentioned a virtual filesystem.

Speaker 2

从高层次来看,像Meta这样的公司拥有这样的系统有什么好处?

What, on a high level, what's the benefit to a company like Meta if you had something like that?

Speaker 0

如果你认同单体仓库的理念,也就是把所有代码放在一个仓库里,那么人们实际上只需要访问其中一部分代码。

If you have bought into the monorepo philosophy, right, put all the code in one repo, you know, things that people do need only a subset of that repo.

Speaker 0

比如,他们在任何时刻都只需要查看部分文件。

Like, they have to look at the files at any point in time.

Speaker 0

因此,我们的想法是,围绕这些虚拟文件系统设计所有工具,当你执行克隆仓库、切换到不同提交版本等操作时,无需将仓库中的每个文件都实际写入磁盘,而传统文件系统默认就是这样做的,因为文件数量会随着仓库规模线性增长。

And so the idea is that, you know, you design all your tooling around those virtual filesystems that when you say clone the repo or then you update to a different commit or anything like that, you don't actually have to, like, write out every single file in the repo on disk when you make that change, which is which is the default in your, you know, traditional file system because that is gonna grow proportionally to the time with the with the size of the repo.

Speaker 0

对吧?

Right?

Speaker 0

所以总有一天,你会非常沮丧。

So at some point, you're, you know, gonna be very sad.

Speaker 0

因此,这实际上至少包含两个部分。

And And so there's actually kind of two, at least two parts to it.

Speaker 0

一是构建这个虚拟文件系统,也就是说,我知道这个提交下的用户。

One is building this virtual filesystem that's like, hey, I know the users at this commit.

Speaker 0

如果操作系统要求我提供某个文件的内容,我可以去获取它,让它看起来就像所有文件都实际被排列好了一样。

If the operating system asked me for the contents of the file, like I can go get it, and it will appear like they had actually laid out all the files.

Speaker 0

另一部分,也许我实际上更擅长的是,尝试预测:我们的工具链中有很多工具都是用来读取所有文件的。

The other part of it, which is the part that maybe I was actually better at, I think, is then try to anticipate, well, we have all these tools in our tool chain that are used to just reading all the files.

Speaker 0

比如你用 grep,它就是直接读取所有内容,对吧?类似这样的工具。

You you just rip grep, it just reads everything, right, that sort of thing.

Speaker 0

我们该如何调整开发流程和工具,使它们从设计之初就考虑到虚拟文件系统?

And how do we start changing also our development flow and our tools such that they are designed with the virtual filesystem in mind.

Speaker 0

因为如果你只是用你的工具把所有文件都实际化出来,那你实际上就失去了你之前获得的所有优势。

Because if you just, you know, materialize all the files with your tool, now you've, like, actually just lost all your the benefits that that you've made.

Speaker 2

所以从高层次来看,这基本上就是对一个巨大的文件系统进行懒加载。

So on a high level, it's basically just lazy loading a huge file system.

Speaker 2

这样更高效,因为你不需要在一开始就做所有事情。

So it's more efficient because you don't need to do everything at the beginning.

Speaker 2

是的。

Yep.

Speaker 2

而你提到的你更擅长的那部分项目,就是在这一基础之上整合所有东西。

And so that part of this project that you said you're better at is is integrating everything into this on top of that primitive.

Speaker 0

是的。

Yeah.

Speaker 0

对。

Yeah.

Speaker 0

所以我实际上和在这里的汉森·王一起做了一件事,他现在和我同在Codex团队,我当时想,好吧,传统的方式是,你希望在IDE或编辑器中实现非常快速的文件搜索,而大多数工具的做法是,首先遍历整个文件系统来找出有哪些文件。

So one thing I did actually with Hansen Wong, who's here, actually, I'm on the Codex team with me now, was I was like, oh, okay, you know, the traditional way you have, you you want really fast file search in IDE, in your editor, And the way most of these things do is the first thing you do is they walk the entire file system to find out what the files are.

Speaker 0

他们说,这会成为一个严重的问题,对吧?

And they're like, well, that's going to be a serious problem, right?

Speaker 0

这会抹去所有之前的优势。

It's going to undo all the benefits.

Speaker 0

然后我们就想,该怎么实现文件搜索,才不会破坏这些优势呢?

And then it's one of these things that's like not you know, first it was like, okay, how can we implement file search that's not gonna undo all the benefits?

Speaker 0

接着我们进一步思考,怎么才能做得比现在的方法更好?

And then it was, how can we do it even better than how it's done, today?

Speaker 0

于是我们最终构建了一个名为 Miles 的文件系统,用于管理我的文件。

And so we ended up, building this file system called Miles for for my files.

Speaker 0

它会像定时任务一样,索引所有新进入主干的提交,跟踪哪些文件被添加或删除。

And it, you know, on, like, kind of, like, a cron job, it would index it it would ingest all the new commits that had come in on, you know, on trunk and keep track of, like, which files had been added or removed.

Speaker 0

只是文件名,而不是内容,因为你只需要文件名。

So just, like, the names of the files, not the contents because all you need is the names.

Speaker 0

然后汉森想出了一些巧妙的办法,来维护这个索引,从而支持模糊文件匹配。

And and then and then Hansen had some clever ideas about how we maintained that index such that we could support fuzzy file matching.

Speaker 0

所以不仅仅是子字符串匹配,比如输入驼峰命名,你希望可以只输入大写字母,或者你的拼写更好,等等。

So instead of just substring matching, right, like, type, you know, like a camel case thing, you want to be able to type just maybe the uppercase letters, or just your spelling's better, what have you.

Speaker 0

于是我们想出了一种非常有趣的方式来表示所有曾经出现过的文件,以及一些标志位,用来表示:当我处于这个提交时,这个文件在当时是否存在?

And so it came up with this really interesting way to represent, you know, kind of all the files that had been seen at some point, and then some bits to represent, you know, if I'm at this commit, was this file present or not present at that point in time?

Speaker 0

然后当你查询时,也就是说,你向这个系统发送一个请求,你会告诉它你当前处于哪个提交,以及你本地是否添加或删除了任何文件。

And then also when you ask I mean, you sent a query to this thing, so you'd send, like, what commit you're at and, like, if you've added any files locally or removed any locally.

Speaker 0

我想我们处理了超过一百万个文件,耗时只有十到二十毫秒左右。

And I think we got this, you know, like, you know, over a million files in, like, I don't know, like, ten to twenty milliseconds or something like that.

Speaker 0

所以当你在编辑器里打字时,

So that you would be in your editor, you know, typing.

Speaker 0

这比XCoder或UMDS代码等工具默认提供的速度要快得多。

And so that was way faster than, I think, than, you know, like, XCoder or sort of like, UMDS code or something, like, would give you out of the box.

Speaker 0

所以,它实际上是在为Eden解决问题,那是这个虚拟文件系统的最初名字,早在它完全准备好之前就已经在预研阶段了。

And so so that you know, so, like, it was solving a problem for Eden, though that was the name of the file system originally, the virtual filesystem, you know, in anticipation before it was even ready.

Speaker 0

但后来它变得非常快,并且作为内部的Thrift服务可用。

But then it was so fast, and it was available as a thrift service internally.

Speaker 0

人们开始用它来做各种其他事情。

Like, people started using it for all sorts of other things.

Speaker 0

我想我离开的时候,我不太清楚。

I think when I left, like I don't know.

Speaker 0

我想当时至少有30台服务器在运行Miles,遍布全球。

I think there were at least, like, 30 servers running miles, like, spread around the globe.

Speaker 0

显然,它的用途远不止个人搜索文件。

And so clearly, was more than just people, like, personally searching for files.

Speaker 0

然后你做了那么多的容量。

And then you did that much, you know, capacity.

Speaker 0

很有趣。

Interesting.

Speaker 2

是的。

Yeah.

Speaker 2

我的意思是,当你谈到实现细节时,大多数人工作中并不会用到泄漏代码。

I mean, when you talked about, I guess, the implementation details, most most people, they they don't use leak code on the job.

Speaker 2

但听起来就像我在想,我不知道你怎么输入那个。

But that sounds like I was thinking about the I don't I don't even know how you input that.

Speaker 2

它像是一种树,比如前缀树那样的结构吗?

Is it like a tree, like a try thing?

Speaker 0

不是。

No.

Speaker 0

那正是有趣的地方。

That so that's what's funny.

Speaker 0

那个前缀树,是的。

The try yeah.

Speaker 0

这其实挺酷的,因为我们当时有两个并行的数组。

This was this was pretty cool in that we we had kinda like two parallel arrays.

Speaker 0

一个是文件内容,另一个可能是指向那个索引的整数。

One was like the file contents, and one was maybe an integer into that index.

Speaker 0

我记不清了。

I forget.

Speaker 0

然后我们有一个64位的掩码,它包含了26个小写字母、26个大写字母、10个数字,还有连字符之类的字符。

And then we had a we had a 64 bit mask that was like it was like so you had, like, 26 lowercase 26 capital, 10 digits, and, like, maybe dash and whatever.

Speaker 0

是的。

Yeah.

Speaker 0

每个比特位如果在你搜索的文件中出现过对应字符,就会被置为1。

And and it would and it was a every bit was set if the if that character was used at all in the file that you were searching.

Speaker 0

所以第一步是我们可以快速遍历这个列表,直接排除掉一大批文件。

And so the first thing was we could, like, blow through that list and, you know, exclude a bunch of things, like, right off the top.

Speaker 0

而且我们还特意设计了这些数组,让它们彼此平行,这样从缓存角度看,CPU可以高效地线性读取内存。

But we had also, like, very designed, like, all these arrays were in parallel to each other so that for, like, cache wise, we knew would be very efficient for the CPU to, like, read memory, you know, linearly.

Speaker 0

然后这也很容易将这个数组进行分区。

And then it lent itself to you could just partition that array.

Speaker 0

它天然适合并行处理。

It, you know, lent itself to parallelism.

Speaker 0

所以这真的非常棒。

So it was really yeah.

Speaker 0

我确实应该找个时间把这件事写下来。

I should really probably write it up at some point

Speaker 2

因为这真的太酷了。

because I that really cool.

Speaker 0

那是因为它并不仅仅是教科书里那种东西。

It was it was because it wasn't just kinda, like, out of the textbook.

Speaker 0

这确实没错。

That's that's for sure.

Speaker 2

我明白,你确实参与过Eden项目,然后当然还有Miles项目。

I understand that, yeah, you worked on Eden, and then, obviously, there's Miles as well.

Speaker 2

是的。

Yeah.

Speaker 2

而这些经历最终带来了另一次晋升。

And then these eventually led to another promotion.

Speaker 2

但在那次晋升之前,你在组织中的影响力和冲突处理方面一定有一些收获。

And, but prior to that promotion, there was some learnings you might have had about influence and conflict in orgs.

Speaker 2

也许如果你愿意

Maybe if you wanna

Speaker 0

分享一下。

share that.

Speaker 0

是的。

Yeah.

Speaker 0

我的意思是,这大概是成为一名主要写代码的E8所面临的情况之一。

I mean, that's one of the things, I guess, about being an E8, who primarily writes code.

Speaker 0

对吧?

Right?

Speaker 0

还有其他人,我觉得实际上那个级别或更高的人中,大多数都不写代码。

There's other people I'd say actually the majority of people at that level or higher are not writing code.

Speaker 0

对吧?

Right?

Speaker 0

他们实际上几乎完全专注于影响他人或跨团队协作,比如写大型的Google文档,让大家达成共识,诸如此类的事情。

They're they're actually kind of exclusively spent doing more like influence or working across teams, you know, writing the big Google Doc and getting everyone on board and all that sort of stuff.

Speaker 0

所以,你知道,作为一名E8,想要达到那种级别的影响力——也就是你被期望达到的水平——光写代码是很难做到的。

And so, you know, as an E8 trying to have that level, like, you know, that level of impact that you're expected to have, It's like, oh, it's hard to do that just writing code.

Speaker 0

所以,你至少得花一些时间,可能还得去影响别人。

So it's like, need to spend at least some time probably probably inflicting other people.

Speaker 0

这对我可能挺有好处的。

That would probably be be good for me.

Speaker 0

这可能会让我的经理很高兴。

That would probably make my manager happy.

Speaker 0

我觉得,有时候你对自己的一些见解太过自信了,或者至少我以前就是这样,我会直接强硬地推行,说得太绝对了。

And I think, you know, sometimes you're just so confident in in some insights you have that, or certainly I was, that I would just I I just came down, like, way too hard, I would say.

Speaker 0

而这样做对我来说并不顺利。

And and that did not go well for me.

Speaker 0

而且是的。

And yeah.

Speaker 0

所以,因为我在微软收购GitHub时特别兴奋或紧张,结果晋升被推迟了。

And so, like, like, promo got delayed because I was very excited or anxious about when Microsoft acquired GitHub and oh, wait.

Speaker 0

因为新的Clyde是基于GitHub技术构建的,我当时觉得这玩意儿肯定会消失,因为Visual Studio Code会让它不再成为一个独立项目——事实确实如此,它真的发生了。

Because new Clyde was built on this, you know, primarily GitHub technology, and I was like, that's gonna go away because Versus Code's gonna not make them be a project anymore, which was true, which did happen.

Speaker 0

我当时非常焦虑,担心这一切都会面临风险。

And I was just so anxious that that this was, like, now at risk.

Speaker 0

对吧?

Right?

Speaker 0

于是我一直在催促别人。

And I was pushing people.

Speaker 0

但你知道,我没有考虑到人们其实对自己的现状很满意,他们并不想被改变,就像奶酪被从他们底下搬走一样。

But, you know, people were I didn't really account for the fact that people were happy with what they were doing at the moment and, like, didn't want their cheese moved, you know, like, out from under them.

Speaker 0

所以,我被上司好好教育了一顿。

And so, you know, I got, like, a little bit of a talking to.

Speaker 0

我不得不推迟了晋升,诸如此类的事情。

I, you know, I had to wait a little bit for promo and things like that.

Speaker 0

但后来我确实接受了一些指导,虽然记不清具体时间线了,但那是专门针对这个问题的。

But I, you know, I actually got some coaching I think after that point, I can't remember the exact chronology, to work on that like specifically.

Speaker 2

关于辅导,你学到的最重要的一件事是什么?

What's the number one thing you learned about coaching?

Speaker 0

对我来说,我觉得我更能察觉到那些会触发我的事情了。

I would say for me is like, I think I'm more aware of like things that trigger me.

Speaker 0

比如你的技术决策之类的。

Like that would be your technical decisions or what have you.

Speaker 0

当这种情况发生时,我能意识到,并告诉自己:好吧,此刻别采取行动。

And recognize when that's happening and be like, okay, let's not act in that moment.

Speaker 0

或者,如果我觉得自己不适合进行这样的对话,或者状态不好,也许我可以去找对方的经理,而不是像在瓷器店里横冲直撞一样直接去找工程师,说:我有件事要谈。

Or you know if I don't think I can have the conversation like or I'm not in the best place to have it like maybe I go talk to the person's manager instead rather than like you know like bolinfest China shop to the engineer and be like I have this thing.

Speaker 0

我是这么想的。

I'm thinking about it this way.

Speaker 0

我对此有点激动。

I'm kinda riled up about it.

Speaker 0

帮帮我吧。

Like, help me.

Speaker 0

比如,我该怎么跟你团队合作之类的?

Like, how can I, you know, work with your team or or whatever?

Speaker 0

这种事情也发生在你身上吧。

Like, that's happened to you.

Speaker 2

有趣的是,在你的职业生涯中,晋升被推迟了,而你当时已经预见到 VS Code 即将上线,而 New Cloud 所依赖的技术即将被淘汰。

Well, it's interesting to me in your career because the promo got postponed, and you were you were seeing that Versus Code was gonna come up, and the thing that New Cloud was built on was gonna go down.

Speaker 2

从 hindsight 来看,你当时其实是对的。

And you were actually right in hindsight too.

Speaker 2

事实上,后来确实发生了这样的事,你一直在为正确的事情争取,但别人却让你冷静一点,别太激动。

Like, in the future, that is what happened, and you were battling for what was right, yet you were told, calm down a little bit and this stuff.

Speaker 2

所以,是的。

So, I mean Yeah.

Speaker 2

当你看到事情真的如你所料,你会怎么想?你是不是觉得,其实我从头到尾都是对的?

What are your thoughts when you saw things play out and you go, actually, I was right the whole time.

Speaker 0

我确实后来跟人聊过,大概一年后,我说:嘿。

I did have some conversations, like, about a year later, I was like, hey.

Speaker 0

我们能稍微平衡一下账目吗?

Can we balance the ledger a little bit?

Speaker 0

那件事其实没那么难,还挺好的,我们最终解决了。

Like, it didn't be pretty hard for that thing, and it was kinda good, and we we worked it out.

Speaker 0

是的。

Yeah.

Speaker 0

我会说。

Would say.

Speaker 2

好的。

Okay.

Speaker 2

所以我想,重点在于你处理这件事的方式,而不是你当时说的那些。

So I guess the the learning is just how you went about it, not what you were like Yeah.

Speaker 2

对。

Yeah.

Speaker 2

我会说这是对的。

I would say that's true.

Speaker 2

你似乎在Meta度过了非常愉快的时光,但最终还是离开了,那是什么吸引你去了OpenAI?

You seem to have a great time at Meta and eventually left, so what was the thing that drew you to OpenAI?

Speaker 0

是的,我的意思是,有好几个原因。

Yeah, I mean, a number of things.

Speaker 0

我的意思是,其中一个原因是,我记得在2023年的时候我面试了OpenAI,而那一年我在Meta致力于开发基于大语言模型的开发者工具。

I mean, one was so I interviewed at the 2023 with OpenAI, I believe, and I had spent 2023 at Meta trying to do LLM based developer tools.

Speaker 0

对吧?

Right?

Speaker 0

当时我们有自己的版本,甚至叫MetaMate,有点像GitHub Copilot的简化版。

With there's a you know, we had our own version even MetaMate, was, like, a little version of GitHub Copilot.

Speaker 0

对吧?

Right?

Speaker 0

我们为此写了一篇论文并做了相关分享。

That one we went into, like, a paper and a talk on that one.

Speaker 0

那是一个代码补全工具。

It was a code compose.

Speaker 0

对吧?

Right?

Speaker 0

那个叫Code Compose。

That was code compose.

Speaker 0

是的。

Yeah.

Speaker 0

而且,你知道,我们现在对快速交付和突破这类技术的界限充满热情。

And, you know, we, like now, there's a lot of enthusiasm around, you know, delivering quickly and pushing the boundaries of that sort of stuff.

Speaker 0

说实话,你会收到一些反馈,比如:为什么这个不像GPT-4?

And, you know, mean truthfully, I mean you know you get feedback on some of these things, it's like why is this not you know GPT-four?

Speaker 0

我就说,我们当时用的是Lomba 2,根本不是一回事,而且我本身也不是研究人员。

And I was like well we're on like Lomba two, it's not the same thing, and you know I was not not a researcher.

Speaker 0

对吧?

Right?

Speaker 0

我只是想打造这些体验,就是这样。

I was like, but I and I, you know, just wanted to to build the experiences, right, and that sort of thing.

Speaker 0

所以,那是一件事,就是我想做一些东西,我想去一个能用最佳模型实际构建的地方。

And and so so that was that was one thing was that, like, I wanted to build stuff, and I wanted to go to the place where I could actually build with the best model.

Speaker 0

第二点,和当初谷歌吸引人们来到OpenAI的情况类似。

You know, two, again, was similar to, like, you know, Google originally, like, seeing the people who were coming here to OpenAI.

Speaker 0

我当时就想,这些人我真的非常敬佩。

And I was like, oh, those are people I really respect.

Speaker 0

我觉得我可以和更资深的人共事,比如OpenAI里的八九级员工,这比我在之前的地方能接触到的要强得多。

I was like, those are I could actually work with more senior people, you know, like Meta eights and nines at OpenAI, I felt like, than I could where I was.

Speaker 0

第三点,这个地方在当时看起来,也确实是一个非常特别的地方。

And, know, third was just like, this also seems like, and it has been, just a very special place at the point in time.

Speaker 0

所以我跟很多人说,我觉得这就像2000年加入谷歌一样。

So I told a lot of people, I was like, you know, I felt like this would be, like the most similar to starting at Google in 2000.

Speaker 0

不是1998年,而是像2000年那样,对吧?

So not to 1998, but like, let's say 2000, right?

Speaker 0

那时候他们已经站稳了脚跟,找到了产品市场契合点,所以从个人角度来看,这真的非常令人兴奋。

Like they kind of got some footing and got some product market fit, and so like just on a personal level, that was just a very exciting thing.

Speaker 0

最后一点是,有趣的是,我真的很喜欢日历应用,因为它是面向消费者的,而且我把它推给了很多人。

And, you know, the last one was that funny thing is that when I I really enjoyed Calendar because I it was consumer and I shipped to a lot of people.

Speaker 0

我去了Facebook,以为会做大规模的消费类产品,结果却完全没做消费端,反而做了开发者工具,但你知道,我的用户就是公司里的朋友们。

I went to Facebook because I thought huge consumer place, ended up not doing consumer at all, Ended up doing developer tools, but like, you know, my users were my friends at work.

Speaker 0

那时候只有两万人,不是十亿人,但对我来说已经足够好了。

It was just like 20,000 people, not like a billion people, but it was good enough for me at the time.

Speaker 0

然后,当我想到OpenAI,想到有机会真正回归消费端,或者至少拥有庞大的用户群体。

And then, you know, thinking about OpenAI and then the chance to actually, come back to the consumer or at least have a large user base.

Speaker 0

所以现在我在做Codex,我不知道每周的活跃用户有没有超过一百万,现在具体数字我记不清了,但它一直在快速增长,简直不是冰球杆那样的曲线,而是近乎垂直的直线。

So now working on Codex, I wonder if there were over a million weeklies or I forget how much it is right now, and just keeps growing like you know, hockey stick more like vertical line than hockey stick even.

Speaker 0

你知道吗?

That you know?

Speaker 0

这远远超过了Meta那两三万开发者,影响力大得多。

So it's like way more than the 20 to 40,000 developers, you know, it could affect it at Meta.

Speaker 2

是的。

Yeah.

Speaker 2

当然。

Absolutely.

Speaker 2

几乎是整个行业的开发工具。

And dev tooling for the industry almost.

Speaker 2

是的。

Yeah.

Speaker 2

说到Meta这家公司,我觉得它本质上是工程驱动的。

Meta, when I think of the company, it's kind of engineering driven.

Speaker 2

工程师就是国王和女王,我想是这样。

Like, engineers are king and queen, I guess.

Speaker 2

他们推动着一切。

They kinda drive everything.

Speaker 2

从这个角度看,它是自下而上的。

It's very bottoms up from that sense.

Speaker 2

我觉得很多实验室型公司也是如此,只不过是在研究层面。

And I feel like a lot of the lab companies are also like that, but on the research side.

Speaker 2

所以,与其把工程师作为第一优先级,不如说要确保研究工作顺利进行。

So rather than engineers, the first class citizen, it's like, let's make sure the research goes well.

Speaker 2

而且这是有充分理由的。

And for good reason.

Speaker 2

对吧?

Right?

Speaker 2

比如,这也是你加入的原因之一,因为这些模型确实很出色。

Like, that's also part of why you came is the models are good.

Speaker 2

是的。

Yep.

Speaker 2

但作为工程师,你提到过,你并没有做研究工作。

But as an engineer, you mentioned, yeah, you weren't doing research.

Speaker 2

你对这种以研究为导向的文化和以工程为导向的文化有什么看法?

What are your thoughts on that research led culture versus engineering led culture?

Speaker 0

我的意思是,这确实是一个适应过程,对吧?

I mean, it was certainly an adjustment, right?

Speaker 0

我的意思是,任何来这里却说相反话的人都是在撒谎,但如果你待过像Fangs这样的地方,你就知道了。

Mean, I think of anyone who comes here and says otherwise is a liar, but, You know, if you've been at, like, the Fangs or whatever.

Speaker 0

但当你谈到影响力时,我认为这很重要,真正地、发自内心地意味着什么。

And but, you know, they are you know, when you talk about impact, right, which I think is important, like a real like, genuinely, you know, mean it.

Speaker 0

我喜欢我在Codex和harness上做的工作,我认为我们做了很多非常有意义的事情。

Like, I, you know, I love the work that I do on Codex and the harness, and I think we do a lot of very meaningful things.

Speaker 0

但如果模型本身不够好,我们在harness上做的一切也就没什么意义了,对吧?

But, you know, if the model weren't very good, it wouldn't really matter what we did, you know, on the harness, right?

Speaker 0

所以这就是现状,虽然如此,但我感觉非常好。

And so I don't so that's how it is, I would But I feel really great.

Speaker 0

我们就在研究团队旁边办公。

Like, we sit right next to the research team.

Speaker 0

我们和他们紧密合作。

We work really closely with them.

Speaker 0

因此,我们与他们建立了这种关系,能够共同开发产品。

And so that relationship that we have, that we get to co develop the thing.

Speaker 0

我的意思是,离开Meta的另一个原因,是在大语言模型领域,我想和开发模型的人一起打造产品,这样我们就能共同完成这件事。

I mean, was another reason, you know, leaving Meta, I mean, was that for in the LM space was like, you know, I want to build the product with the people who are building the model so we can do this thing together.

Speaker 0

我的意思是,也许在那里你也能做到类似的事情,但无论如何,影响力并不完全一样。

I mean, you know, maybe you could do that there, sort of, but not anyway, the impact was not quite the same.

Speaker 0

所以你提到我

So you mentioned I

Speaker 2

我的意思是,你刚来的时候,听起来你正在做Codex项目并启动它。

mean, when you got here, sounds like you were working on Codex and starting that project up.

Speaker 2

所以我知道,Codex CLI刚发布时,它的反响并没有达到你的预期,但后来它真的逐渐成型了。

So I understand with the initial launch of Codex CLI, it was not exactly what you hoped for, like, in terms of the how it was received, but later it kind of really all came together.

Speaker 2

你能讲讲这个故事吗?

Can you tell that story?

Speaker 0

是的,当然可以。

Yeah, sure.

Speaker 0

我的意思是,这真是一段奇妙的旅程。

I mean, it's been a wild ride.

Speaker 0

所以Codex CLI是在2025年4月发布的。

So Codex CLI, we launched it in April 2025.

Speaker 0

它就像是在三到四分钟直播的最后,顺带提了一下的一件事。

It was kind of like this, like, one more thing moment at the end of the three, four minutei livestream.

Speaker 0

所以我们现场演示了它。

And so we demoed it live.

Speaker 0

我们当时开源了它,版本是3.0。

We open sourced it, you know, for three point at that point.

Speaker 0

很多人尝试了它。

A lot of people tried it out.

Speaker 0

每个人都很兴奋想试试新的编程助手,它确实不错,但为了赶在截止前发布,确实有点仓促,对吧?

You know, everyone was excited to try a new coding agent, you know, and it was pretty good, but it pretty rushed to get it out the door, right?

Speaker 0

这在某些方面反而促进了参与度,因为之前从未开源过。

There was which in some ways was good for engagement because it's never open source.

Speaker 0

我们收到了大量拉取请求,我记得大概在一周或两周内就获得了大约一到两万颗星。

We were getting pull requests, you know, coming in all over the place, and I forget it, you know, I feel like we're like 10 to 20,000 stars in like a week or two or something like that.

Speaker 0

所以那部分挺有趣的,你知道,确实有人喜欢,但也不是说没人喜欢,只是我觉得我们可能没配备足够的人手来真正把这件事做好,因为作为一家公司,我们同时要兼顾很多事情。就在那之后一个月,大约七名工程师和若干研究人员推出了Codex网页版或云端版,你可以在容器中使用Codex,或者直接从手机启动一个新任务,这非常酷。

So like that part was fun, and you know, there were people who did like it, you know, it's like nobody liked it or anything like that, but then but that I think we didn't, we weren't maybe quite staffed to like really drive that the way that we needed to, because, you know, we're trying to cover multiple things as a company, and so, you know, just a month after that, and you know, a team of like seven engineers, and I forget how many researchers, launched Codex web or cloud web, where you can use Codex in a container or you could just kick off a new thing from your phone, which is super cool.

Speaker 0

而这次的投入要充分得多。

And that was like a more well staffed effort.

Speaker 0

我认为这个方向长期来看是正确的,但就我们看到的这些情况而言,你必须带着用户一起走。这个产品可能有点超前了,当时人们还是更青睐本地编码助手。

And I think that one is still the I think the long term vision is correct, but I think with a lot of this stuff that we've seen, you have to bring the users with you, I think that one was just like a little bit ahead of its time, and people were still actually more into the local coding agents.

Speaker 0

所以我们看到,网页版产品一开始确实有不小的用户增长。

And so we kind of, you know, we saw, you know, the web product, like there's a big adoption initially.

Speaker 0

但我觉得它的用户粘性,不如我们预期的那么高。

It wasn't as sticky, I would say, as we had hoped.

Speaker 0

整个夏天,这两个产品我们都在持续开发。

And then through the summer, both products still kept, know, we're working on both.

Speaker 0

但到了年中,就像我说的,那时候本地助手显然更符合市场需求。

But then somewhere that mid summer, again, like I said, it's like at this moment, like local agents are still the, I guess, the stronger product market fit.

Speaker 0

不过,我个人依然认为,从长远来看,你不可能只靠一台笔记本电脑来运行所有智能代理,你终究需要更多的机器。

But again, I still think in the limit personally, right, like, you know, you're you're gonna need more machines than just your laptop to as a place for agents to run.

Speaker 0

因此,我们在整个夏天进行了相当大的调整。

And so we shifted quite a bit over the summer.

Speaker 0

于是我们增加了更多人手来开发 Codex CLI。

So we brought more people onto the Codex CLI.

Speaker 0

是的,还有一些小功能。

Yeah, a few of the kid things.

Speaker 0

增加了更多人员投入。

Bringing more people on.

Speaker 0

你知道,GPT-5 即将发布,前景看起来非常好。

You know, GPT-five was going to come out, and that was looking really, really good.

Speaker 0

我个人非常兴奋,因为我之前已经原型化过几次,除了 CLI 之外,我们这次也有足够的人手支持。

And I think I was personally excited about, because I prototyped it a couple times before, was that in addition to the CLI, then we also had enough staffing.

Speaker 0

我们还开始开发 Versus Code 扩展。

We also started working on the Versus Code extension.

Speaker 0

我强烈认为,终端虽然适合很多场景,但始终存在很多局限性。

And I felt actually very strongly that the terminal is good for a lot of things, but it has a lot of limitations always.

Speaker 0

在终端里做出一个漂亮的用户界面需要做出很多妥协,而 VS Code 我们就不必做那么多妥协。

It's just like you make a lot of compromises to make a nice UI in the terminal, whereas Versus Code, we didn't have to make quite as many compromises.

Speaker 0

所以我觉得,大概是八月,那是一个疯狂的月份。

And so I think, like, August, I think, was a crazy month.

Speaker 0

我觉得 GPT-5 发布了。

I think GPT-five came out.

Speaker 0

我觉得我们发布了全新的终端界面。

I think we re released our new refreshed terminal UI.

Speaker 0

此外,GPT 开源模型也发布了。

Also, GPT open source model came out.

Speaker 0

我们也在两个 e 中支持了它。

We supported that in the in the two e as well.

Speaker 0

这真的很棒,因为我们有了一个开放权重的模型和开放的框架。

So that was really cool that we had, you know, an open weights model and the and the open harness.

Speaker 0

然后在当月晚些时候,VS Code 扩展也发布了。

And and then later that month, the Versus Code extension, you know, came out.

Speaker 0

所以我们当时就像疯狂地发布产品。

And so we were just, like, you know, shipping like crazy.

Speaker 0

正是这些因素的交汇,我认为,让我们开始看到一个转折点,这个转折点带来了我们如今所经历的垂直增长。

And that's really where, like that confluence of things, I would say, is where we started to see the inflection point that's brought us to like, you know, the vertical growth that we're at today.

Speaker 0

所以这真的非常令人兴奋。

And so that's, you know, that's been really exciting.

Speaker 0

我的意思是,你可以自己去代码库核实一下这些数据,对吧?

I mean, you know, some of these things you can go with the repo check for yourself, right?

Speaker 0

你也可以从人数、提交次数等方面来验证一下我提到的这些数据。

And gut check me on some of these things in terms of number of people, number of commits and all this sort of thing.

Speaker 0

是的,这段经历真是跌宕起伏。

And yeah, so it's been quite a ride.

Speaker 2

你提到了本地版和远程版的编码代理,听起来你非常坚信,长期来看正确的方向不是本地版本。

You mentioned the local versus the remote version of these coding agents, and sounds like you have a lot of conviction that the right long term direction is not the local versions.

Speaker 2

而是远程的、在云端的版本。

It's remote and in the cloud.

Speaker 2

为什么这么说?

Why is that?

Speaker 2

嗯,我觉得关于这一点

Well, I think about I

Speaker 0

我认为现在真正对它上瘾的人,而且未来会更多,就是当你想象一下,每当有 GitHub 问题或 Linear 任务进来时,你都希望自动让代理去处理,当然,这些操作是有成本的。

think that the people who actually for whom it is sticky now, and I think there'll be more of it, is that you imagine if you imagine you want to just automatically set for the agent at every GitHub issue or Linear Tiles thing that comes in or anything like that I mean, obviously, there's costs with those things.

Speaker 0

但同时也可能被滥用。

But or you can it could be abused.

Speaker 0

但假设是针对一个内部私有仓库,你希望它能成为任何自动化流程中的一环,对吧?

But let's say for an internal private repo, right, that you want to be able to just have it be a piece in any sort of automation pipeline, right?

Speaker 0

所以你不可能让所有这些都在你的笔记本电脑上运行。

And so you can't have all that happening on your laptop.

Speaker 0

因此,我想说,作为个人贡献者,我们可能还是会更多地使用本地代理。

And so I guess, I mean, you know, as an individual IC, maybe we'll still personally spend more time with the local agent.

Speaker 0

但就代理执行任务所需的计算时间而言,我觉得把这些部署到云端,虽然现在设置起来稍微麻烦一点,但一旦设置好,就会非常方便。

But in terms of, you know, compute time of agents doing work, right, I think getting that set up in the cloud, I think, you know, a little bit, it's like a little more to get set up right now, but once you have it, it's it's quite nice.

Speaker 2

我明白了,好的。

I see, okay.

Speaker 2

所以你并不是说本地产品本身会改变,而是说在整个行业里,用于智能体的计算资源大部分都会转移到云端,而且

So you're not saying that product, the local one will change, you're saying that, like, across the industry, the compute that goes towards agents, majority will be in the cloud and

Speaker 0

是的。

Yeah.

Speaker 0

我的意思是,当 VS Code 扩展刚推出时,其中一个功能就是能够把你正在进行的对话点击一下按钮,直接传输到云端,前提是你已经配置好了。

I mean, in I think when the Versus Code extension first came out, you know, one of the things was the ability to take the conversation that you were having and like hit a button and have it like transfer to the cloud if you were set up to do it.

Speaker 0

对吧?

Right?

Speaker 0

所以我认为我们会继续看到这种模式:你正在处理某个任务,想把它转到云端,等它完成后再拿回来,你知道的。

And so I think that we'll continue to see that where you may, you're working on something, want to throw it over here, you're like bring it back, you know, when it's done.

Speaker 2

今年年初以来,你的 Codex 使用量增长了五倍,现在已有超过一百万人在使用它。

Your Codex usage is five x since the beginning of the year, and over a million people are using it now.

Speaker 2

我想知道,自从你开始使用这个新版 Codex 后,你的 AI 工作流程变化大吗?

I'm curious, has your AI workflow changed a lot since you've, you know, started to use this newer version of Codex?

Speaker 0

是的。

Yeah.

Speaker 0

确实如此。

It has it has.

Speaker 0

我现在使用这个应用的频率比自己原先预想的要高得多。

I'm a much bigger user of the app now, maybe, than I thought I would be.

Speaker 0

对,没错。

I yeah.

Speaker 0

有一段时间,我非常依赖我们的 Versus Code 扩展。

Like, for a while, I was I was very strongly in, like, our Versus Code extension.

Speaker 0

我需要那个侧边栏。

Like, I need I want that sidebar.

Speaker 0

我希望所有代码都在我身边。

I want all the code there next to me.

Speaker 0

我觉得这些东西就应该在一起。

I feel like these things should be, you know, together.

Speaker 0

我不是那种不看代码的人。

I'm not a I'm not a person who doesn't look at the code.

Speaker 0

对于那些真正是临时性、用完即弃的原型项目,我确实不会去看代码。

I'm not a like a I don't for for projects that are, like, true prototypes that are throwaway, like, I will actually not look at the code.

Speaker 0

这让人感觉非常自由。

It's very freeing.

Speaker 0

理解我为什么对它如此兴奋。

Understand why I'm so excited about it.

Speaker 0

但对于进入 Codex 本身的代码,我就不行了。

But for the code that goes into Codex itself, I'm like, no.

Speaker 0

我还是得看看这段代码。

I still need to look at this.

Speaker 0

对吧?

Right?

Speaker 0

这相当重要。

This is pretty important.

Speaker 0

这会影响其他人,你知道的。

This is, like, what's gonna, you know, affect everybody else.

Speaker 0

但你会逐渐感觉到,嗯,我有信心模型能完成这个改动和类似的操作。

But, you know, you start to get a sense of, okay, I'm confident the model's gonna be able to do this, you know, this this change and this sort of thing.

Speaker 0

就像,我不需要时刻盯着它。

Like, you know, I don't need to to babysit it.

Speaker 0

我会直接先写一大段代码。

I'm gonna just, like, write a lot upfront.

Speaker 0

所以,我的电脑上有很多个Codex仓库的副本,我在Codex应用里特别享受多任务处理,现在只需要在一个窗口里操作,轻松多了。

And so, you know, I have, like, four or five clones of the Codex repo of my machine, and I I have enjoyed in the Codex app, like, the multitasking I just is is just a lot easier because now you just kinda hang out in one window.

Speaker 0

我会试着去玩这个游戏,差不多就像在挑战自己,到底能有多少吞吐量?有时候感觉就像在空中抛接多少个球一样。

And, you know, I try and it's almost a game exactly, but it's like, you know, it's like how much throughput can I get, right, in terms of how many balls can I juggle in the air sometimes, it feels like?

Speaker 0

当你真的在努力的时候,可能会觉得有点忙乱,但与此同时,你也会觉得自己的效率提高了很多。

It can feel like a little hectic when you're really trying to Yeah, Context But at the same time, you're like, I'm getting a lot more done.

Speaker 0

有时候我甚至有点不好意思亲手写代码了,因为你心里会想,如果我当初问得更恰当一点,就能直接搞定,就像刚开始时,你只是想改这三行代码。

And that you know, I almost feel a little bad writing code by hand sometimes because you're like, I could have If I had asked this in the right way, I you know, it's like when you started, it was like, oh, I'm just gonna change these three lines.

Speaker 0

然后呢,你知道,三十分钟后,你会觉得,哦,我们还是都喜欢自己打字,我觉得是这样,诸如此类。

And then like, you know, thirty minutes later, you're like, oh, I kinda you know, we all like to type still, I think, and that sort of thing.

Speaker 2

你觉得现在有多少比例的代码是你自己写的,有多少是模型生成的?

What percent of your code would you say is human written versus the model generates it these days?

Speaker 2

天啊。

Oh, man.

Speaker 2

模型生成的可能有80%左右。

It's models probably be like 80%

Speaker 0

到90%。

to 90%.

Speaker 0

我的意思是,是的,没错。

I mean, yeah, yeah.

Speaker 0

我的意思是,比如调试测试或者CI出问题的时候,你知道怎么写打印调试之类的,这真的很棒,特别自由。

I mean, like, debugging a test or like the CI thing is bad, like, I'm like, you know how to write, you know, print debug, whatever, like, that's great, that's really freeing.

Speaker 2

去分辨哪些问题适合用大语言模型解决,哪些不适合,你得看到什么样的情况,才会觉得,好吧。

Digging into the problems that are suitable for LLMs and the ones that are not, like, what what do you need to see where you think, okay.

Speaker 2

需要亲自进去,自己写一遍。

Need to go in and, you know, write it myself.

Speaker 2

那10%是什么?还有那90%里又包含什么?

What's that 10% and also what's in that 90%?

Speaker 0

是的。

Yeah.

Speaker 0

我的意思是,这是个好问题。

I mean, that's a good one.

Speaker 0

我觉得吧,每次我坐下来,都会想:我该自己写这段吗?

I think that that you know, because every time I sit down, I'm like like, should I write this?

Speaker 0

我的意思是,答案几乎总是不用。

I mean, the answer is almost always no.

Speaker 0

有些东西是更底层的,比如Codex的框架部分,我花时间做的那块是用Rust写的。

There's things that are lower level and someone So Codex, the harness, the part that I spend my time on, is in Rust.

Speaker 0

这意味着我们能够并且确实会在那个代码库中做操作系统特定的事情。

And that means that we can do and we do do operating system specific things in that code base.

Speaker 0

而且实际上,我花了很多时间在沙箱上。

And actually and I spend a lot of time on on the sandboxing.

Speaker 0

对吧?

Right?

Speaker 0

所以真正保障我们所做事情的安全性、确保模型不会超出你设定的界限的,就是这个部分。

So the thing that really upholds, like, you know, the security integrity of what of what we're doing and that the model can't go outside, you know, the bounds that you set.

Speaker 0

我更倾向于亲手做这些,因为我必须非常确定这一切都是正确的,我们的测试覆盖率是足够的。

I do more of that by hand because I need to make sure, really sure, that that's all correct, right, that our test coverage is good.

Speaker 0

有时候我会先提供一些初始内容,一旦我有了那些我非常有把握的组件,就可以让它去填充剩下的部分,诸如此类。

Or sometimes I'll seed it, and once I've got the groundwork and like, okay, I have the pieces that I had a lot of feelings about, and then could let it fill in the rest and that sort of thing.

Speaker 0

但还有很多重构和类似的工作。

But a lot of refactors and things like that.

Speaker 0

实际上,我现在想的是,我还没有构建一个包含太多改动的大型合并请求,但我知道它确实改动太多了。

Actually, think a lot right now is I haven't built up a big, you know, PR that does too many things, but I know it does too many things.

Speaker 0

我会想,好吧。

I'll be like, okay.

Speaker 0

请把这段代码拆分成便于审查的小型提交,诸如此类。

Please, you know, please split this up into reviewable sized commits, things like that.

Speaker 0

想想我过去在这些事情上要花多少时间,

Like, think about how much time I'd probably spend on that sort

Speaker 2

现在我可以了,没错。

of stuff before, and now I can Right.

Speaker 2

合理分配。

Allocate.

Speaker 2

让你卡住。

Freeze you up.

Speaker 2

那代码审查呢?

What about, like, code review?

Speaker 2

在OpenAI,你通常最终会审查多少比例的代码行?

Is there like, what percent of lines of code do you end at OpenAI generally?

Speaker 2

是人工审查,还是有代理工具?比如,你写一个测试,其实根本不需要

Are people reviewing manually, or are there agents that are like Yeah, imagine you write a test I or don't really need

Speaker 0

去审查它。

to review that.

Speaker 0

我的意思是,确实还是需要。

I mean, do still Yeah.

Speaker 0

我会说,我喜欢那种方法,即代理应该进行多轮审查,直到它足够自信,认为值得人类花时间去看它。

Need watch I would say I liked the approach where, you know, the agent should do, you know, multiple rounds of review or whatever until it's confident, and that it's like kind of, you know, worth a human's time of looking at it.

Speaker 0

但我们仍然会在代码合并前进行审查,一般来说都是这样。

But we still do look at it, like ultimately before it goes in, would say generally speaking.

Speaker 0

我认为,就像其他人一样,我们的代理也会处理空文件。

I think there's, you know, we have like our agents empty file like everybody else does.

Speaker 0

有时你还是会发现一些知识缺口,需要补充某些上下文,或者是一些我们尚未记录下来、但代理遗漏了的内容,不过作为人类,

There's still sometimes you find like a gap in knowledge that needs, like, that some context that needs to get added back into there, or it's, yeah, just things that we haven't yet memorialized that the agent missed, but like as a human,

Speaker 2

我仍然恰好知道。

I still happen to know.

Speaker 2

对。

Right.

Speaker 0

还有类似这样的事情。

And things like that.

Speaker 0

所以我们确实能发现问题。

So we do catch things.

Speaker 0

但说实话,现在人们也开始用AI来写他们的拉取请求摘要,我们团队的摘要质量也提高了很多。

But, you know, I'll say actually now that people are also using AI to write their, like, pull request summaries, our summaries across the team, I would say, are getting way better.

Speaker 0

所以现在,至少当我进行代码审查时,它已经经过Codex的审查了。

So now at least also when I'm going into review, right, it's been reviewed by Codex.

Speaker 0

我们会确保摘要中包含PR的‘为什么’和‘是什么’,也就是背后的原因。

There's a summary that's like we actually make sure it has the why and the what of why, the reason behind the PR.

Speaker 0

这无疑帮助我们更快地处理这些PR,这是好事,因为需要审查的内容太多了。

So that is certainly, I think, helping get through these PRs faster, which is good because there is a lot more review to do.

Speaker 2

我的天,这太棒了。

I mean, that's amazing.

Speaker 2

我觉得有一半的代码变更都几乎没写测试计划,我不知道,是ARC构建还是什么,哦,我知道,

I feel like 50% of diffs have almost blanked test plan, I don't know, ARC build or whatever the oh, I know,

Speaker 0

天啊。

man.

Speaker 0

I

Speaker 2

我想聊聊那个开源的 Codex 命令行工具。

wanna talk about the the Codex CLI that's that's open source.

Speaker 2

为什么它是开源的?

Why is it open source?

Speaker 0

对于那种对你的机器运行至关重要的东西来说,这正是开源的一个优势。

You know, for something that's that critical to, like, what's going on on your machine, right, like that that like, that's one of the aspects of open source.

Speaker 0

我本人并不是特别狂热地支持这类理念,但我能理解这种想法:嘿。

I'm not, you know, the most zealous about this sort of thing, but I but I I sympathize with it, this idea that, like, hey.

Speaker 0

你要把这个东西装到我的机器上。

You're gonna put this thing on my machine.

Speaker 0

我在意它在做什么。

I care about what it's doing.

Speaker 0

对吧?

Right?

Speaker 0

而且我认为在这个领域,人们能够查看并了解它的运作方式,这一点尤其重要。

And I think in this domain in particular, it's really important that people can look at it, you know, and have have an idea of what it's doing.

Speaker 0

因为人们对AI代理之类的东西有很多疑问。

Because, you know, people have a lot of questions about AI agents and that sort of thing.

Speaker 0

所以我认为这个领域、这个方向,实际上非常重要。

And so I think this area, this domain, I think it's actually really important.

Speaker 0

而且我们也收到了很多优秀的贡献,比如报告之类的东西,这些是我们原本可能会错过的。

And also we have gotten a lot of, I think, like great contributions above reports and things like that that we would have missed out on.

Speaker 0

此外,我认为这也是向世界分享我们是如何实现这一点的方式。

And then also I think it's, you know, just sharing with the world with like how this is done.

Speaker 0

所以我们是通过代码来做的,对吧?

So we do it through code, right?

Speaker 0

我写过一篇博客文章,解释了代理循环是如何工作的,未来还计划写更多这类内容。

I've put out one blog post about how the agent loop works, like, there is a plan to do more of that.

Speaker 0

我其实很期待,只是时候到了而已。

I'm actually excited to, it's just, you know, it's just time.

Speaker 0

这是责备的因素吗?

Is this blaming factor?

Speaker 0

是欲望吗?

Is it desire?

Speaker 0

是的,这挺有趣的,因为我有两个候选人来面试,其中一个说,嘿。

Yeah, it was funny because I had two candidates who came through, one's like he's like, hey.

Speaker 0

我写的。

I wrote it.

Speaker 0

对吧?

Right?

Speaker 0

我当时说,不是。

I was like, no.

Speaker 0

不是。

No.

Speaker 0

是我写的。

I wrote it.

Speaker 0

另一个人来了之后说,哦,你能看得出来,那个,你知道的,你没有外包出去,好吧。

And another person came in and was like, oh, you can tell that that, you know, that you did not outsource the Okay.

Speaker 0

很好。

Good.

Speaker 0

对吧。

Right.

Speaker 0

我当时说,哦,谢谢你。

I was like, oh, thank you.

Speaker 2

你知道吗?

You know?

Speaker 2

所以是的。

So yeah.

Speaker 2

你提到了那篇博客文章。

You mentioned the blog post.

Speaker 2

Codex 是如何发现它环境中可用的内容的?

How does Codex find what is available to it in its environment?

Speaker 2

我在运行这些工具时,觉得这简直太神奇了。

I'm running these things, I'll see it's kind of amazing.

Speaker 2

它仿佛在自己思考,不断发现我终端里的各种东西。

It's thinking to itself and discovering all these things in my terminal.

Speaker 2

所以,这通常是怎么运作的呢?

So yeah, how does that typically work?

Speaker 0

是的,我的意思是,有几种方式。

Yeah, I mean, there's a few.

Speaker 0

我的意思是,显然 Codex 基础训练中包含的内容,比如它特别喜欢用 RIPGREP,而且用得非常好来查找各种东西。

I mean, there's obviously what is, know, in Codex's base training, like it loves to use RIPGREP, it uses RIPGREP very well to find all sorts of things.

Speaker 0

然后,如果你有自己的代理的话。

And then there's, you know, if you have your agents.

Speaker 0

md 文件里,你可能会说,嘿,在这个仓库里,这些工具特别重要,对吧?

Md file, and you're saying, hey, in this repo, like these tools are really important, right?

Speaker 0

你应该使用这些,对吧?

You should use these, right?

Speaker 0

你那些README文件之类的。

You're the readmes or whatever.

Speaker 0

或者,如果你使用MCP,并将这些MCP服务器与你正在工作的环境关联起来,那么在对话开始时就会注入一组工具定义。

Or obviously, if you use MCP and you associate these MCP servers with your you know, where you're working on, right, that that that injects the set of tool definitions, like, at the start of the the conversation.

Speaker 0

对吧?

Right?

Speaker 0

所以我就觉得是这样。

So then I kinda yeah.

Speaker 0

这甚至都不是Codex自身的发现过程。

So that's that's not even, like, discovery on Codex's part.

Speaker 0

对吧?

Right?

Speaker 0

它只是被直接摆在了最显眼的位置。

It's kinda just, like, put front and center there.

Speaker 2

我明白了。

I see.

Speaker 2

所以其中一部分是通过框架显式地将这些内容注入到上下文中。

So some of it's the harness explicitly throwing that into the context.

Speaker 2

是的。

Yeah.

Speaker 2

但还有一大块工作,是模型自己承担了寻找各种内容的繁重任务,是

And then there is a big chunk, though, where the model is just doing all the heavy lifting of finding things, is

Speaker 0

对吗?

that right?

Speaker 2

是的。

Yeah.

Speaker 2

就像回顾你的职业生涯,纵观你所有的工作广度和深度,说实话,这太惊人了——你涉猎过 JavaScript、前端,还有这么多开发工具,比如构建工具、模糊文件搜索、虚拟化等等。

Kind of like reflecting over your career, the breadth and depth of your work, if we look across all of it, I mean, it's insane, you have JavaScript, front end, then you have all these dev tool, you know, build, fuzzy file search, you know, virtual.

Speaker 2

现在你又在做 Codex。

Now you're working on Codex.

Speaker 2

我肯定你为了完成这些项目,不得不继续深造你的工程教育。

You I'm sure you had to continue your engineering educate education to kinda get through all these projects.

Speaker 2

对你自我提升帮助最大的技术书籍有哪些?

What are the top technical books that have helped you educate yourself?

Speaker 0

是的,我的意思是,有一本关于操作系统的书,大概有一千页左右。

Yeah, I mean, you know, so one was this book on operating systems, it's like a thousand pages or something like this.

Speaker 0

是Addison Wesley出版的那本。

It's the Addison Wesley book.

Speaker 0

我正想回忆一下作者是谁。

Trying to remember the author.

Speaker 0

但有趣的是,当我做虚拟文件系统项目时,我职业生涯到那时为止还没写过C语言。

But it was funny because I was when I was working on the virtual filesystem So I had actually gotten to that point in my career without ever writing C.

Speaker 0

比如在大学期间,课程更偏向理论,我们根本不需要接触C语言。

Like undergrad, like it was like more theoretical, like we just never had to touch it.

Speaker 0

但偏偏,我却在做一个虚拟文件系统项目。

And then yet, I'm working on a virtual filesystem project.

Speaker 0

那是一个非常底层的操作系统。

That was a very low operating system.

Speaker 0

所以我开玩笑说我是这个项目中最差的工程师。

Why I joke that I worst engineer of the project.

Speaker 0

有人说了些什么,我这才意识到,我

And someone said something, and I realized, I was

Speaker 2

就像,我不知道他们在说什么。

like, I don't know what they're talking about.

Speaker 2

这真是

This is

Speaker 0

有点尴尬。

kind of embarrassing.

Speaker 0

我当时就想,我得读哪本书呢?

And I was just like, you know, what book do I have to read?

Speaker 0

我觉得当时我的经理亚伦·库什纳说,嗯,有本一千页的书。

And I think my manager, Aaron Kushner, at the time was like, he's like, well, there's this thousand page book.

Speaker 0

我当时就想,算了。

And I was like, done.

Speaker 0

于是我买了它,从头到尾读了一遍,甚至带去夏威夷,随身携带,直到读完。这真有点令人惊叹又悲哀,或者说是奇怪——我们在软件工程领域能走这么远,却对计算机如何工作一无所知。

So I bought it, read the thing cover to cover, like took it to Hawaii with me, I took it everywhere until I finished It's kind of amazing and sad or weird like how far many of us can get like in software engineering without really having a clue how computers work.

Speaker 0

这种抽象层次实在是太多了。

Like there's just so many of those levels of abstraction.

Speaker 0

但一方面,这让人感到非常自由,另一方面,又有点疯狂。

But, you know, on one hand it's very freeing, and then on the other hand it's a little bananas.

Speaker 0

我想对现在正努力深入底层、理解这些原理的人说,

And I think that what I would say to people right now you know, actively trying to go, like, deeper through the layers and understand these things.

Speaker 0

我经常看到别人这么做,现在我也能做到:有些问题,其他人能解决,而我却不能,因为我根本不知道这两个层次之间还存在这么多杂乱的东西。

And, like, because many times I saw other people do it, and now I can do it, is that there are problems some other people could solve that I couldn't solve because I just didn't know that, like, there was this cruft between these two layers.

Speaker 0

如果你把这些杂乱的东西去掉,就能获得十倍的性能提升之类的效果。

And if you got rid of it, right, you would get, like, a 10 x improvement or something like that.

Speaker 0

对吧?

Right?

Speaker 0

如果你只是在很高的层面操作,根本不清楚自己能拆解什么。

If you if you're just operating so high up, don't really know, you know, what you can what you can break down.

Speaker 0

你知道的吧?

You know?

Speaker 0

所以说到书籍,我喜欢O'Reilly的Rust系列书籍。

So that and so in terms of books, like, I've enjoyed the, like, the O'Reilly, the Rust books.

Speaker 0

我真的很喜欢Rust。

I I you know, a big fan of Rust.

Speaker 0

我觉得这些书写得也很出色,而且非常全面。

I think that but they're also, like, well written and and thorough.

Speaker 0

然后,老实说,我还跟别人推荐过另一件事,虽然不属于书籍类别,但可能更有趣。

And then, honestly, another thing I've been telling people that's not in the book category, but probably more fun.

Speaker 0

而且我其实从中学会了很多。

And I learned a lot, actually.

Speaker 0

这些CTF,也就是夺旗赛,是类似安全领域的竞赛。

Our these CTFs are, like, capture the flag, like, security type competitions.

Speaker 0

而且,你知道的,它有助于培养一种对抗性的思维模式。

And just, you know, it helps with, like, kinda, like, adversarial mindset.

Speaker 0

它有助于培养一种我认为像是计算机十项全能的感觉,就像那样。

It helps with, I think, they're usually just like it's like a it's like a decath like, a computer decathlon, I feel like.

Speaker 0

对吧?

Right?

Speaker 0

因为会有多个挑战,比如这个你需要理解汇编语言,那个你需要弄清楚某人写的那些乱七八糟的PHP管理页面是干嘛的,诸如此类的事情。

Because, like like, you there there'll be multiple challenges, and maybe this one, you need to, like, understand assembly, and this one, you need to understand, like, what someone's, like, janky PHP admin pages do, bang, and all that sort of thing.

Speaker 0

它迫使你获得这种广度,而这种广度在其他情况下很难培养。

And it and it just forces this breadth on you in a way that's kinda hard to to generate otherwise.

Speaker 0

而且,你知道的,它也更有趣,因为它就像个游戏之类的。

And it's also, you know, just more fun because it's like a game and that sort of thing.

Speaker 2

你能解释一下CTF是什么吗?

Can you give some context on what CTF is?

Speaker 0

是的。

Yeah.

Speaker 0

所以它可能有多种形式,但通常是一种竞赛,主要发生在信息安全领域。

So it's it's it can be a number of things, but it's it's usually a competition, usually in, the infosec, the security domain.

Speaker 0

有一种叫‘抢旗赛’风格的,就是有一系列挑战,这些挑战都是提前设计好的,并且都配有相应的分值。

And there'll be a set of there's like the Jeopardy style one, which is like there's a bunch of challenges and like, you know, designed, like crafted ahead of time, and they all have point values associated with them.

Speaker 0

通常会有固定的时间限制,可以是个人参赛,也可以组队,目标是解决这些挑战。

And so, you know, there's usually some fixed around the time, and it could be individual, it could be with a team, and you're trying to solve these things.

Speaker 0

每个挑战里都会有一个密钥,通常是一段特定格式的文本。

And there's a flag, there's always like a secret, you know, piece of text in there that usually has some format.

Speaker 0

如果你能发现这段秘密文本,就说明你成功了——因为挑战的设计就是只有当你完成了逆向工程或其他所需操作后,才能获得它。然后你提交这段文本,作为你解决该挑战的凭证。

And the way is that you basically, if you can discover the secret piece of text, that means that you have the the challenge is set up that you would only have gotten that if you had figured out, you know, reverse engineered or whatever you were supposed to do, and then you get submit that piece of text, and that's your, you know, token to demonstrate that you had solved the challenge.

Speaker 0

所以这可能是一场看谁先解完所有题,或在规定时间内得分最高,或者其他形式的竞争。

And so it could be like a race to like solve everything first or get the most points in a certain amount of time or different things

Speaker 2

就是这样。

like that.

Speaker 2

所以这就像密室逃脱,只不过你是在终端里,仅用电脑来解开所有谜题。

So it's like, it's kind of like an escape room, but in your terminal, you use only computers to figure everything out.

Speaker 2

是的。

Yes.

Speaker 2

我明白了。

I see.

Speaker 2

好的。

Okay.

Speaker 2

你的建议是,想要成为更优秀的工程师的人,应该投入时间参与一些CTF比赛,因为它们能让你解决各种问题,从而提升工程能力。

And your recommendation is people who wanna become better engineers, they should invest in doing some of these CTF because they make you solve problems that make you a better engineer.

Speaker 0

对。

Yeah.

Speaker 0

而且你会因此掌握一些平时根本不会接触到的技能。

And you know, and then you, you know, also develop skills and things that you just wouldn't have.

Speaker 0

如果你每天只是写React代码,你大概永远不会去打开GDB,然后逆向分析一个井字棋游戏。

You know, if you're just like, you know, writing React every day, like, you're probably not gonna, like, open up GDB and, like, reverse a, you know, a tic tac toe game.

Speaker 0

但我确实这么做过,因为有一次CTF挑战正好要求我做同样的事情。

But, like, I did that because of, you know, a CTF challenge was to do, you know, exactly that.

关于 Bayt 播客

Bayt 提供中文+原文双语音频和字幕,帮助你打破语言障碍,轻松听懂全球优质播客。

继续浏览更多播客