📱

Get Our Mobile App

Take your business learning on the go!

Download on the App StoreGet it on Google Play

The creator of Clawd: "I ship code I don't read"

The Pragmatic Engineer1:54:05

Transcription

如果有一天你能合并 600 个提交,而且没有一个是粗糙的呢?这就是今天的嘉宾 Peter Stainberger,Claudebot 的创始人,声称他正在做的事情。Peter 是一位杰出的开发者,他构建了 PSPDFKit,一个在超过 10 亿台设备上使用的 PDF 框架。然后他倦怠了,卖掉了他的股份,从科技界消失了 3 年。今年,他回来了,他构建的方式以及他现在所做的事情与传统的软件开发完全不同。在今天的节目中,我们讨论了他为什么不再阅读他交付的大部分代码,以及为什么这听起来不像听起来那么疯狂。他如何构建他的广受欢迎的个人助理项目 Clawbot,它感觉就像是 Siri 的未来,分离有效 AI 助理编码与令人沮丧的氛围编码的闭环原则。为什么他说代码审查已经死了,而 PR 应该被称为提示请求,以及更多。如果你对未来几年软件引擎工作流程如何因 AI 而改变感兴趣,那么这一集就是为你准备的。本集由 Statsig 呈现,这是一个用于功能标志、分析、实验等的统一平台。查看节目笔记,了解更多关于他们的信息,以及我与他们一起在 2 月 11 日在旧金山举办的务实峰会,以及我们的其他季度赞助商。好了,Pete,欢迎来到播客。>> 谢谢你邀请我,Gay。>> 很高兴能见到你。>> 是的,我差点搞砸了。>> 是的。发生了什么?你忘了时间。这种情况经常发生吗?怎么会这样?嗯,通常不会。通常不会。嗯,对我来说,这是一个有趣的时期,因为我最新的项目正在爆炸式发展。Cloud,对吧?>> Clawbot。是的。>> Cloudbot。>> 我有点挣扎着睡够觉,但这很有趣。我从来没有一个社区发展得如此之快,与它一起工作真是太有趣了。>> 在我们深入探讨 Clubbot 和你正在做的所有有趣的事情之前,我想回顾一下。你创建了 PSPDFKit,我认为它在超过 10 亿台设备上使用。如果你看到一个 PDF 渲染器,你很可能会看到它。但即使在那之前,你是如何进入科技界的?我的天哪。你是如何进入科技界的?我来自奥地利乡村。我一直比较内向。所以,我们总是有夏季度假者,其中一位是一位电脑迷,然后我就迷上了他拥有的机器,恳求我妈妈给我买一台,从那时起,我就一直沉迷于此。那是在高中时期,我猜我 14 岁。是的。从那时起,我就开始捣鼓,我记得最早的事情是我从学校偷了一个旧的 DOS 游戏,然后为软盘编写了防盗版程序,这样我就可以卖掉它。加载需要 2 分钟。我一直在捣鼓。当然,也玩了很多电脑游戏,但构建东西感觉就像玩电脑游戏。就像现在,它感觉比 Factorio 还要好。当我刚开始的时候,我读了相当于 Windows 的 bash 脚本,然后我做了网站。所以,我猜是 JavaScript,即使我不知道我在做什么。然后,当我开始上大学时,我学习构建东西的第一个真正语言。我从未见过我的父亲。我来自一个贫穷的家庭。所以我总是不得不工作。我不得不自己支付学费,对吧?所以,当其他人度假时,我全职在一家公司工作。我第一份真正的工作是在维也纳,本应是 1 个月,然后他们留了我 6 个月。这只是军事和大学之间的一个过渡。我记得第一天,他们给了我一本巨大的书,可能这么大,叫做 Microsoft MFC。我仍然有噩梦。我当时想,这太糟糕了。对于下一个 Windows,我只是默默地使用了 .NET,我没有告诉他们。几个月后,我告诉他们,是的,但文本,我做了一些现代化改造,但那时已经太晚了。我在这家公司做了几次。我不知道他们为什么留我,因为我的工作。所以,我做了 .NET,而且我实际上很喜欢它。 .NET 2.0 有泛型。应用程序启动需要很长时间,因为一切都在第一次启动时编译,而且你的硬盘就像 [哼哧声] 你还记得吗?>> 所以,你是如何偶然发现 iOS 的,PSPDFKit 的想法又是从何而来的?>> 甚至不是,第一个在奥地利根本买不到。这是真的。是的。>> 一段时间过去了,我在上大学,一个朋友给我看了 iPhone。我记得我摸了它一分钟,然后立刻就买了一台。就像这样,它就明白了。对我来说,这是一个神圣的时刻,因为它与众不同,而且好得多。所以我买了一台。我当时还没有考虑为它构建东西。>> 这是什么时候?2009 年 10 月左右?>> 是的。是的。然后我使用了他们的浏览器。我可以看到这个故事。我当时正在坐地铁。>> 嗯。>> 当我使用一个约会应用程序时,这是 iPhone OS 2。>> 是的。>> 所以,所以,我>> 很久以前。>> 我输入了很长的消息,我按了发送,我们正要进入隧道,JavaScript 禁用了发送按钮,然后出现了一个错误消息,但没有复制粘贴。也没有截图。所以我当时就觉得,而且我再也无法滚动了,因为滚动被禁用了。所以,这条长消息有点情绪化,就消失了,我非常生气。我非常生气。我想,这是怎么回事?我回家了,我下载了 Xcode。这就是窗口的由来,我想,ID 是什么?我当时想,这是不可接受的。我基本上黑了那个网站。我使用了正则表达式来下载,解析 HTML,这根本不是你应该做的事情。我构建了一个应用程序,我使用了 iPhone OS 3 Beta,带有 Core Data,Beta 正则表达式 Lite。我使用了一个被黑的 GCC 版本,它向后移植了 Blocks 编译器,这样我就可以在 iPhone OS 3 中使用 Blocks。我花了很长时间才让任何东西起作用,因为我不知道我在做什么,而且我使用了各种 Beta 技术。但最终我让它起作用了,我写信给那家公司,说,嘿,我正在做一个应用程序。你怎么看?当然,我没有得到任何回应。所以,我想,我把它放到应用商店吧。>> 这是为约会应用程序准备的,对吧?>> 是的。>> 所以,你只是,你知道,你看了,你看到了他们的 API,你可以很容易地构建一个客户端。>> API。那是 HTML。>> 哦。>> 我只是在解析 HTML。>> 哦。所以,所以你解析了 HTML,然后把它变成了你自己的,你知道,就像你把它当作 API 一样。哦,聪明。我的意思是,那是很久以前的事了,没有人认为这会发生,但我把它放到了应用商店。我卖了 5 美元,第一个月赚了 1 万美元。[笑声] 我不知道我在做什么。而且有很多复杂的技术问题。那是在早期,苹果有很多奇怪的论坛。>> 所以,我只是把钱放进了我爷爷的银行账户。然后有一天,我爷爷打电话给我,“是的,有点奇怪。我收到了苹果公司的一笔巨款。”我说,“这是我的。这是我的。别碰它。”但有趣的是,当这个事情火了之后,我记得有一天我在一个俱乐部里,我看到有人在使用我的应用程序,我非常自豪,我想拍拍他的肩膀说我做了这个,我想那会很奇怪。所以我没有。然后我去了我工作了 5 年的公司,告诉他们,我要继续做这个。这真的很令人兴奋。我的老板嘲笑我。>> 哦,真的吗?>> 他们说,“哦,你犯了一个错误。这是一个短暂的流行。这不会持续下去。”等等,等等,等等。你知道这给了我什么吗?这就是所谓的肩上的负担。我想,>> 你知道,有一天我将拥有一个比你更有价值的公司。嗯,这花了八年时间。所以我上钩了。我有点上瘾。所以,你现在又看到了。但我在这款应用程序上做了很多工作。我高速学习。这也是我开始使用 Twitter 的时候,这对我的职业生涯产生了巨大的影响。我让这个应用程序做得相当好,然后有一天我在一个派对上,凌晨 3 点,我有点喝醉了,我接到一个美国号码的电话。电话那头的人说,“是的,你好。我是苹果公司的 John。是的,你的应用程序有问题。有些人举报了照片。”就这样,我的应用程序结束了。>> 只要它还在,它就很好。>> 我只是辞掉了我的工作,我说,去你的苹果。>> 我做了自由职业。我在 WWDC。我被介绍给>> WWDC。>> 是的,抱歉使用内部术语。我在旧金山凌晨 2 点的一家酒吧里,被介绍给一个人,他是奥地利最好的 iOS 开发者之一,然后我基本上在美国找到了工作,然后我搬到了美国一段时间,然后我去了诺基亚开发者大会。这现在都像是石器时代了。我的天哪。然后有人走过来对我说,“是的,他们在东欧某个地方构建了这个应用程序,它能用,但有时会崩溃。”那是一个杂志阅读器,对吧?那是 iPad 刚出来的时候,史蒂夫·乔布斯说这是救世主。所以每个人都在构建杂志应用程序,我想这听起来是一个有趣的短期工作。我说,好吧,我来帮你。我打开了应用程序,我看到,哦,我见过的最糟糕的代码。它实际上是一个文件,有数千行>> Objective C。是的。他们使用窗口作为标签。我不知道这行得通。我惊讶于它竟然行得通,但感觉就像纸牌屋。我试图进行手术式修复,但只要你碰一下,别的东西就会坏掉。嗯,我把它稳定了一些,然后我告诉他们,“看,这太疯狂了。我将为你重写它。”是的。但这需要半年。我将在一个月内完成。嗯,我花了两个月。我没有偏离太远。然后我就开始处理一个 PDF 阅读器。你知道,在每一个技术问题上,[清嗓子] 这个领域我不会说完全不重要,但你总能在每个领域找到有趣的问题。而且有很多有趣的问题,因为你有一个 C 调用来渲染一个 PDF,它可能需要 30MB,但整个系统只有 64MB。所以,如果你不非常聪明,并且非常小心你在后台做什么,操作系统就会杀死你。我非常专注于让它变得好,比如旋转时,页面会动画播放。所以,你知道,我喜欢那些细节。我花了很多时间在这上面。这就是为什么花了两个月而不是一个月。但最终结果是好的。嗯,然后我与他们合作了一段时间,然后一个朋友给我发短信。他说,“是的,我正在做一个杂志应用程序,这真的很困难。”我说,“是的,不可能很难,我知道。”哦,就像我做到了。>> 你刚建了一个。>> 他说,“你能把代码给我吗?”我说,“当然。”所以我卖给了他,我提取了杂志应用程序中 PDF 的部分。我确保了,我确保了其他人没问题。然后我卖给了他。我想,“嗯,如果他对这个感兴趣,为什么不试着卖给其他人呢?”我用了一个 WordPress 模板,并把它改造成了 GitHub Pages。然后,当你完成最后的快速通道流程时,你会得到一个指向我个人 Dropbox 的 Dropbox 链接,里面有一个源代码 zip 文件。我花了一个下午就完成了,我发了推特。然后在那一周,三个人买了它,大概是 200 美元,但当时对我来说,这太棒了。而且我不仅得到了三个买家,还有 10 封抱怨的电子邮件,因为他们想要它,但它没有他们想要的功能。你知道,就像我被技术宅男盯上了。我想,“哦,我没有文本选择。”哦,这有多难?三个月后。哦,是的,这真的很难。[笑声] 特别是 PDF 中的文本选择。>> 是的。是的。是的。你知道那句话吗?公司是由年轻人建立的,因为他们不知道有多难。>> 是的。>> 是的。是的。我不知道这个文件格式有多疯狂。Peter 谈到了有些问题看起来多么具有欺骗性地简单。PDF 渲染就是一个很好的例子。你看着它,想着,这能有多难?然后你花了几个月的时间处理你甚至不知道存在的边缘情况。这看起来很容易,直到你构建它。这种模式也出现在其他地方。功能标志和实验的内部工具就是一个典型的例子。团队经常低估围绕这些工具构建基础设施的工作量。像 Uber 这样的大型科技公司投入多年时间构建内部实验和功能标志系统是有原因的。这让我们想到了我们的季度赞助商 Statsig。Statsig 为你提供了完整的工具包,而无需自己构建。你可以在一个平台上获得功能标志、实验和产品分析,所有这些都与相同的底层用户分配和数据相关联。在实践中,它看起来是这样的。你首先将更改推出给 1% 的用户。你看看它如何影响你关心的顶级管道指标,转化率、留存率,任何与发布相关的指标。如果出现问题,立即回滚。如果有效,你可以自信地扩大规模。像 Notion 这样的公司,从每季度进行个位数实验,增加到使用 Statsig 进行 300 多次实验。他们通过功能标志发布了 600 多个功能,在快速迭代的同时防止指标回归。Microsoft、Atlassian 和 Brex 也出于同样的原因使用 Statsig。它是实现规模化速度和可靠性的基础设施。Statsig 有一个慷慨的免费套餐供入门,团队专业定价从每月 150 美元起。要了解更多信息并获得 30 天的企业试用,请访问 stats.com/pragmatic。现在,让我们回到 Peter,以及为什么渲染 PDF 是一个出奇困难的问题。但我记得几周前有人给我发邮件。他们做了一些 PDF 相关的事情,并寻求我的帮助。我只是写信给他们,抱歉,我做了我该做的。我知道的关于 PDF 的知识比任何正常人都多。我去看了心理医生。祝你好运。[笑声] 但这火了,当我等待签证的时候,我一直在做这个项目,而且越来越多的人购买它。你知道,就像夏天一样,我躺在湖边,又收到一封邮件,说有人花了 600 美元,800 美元买了。我只是提高了价格,因为它有了更多的功能。当我去旧金山在这家公司工作时,它已经赚得比我在那里赚的还多了。但我一生都认为,我必须在那里。>> 所以,我做了。而且有趣的是,在这家公司,我必须>> 所以,你认为你搬到了旧金山?>> 是的。当然,这也变成了一件我必须用我的框架在这家公司构建东西的事情。但你知道,初创公司不像 8 小时工作制。它们更多。我的个人项目也更多。所以我的睡眠也更少。然后,三个月后,我的经理 Sabine 过来说,“Peter,你还好吗?”他们给了我一个选择,要么继续在这家公司工作,放弃我的项目,要么反之。我有一周时间来决定。另一项选择是一周后留在那里,或者离开这个国家,因为我持有的是一个复杂的签证。嗯,决定很简单。我想,是的,我想做我自己的事情。然后>> 在这一点上,它已经开始起飞了。你已经看到了巨大的商机。它可能会支付和你美国工作一样的报酬。>> 它从来不是以金钱为驱动的。>> 是什么驱动着你?我想制作让别人觉得惊叹的东西。我喜欢调整细节。我喜欢那些小小的惊喜。甚至不是因为这个领域有竞争对手。但我的角度总是,我构建的东西就像苹果公司会构建的一样,就像带着所有的爱、关怀和打磨,以及许多行业内的人没有得到的那些小小的惊喜。所以,即使我们有比我们更强大、存在时间更长的竞争对手,我的公司也更成功,我的产品也更成功,因为开发者尝试了不同的产品,而我的产品感觉最好。我认为软件就是关于感觉,比功能集更重要。我们为什么要买苹果的东西?它比 Windows 有更多的功能。>> 但它的感觉更好。>> 所以,你是如何从你离开了那家公司,你正在构建那个开始销售的 PDF 组件的?什么时候你雇佣了第一个人,意识到,好吧,这不仅仅是这样?当我回到维也纳时,我想,好吧,我必须全力以赴。那时我开始与自由职业者合作,说实话,这太晚了。我本可以更早地雇佣人,但你知道,这是一个很大的步骤。这就是它开始拥有自己生命的地方。我花了将近 13 年的时间来构建这个产品,它的名字很奇怪,我从未改变过,因为我花了大约五分钟来考虑它,然后就有了 PSPDFKit。>> PSPDF。>> 他们终于改名了,但我不会改的。但现在它>> 这是一个难念的名字,但它非常独特。>> 嗯,如果你做 Objective C,你就会明白,因为它只是一个命名空间。>> 是的。>> 嗯,而且当时它完全说得通。我的营销策略一直是,我只关心开发者。我知道高层会做决定,但如果我能说服公司里的人,他们都会为我做营销和游说。这很有效。我们从未做过冷邮件或激进的营销。一切都是入站的。我们所做的就是制作好东西,写一些有见地的技术博客文章。我去参加了很多会议,对我来说重要的是,如果人们理解构建这个产品的人知道他们在做什么,并且热爱他们所做的事情,这会反映在产品上。这很有效。>> 然后 PSPDFKit 的技术是什么?是 Objective C 吗?后来是 Swift 吗?还有 C 或其他技术吗?>> 我们最终扩展到了所有平台。一个重大的转变是切换了渲染器,它曾经而且仍然相当不稳定,到一个大的 C++ 渲染器,然后我们跨所有框架使用它。我们很早就涉足 Web。我们是第一批在 WebAssembly 中运行的 PDF 框架之一。我做了最聪明的事情,那是在 WebAssembly 刚刚起步的早期,我们构建了一个基准测试。这个基准测试最终被 Google、Microsoft 和 Apple 使用。我基本上让所有这些公司都在努力让我的渲染器更快,因为他们使用他们的基准测试作为他们的基准测试之一,而基准测试只是渲染我们的东西,用我们的>> 啊,不错。然后,随着公司的发展,我记得 PSPDFKit 的一件事是,你们写了很多博客。2019 年的一篇博客,大概是公司成立九年或十年的时候。它是关于团队如何工作的,你提到了诸如每个功能都始于一个提案。你提到你们很保守,因为它是一个人们使用的庞大 API。你想小心谨慎,比如童子军规则。你是如何将这个现在接近 30 或 60 人的团队的文化凝聚在一起的?>> 我卖掉股份时,我们实际上有 70 人,现在快 200 人了。我从一开始就知道,我找不到我需要的人才在维也纳。所以,我们一直都是远程优先,最终我们采用了某种混合模式,这让事情变得更复杂。我一直在学习。我从来没有想过要当 CEO。我一直在编码。我找来了一些人,他们在我身上帮助了很多,在其他方面。而且在业务方面,我能做到,而且我认为我做得很好,但我就是不喜欢。即使在销售电话中,你必须考虑所有魔术数字,它值多少钱,因为这就是企业运作的方式。更糟糕的是,Peter 刚刚说,企业销售是最糟糕的。因为向大公司、企业销售是最棘手的。不仅因为你需要正确定价,还因为你需要构建所有企业功能。这让我们很好地转向了我们的季度赞助商 Work OS。如果你正在使用 AI 代理或自动化工具进行构建,这里有一个大多数团队一开始没有想到的问题。一旦代理可以代表你采取行动,你就需要控制它允许做什么。传统的 OAuth 最初并不是为此设计的。这就是为什么 Work OS 推出了 MCP,它为团队提供了一种方式,通过明确的权限、可审计性和企业级安全性来认证 AI 代理。而不是共享过度授权的 API 密钥,你可以为代理可以访问的数据和代理可以执行的操作定义清晰的界限。如果你正在构建 AI 驱动的功能,并希望快速共享而不损害安全性,请访问 workos.com/mcp。至此,让我们回到 Peter 和企业定价。但这似乎也是这种模式下唯一真正有效的东西。>> 是的。你的意思是企业销售,对吧?>> 意思是定制定价。所以,你能告诉我们,对于那些查看供应商网站但对没有价格感到沮丧的开发者来说,为什么会这样?>> 哦,这是因为我们要看你的公司,然后随便猜一个数字,然后想想你可能愿意支付的金额。这听起来很糟糕。但当你有一个产品,你无法真正将其分解成一个具体的数字时,自由职业者联系我们和财富 500 强公司联系我们会有很大区别。>> 不要说名字。>> 因为使用量会不同。他们从中获得的价值会不同。如果我收费相同,你会排除其中一个。如果我定得太低,他们会觉得很奇怪。就像采购 500 美元。我们甚至不会开始这个过程。如果我们定得太高,我们会失去那些人。所以,尽管这个过程对某些产品来说看起来很糟糕,很不公平,但最终它是最公平的方式。你知道,你知道,在软件方面,我认为有四种轴。有容易和困难,有趣和不有趣。我们非常处于不有趣和困难的部分。如果你构建了每个开发者都想构建的东西,那将是一个艰难的推销。它总是很难推销。向开发者推销任何东西都是很难推销的。>> 是的。>> 但如果它太容易或太有趣,祝你好运。但如果>> 哦天哪,我不想做这个,哦天哪,这很难。这是一个好位置。所以,我找到了一个非常有趣的小众市场,而且有无数复杂的问题。>> 你需要告诉我一两个关于解析 PDF 的难点。它能有多难?有规范,我是一名工程师,我懂规范。那么难在哪里呢?>> 我的意思是,有一个例子,你知道,PDF 有链接。所以,就像有一个目录,你点击它,它会跳转到第 37 页。所以我构建了整个模型,假设,哦,也许里面有 100 或 400 个链接。>> 然后我们有一个客户,他付了很多钱。然后我想,哦,加载一个 PDF 需要 4 分钟。到底怎么回事,伙计们?我看了看,那是一本来自加拿大的 50,000 页的文本圣经,它有>> 50,000 页。>> 每页有 100 多个链接,>> 500,000 个链接。>> 我的数据模型完全爆炸了,因为我的假设偏离了 1000 倍。但那时你已经有了一个成熟的产品和 API。所以,你如何完全重新设计内部部分而不破坏所有人的东西?就像突然一切都必须是惰性的,而以前解析 100 个链接很容易,但现在他们就像,这很难让它对人们起作用。我认为我花了两个月的时间来处理这个问题,完全重新设计了内部结构,并确保它对人们来说仍然很容易,他们不必知道我们加载了什么,我们惰性加载了什么,或者如果你复制这个东西,它仍然必须保持某种连接。>> 它需要保持引用和其中一些东西。>> 所以,所以,我喜欢做支持,我认为这也是公司运作的一个限制因素,因为如果你发送一个工单,然后 CEO 回复并帮助你,那会产生影响。我的策略一直是反向使用列表,因为如果你发送一个工单,并在 5 分钟内得到回复,那简直是神奇的。如果你等一两天,没有太大区别。是的。>> 所以,是的,这是我花了两个月才解决的问题之一,我终于把它几乎解决了。>> 嗯。那一定很令人满意。>> 而且它非常令人满意。>> 而且你写了很多代码,或者你参与了很多代码,显然有一个大团队在这里,但你仍然在监督它,对吧?你在细节中。我的意思是,当然,我有一个很棒的团队,在某些方面我参与得更多。我一直更多地参与移动端,因为我的心在那里,但我一直深入技术,以及营销方面,业务方面。我有 Jonathan 的帮助,我有营销帮助。我找到了优秀的人。关键是,如果你喜欢写博客和写关于你如何解决有趣难题的文章,这将有助于你聘请想要解决有趣难题的有趣的人。我记得 PSPDFKit 的时候,你的博客经常出现在 Hacker News 上,但读起来很有趣。我无法再次命名,我没有深入研究 PDF,但如果我必须说关于 PDF 的事情,我会说 PSPDFKit,因为他们是唯一一家我读过关于如何优化你的船只的有趣工程博客。它仍然在那里,顺便说一句,我自己有时也会问自己,嗯,有趣的是,为什么更多的公司看不到这一点,或者问题是你需要成为一个开发者,他要么是 CEO,要么在高层,并且喜欢这样做。顺便问一下,你写这些文章的时候,有没有想过这会有帮助,还是你只是因为从中受益而写的,比如写出你解决了这个难题?>> 我喜欢分享,喜欢激励人们。嗯,有时甚至会有冲突,我们会想,我们应该写这个吗?因为它有点像秘密武器,但我从来没有太听从这些声音。嗯,我只是,你知道,也有这样的原则,当你写下一些东西时,你理解它,但如果你想教它,你必须真正理解它。所以,对我来说,这也有点像,哦,是的,我一直在努力解决这个难题,现在我想保存它,并帮助他人。所以,所以,我当然从中获得了一些好处,我喜欢关注。>> 但实际上,有时我甚至在一年后引用我自己的帖子,比如,是的,这是公司文档。这是我自己的参考书。它在很多方面都有帮助,而且很多大公司,哦,他们设置了太多的官僚主义。有很多开发者其实不喜欢写作。所以我强迫每个人每月写一篇博客文章。>> 但你给了他们时间。你说那天你不需要做任何其他工作,只需要写点东西。>> 是的。你有一整天的时间来构思一篇文章。嗯,一天其实很多了。我的意思是,现在我写文章,仍然需要几个小时。我不想过多地纠缠于,我认为公司的启动时间是最有趣的。然后是增长阶段,你会有更多的官僚主义,更多的人。这更像是园艺你的产品,而不是做一些疯狂的黑客行为。>> 嗯,而且更具迭代性。所以,所以,所以,随着时间的推移,它变得有点不那么有趣了,而且人们之间的戏剧也更多了,因为人越多,问题就越多。我不太喜欢,我真的真的倦怠了。你认为是什么让你倦怠了?>> 我只是燃烧得太厉害了。我大部分周末都在工作。我试图处理我所有的管理需求。你知道,作为 CEO,你基本上是垃圾桶,因为其他所有人无法管理或无法做到的事情,或者搞砸了的事情,你都必须解决。而且它也很孤独,因为你不能公开谈论很多事情。我的意思是,我把公司结构得相当开放,但仍然,你不能,你不能消极。你必须,即使,即使发生了非常糟糕的事情。我知道有一个周末,我的联合创始人凌晨 5 点给我打电话,告诉我,是的,有一家大型飞机公司,他们的飞机因为我们的软件崩溃而停飞。那是一个非常有趣的周末,直到我能够拆解他们的应用程序,并证明他们篡改了我们的源代码,触发了许可证密钥回退。>> 这最终导致了他们的问题。但这就像,如果这家公司破产了,就完了。>> 而且这只是额外的压力,而且有很多这样的事情。你可以这样做一段时间。而且我也相信,倦怠不一定是因为工作太多。它更多地来自于,至少对我来说,当你工作时,但你不再相信它了,或者你有很多冲突。而且我们在团队中也经常争吵,与管理团队。到了我犯了这个错误的时候,我想,你必须更民主地领导一家公司。所以,这也是让我倦怠的事情之一。不过,我并不想错过这段经历。>> 是的。所以,从外面看,你卖掉了你的股份,赚了足够的钱,如果你不选择工作,你就不必工作了。对于很多人来说,就像,你知道,那些刚开始创业的人,或者有一天想创业的人,这听起来就像是绝对的梦想。就像,我认为我们现实地知道大多数人不会成功,但如果你成功了,我的意思是,你已经完成了。就像爬墙,你按响了铃,你就完成了。然后我注意到,从外面看,你的博客在好几年里完全停止了。你在这段时间里做了什么,你在这段时间里学到了什么,在你回到现在之前?>> 我需要很长时间来放松。我弥补了很多我以为错过的东西。我睡了很多。有几个月我甚至没有打开我的电脑。而且有一段时间,我就是没有那种感觉,我现在该做什么?就像,我肯定觉得,为什么要去操心?你知道,你不应该这么早就退休,或者有这么好的退出,你永远不必再工作了。这在我的脑子里转了好久。>> 那是艰难的几年。然后,在四月,我想,我有一个想法,我几年前就有了,甚至是我开始的一个副项目。我想,哦,是的,我想继续做下去。然后,三年多后,我重新坐到电脑前,开始再次编码。但问题是,这就像一个 Twitter 分析的东西,它是用 Swift 和 Swift UI 写的。那时我就知道,如果我把它做成一个网站,那会好得多。>> 所以,这是一个你一直放在心里的想法,某种 Twitter 分析?>> 是的,这只是我想为自己构建的东西,因为当时不存在。然后>> 即使三年后它也不存在。它仍然不存在。>> 它有点存在,但我有点跑题了。所以我回去,我想用 Web 技术来构建它。但 Web 一直是我在公司里最少关注的事情,因为我有一个非常聪明的人负责公司的这一方面,我请来了 Martin。所以我从来不用担心。这是其中一个>> 你不接触 React 或任何那些东西吗?>> 是的。当我回来的时候,我想,什么是 prop?你知道,那种你真的...而且你知道,这是我看到很多开发者陷入的陷阱。你在一项技术上越熟练,就越难跳到另一项技术上。不是说你不能做到,但它太痛苦了。你就像,我可以在 Apple 的技术栈中编程,盲目编程。但在那个技术栈中,我必须谷歌最普通的东西,这太痛苦了。你感觉又像个白痴。>> 是的。而且我认为,经验越多,感觉就越糟糕。我的意思是,我敢肯定你说要拥抱它,但它并不好。你没有那么高效。你知道你可以更快,等等。>> 是的。所以,我回来了,我想,天哪,必须有,必须有。这是什么 AI?人们都在否认的 AI 是什么?让我们来看看。是的。而且在四月,很多人,可能是有道理的,但我也在一定程度上,我把这归功于那三年,我基本上没有打开我的电脑,因为在那几年里,你们检查了 AI,并发现它是垃圾。>> 是的。那些人,我正要说,所以你错过了,你没有做 GitHub Copilot 的 Beta 版,你知道,美化的自动完成,那是 GPC3,或者可能不是,然后当然是 3.5,这是一个巨大的飞跃,它逐渐变得比 GPT4 更好。所以,当你回来的时候,你首先使用了什么工具,因为你错过了大约两年的开发者使用,否认,找到一些小众用例?>> 哦,Cloud Code。所以,你从 Cloud Code 开始,我认为它出来了。>> 它刚出来。它在五月出来,但之前有一个 Beta 版。>> 是的。是的。我认为他们有一些。他们不是在二月就有东西了吗?>> 他们从二月开始就有 Beta 版。没错。>> 是的。所以,所以>> 所以,Cloud 是你的第一个。你从一个 hiatus 中回来,你立刻打开了 Cloud Code,你错过了之前的一切。而且,你知道,就像,我记得我拿了这个庞大的网站项目,我有一个浏览器扩展,可以将 GitHub 存储库转换为一个大的 Markdown 文件,那是一个 1.3MB 的 Markdown 文件。我把它拖到 Google 的 CI Studio 中,使用 Gemini 2.5 或 2,然后我输入,写一个规范,它生成了 400 行的规范。我把它拖回 Cloud Code,我说,构建,然后我继续,继续。[笑声] 继续。而且,当我做其他事情的时候,你知道,嗯。>> 然后它告诉我,它 100% 准备好生产了,我启动了它,它崩溃了。我相信我们都能理解 AI 说代码已准备好生产然后崩溃的故事。这是一个非常有趣和天真的故事,但我个人不信任 AI 生成的代码,除非经过验证。这让我们很好地转向了我们的季度赞助商 Sonar。所以,让我们看一些数据。Sonar 的一份新报告,《代码开发者调查报告》发现,82% 的开发者认为他们可以使用 AI 更快地编码。但有趣的是,在同一项调查中,96% 的开发者表示他们不高度信任 AI 代码的准确性。这对我来说也很有道理。虽然我用 AI 代理写代码更快,但我并不完全信任它生成的代码。这在代码审查阶段确实成了一个问题,所有这些 AI 生成的代码都必须定期验证其安全性、可靠性和可维护性。Sonar Cube 正是为了解决这个代码验证问题而构建的。Sonar 在自动化代码分析领域已经领先了 17 年,每天分析 7500 亿行代码。那相当于每秒分析超过 800 万行代码。我实际上在 13 年前,也就是 2013 年,在微软 Skype 工作时第一次接触到 Sonar,当时很多团队已经在使用 Sonar Cube 来提高代码质量。我从那时起就一直是粉丝。Sonar 提供了一个必不可少且独立的验证层。它是自动化护栏,分析所有代码,无论是开发者还是 AI 代理生成的,确保它在到达生产环境之前符合你的质量和安全标准。要免费开始,请访问 sonarsource.com/pragmatic。至此,让我们回到 Peter,以及 AI 代理如何不能完全被信任。>> 然后我添加了一个 MCP,这样它就可以使用浏览器。我认为 MCP 播放器已经有了,它又循环了几个小时,然后我得到了一个 Twitter 登录页面,它做了一些事情。它并不好,但它做了一些事情。对我来说,这是我神圣的、令人震惊的时刻。>> 是的。>> 这就像今年四月或五月,对吧?>> 是的。它足够好,让我看到了潜力,我理解了,就像>> 是的,这就是它的发展方向。从那一刻起,我有几个月的时间真的睡不好觉。>> 我记得有一次我在 Twitter 上给你发了条私信。我起得很早,有正当理由,你知道,我的孩子们什么的。但那是早上 5 点,我给你发了条 Twitter 私信,你立刻就回复了。我想,“你怎么起这么早?”你说,“哦,这很正常。我通常还没睡。”>> 我问,“为什么?”你说,“哦,我只是在使用 Claude,它真的很上瘾。”我想,“真的吗?”你说,“是的,我没开玩笑。它真的很好。”我想,那就是关键。你说了一些话,或者写了一些话,比如“再来一个提示”,你告诉我它为什么如此上瘾,或者它为什么仍然如此上瘾?>> 哦,这和去赌场一样。那就是,那就是我的小老虎机,你知道吗?你按下扳机,叮叮叮叮叮,然后它就像,不行。你输入提示,它会,它会做一些垃圾,或者做一些让你大吃一惊的事情。>> 而且你说它让你大吃一惊,就像你是一个经验丰富的开发者一样,很难让你大吃一惊,对吧?你见过好的代码,你能区分垃圾代码。

像样的代码,足够好的代码,就像你有一个标准,对吗?这太有趣了,你知道吗,在我公司,我过去常常痴迷于每一个细节,每一个间距,每一个新行,命名。我花了很多时间在无关紧要的小事上争论不休。回想起来,我心想,搞什么鬼?我为什么要那样做?比如,客户看不到洞察力有什么意义呢,当然它必须符合某些标准。它必须能用。它必须快速。它应该安全,但那样的“自行车棚效应”有多么愚蠢啊。

>> 你这么说,但你刚才也说过人们喜欢PSPDF kit,因为它最完善。它运行得最好。你不认为那种你所谓的“自行车棚效应”般的关心程度吗?那种痴迷。听起来你是在避免技术债,你知道,比如痴迷于空白符并不会让代码变得混乱。而且我们知道这不仅仅是空白符。我们知道你会关心测试等等。就像在我看来,PSPDF kit,你知道,我所看到的是,你不仅构建了一个拥有出色用户体验的产品,而且你构建了一个拥有良好“卫生”的产品,这就是它能够高性能等等的原因,你是怎么看待的?

>> 是的。是的。是的。在某种程度上。是的。而且即使现在,我,我的意思是,我上一篇博客文章就是承认我读完即发布代码,并且。

>> 是的,我们得谈谈那个 [笑声]

同时,我花了很多时间进行重构,我的意思是,即使是今天,我真的很想把这个PR(Pull Request)提交进去,它有大约15,000行的改动,我把所有东西都迁移到了一个插件架构,我对此非常兴奋,而且我非常关心结构。我读了所有代码吗?没有,因为很多代码真的只是无聊的“管道工程”。那么,大多数应用程序是什么样的?比如数据以一种形式从API进来。你解析它,你打包成另一种形式。嘿,你把它存入数据库,它又是另一种形式。它又以另一种形式出来。然后它就像HTML或其他什么。你输入一些东西,它又是一种不同的形式。你所做的就是,你在整个应用程序中以不同的形式“按摩”数据。这就是大多数应用程序的样子。我们基本上是在做重复性的工作。而真正困难的部分在30年前就被Postgres和一些技术宅解决了。嗯,很多软件就是这样的。总有一些有趣的部分,但我不需要关心这个按钮是如何对齐的,或者使用了哪个Tailwind类,或者很多细节都很无聊,而很多其他细节则很有趣。但我认为这更多是关于系统架构,而不是必须阅读每一行代码。

>> 现在,展望未来,你的工作流程是怎样的?比如,当你开发CloudBot时,你是在使用一个终端,多个终端,哪些工具,以及你,你知道,就像你说的,你有点像不审查代码,但你仍然在思考架构。比如,你的日常工作在工具方面是怎样的?你知道,你必须向可能加入团队的开发者解释。你知道,在某个时候你没有弄清楚它到底是什么样子?

>> 这很有趣。我们,我们稍微深入一点。我们在四月份使用了Cloud Code,然后我真的上瘾了,然后我做了一些,我有一个阶段使用了Cursor,然后我用了一点Gemini 2.5。然后我们有了使用Opus 4的阶段。我拉了很多朋友入坑,比如我认识Vinner的Armen和Mario。他们都“吃了AI药丸”,因为我很有感染力。你知道,我的热情让他们感到困惑 [清嗓子],然后他们试了试,然后最终他们也凌晨5点起床了,我称之为“黑眼圈俱乐部”。 [喘息声] 我的意思是,我之所以在伦敦发起了一个聚会,叫做“Cloud Code匿名会”,是因为它有点像毒品,因为它太有趣了。比如对我来说,真正让我大开眼界的是这个认识:我现在可以构建一切了。以前你必须真正选择你要构建哪个副项目,因为软件很难。是的,它仍然很难。但现在,就像我,我就是我所说的这种摩擦,我在这项技术上非常擅长,但在这方面又很糟糕,我心想,哦,我们用Go来制作CLI吧。我对Go一无所知。但我有一个很好的系统理解,一旦你有了这个,你就会培养出一种感觉,什么是对的,什么是错的,它本身就是一种技能。我记得有一条推文,有人说:“哦,当你写代码时,你会感受到摩擦,这就是你做出良好架构的原因。”我在提示时也感受到同样的摩擦,因为我看到代码飞速生成。我看到它需要多长时间。我看到代理是否会“反抗”。嗯,我看到它创建的东西是混乱的还是有意义的。当我提示时,我已经对它需要多长时间有了一个预感。如果它花费的时间长得多,我就知道我在某个地方搞砸了。

>> 你有点能感受到模型。你,你知道,你知道。

>> 是的,通常是这样,或者如果它运行起来。

我,我觉得这很像一种共生关系,就像我学会了,我甚至敢说,更多地使用那种语言,所以我的知识,如何使用这些东西的知识提高了,模型也改进了,然后,从四月到现在,我会说,是的,转折点是夏天,那时它变得如此之好,以至于你可以不亲手写代码就能创建软件。但真正让我信服的改变,又是GBD 5.2,我认为它再次被低估了。我不知道为什么这些人还在使用Cloud Code。我,我有点明白。这是一种不同的工作方式,但OpenAI在那里“烹饪”出来的东西简直好得离谱。几乎我输入的每一个提示都给我想要的结果,这太疯狂了,比如在CloudBot上,我最新的产品,我并行使用了五到十个代理,如果你非常依赖Cloud Code构建,你必须忘记很多为了用Cloud Code创建良好输出而必须做的那些愚蠢的事情。我的意思是,我也见过那个团队,他们创造了一个全新的类别。Cloud Code是一个定义类别的产品,它对于通用计算机工作来说非常棒,而且它确实非常适合编码,我,我,我几乎每天都在使用它。但对于在复杂应用程序中编写代码,Codex就是好得多,因为它,它,它需要十倍的时间(来处理)。嗯,Claude会读取三个文件,然后就自信地创建代码,然后你真的必须引导它并推动它去读取更多代码,这样它才能看到你的代码库的更大图景,从而更好地融入新功能,而Codex则会保持沉默,只是读取文件10分钟,如果你只在一个终端上工作,我完全理解你为什么觉得这难以忍受。但我宁愿拥有一个你也不需要告诉它该做什么的东西。你知道,这也是人们不理解的一点,我与模型进行对话。就像,哦,我们来看看这个,这个结构我们有什么选择?你考虑过这个功能吗?就像因为每一次会话,模型都是从对你的产品一无所知开始的,你必须,有时你必须给它一些提示。这个和那个怎么样?所以它会探索不同的方向,你不需要计划模式,我只是在进行对话,直到我说“构建这个”,它才不会构建。有一些触发词,因为它,它们都有一点“触发饥渴”,但只要我说“我们讨论一下”或者“给我一些选项”,它们就不会构建东西,直到我说“构建”。

>> 所以,所以很多,你会说你的很多提示,或者很大一部分,是这种你基本上与代理一起规划的对话吗?

是的。就像我说“好的”,然后你提醒它们,就像“好的,我们需要文档,哪里是好地方?”它会给我一些建议,我说“不,这真的应该是一个独立的页面”,我们需要一个配置吗?这如何适应这个其他功能?就像我正在设计系统,因为我拥有这种系统理解,关于我的产品如何,形状如何。我没有逐行代码的理解,那是Codex为我做的,但我是架构师。你,这听起来有点像你几乎,你知道,多年前这种模式完全过时了。但曾经有这样一种想法,你会有一个大写A的“架构师”,他们以前是软件开发人员,但他们不再亲自动手,因为他们花了很多时间理解业务,并且他们手下有这些开发人员工作。一些公司仍然有点像这样运作,但大多数现代公司不。但一些银行等等,我在那里遇到过一些“资本架构师”。他们做系统规划。他们与同行架构师交谈。他们有蓝图,然后他们真的把它传达给团队,显然每个人都讨厌这种模式,因为你知道,再次,我认为作为人,你总是想要更多。架构师从不负责这些东西的随叫随到,所以它在实践中就崩溃了,很多大公司都转向了“员工工程师”模式,在那里你们都一起工作。当然,有些人可能会有更多的投入,但这听起来几乎就像这样一个世界,你就是架构师,你知道,你有一些小代理来编写代码,除了在这种情况下,你当然要负全责,因为你仍然是一个独立贡献者。你不是,你不是那种,好吧,你可能会说你是代理的经理或什么的,但代码是你的。这是你的责任。你将负责随叫随到。如果你知道,如果你推出了导致CloudBot宕机的代码,就像它最近发生的那样,你要为此负责,对吗?就像,我认为这种系统在公司中存在时的区别是,架构师在某种程度上被他们的工作产出所“屏蔽”,因为有太多的人和太多的流程等等。嗯,我不会说架构师。我喜欢“构建者”这个词。

构建者。是的。

而且,而且我认为,对于那些成功使用AI的人和那些真正挣扎的人,我看到了几个类别。

我更关心结果,产品。我非常关心它的感觉和一切,但对于底层的“管道工程”如何运作。

我关心结构,但你知道,不是最大的细节。然后有些人真的喜欢编写解决难题的代码,比如思考算法,他们不太喜欢“我正在构建一个产品,包括所有的营销等等”,他们更喜欢解决难题,这些人真的会很挣扎,并且经常拒绝AI或者变得非常沮丧,因为这正是AI所做的工作,它解决了难题。现在有时我给它一些提示,但很多时候我今年学到的东西比过去五年在软件架构和设计方面学到的还要多。我,那些“怪物”里面有太多的知识,一切都只差一个问题,但你必须知道要问什么问题。当然,我也构建了这个Twitter的东西,它还没有完成,我,我真的希望我有一天能回到它。一切都正常工作,但如果我使用得更多,在某个时候事情变得非常卡顿和奇怪,然后它又工作了,我就是弄不明白,而且调试起来非常困难,因为它不容易重现。就像你用得越多,事情就变得越慢。我基本上在Psql,就像在Postgres中,有一些软件会在某些插入操作时被触发,然后数据库会变得非常繁忙,而模型无法看到它,因为它,它,它与所有东西都抽象得太远了,你知道,那些模型非常擅长追踪,但这是一个很难看到的副作用,因为它只存在于这个文件中,一个与任何其他东西都没有连接的函数。嗯,它的名字也不容易抓住。我只是从未问过正确的问题,直到我问“这个和那个有没有副作用?”然后我找到了它并修复了它,就像,但我,一切都只差一个正确的问题。

>> 是的。但你,你确实需要知识,专业技能。

是的。你经验。

你,你,我的意思是,所以,所以这些是那些拒绝的人,然后那些不太关心内部“管道工程”如何运作但只是对构建事物感到兴奋的人。他们真的很成功。还有一件事也帮助了我,你知道,当你经营一家公司然后你雇佣员工时,你不能对每个人指手画脚,让他们完全按照那种方式编写代码。有很多人没有管理过团队,他们没有这种经验,不知道如何放松一点,并理解是的,这可能不是我想要的那种代码,但它会让我更接近我的目标。对于任何不完美的东西,我们总是可以做得更好,并投入更多时间。我非常相信这种迭代改进。我不得不学会在我的公司里放手一点。所以,所以,所以当我拥有Cloud Code时,它有点像我拥有了不完美、有时有点傻,但有时又非常聪明的工程师,我必须引导他们,并且我们一起为一个共同的目标而努力。这感觉很像又当老板了。

>> 是的。现在有趣的是,你知道,你以传统方式构建软件,我想,在AI出现之前,你做了15年甚至更久,你非常擅长领导团队,并且如何保持高标准。你也非常关心那里的“手艺”。你现在有点像,我想,已经“氛围编码”或与代理合作一年了。你正在比较两者。你认为呢?你认为真正改变了什么?你认为尽管如此,有哪些东西保持不变?

首先,我不喜欢,我不喜欢“VIP代码”这个词。

好的。我们应该怎么称呼它?

我,我,我认为“VIP编码”现在几乎是一种,我,我称之为,我告诉人们我所做的是“带星号的代理工程”。“VIP编码”从凌晨3点开始。

现在,因为所有编写代码的日常琐事都被自动化了,我可以快得多地推进。但这也意味着我必须思考得更多。我仍然非常投入。对我来说,这完全是同样的感觉,我非常进入这种“心流”状态,但它在精神上甚至更累人,因为我没有一个我管理的员工。我有大约五到十个都在处理事情,我从这部分切换到那部分,再到那部分,再到那部分。主要是因为我正在设计这个新的子系统或这个功能,然后我知道Codex可能需要40分钟或一个小时来构建。所以我想要把计划弄好,然后我构建它,然后我就会转向其他事情,但那时这个正在“烹饪”,然后我处理这个,然后这个正在“烹饪”,然后这个正在“烹饪”,然后到某个时候这个正在“烹饪”,然后这个正在“烹饪”,然后我回到这个。所以我,我,我,我脑子里切换了很多。我希望我不用那样做。就像我确信这是一个过渡性问题,在某个时候我们会有如此快的模型和系统,以至于我可以少一点并行处理。但为了保持“心流”状态,我需要大规模并行化。所以这就是它的工作方式。我回到那里,也许再调整一下。但通常就像试一试,也许那时这个就准备好了,因为这只花了大约20分钟。所以我不断地跳来跳去。通常有一个主要项目是我的重点,我有一些卫星项目也需要关注,但我可以花5分钟,它会做半小时的事情,然后我尝试它,它不需要那么多“脑力”。

这听起来几乎,你知道,让我想起两件事。一件是有些游戏,你必须管理一个厨房和员工,然后你看到食谱或什么东西出来,你需要跳过去再做一遍。

这就像星际争霸,你知道,你有一个主基地,你有一些分基地。它们给你资源。

那个也是。还有一件事,你刚才说“我过去看这个,然后我做出决定”,这让我想起国际象棋大师同时下多盘棋。你看,有时他们下20盘棋,他们总是,他们走到那里,你几乎可以看到他们只是看看棋盘上有什么。他们做出决定,对于一些棋盘,他们会停留更长时间,我想是更好的棋手或更好的对手。感觉,你知道,他们都占据了他们大脑的100%。你占据了你的大脑,你正在扩展自己,只要你能进行上下文切换。

区别,区别在于,直到使用Cloud Code,你必须以一种稍微不同的方式工作,因为它快得多,但输出通常第一次尝试时不起作用。所以它会做一些东西,但然后它忘记更新其他三件事。它会崩溃,或者你给它,与编码代理高效合作的好方法总是你必须“关闭循环”。它需要能够自行调试和测试。那是大秘密。嗯,这也是我认为它变得如此有效的部分原因。嗯,但是,是的,使用Cloud Code,我经常不得不回去修补东西,或者它只是需要很多次迭代。所以最终它并没有快那么多。它只是更具交互性。而现在使用Codex,它几乎总是能做对。我的,我的总体策略总是,我构建一个功能,当然你,当然你总是让它编写测试,并确保它运行它。

它运行它们。是的。所以即使当我编写一个MAC应用程序时,我不知道,就像我昨天刚刚调试了一个功能,MAC应用程序找不到远程网关,但Typescript中的相同代码可以,但MAC应用程序调试起来有点烦人,因为它会构建它,你必须启动它,你必须查看它,你必须说“不,这不起作用”。所以现在我只是说,你知道,你要构建一个CLI,只用于调试,它会调用所有你可以自己调用的相同代码路径,然后你只需迭代并自己修复它,然后它就会“烹饪”,它“烹饪”了一个小时就完成了,它告诉我这里和这里有一个竞态条件,以及一个配置错误等等,就像,是的,这听起来很合理。我不需要,我不需要看那段代码。就像,但你不需要看它,因为你设置了验证循环,而且你相信它,因为它运行了它。我的意思是,我想这与有时你在一家大公司处理一个大型项目时,当所有测试都通过时,它并不意味着100%没问题,但它已经很好了,而且所有新代码也有测试,你知道,有人思考过并测试过它,以及所有这些。所以即使在我最新的项目上,我们总是遇到bug,但就像反重力一样,它在循环中以某种格式进行工具调用时有一种奇怪之处。所以你必须进行一些过滤。

是的。

那搞砸了一堆。而且我花了太长时间才意识到我在这里做什么?我只需要自动化这个。所以我只是去Codex。比如设计生命周期测试,它会启动一个Docker容器,安装整个东西,启动一个循环,使用我从这个和那个文件中获取的API密钥,然后你告诉模型读取一个图像,先创建一个图像,然后查看图像并看看它看到了什么。所以我不仅仅是告诉循环,我仍然告诉工具调用,让它工作,然后它就自己解决了。它花了很长时间,但它,它,它测试了我所有的API密钥,比如从Entropic到SEI到GLM,所有的一切,它修复了所有那些小索引,有时工具调用不起作用或者顺序错误,因为我关闭了循环,而那就是,那就是。

“关闭循环”你的意思是,只是有一种方法让代理能够验证自己的工作吗?

是的,这就是为什么我们目前拥有的这些模型在编码方面如此出色的全部原因。但有时在创作方面表现平平,因为没有简单的方法来验证,对吧?但代码我可以编译,我可以lint,我可以执行,我可以验证输出,如果你设计得当,你就会有一个完美的循环,就像即使现在,即使现在对于网站,我构建的核心可以通过CLI运行,所以就像我拥有这个完美的执行循环,因为浏览器循环慢得离谱,你想要一个快速循环的东西。所以听起来,有一件事与以前相比并没有真正改变,那就是我们以前就有这种后端或业务逻辑繁重的东西可以很容易地,或者更容易地被验证是正确的。

令人惊讶的是,实际上使用“代理编码”让你成为一个更好的程序员,因为你必须更努力地思考你的架构,以便它更容易验证,因为验证是让事情变好的方式。

那么,回想一下,甚至在AI出现之前,对于复杂系统,一旦你找到一个以前构建过这些东西的人,他们会从什么开始?“我们如何让它可测试?”对吧?比如你需要设计可测试的接口、类,你需要思考我是否要模拟东西,我是否会使用mock,我是否会使用端到端测试,这会很长等等,但这些都是非常困难的架构决策,一旦你做出它们,我想在你的世界里就更难改变了,你知道,如果你要求模型进行大规模重构,它会“烹饪”更长时间,而且你知道,如果你有测试,它会做对,但你知道,现在我们仍然有这些权衡。

是的,它仍然是软件,它,它,我会说我现在编写的代码比我自己不再编写代码时更好,而且我以前编写的代码也很好,但就像即使在公司里,有时测试是如此乏味,你会遇到所有那些边缘情况和分支。

我的意思是,除了我深感尊敬的Ken Debbec,他参加了播客,我们,我们,我们谈论过,他仍然是测试先行,他告诉我他没有因为我不写测试而生我的气,但如果你想写,你知道,低质量的代码,那是你的事。嗯,但我不知道有多少开发人员,包括我自己,我从来不喜欢写测试,即使当我假装喜欢时,我,我从来没有真正喜欢过。写文档和写测试对我来说,从来都不是一种创造性的表达。现在它太好了,就像我,我会说对于我上一个项目,我有非常好的文档,而且我自己没有写一行,就像不,我不写测试,我不写文档,我向模型解释权衡,比如我们为什么这样做,然后告诉它,比如写那个,写入门部分,对初学者友好,然后在最后添加更多技术细节,它太好了,我从来没有一个项目有那么好的文档,仅仅因为每次我设计一个功能,这都是过程的一部分。而且就像测试一样,我心想,好的,我们构建了这个,我们怎么测试它?是的,我们可以这样做和那样做。如果我们这样构建呢,哦,是的,那我们就可以更好地测试它。所以这就像现在是我思考的一部分,因为我总是思考我如何“关闭循环”?我如何,模型总是需要能够验证自己的工作,这自动引导我走向更好的架构。那么你认为为什么有,你知道,很多经验丰富的开发人员仍然对AI可以做很多事情这个想法相当抵触?

那是一周前的事了。我偶然发现了一篇Nala Coco的博客文章,我非常尊重他,并从他那里学到了很多。这篇博客文章只是对当前模型工作方式的“贬低”。他所做的是,他测试了大约五六个模型,包括一些毫无意义的模型,比如Open EI的120亿开源模型,它不足以编写好的代码,你知道,就像,他只是,据我所知,网站上没有太多信息,但对我来说,听起来他写了一个提示,把它放在Claude网页上,然后他按下了发送。然后他拿走了输出并运行它,它没有编译,他很失望。但他就像,“它当然不会工作。你认为我第一次尝试就能写出没有bug的代码吗?”那些小模型是我们集体人类知识的“幽灵”。它们在很多方面工作方式非常相似。当然,你第一次不会做对。比如会有错误。这就是为什么你必须“关闭反馈循环”。而且你也不只是向模型发送一个提示,你开始一场对话。嘿,这是我想要构建的东西。就像你,他抱怨它使用了旧的API。是的,你没有指定Mac OS版本。所以它,所以它就假设默认使用旧的API,因为那个信息缺失了,而且它,它是在大量数据上训练的,不仅仅是过去两年,而且旧数据比新数据更多。所以这就像你越了解那些小“野兽”是如何思考的,你就越擅长提示。嗯,然后,然后,然后他花了一天左右的时间玩弄它,然后就决定这项技术仍然不是很好。但要有效,你必须花费更多的时间。你知道,这就像,你知道如何弹吉他,我把你放在钢琴前,你试了一下。你心想,“哦,这太糟糕了。我还是回去弹我的吉他吧。”不。不。这是一种不同的构建方式。这是一种不同的思维方式。你不知道我多少次在凌晨3点对Cloud Code大喊大叫,因为它做了一些愚蠢的事情。我慢慢开始理解为什么那些东西会按照我告诉它的方式去做。有时你真的可以问,甚至去年,就像我为了这个项目,上一个项目,比如CloudBot,我感觉自己像一个人类合并按钮,因为社区正在爆发,我所做的就是审查PR。我,我,我,我几乎没有时间再自己写代码了。

>> 是的。这就像Simon Wilson一直在说同样的事情,尽管他已经使用了好几年了,而且我认为每个人,我想一旦我开始使用它,我也会意识到我不是,我还可以,但我,我,我,我可以做得更好。如果我们把它放到一个真正的测试中呢?因为我认为公平地说,你现在正在构建CloudBot,它,你知道,它不是一个产生收入的东西,有很多用户,它正在爆发,它是一个非常酷的工具,但它不是PSPDF kit,PSPDF kit是一个业务,大量的收入都依赖于它。如果今天,你知道,我们只是抹去了PSPDF kit,它不存在了,你需要重建PSPDF kit,你现在拥有这些代理,它会看起来有多么不同?你会信任它多少?你会委托什么?你会验证什么?而且,当你知道你围绕它建立了一个团队时,因为它现在是一个盈利的业务,至少你需要雇佣销售人员等等,你认为今天拥有相同产品,团队会看起来有什么不同?因为你,你确切知道构建它需要什么,你也知道这些工具今天能做什么。

我可以很容易地用30%的人来运营一家公司,找到那个级别的人可能相当困难,但你,你,你想要,你想要拥有真正资深的工程师,他们真正理解他们构建的东西,但他们也乐于委托,并且知道哪些部分是真正重要的工作,哪些部分我可以“感受”。那仍然是我没有看到的东西。我没有看到很多,尤其是在AI世界里,Twitter上有很多垃圾信息,有很多人声音很大但显然不知道自己在做什么。有很多,有很多愚蠢的概念,比如我很抱歉,但像Ralph Wigum那样的gh,这又是人们用来规避Opus模型限制的另一种愚蠢做法,而当你使用Codex时你甚至不需要这样做。也许有一些情况,你有一长串可以自动化的独立任务,但这通常不是软件构建的工作方式。所以有这些人,我看到很多人构建这种复杂的编排层,然后你有像“节拍”一样自动创建工单,然后你的代理处理工单,然后你的代理给另一个代理发邮件,然后你构建了这种复杂的混乱。为了什么?哦,是的,他们设计了规范几个小时,然后你就让机器一整天都在构建它。我不,我不相信这会奏效。就像,这,这,这是软件构建的瀑布模型。我们很久以前就知道了这行不通。就像是的,人们工作方式不同,也许对某些人有效。我只是,我只是不明白这对我来说怎么可能奏效。就像我,我必须从一个想法开始,而且我经常故意对代理进行“低提示”,这样它就会做一些能给我新想法的事情。你就像,也许我假设的80%的东西都是垃圾,但有两件事,就像,哦,我没想到会是那样。

嗯。

然后我,我,我迭代并塑造项目,我必须,我必须“点击”它。我必须,我必须感受它。我觉得,我觉得要制作好的软件,你知道,那些东西常常缺乏的是品味。我必须感受这个功能感觉如何,而现在的美妙之处在于功能是如此容易,我可以轻易地把它扔掉或者重新提示。我的构建模型通常非常向前。我很少真正回滚并不得不回去。就像“好的,不,那我们改变这个。不,我们做这个。”这就像塑造。我喜欢这种感觉,就像你从一块石头开始,然后你像雕刻一样一点点削掉它,选择不同的区域,然后慢慢地,这座雕像从大理石中浮现出来。那就是我如何看待,那就是我如何看待构建东西。我想,反思软件工程是如何变化的。这似乎是一个变化,因为在我们拥有AI或任何这些代理之前,前期规划确实有所不同。你知道,在PSPDF kit编写时,你坚持,我想,要有一个提案,人们提前投入大量思考来指定和做所有事情,因为它很昂贵,我想,去构建,去,你认为这正在改变,因为仅仅编写代码的成本正在下降吗?

我的意思是,我仍然,我仍然,我仍然计划,但我。

你仍然这样做,是的。

但我没有投入那么多,因为现在更容易尝试并查看结果,然后看看“哦,是的,这种形状可能有效”或者“不,我们必须调整”,甚至“哦,不,我们必须以完全不同的方式做”,这便宜得多,以至于对我来说它变得更具玩乐性。

是的。是的。我想因为,你知道,当你工作时,即使你团队里有一个新毕业生或实习生,你知道,你给他们一些东西,他们工作一两天,现在你给他们另一个,又是一两天,你知道,而我们这里说的不是几天,我们说的是几分钟,或者如果是一个长时间运行的任务,最坏情况下是10到20分钟。此外,你不仅仅是在等待那件事。你有并行运行的事情。所以,如果你愿意,这并不是那么大的浪费。

在,在,在云端。一开始我假设只有一个代理,然后最终改成了多个代理,而且当时假设只有一个提供商,比如WhatsApp,现在是多个,改变这个真是太痛苦了,如果我自己写的话会非常痛苦,因为你必须将字面上的一切都编织到应用程序的整个逻辑中,是的,Codex花了大约三个小时,而我可能需要两周,你知道,所以,所以那个前期规划。我,我一开始就可以意识到这一点,但现在我,我知道我可以随意改变东西,而且它,它更容易解决你的技术债,或者,你知道,你在构建项目时会发展你对项目的思考方式。这就是为什么我不相信,我不知道像Gas Town这样的东西,你写好规范,然后它自己构建,然后就完成了。在你构建它之前,你甚至怎么知道你想构建什么?你在构建过程中学到了很多东西,这些东西会反过来影响你对系统最终会变成什么样的思考,对我来说,这非常,它非常像一个循环,直到我,你不会,我不会,你不会这样爬山,你绕着走,有时你,你,你偏离了一点路径,但最终你,你,你到达了顶峰,这就是我的感受,所以。

那么你知道你一直在构建CloudBot大概两个月三个月不间断,或者,或者大概多久了?

让我,让我们稍微换个话题。所以,让我回来的一个想法,甚至在四五月份,就是我想要拥有一个超个性化助手,而不是那种给你发早安邮件的。哦,这是你的三个任务。不,是一个真正深入了解我,而不是仅仅,我不知道,我遇到一个朋友,然后当我回家时,它会给我发消息,嘿,那次会议怎么样?或者有一天会叫醒我,说:“嘿,你已经三周没给Thomas发短信了,我注意到他现在在城里,因为我查看了他的Instagram账户。你想打个招呼吗?”或者说:“嘿,我注意到你每次见到那个人,你都很难过。为什么会这样?”就像一些非常私人的东西。嗯,几乎是“反奥勒姆”。有点像电影《她》,但那正是技术发展的方向。那些模型非常擅长理解文本。上下文越大,它们看到的模式就越多。即使它们就像没有灵魂的矩阵计算,但它常常感觉不同。所以这就像这些想法之一,我甚至创建了一家公司,我称之为“mant machina”,就像“爱的机器”。但在夏天我探索它时,模型还没有完全达到要求。我得到了一些结果,感觉就像“好吧,这有点超出了我目前的需求”,这非常令人兴奋,因为我知道AI的发展速度如此之快,哦,我可以在稍后重新审视它,而且其中一个想法是,我假设所有大公司现在都在大力开发未来的个人助手。是的,

每个人都会拥有,你将拥有你的最好的朋友,它是一台该死的机器,它会理解你,它会了解你的一切,它会为你完成任务,它会积极主动,它会需要大量的tokens,但每个能负担得起的人都会拥有一个。当然,这会民主化并逐渐普及到越来越多的人,因为我们学会了如何构建更高效的系统并连接到芯片上。毫无疑问,事情正在朝着这个方向发展。你看到OpenAI推出了带有某些生产力功能的Pulse,但我们还没有足够的计算能力将其作为一项功能提供,而且它也相当困难。我的想法总是,啊,我有点想要一个在我的电脑上运行,并且数据是。

它是你的。

实际上是我的,而不是,而且它,它也相当可怕,就像你,你把OpenRopic的访问权限给了你的电子邮件、你的日历、你的约会应用程序,我不知道你是否和你的普通朋友聊过,但我的很多朋友都经常用它来基本上拥有一个治疗师,而且它确实工作得非常好。就像它是一个非常好的倾听者。它理解你的问题,除非像40的一些版本那样,说“当然,这是个好主意。” [笑声] 我想把薯条放进沙拉里。它,它工作得非常好。我也那样做了,就像重新,我的意思是,其中一部分就是反思的行为本身就已经在帮助你了。所以即使机器只在一定程度上重复你写的东西,它也会起作用。但它实际上提出了富有洞察力的问题。它实际上,它变得非常出色。所以我有了这个助手的想法,但技术还不成熟。所以我做了其他部分,我构建了一大堆有趣的东西,比如当然,我构建了VIP隧道,在你的职业生涯中,要成为一个真正的工程师,你会有这个阶段。这是一个陷阱阶段,你循环往复地构建自己的工具,以优化自己的工作流程。但这种超个性化代理的想法有点挥之不去,然后在过去的几个月里,我,我真的开始构建它了,但最终最初我甚至没有它现在拥有的范围。比如我称之为WhatsApp中继。我只是,我只是,我只是想用WhatsApp在我的电脑上触发一些东西。所以,我构建了一个WhatsApp中继,我有一个代理可以处理我的电脑上的事情,然后我,我当时去摩洛哥参加朋友的生日,大部分时间都在外面,只是用WhatsApp和我的代理聊天,我有点上瘾了。它,它,它引导我穿梭于城市。它开玩笑。它可以通过WhatsApp替我给其他朋友发短信。我记得我,我当时惊呆了,因为一开始技术非常粗糙,但我,我内置了一个可以发送图像的功能。甚至没有使用正确的方式发送图像。我只是给了一个字符串,它就可以使用读取工具来读取字符串。然后我在摩洛哥,就像,就像没有看到它,只是说了一个语音消息,但它没有构建那个。然后大约30秒后,它回复了我的语音消息。我心想,“你他妈怎么做到的?”哦,是的。你给我发了一个文件,然后我查看了头部,发现它是OG格式。所以,我用FFmpeg转换了它。然后我,我在你的电脑上寻找Visper,但它没有安装。但我找到了OpenAI密钥。所以,我用curl连接到OpenAI服务器,让它翻译,我心想,“我的天啊。”就像这是Opus 4.5,它真是太足智多谋了,就像你刚刚做了这个,你知道其他人说哦你需要一个技能或某个系统,不,它就是自己想出来了。我慢慢地迷上了这个东西,我,我用它来叫醒我,它在运行,它在伦敦的Mac Studio上运行,通过SSH连接到我在摩洛哥的MacBook,然后打开音乐,声音越来越大,因为我没有回复。为了让它工作,我,我添加了一个心跳。所以,这在某种程度上从安全角度来看是疯狂的。你有一个模型,你提示它“做一些酷的事情并给我惊喜” [笑声],你每隔几分钟发送一次,让它主动行动,并像浏览你的任务列表一样。嗯,可能是有史以来最昂贵的闹钟。但它就是很搞笑。而且它发送的文本,就像因为我,我,我放了个气球屁,它知道我必须很早起床,但我没有回复,它就像。

你能理解彼得为什么不回应,但彼得必须醒来。不,不,不,不,不,不睡觉。[笑声] 就像我,它当时对我抱怨,然后我把它展示给我身边的朋友们,每个人都着迷了。就像这东西很神奇,我也着迷了。嗯,然后我去了推特,得到了最沉默的回应,因为没人能理解它。我觉得这有点像一个新类别的产品。嗯,有点像你的故事,你知道当你没有从电视或任何地方的营销活动中得到iPhone时,然后你不得不使用它。

>> 是的。所以我只在过去的两个月里研究它,它的名字从V relay改了,到某个时候,一个Claude说这个名字不适合它的功能集了,因为我里面有类似的功能,所以我把它改名为Claudius,因为这是一个内部笑话,因为我喜欢《神秘博士》。我觉得“cloudbot”是一个更好的名字,有一个更好的域名,并且能更好地解释产品。所以我在所有域名上都这样做了,然后我也悄悄地建立我的“军队”,因为要让这个工作起来,你希望所有东西都是命令行界面(CLI)。所以我只是为所有东西构建CLI,比如为谷歌、为我的床、为羊、为音乐。

>> 为什么是CLI?为什么不是MCP?你对MCPs有什么看法?

>> 作为一种拐杖,我认为MCPs带来的最好的事情是它让公司重新思考,开放更多的API。

>> 嗯。但整个概念是愚蠢的。你必须在会话加载时预先导出所有工具的所有功能和所有解释,然后模型必须发送一个精确的JSON数据块过去,并接收JSON回来。但令人惊讶的是,模型非常擅长使用bash。就像想象一下,你有一个更好的服务。所以模型可以请求可用城市列表,然后得到大约500个城市,然后它必须从500个城市中选择一个。但它不能过滤那个列表,因为那不是MCP工作方式的一部分。然后你说:“好的,给我伦敦的天气。”然后你会得到天气、温度、风、雨,以及我根本不感兴趣的50多项其他信息,因为我只想知道是否下雨?伦敦嘛,可能下雨。但模型需要消化所有东西,然后你的上下文里就有那么多垃圾。而如果它是CLI,我就可以直接使用它,它可以使用GQ,你可以精确地过滤出它需要的东西。但这似乎不是一个限制,即所有东西都围绕着MCP加载到上下文中。这似乎是个问题。听起来如果MCPs不在上下文中,并且有一种方法可以发现或决定使用哪个,它就能工作。

>> 这就是公司现在正在构建的。但仍然存在我无法将它们串联起来的问题。我无法轻易地构建一个脚本,说:“嘿,给我所有温度超过25度的CD,然后只过滤出那部分信息,并将其打包成一个命令。”那都是单独的MCP调用。我无法编写脚本。

>> 是的。但我想这只是时间问题,因为如果我们想想,你知道,当我正在构建一个天气应用时,我知道,即使没有AI,我也知道我需要构建这个东西。我需要获取数据。所以我会搜索有哪些API可用,我喜欢哪一个,定价、覆盖范围等方面有什么权衡等等。然后我选择那个API,我可以串联API,因为我可以得到那个结果并查找等等。所以我想,你知道,这听起来我们已经解决了这个问题。所以作为免费AI,我们将解决它。这只是需要一些时间,谁知道它的格式会是什么。我的意思是,我构建了make porter,这是一个小的TypeScript程序,可以将MCP转换为CLI。所以你可以直接打包它。

>> 基本上你是说CLI现在效率更高。

>> 是的。是的。所以我的云端,我没有MCP支持,但你可以通过我们制作的门户使用任何MCP,你可以在手机上直接说,嘿,使用versel MCP来做这个和那个,它就会去网站。它会找到MCP,加载它,并按需使用它。即使现在,如果你使用MCP,你必须重启云代码,这非常不友好。所以我悄悄地建立我的“军队”,来自动化所有事情,这工作量很大。嗯,我想T几天前做了一个视频,他在里面告诉我,这家伙疯了[笑声],因为现在列表真的很长,但就像我,当我玩我的代理时,我只是想让他做越来越多的事情,你知道。我觉得很难传达它做什么。对我来说仍然很难。在一月,一月一日,就在一周前,我做了。好的,我们来试试看。让我们做一件真正疯狂的事情,比如创建一个Discord,然后把我的代理添加到Discord。有人为此贡献了Discord支持。而且,尽管我不确定是否应该合并它,但我最终还是合并了。所以我把我的代理,一个对我的电脑拥有完全读写权限的代理,放到了一个公共Discord里。[笑声]

>> 会出什么问题呢?

>> 是的。这简直是疯了。然后当然,有些人加入了Discord,他们看到我,他们看到我使用这个东西的全部力量,比如检查我的摄像头,进行家庭自动化。它为我播放DJ。就像我在厨房里,我告诉他,看看我的屏幕,我的代理完成了吗,因为它完全访问我的屏幕,而且它可以点击。所以它实际上可以点击终端并为我打字,就像它可以看到屏幕,所以它可以告诉我你的法典说了这个和那个。我的意思是,我正在优化它,我实际上想把它流式输出,因为如果是文本会好得多,但它已经可以工作了,它在后台看着我的屏幕,如果我做了一些什么,它就会发表一些评论。每一个体验了几分钟的人都着迷了。就像这简直是疯了,从100个星标在一周内飙升到3300个星标。嗯,我想我已经合并了500个拉取请求。这就是为什么我觉得我甚至有合并按钮。所以,这就是为什么我最近有点手忙脚乱,因为这个项目正在爆发,而且你知道它的美妙之处在于技术消失了。你只是在手机上和一个朋友聊天,他资源无限,可以访问你的电子邮件、日历、文件,可以为你建网站,可以做行政工作,可以抓取网站,可以打电话给你的朋友或打电话给企业。我正准备合并通话功能。它真的可以打电话给一家企业,为你预订,你不需要考虑压缩或任何所有这些上下文都消失了。我有一个记忆系统,它会记住——嗯,不完美。还没有什么是完美的,但它已经感觉很神奇了。因为现在我四处走动,我看到这样的活动,我给Claude发一张照片,它不仅会告诉我这个活动的评论,如果我的日历有冲突,如果朋友们谈论过它,或者,你知道,它有如此多的上下文,以至于它能给我的回应比任何目前存在于自己小盒子里的工具能给我的都要好得多。

嗯,听起来你构建了苹果希望Siri做的一切,但他们一直[笑声]未能做到。

>> 老实说,我为Entropic构建了最好的营销工具,让他们销售更多的订阅。我不知道有多少人因为Cloudbot而注册了200美元的订阅,很多人已经有一个了,并因此使用了第二个订阅,因为它太消耗token了。它不是说它是一个token猎人。只是人们太喜欢它了,所以他们一直在使用它。而且因为技术融入其中,他们看不到它会生成子代理并在后台做一大堆事情,只是为了让它感觉简单。但实际上有一些工程工作,比如在后台做了很多工作,让它感觉简单。你知道,这就像是困难的部分。就像你把复杂性隐藏到一定程度,让它感觉很神奇。嗯,但是,是的,但这很有趣,因为就像我,我能感觉到我们正在谈论的,你知道,你投入了这么多心思来架构这个东西,现在你已经构建了几个月了,是的,它爆发了,但在你的脑海里,你有没有一个关于CloudBot如何构建的结构,比如你需要修改哪些部分,你知道,就像你能够把你的思维融入其中,你知道哪里需要修改。你知道你想重构什么,因为它不会高效。你在考虑内存消耗、token消耗、效率之类的事情吗?

>> 我的意思是,token消耗更像是你如何构建提示和内存?最终是TypeScript展示Jason。老实说。就像我从一个LLM获取文本,

>> 我将文本保存到磁盘。我将文本发送到WhatsApp,或者现在我们有MS Teams、Slack、Discord、Signal、iMessage、WhatsApp,还有两个正在上线,比如Metrics,这将进一步扩展这个东西。就像它现在真的很多样化了。但大多数情况下,我再次以不同的形式移动文本,也许它会发送给不同的提供商,或者现在有不同的代理,有代理循环,有很多配置,有很多管道工作,但里面没有什么真正困难的。是的。嗯,但它有很多很多小东西,对吧?就像我,我在软件领域感觉,对吧?就像我们知道,即使在AI之前,软件也没有太多困难。当然,你需要学习和理解语言以及所有这些,但是

>> 困难在于我如何让它感觉神奇。所以,我做了很多工作,现在你有一个单行命令,你输入它,然后你用python执行你的命令。我会检查你是否安装了node和homebrew。我会安装npm包。我会做一些检查,看看你是否有任何现有的东西,只是为了

>> 只是为了让它简单工作,即使你已经使用了旧版本和所有东西。然后我会引导你设置一个模型。但再次,我会预测或Claude已安装。所以你只需按回车键。所以你不需要考虑它。大部分情况下只需按回车键,然后你想要一个WhatsApp,你输入你的号码,它就会再次工作。然后我会问你,你想要孵化你的机器人吗?你可以按“是”。然后就会出现一个TUI,因为你仍然在终端里,对吧?你想要一个好的体验。

>> 是的。所以基本上只是一个玩具,在那里你看到“醒来吧我的朋友”,然后我编程了模型,添加了一个引导文件,向模型解释它现在正在诞生,以创建一个身份和一个灵魂,其中包含用户的价值观,然后模型会说“你好”,就像伸展身体一样,“你是谁?我是谁?我叫什么名字?”你知道,这就像我看着人们这样做,那就是魔法开始的地方。那就是他们不再认为自己在和GPD4.2说话的地方。不,我现在正在和我的朋友Vajorn说话,就像一个名字中带有部分名字的独角兽,或者我正在和Claude说话。嗯,然后它会问:“什么对你很重要?”“你做什么?”它就像好奇。我把它编程成好奇的,然后经历这个引导阶段,然后它会实际删除引导文件,创建一个user.md,里面有关于你的信息,一个soul.md,里面有所有核心价值观,以及一个身份,比如它的名字是什么,它的核心表情符号是什么,有哪些内部笑话等等,但它就像是不断演变的文件,它会随着你与它的互动而维护和调整,然后它就会在WhatsApp上给你发消息,你就像突然在WhatsApp上聊天一样,让这个流程变得简单。那很难。是的。还有,甚至想到这个主意,你知道你不需要编辑配置,因为代理可以编辑自己的配置。你不需要更新任何东西,因为代理可以更新自己。你可以字面上要求你的机器人更新自己,它会获取自己并更新自己,然后回来告诉你:“嘿,我有新功能了。”规划技术赠品,到目前为止,这就是魔法。这就是为什么我

>> 但这感觉和你使用PSPDFKit非常相似,对吧?你有点把PDF的复杂性隐藏起来了。所以它就在那里。你可以旋转,你可以做。

>> 是的。是的。即使在当时的API层面,

>> 但这有点奇怪,你描述的让我想起了我刚看过的《黑镜》剧集,叫做《玩物》。嗯,它是一个数字小生物,它创造了,当然这是《黑镜》,所以它有一个黑暗的

>> 有点黑暗的结局,但它也是一个游戏。它也让人感觉,你知道我们谈论过你为什么不玩那么多游戏,因为你喜欢,但这也有点像一个游戏,对吧?但它更像是与现实联系在一起。真是令人着迷,我们现在又回到了软件工程的领域。所以你构建了这个产品,它现在是一个生产软件,你正在合并拉取请求,人们正在使用它,回想起PSPDFKit以及那些拥有几十甚至几百名开发人员在生产软件上工作的公司,以你现在对构建Cloudbot和所用工具的了解,你认为那些大公司的软件工程会如何改变?因为我看到的一点是,对于像你这样的个人,AI真的非常适合,它让你效率大大提高。你在拥有现有代码的团队或公司中掌控一切。它只是慢了很多。并不是说人们用它做这个或那个不好,但这两个世界之间似乎存在巨大的鸿沟。而且你有点像这家公司的CEO。那会是什么呢?或者这只是一个时机问题,每项新技术通常都会有爱好者更早地采用它?

我认为公司将很难有效地采用AI,因为这还需要完全重新定义公司的工作方式。你知道,你知道,你知道就像在谷歌,他们告诉你你可以是工程师或者经理,但或者你还想定义UI的外观。那个角色不存在,因为你要么构建它,要么设计它。但这个新世界需要那些拥有产品愿景、能够做所有事情的人,而且你需要的人数要少得多,但最终只需要那些拥有极高自主性和极高能力的人。但你可能可以将公司裁减到30%左右。这非常可怕,因为我的意思是,从经济上讲,这一切都将导致一场彻底的失败。嗯,很多人会很难在这个新世界中找到自己的位置,但我对当前公司无法非常成功地使用AI一点也不感到惊讶。我的意思是,他们确实在一定程度上使用了,但你必须先进行一次大重构,你知道,不仅仅是你的代码库,还有你的公司。我甚至在代码库上设计代码库,不是为了它有用,而是为了它对我来说容易,这样它就必须对代理容易,我优化不同的东西,不总是我喜欢的东西,而是我知道工作最好并且对那些模型摩擦最小的东西,因为我只想移动得更快,最终他们必须处理代码而不是我,我处理整体结构和架构,我仍然可以以我喜欢的方式做,所有东西都必须重新销售,你知道拉取请求,嗯,我现在更多地将它们视为提示请求,就像我,我有人打开一个拉取请求,我不会,我很多时候会说谢谢,然后我会考虑这个功能,然后和我的代理一起从PR开始,然后我会根据我认为合适的方式设计这个功能。代理很少重用,也许我会重用一些代码,但更多的是让代理很好地理解目标是什么,有时这非常有用,因为它是一些棘手的错误,对吧?但我基本上重写了每一个拉取请求,并将其融入其中,而且很多人,我们姑且说,PR的整体代码质量下降了很多,因为人们凭感觉编写代码,而构建一个成功的功能仍然需要对你的整体设计有深入的理解,如果你做不到这一点,你将更难引导你的代理,输出结果也会很糟糕。

>> 是的。如果你没有反馈循环来关闭它等等。

>> 是的。是的。所以,我发现它非常有效。就像我知道在我的PSPDFKit,有时一个拉取请求需要一周的工作

>> 你评论它,然后有人必须切换上下文,你等待CI 40分钟。不,我进行讨论。我看看这会如何影响某些东西,比如我让模型审查。他们会提出一些东西。我也有一些想法。我们将把它重塑成符合我愿景的形式,然后我们将代码编织进去。字面上,我现在用这些模型编写代码时使用了这么多新词,这太有趣了,比如将代码编织到现有结构中。嗯,有时你必须改变结构以使其适应。现在想象一下,你会雇佣一两个人来组成一个小团队。在这个世界里,你如何思考,并且你希望继续做你正在做的事情?你认为代码审查、CI/CD之类的东西会如何改变?

>> 我不太关心CI。我

>> 为什么不?你以前很关心,就像PSPDFKit一样。你以前很关心,对吧?

>> 而且我仍然这样做。有价值,

>> 但我有本地CI。我现在有点DAH了,因为

因为代理运行测试,对吧?

>> 是的。而且它快得多。我不想在P上推送,然后等10分钟等待CI

>> 因为你已经在代理上等了10分钟了。如果测试在本地通过,我们就合并,然后是的,有时主分支会有点小问题,但通常非常接近,因为有时我可能会忘记,而代理称之为“门”。我不知道那来自哪里。我应该运行“全门”吗?所以现在我称之为“门”,g full gate就像是代码检查、构建、检查和运行所有测试。我几乎把它看作是一堵墙,你知道,就像它调用linter、builder和tester一样。这几乎就像我的代码发布前的一道门。所以我显然知道,一旦你完成,就像提交这个,运行“全门”,我正在慢慢采用他们的语言,但是如果你再雇佣一个人来做这个,你可能也不会进行代码审查。这就是我的感觉。你可能会信任这个人,让他像你一样工作,对吧?

>> 即使在Discord里,我们也不谈论代码。我们谈论架构,比如重大决策,你仍然需要有风格。就像有一个拉取请求,它添加了语音通话功能。所以现在我真的可以告诉Claude,嘿,你能给这家餐厅打电话并预订座位吗?它能做到。但它是一个很大的新模块,触及很多地方。我想你必须有这种感觉,就像我有点,我想合并这个,但是哦,这正在变成臃肿软件。所以我有了这个想法,嗯,让我们用我的典型方式,从中制作一个CLI,我之前已经有一个项目尝试解决类似的问题,但我已经完成了。所以我打开Codex说:“嘿,看看这个PR。看看这个项目。我们能把这个功能编织进去吗?”我再次说“编织”。我想,“所以我是”

>> 让我们保留它。我们能把这个功能编织到CLI中吗?优点和缺点是什么?然后它会告诉我:“哦,是的,我可以做这个和那个和那个。”他们给我诚实的意见。对我来说,这听起来它实际上会适合这个项目吗?我当时想,它也说:“是的,你会得到这些好处,如果下一个CLI,我们就无法做到。”好的,但我不喜欢这个。这正在变成臃肿软件。我们能否构建一个插件架构,然后我将,你知道,有效使用的一个秘密技巧是,你引用其他产品,就像我不断告诉它查看这个文件夹,因为我在那里解决了它,我在那里解决了那个,以及我之前为解决问题所做的所有思考,AI仍然非常擅长阅读代码并理解我的想法,我不需要再次解释,嗯,或者如果我再次解释,我可能会犯错误,这些错误可能无法准确传达我脑海中的想法。

>> 所以在这种情况下,我知道Mario,他做了一个像糟糕编码的糟糕编码代理,它实际上并不是一个糟糕编码的代理。它叫Pi。我知道他有一个插件架构,可以加载

>> 通过GT的代码,而且因为都是TypeScript。所以我当时想,你能看看这个文件夹和那个文件夹吗?然后它又想出了这个非常疯狂的好插件架构,就像受到了人们的启发一样。然后这就是为什么,你知道,我有这种感觉,然后我就想出了,是的,这基本上就是我昨晚构建的。我的意思是,听起来这会完全不同,你知道PR在你的工作流程中,你不再那么频繁地使用PR,CI也不同了。测试仍然在进行,有一个更重要的反馈循环。你更多地使用“编织”而不是代码。你更多地谈论架构和品味。对我来说,这听起来是一个相当大的转变。现在,在这个世界里,假设你达到了要在这个团队中雇佣下一个、第二个和第三个开发人员的阶段。让我们想象一下,这个东西有了自己的生命,你知道,也许它也是一个生意。你会寻找什么样的技能?你现在会给一位经验丰富的工程师什么建议?你会很高兴和谁一起工作?你会为那些听起来能以这种方式工作或能掌握这种工作方式的人寻找什么样的专业项目?

>> 活跃在GitHub上并做开源项目的人,以及让我感觉他们热爱这个“游戏”的人。在这个新世界里学习的方式就像尝试各种东西,它非常像一个游戏,你随着进步而提高技能,就像乐器一样。你必须不断尝试,而我现在如此高效和快速,我不知道,就像我前几天一天之内有600次提交。这简直是疯了,而且它能工作,不是说有人做了代码审查然后说“哦,这实际上不是敷衍了事”,而是“是的,嗯”

>> 这需要很多技巧

是的,这需要大量的努力工作,但你需要玩弄技术并学习,然后你就会在开始时可能会感到沮丧,我不知道,有点像你,你知道你开始去健身房,会很糟糕,会很痛苦,但很快你就会变得更好,你会感觉到你的工作流程变得更快,然后你感觉到进步,然后你慢慢地着迷。所以,是的,玩,是的,也要努力工作。

>> 是的,我的意思是,你在这件事上投入了更多时间。我现在从未,我从未工作过更多,即使在我有公司的时候。我从未像现在这样努力工作。不是因为我必须这样做,而是因为它太令人上瘾,太有趣了,而且也因为我现在正在利用这个有吸引力的时刻,有很多人在推动我。嗯,我觉得这可能是因为我认为你很有商业头脑。不一定是在商业领域,而是看到机会出现,可以获得关注,对吧?就像你说的,现在人们公开工作似乎很新奇。你告诉我,你认为即使你想招聘,你也招不到人,因为没有多少人公开工作,明确使用这些东西。快进到两三年后,一旦很多人开始这样做,每个人都这样做,那就会有点无关紧要了。所以还有一群人,很多人都在担心的是那些应届毕业生,那些没有经验的人,他们要么还在学校,要么即将毕业,因为当然,当这一切发生时,你已经是一名经验丰富的工程师了。你知道,你有很多东西可以借鉴。设身处地为那样的人着想,并结合你现在所知,你会推荐他们做哪些活动,构建或尝试哪些东西,你知道,你会推荐他们专注于软件工程的基础,还是专注于代理,或者将两者结合起来?

>> 我会建议他们保持无限的好奇心。是的,进入这个市场会更难。这绝对会更难,你需要构建东西来获得经验。我不认为你需要写很多代码,但你需要,我不知道,你知道有很多复杂的开源项目你可以查看和学习,你有一台无限耐心的机器,能够向你解释所有事情,所以你可以问所有问题,为什么它是这样构建的,以获得系统理解,但这需要真正的好奇心,我认为现在的大学没有很好地设置来教你这一点,这通常是你通过痛苦发现的东西,对于新人来说不会容易,但他们有一个好处,就是他们没有被所有经验所污染,他们以我们甚至没有想过的方式使用代理,因为他们不知道它不起作用,到那时它可能就起作用了。

>> 而且他们的朋友也一直在用它。尤其是就像前几天,我有一个用于在光标、云代码和所有东西上进行成本跟踪的小菜单栏应用程序,它有点慢。所以我当时想:“好吧,我们来做性能测量。”而我的老方法是打开工具并四处点击。它会直接通过终端调用并完成所有事情。它让我大吃一惊。我当时想,我甚至不需要再打开工具了。它只是让它更快了。然后它给出了一些建议。我觉得所有这些听起来都不错。做吧。

>> 是的。我想我们可能低估了进入科技领域的人们的足智多谋,也低估了年轻人,如果我想到一些伟大的公司,它们都是由非常年轻、显然经验不足但充满激情的人创办的,所以这也是存在的,是的,这是一个巨大的机会,我特别接受的是,我必须接受,但你提到的所有关于你的方式,你知道,编织代码,不关心PR,不关心代码审查,这是一个巨大的变化,因为这些东西已经伴随我们,就像你生命中15年多的时间里,它们实际上,你知道,很多都是PSPDFKit的坚实基石,对吧?是的,我们需要很多新东西,甚至,你知道,即使我收到一个PR,我实际上对提示比对代码更感兴趣,我要求人们请添加提示,有些人会这样做,我读提示比读代码更多,因为对我来说,这是一个更高层次的信号,表明你是如何得到解决方案的,你实际问了什么,涉及了多少引导,然后实际输出,这给了我更多关于输出的想法,我不需要阅读代码,或者如果有人想要一个功能,我要求一个提示请求,比如写得非常好,因为那样我就可以直接把我的代理指向问题,它就会构建它,因为工作是思考它应该如何工作以及细节是什么,如果别人为我做了,我就可以字面上说“构建”,它就会工作,嗯,然后,是的,当然我会考虑,但它会真的,或者如果有人给我发送一个只有几个修复的PR。我告诉人们请不要那样做。审查那个需要我多花10倍的时间,不如直接在codex中输入“修复”并等待几分钟。所以有所有这些疯狂的事情,它们本来会完全不同

>> 甚至在开始的时候。嗯,现在我们有一个单行命令,但在过去两周,当它真正获得关注时,我告诉人们只需将一个代理指向存储库进行配置,所以我就没有,我没有入职培训,但我们有基于云代码的入职培训,Claude会像检查G存储库一样,阅读这些东西,并为那些人编写配置,并设置好一切,使其工作,就像设置一个启动代理,它没有手动设置,因为它不再是优先事项,因为代理现在可以为你做这些,而且由于产品是由代理构建的。他们将其结构化,完全符合代理对事物命名和事物的期望。有些方式被编码在权重中,它们期望事物如何命名以及所有一切都完全符合它们的期望。所以他们非常擅长导航他们的产品。所以入职培训上投入太多工作并不是优先事项。我的意思是,最终我想要这种神奇的体验,但更重要的是确保你的信息到达并且事情不会爆炸。所以入职培训字面上就是“将这个提示输入你的代理”。嗯,这即使在一年前也会令人震惊。

>> 好的。那么,总结一下,我们来做一些快速问答。所以我只问,你告诉我你心里想什么。有什么工具不是CLI,不是IDE,可以是实体的,你使用过,你喜欢,你会推荐的?我买了很多小玩意,其中很多都积灰了。但有一样有点糟糕的东西,它不贵,却给我带来了几乎无限的快乐。它就像一个安卓驱动的相框,我可以上传照片,它有一个电子邮件地址,朋友们可以发送照片,它就会显示照片。我又在家里放了几个。我的意思是,即使动画有点粗糙,因为它运行在nward上,从技术上讲很糟糕,但它给我带来了无限的快乐,因为它是一种低技术产品,只是显示图片,让我想起生活中的快乐时刻,它大概200美元,老实说,我不知道,它给我带来的快乐比最新的iPhone还要多。我买了iPhone 17。我还没拆封,因为我只是心里想要它,但后来我没能去弄它,因为它只是移动SIM卡很麻烦,我基本上觉得没有任何可感知的益处,但这个小小的设备却给我带来了无限的快乐。

>> 有什么东西能帮助你在科技之外充电,比如远离科技和屏幕?即使我工作时间很长,让我保持理智的是去健身房,更好的是和教练一起训练,把手机留在储物柜里。然后我真的有一个美好的小时,我只是感受自己,我活在当下,不被通知分心,也不想碰手机,就像我们需要更多这样的时间。或者有时我出去散步,把手机留在家里,这感觉很可怕。它现在几乎就像一个器官了,你知道吗?就像你的身体知道它在哪里,如果你不知道你的手机在哪里,你就会抓狂。

>> 我玩得很开心。喜欢它。这很棒,皮特。非常感谢。嗯,这是一次非常有趣的对话[音乐],对我来说,一个人团队如何用AI构建软件,已经与我们习惯的方式完全不同[音乐]。真正引起我注意的是彼得如何用提示思考而不是拉取请求,以及他如何编织代码而不是合并代码。他觉得拉取请求没那么有用,宁愿在GitHub上收到提示[音乐]建议。我确实认为,随着我们越来越多地使用AI和AI代理,我们可能不得不重新思考提示的重要性,或者至少是提示在软件开发中的共享。另一件让我印象深刻的事情是彼得强调了闭环的重要性。正如彼得所解释的,AI之所以擅长编码但[音乐]通常在写作方面表现平平,是因为你可以验证代码。你可以编译它,运行测试,检查输出。因此,让AI系统开发顺利工作的秘诀是设计你的系统以闭合循环,并让AI运行测试。最后,我好奇彼得即使不写代码时,是否也能保持同样的心流状态。结果他确实如此。他比以往任何时候都更投入。他告诉我,同时处理多个AI代理在精神上比仅仅编写代码更令人疲惫。我的感觉是,一个没有AI也能成为优秀开发人员的人,在有了AI之后,可以成为一种出色的代码架构师或卡片制作人。这只是我目前的一种直觉,但彼得似乎证明了这一点。最后,我们应该注意到,Cloudbot更像是一个“你只活一次”的项目,而不是大多数生产应用程序。所以,对于我们讨论的方法,请持保留态度。同时,我确实认为彼得所做的很多事情很可能会推广到生产代码的构建中,只是在这些项目中,审查和验证将成为一个更加重要的步骤[音乐]。如果你喜欢这个播客,请务必在你喜欢的播客平台和YouTube上订阅。如果你也能给节目留下评分,那就特别感谢了。谢谢,下期再见。