我在一个小农场长大。大豆维持生计,雨水打在谷仓的锡屋顶上,听起来像架子鼓。我爸爸那辆旧的 Massey Ferguson 拖拉机,前面装有前装载机,后面装有切割刀片,可以处理所有农活。一辆绿色约翰迪尔拖拉机和一辆锈迹斑斑的红色联合收割机,非常巨大,停在那喧闹的屋顶下,旁边是一个游乐场。离我家最近的同龄孩子要骑很远很远的自行车才能到。
所以,在七月下午,我会爬到我们家的车库阁楼上,那里因为高温基本上就像个烤箱。阁楼里塞满了这些装满布满灰尘的《低俗小说》平装书的旧纸板箱。我会坐在那里,一读就是几个小时。
当我们的第一台 Windows 电脑出现时,它是一个在客厅桌子上嗡嗡作响的米色盒子,我爸爸不得不打电话给一个懂电脑的朋友。那个朋友指导八岁的我完成了进入 DOS、插入磁盘和键入 N-U-K-E-M 点 E-X-E 的整个过程。然后 Duke Nukem 就出现在屏幕上。那一刻,从按下回车键到色彩和声音的爆发,我被迷住了。电脑既是生命线,也是我见过的最令人着迷的东西。♪
大家好,这里是 Co-Recursive,我是 Adam Gordon Bell。今天我想谈谈一些正在分裂开发者社区的东西:AI 编码代理。但这并不是另一个,你知道的,“AI 将取代我们所有人”的说法,也不是 AI 被过高估计的论调。它更多的是关于我,以及当你的身份与创造事物联系在一起,而你使用的构建工具从根本上发生变化时会发生什么。它关乎我们感受到的抵制,以及为什么我们也许应该克服这种抵制。
我认为这对于持怀疑态度的人和炒作它的人来说都很有趣。我认为我有一个务实的观点,或者至少是一个有趣的视角,我希望你会听下去。在《怪奇物语》中,80 年代的书呆子孩子们在地下室玩龙与地下城,他们一起在附近骑自行车。但是的,那不是我的童年。正如我提到的,我在农村长大。附近没有邻居。
我在就读的小学校的朋友大多来自农业社区,尤其是我小时候。他们中的大多数人,你知道,现在还在经营着同样的家族农场。我们并不总是有很多共同点。我在学校有点像个小丑,一个感到厌倦并表现出行为问题的孩子。我知道我和别人不一样。这是很明显的。但对我来说,从来不清楚我究竟是谁,为什么或者我为什么与众不同。
高中毕业后,我学习了计算机科学,我也没有和这个专业的学生走得很近。我有一些朋友,但我大多是自己忙自己的,总是创造一些东西,不仅仅是编程,还有制作网站和摆弄电子音乐,下载盗版软件,比如 Photoshop,并试图弄清楚如何使用它。当我开始担任软件工程师时,我终于遇到了一些真正了解自己并对自己的身份感到满意的人。我的朋友唐,对,他自豪地体现了这种书呆子文化。
但我从未看过《星球大战》。我从未玩过《魔兽世界》。我也完全融入不了那群人。
但后来发生了一些意想不到的事情。我开始遇到一些和我一样的人。我记得我去旧金山一家初创公司面试。它离 Twitter 办公室不远。它在市中心地区。我立刻注意到那里有一些人让我感觉很熟悉。白天,每个人都在编写所需的任何代码。但在业余时间,他们学习 Haskell 或在 Unity 中制作游戏,或者只是为了好玩做这些事情。我会说我最喜欢的作者是特德·昌,然后有人……
其他人会说,哦,是的,我喜欢他,但我转向了格雷格·伊根。他们似乎和我有一些相同的兴趣。说实话,这太奇怪了。但事情是这样的,当时我并没有完全理解。我不仅仅是在寻找像我一样的人。我终于发现了我的真实身份。几年前,我和妻子在佛罗里达度假,坐在泳池边,用我的笔记本电脑从头开始构建这个 Markdown 解析器。她正在看书,很满足。而我正处于这种心流状态,时间消失了。
追逐边缘情况,每当某些东西到位时,就会得到多巴胺的冲击。这让我想起了十几岁的时候,对吧?在农村长大,我爸爸买了一辆雪地摩托,想让我去玩。或者我有一个朋友有一辆越野摩托车,他会带着引擎轰鸣的声音过来,准备冒险。但我却弓着腰坐在电脑前,用 Turbo Pascal 制作一个智力游戏。我会出去玩。但对我来说,最令人兴奋的事情是那些建筑
建造东西的时候,我度过了人生中最美好的时光。当算法最终处理所有边缘情况时,那一刻令人陶醉。当你意识到你创造了一些以前不存在的东西,而且它有效,它很纯粹,它以最好的方式令人上瘾。
所以,是的,我花了很长时间,很长很长的时间才承认自己宁愿在周六花 10 个小时深入研究一些新的编程框架,也不愿参加大多数聚会。我宁愿弄清楚如何自动化一些可能不需要自动化的东西,也不愿做几乎任何其他事情。如果我认为某个新框架可以解决困扰我的某个问题,我会对阅读它的文档感到非常兴奋。
你知道,我看到一个问题,我就会立刻开始思考如何找到解决方案。即使它完全是过度杀伤,但这只是我享受的事情。但是,是的,一旦我最终接受了这一点,真正接受了它,而不仅仅是容忍它,我就停止了为周末消失在代码洞穴中而道歉。我不再因为对新的编程语言感到兴奋而在社交活动中让我的朋友感到厌烦而感到内疚。这不是我需要纠正的怪癖,这就是我。也许这是我的超能力。
但是,是的,在旧金山,对,我遇到了这些人,结果发现有很多像我一样的人,喜欢构建项目,喜欢写作和分享想法的人。在这个特定的地方,很多人来自滑铁卢,安大略省的另一个地方,然后我搬到了硅谷。但我还在安大略省。所以我花了数小时在 Hacker News 上。它感觉像是一个非官方的俱乐部,为像我这样的人而设。
感觉像是我属于的地方,终于有一个地方了。这些人正在创造东西,他们理解解决不需要解决的问题的乐趣,他们对优雅的代码感到兴奋,或者他们利用空闲时间学习新的编程语言或学习数学或做任何事情,只是为了好玩。在多年感觉像个局外人之后,感觉像回家了一样。但现在,2025 年初到中期,如果你看看 Hacker News,对我来说,这种归属感可能会破裂。
让我感到被理解的社区似乎正在因为大型语言模型和编码代理而分裂。一些人发布了关于他们使用 Cursor 或 Clod 构建的内容的令人兴奋的更新,或者发布了关于编码代理最新版本的更新,而另一些人则强烈反对,认为这些工具会产生脆弱的代码并使开发人员变得懒惰。
感觉像俱乐部变成了这场“改变一切”和“毁掉一切”之间的战场。我觉得我相当务实,处于中间位置,但我绝对更倾向于兴奋。在不知不觉中,我已经从事了 20 年的编码工作,我已经看到了足够的工具变化,可以识别出哪些东西值得探索。我觉得如果你喜欢创造事物,如果你喜欢创造,没有人能从你那里夺走它。
不是老板,不是新工具,甚至不是你自己。创造这些我喜欢的副项目和实验的冲动,只是我的一部分,对吧?人工智能无法从我这里夺走它。但也许它可以帮助我。但即使,你知道,Claude7 或 ChatGBT6 推出,突然它在编码方面比任何人都好八倍,这并不意味着我将想要停止创造事物。
这并不意味着你将想要停止创造事物。也许“什么”会改变,因为当你在一段时间内积累的某些技能可以被 API 调用取代时,可能会让人感觉贬值。但这种动力不会消失。就业市场可能会发生变化,期望值可能会发生变化。但有一种方法可以拥抱正在发生的变化,并保持与这种构建需求的联系。让我告诉你一个我非常熟悉的恐惧。一旦我将自己视为一个建设者,我就以意想不到的方式撞墙了。
当我成为软件工程经理时,感觉这是一个特殊的机会。我远程工作。我在这里,在彼得伯勒,不在任何科技中心附近,我已经远程工作了相当长一段时间,但这在 COVID 之前。角色有限,有机会在一个大型且不断发展的科技公司担任工程经理
感觉非常令人兴奋。我不能说不。我想提升自己。我想领导这家快速发展的公司(最近刚刚上市)的这支优秀的函数式程序员团队。这似乎很令人兴奋,在拥有数百名工程师的地方攀登阶梯的想法。这也感觉像是你应该做的事情。但几乎立刻,焦虑就出现了。不久之后,我完全不再编写代码了。
当我最终不得不完成一项小任务时,你知道,我会打开我的 VS Code 并执行 Git pull,看看,你知道,自从我上次拉取代码以来已经过去了 37 天。我只需要做一些小任务,打开一个 PR,然后 Adrian 两分钟后就会批准它。我记得他在 Slack 上说,感觉很好,可以发布一些东西,不是吗?确实如此。但说实话,这种感觉消失得和 GitHub actions 构建一样快。
因为剩下的时间都是会议。爱尔兰上午 8 点,然后是华盛顿特区的人,你知道,在一天的中午,太平洋海岸接近晚餐时间。我开始把我的手机放在三脚架上,戴着耳机,这样我就可以下去喝咖啡,同时还在开会。我花了太多时间阅读和更新 Confluence。我只是,我讨厌 Confluence。我不知道。有很多 Confluence 更新,很多数字文书工作,很多像在不同团队之间充当消息路由器一样。
作为经理的时间过得很快。Ted,一个和我同时进入管理层的的朋友,也有同样的担忧。我记得我告诉他,别为此担心。你很棒。你是一位优秀的开发者。所以,成为一名经理不会夺走这一点。也许你的技能会落后一点,但如果你需要转换,你随时可以重新提升。但当你是经理时,这应该是你的主要关注点。这是我对他的建议。我
我希望我能听从自己的建议,但我发现我做不到,因为我说了。创造事物并擅长这一点是我获得很多自我价值的地方。但现在我参加了连续不断的会议,无数的消息飞来飞去,我只是开始担心,在我终于弄清楚让我快乐的东西之后,我却把它都丢掉了。我认为对 AI 编码工具的许多抵制都来自同一个地方。害怕失去长期以来定义你的东西。
人们正在反对夸大的炒作,确实有夸大的炒作,我明白这一点,但我认为这里还有一些更深层次的东西。当你努力培养你的技能时,当编码是你身份的一部分以及你获得价值的地方时,一个可能取代其中一部分的工具的想法非常具有威胁性。
但我想鼓励你做的是:至少为了一个学习实验,放下一些恐惧。将这些工具视为你需要熟悉的东西。把它当成你应该在一个副项目中探索的东西,值得花时间的东西。不是因为它们解决了所有问题,而是因为它们值得理解。如果你是一个建设者,这些工具,Cloud Code 或 AMP 或 Cursor,都是为你设计的。但要看到这一点,你需要克服这种恐惧,或者至少承认它存在。
因为当编码是你身份的一部分时,一个贬低它的工具,是的,这很难。但我猜我想用我冗长的方式说的是,如果你是一个建设者,如果你从中获得快乐,一旦你掌握了这些工具,你就会喜欢它。你的一些技能肯定会变得不那么有价值,这非常可怕。但其他的则比以前强大十倍,有价值十倍。这令人兴奋。
所以,当我从工程师转到管理层,然后离开那里从事开发者关系工作时,我发现自己越来越少编写代码了。DevRel 以不同的方式抓住了我的痒处。你知道,写作和制作视频,这是另一种创造性的建设性努力,有点不同,但我仍然可以编写代码并构建小型示例应用程序并展示它们。所以它有效,但我并没有像在产品团队中那样深入参与。
在产品团队中,我一直想跟上。我一直想成为最好的,所以我启动了副项目来尝试新工具,尝试新技术,或者最终构建一些在我想要在工作中做到的方式上经过打磨的东西,但我们只是没有时间,或者代码太旧而且很可怕,或者其他什么。但即使我在工作中编写代码较少,我仍然需要构建东西。老实说,我觉得它有点上瘾。这是一个反馈循环,你开始构建一些东西,然后你被卡住了,然后你试图弄清楚,然后当你做到时你会得到这种兴奋感,然后你想要再次这样做。
当我开始使用具有更强类型语言时,高潮和低谷变得更加尖锐。这,你知道,就像兴奋和沮丧。当我深入编码会话时,完全专注,忘记其他一切,这只是,这是一种很棒的感觉。
但说实话,这种上瘾可能会让人沮丧。你知道,我抽出时间在早上处理播客,进行编辑或设置采访或寻找故事。有时我喜欢它,但其他时候则不然。而且总是很容易去寻找一些随机的编码项目,并说服自己它会解决我的问题。我就是控制不住自己。我只是喜欢构建小东西。
这是一个奇怪的例子。如果你查看播客网站 corecursive.com,你会发现一个 /rankings 页面。在那里,你会找到列出其他编码播客中最受欢迎剧集的子页面。最佳 Python 播客、最佳 Android、最佳云、最佳 Linux。这最初是一个我曾经非常投入的奇怪副项目,你知道,分散我的注意力。我基本上有一堆 Bash 脚本,因为我当时试图提高 Bash 的水平。
老实说,它变成了太多的 bash。但我正在抓取播客的 feed,抓取 Twitter,查看评论,试图找到这些播客剧集,哪些是最受欢迎的,对吧?这将帮助我找到在节目中采访的嘉宾。但它有点不受控制了。在某个时候,我想,我应该把它放在网站上。最终,我用 awk 重写了它。老实说,我甚至没有检查结果。我不确定我是否使用了这个工具。
但它仍然存在,并且每天都在运行并收集指标。也许在某个时候我会尝试用 Python 重建它。因为这就是我喜欢做的。但现在,我们正处于这一刻。就像 2005 年,你是一位不错的象棋选手。不是特级大师级别,但你知道你的开局,你很不错,但你一直被象棋引擎击败。然后有人建议,如果你使用引擎来帮助你思考位置,但你做出最终决定,那会怎么样?
你第一次尝试时,会发生一些神奇的事情。引擎发现了你错过的技巧和策略,但你看到了它不太掌握的长期战略。所以,你们一起玩得比以往任何时候都好,比你们任何一个人单独玩都好。你不仅仅是将象棋引擎用作计算器,你正在与具有不同优势的东西合作。这正是我们现在使用编码工具的地方。
我们处于 2005 年的象棋模式,那一刻的发现,你意识到它不是人与机器的对抗,而是人与机器的合作。这些大型语言模型可能能够单次构建一些简单的東西,例如 React 待办事项列表,但要构建一些困难的东西,要在大型代码库中工作,要处理以前从未做过的事情,它们需要与经验丰富的建设者配对,后者可以指导它们,对吧?那就是你。你带来了关于需要构建什么以及应该如何构建的直觉,以及当某些东西出错或可能存在更好方法时的感觉,对吧?
你分解复杂问题的能力。人工智能带来了它的速度和模式识别能力,以及处理繁琐部分的能力。你们一起可以处理以前单独没有时间处理的项目。如果你是一个还没有使用这些工具的人,无论出于何种原因,我都希望你放下你的异议,并将其视为一个学习项目。不是因为你必须喜欢它,也不是因为它会解决你所有的问题,而是因为这是一项值得发展的技能。
因为关于学习项目的事情是这样的:它们可能会让人沮丧,对吧?当我开始在 Tenable 工作时,我一直都在使用 Windows。然后我的老板只是说,嘿,你将获得一台 Mac。所有开发人员都使用 Mac。所以这就是方法。但我是一个 Windows 用户,我没有说什么。我只是照做了。
我的手指多年来已经刻入了肌肉记忆。Ctrl+C、Ctrl+V、Ctrl+所有内容。现在突然变成了 command。我的小指不停地戳着 Ctrl 键,就像我试图穿透混凝土一样,事情没有奏效。在 Zoom 屏幕共享中,我会在所有人的注视下笨手笨脚地完成基本任务,按下错误的键,什么也得不到。对不起,我会咕哝着,我会感到沮丧,我似乎不知道自己在做什么。我的手指在我需要看起来很称职的那一刻背叛了我。
我的 MacBook 很漂亮,对吧?比我的旧 ThinkPad 好得多,但感觉就像戴着烤箱手套工作一样。但我现在无法想象会回去,对吧?学习 Haskell 也是同样的折磨。我花了几个小时使用 Parsec 构建这个用于解析日志行的漂亮解析器。这是几年前的事了。代码非常简洁优雅,看起来像诗歌。然后它会崩溃,因为它无法处理,你知道,在某个随机位置处理括号或管道,它会以某种完全无关的方式失败。
代码看起来很简单,但构建它却很难。在 C# 中,我可以在大约 5 分钟内组合一个带有名称组的正则表达式,但在这里,代码更漂亮,但调试它却是一个挑战。但这就是模式,当你认为“这完全是愚蠢的”或“我很沮丧,这为什么不起作用”或“我觉得自己变慢了”的时候,那就是你成长最快的时候。这很痛苦,因为一切都感觉笨拙且不可能,你开始怀疑自己是否真的取得了任何进展,或者只是在无缘无故地折磨自己。
但这就是学习的样子。这就是为什么现在是时候放下你的恐惧和沮丧,并投资一些技能来使用这些工具进行构建。把它当成刻意练习。你这样做是因为这项技能本身是有价值的,学习它感觉很好。它也让人感到尴尬和沮丧,就像学习新事物总是那样。但是的,如果你想使用编码代理,这就是我的做法。你不必听我的,但我希望你考虑一下,对吧?
特别是如果你对这些工具有强烈的反感,但你也是一个建设者。我只是认为这是你应该尝试的事情。选择一个好的工具。选择具有最强编码模型的工具。现在,这就是具有思考能力的云模型。然后确保你正在使用代理。使用 Cloud Code、使用 AMP、使用 Cursor 似乎非常流行,但有数百万个这样的工具。
是的,你将不得不花一些钱。你需要支付所有这些 API 调用所消耗的大量费用。但要投入一些时间来玩耍,因为我在 Hacker News 上看到的所有这些批评都来自那些没有花时间使用和玩耍这些工具并构建技能的人。如果你没有这样做,那么你的批评实际上并没有什么分量。因为是的,当你克服障碍时,当你积累了一些技巧时,甚至在那之前,这都非常有趣。
我会谈到我的一些想法,但首先,你知道,一些建议。你不能将这些编码代理视为某种神奇的 AGI,它会解决所有问题或让你一夜之间快十倍。它不是那样。把它想象成一个你正在学习使用的新的工具,就像从 Mac 切换到 Windows 或从命令式编程转向函数式编程或学习面向对象编程一样。把它当成一个学习新事物的机会。从小处着手,对吧?我喜欢把它想象成我正在与之配对的初级程序员。我和它交谈,它完成工作。它站在键盘上。
我做过的有趣的学习任务之一是选择一个你依赖但不太理解的库,克隆它的 GitHub 存储库,然后启动你最喜欢的代理并开始提问。
这是如何工作的?控制流在哪里?主要数据结构是什么?让它生成一些快速简便的文档,专门针对你想要理解的方式。风险很低,这是让你适应这种来回过程的好方法。它可以比你更快地探索代码库,然后它可以帮助你解释事情。然后你可以来回提问。接下来,在那之后,你知道,尝试一个小型项目,也许是你以前构建过的项目,但带有新的变化或使用你不太熟悉的新的语言。
不要指望大型语言模型处理所有事情。相反,把它当成一个编码伙伴,一些帮助你写作的东西,对吧?你们可以一起规划项目,然后处理第一步,然后是下一步。问它一些问题,例如,你能为此编写测试吗?
我们的想法是一次一步地前进,边走边学。从小处着手。让代理处理代码编写,看看它得到了什么正确的东西和什么错误的东西,然后提供输入并建立规则,你就会变得更好。与大型语言模型一起工作就像与一个在某些方面很聪明而在其他方面一无所知,有时与你口味不同的人配对。存在学习曲线。掌握这些工具的人是那些已经对什么有效以及哪些工作流程有效形成了直觉,并学会利用优势同时避免弱点的人。
但要做到这一点,你必须给它一个机会。让我告诉你我最近正在做的一个项目。我想构建一个程序,它可以获取 YouTube 视频,下载 MP4,提取音频并生成成绩单。然后,你知道,我通过抓取图片(视频本身的关键图像)来创建该视频的博客文章版本。
所以我打开了带有 AMP 的 VS Code 侧边栏,并开始口述。我实际上使用 MacWhisper 对提示框进行语音输入。我会说:“我想下载 YouTube 视频并生成成绩单。然后我想识别关键视觉效果并在该文件中记录它们。”是否有 Python 原生方法可以做到这一点,或者我应该使用我通常使用的 YouTube 下载程序?我们进行了一些来回交流,我胡言乱语了 15 分钟,并得到了关于不同工作方式的反馈。有时它会忽略大局,
但是的,我们一起进行软件设计。我把它用作高级橡皮鸭。是的,你可以看出我确实将这些代理拟人化了。我只是和他们来回交谈。对我来说,这就是构建东西的方式。所以我们让第一个版本工作了。这是一个笨拙的一次性脚本,但我需要添加各个阶段。所以我们必须将其转换为一个由文件组织的合适的 Python 项目。你知道,我在每次重大更改后都会提交,这样如果事情出错(有时会出错),它就可以回滚。
但整个过程与使用 Devon 或这些工具(你可以在其中组合一个 GitHub 问题,准确描述你想要什么,然后让它运行并完成工作)的感觉非常不同。老实说,我从未使用过这些工具之一,而且我不太信任它们,因为我的构建经验是迭代式的。我喜欢这种来回互动。我想以某种方式构建,事实上,我不得不构建一堆 lint 脚本,以便生成的代码能够按照我想要的方式输出。
但是的,当我们构建时,我遇到了 Gemini 的文件大小限制。你只能发布一定大小的文件。任何更大的文件都需要辅助 API 上传。然后你向 Gemini 发送文件引用。
所以我们让它工作了,但随后我们必须添加 FFmpeg 来重新编码视频以降低分辨率,这样很多时候我们甚至不必进行辅助上传。并且有来回互动,有测试,有添加新条件,并且 AMP 会出去挖掘文档,这实际上非常有帮助,因为它会出去尝试找到相关的内容。
从某些方面来说,构建这个东西感觉花了很长时间,因为有很多来回沟通,但实际上它很快就完成了。如果靠我一个人,我永远也完成不了。我没有那么多时间。但有了AMP,我可以快速完成那些枯燥的部分。当然,仍然有很多令人沮丧的时刻,比如,“哎呀,你忘了这个”,诸如此类。但对我个人来说,这些来回沟通并不是什么大不了的事。这只是沟通,只是结对编程。
整个过程很有趣。我能听到所有的反对意见。如果我不得不不断地指导它们,为什么不自己写呢?我觉得这种批评,并非完全错误,只是有点忽略了重点。它忽略了这段经历的真实感受。它很快乐,很快,最终得到的代码比我自己写的更好。
我听到的另一个抱怨是,为什么要费这个劲,对吧?如果AGI应该如此先进,甚至可以取代人类,为什么我还必须学习所有这些技巧才能使用它?为什么还要投入时间?如果它真的那么好,不应该更简单而不是更难吗?
但说实话,这些只是工具。这些不是AGI。如果是AGI,你就不需要费心去调整提示或工作流程。你可以直接说,“你看我使用这个软件”。或者“你能把Linux内核的部分代码重写成Rust吗?” AGI会弄清楚并向你发送一个pull request。或者“这里有50个视频,人们都卡住了。我们能否消除一些障碍?查看这些视频并找出性能问题。”
但我们还没到那一步,对吧?这些工具可以提升我们的工作效率,但前提是你愿意去尝试、学习、迭代、指导它并投入工作。在你这样做之前,你必须克服你自己的恐惧和偏见。这是Hacker News上的一个例子。有人抱怨像Claude这样的代码生成器效率低下。他们让Claude编写一些代码来规范图像方向。你知道有时你用手机拍摄的照片,实际上是侧着的,但它们使用标题来表示方向相反。而
一些照片程序会忽略该标题并将其侧向显示。因此,他们想要一个程序来修复这个问题。所以他们让Claude来做。他们说第一个解决方案很笨拙。所以他们指出了问题,Claude又尝试了一次,但这个解决方案显得脆弱。经过两轮来回沟通后,他们才最终得到了一个他们喜欢且运行良好的版本。他们的结论是,这些工具只会导致不太理想的解决方案。你必须介入并指导它们。这确实是很公平的批评,但说实话,两轮就能构建出并非
糟糕的东西。也许你的期望太高了。或者,你知道,也许你可以解释得更清楚一些。但这些工具不是魔法。它们不会在第一次尝试时就解决每一个问题。我认为这更像是与队友一起工作。你需要来回沟通。你需要改进你的工作内容。你需要合作才能获得良好的结果。
我的意思是,我反复修改了五次甚至更多次,才确定了用于特定解决方案的最佳结构。这并不是缺陷。这只是构建事物的工作方式。如果我和同事一起设计东西,也会发生同样的事情。但这些工具的真正风险是技能萎缩。这确实让我担心。以我之前提到的视频转录程序为例。我不太了解所有代码。我当然不精通所有代码。
与此同时,我自己编写的代码,我却了如指掌,至少在我第一次完成它的时候是这样。我记得每个部分是如何使用的,以及我是如何构建它们的。但是我没有编写或与代理一起编写的代码,我对它的了解深度就不一样了。我已经阅读并审查了大部分代码,但肯定有很多代码我没有看过。有些测试我根本没有看过。我们只需要测试这个条件。所以是的,技能萎缩是一个真正的风险。
但再一次,我觉得如果你把它当作一个学习项目,而不是专注于现在提升我的Python技能,我正在学习一项新技能,学习如何使用这些工具来构建东西,与编码代理一起工作并完成任务。当我这样看待它时,我就不会那么担心了。如果我失去了优势,也没关系。我随时可以回到手工编写Python代码,我仍然有时会这样做。没有什么能阻止我。其他的抱怨,对我来说并不那么真实。如果你在使用编码代理完成实际工作时遇到困难,
那可能是一个技能差距。没关系。与其责怪工具,不如尝试改变你的视角。我错过了什么?我如何才能更好地使用这些工具?其他开发人员正在构建真实的东西,所以值得问一下,你知道,我还能做些什么不同的事情,这是否值得?因为你可能无法评估事情,除非你真正了解它们是如何工作的。这些工具并不完美,感到沮丧或想要放弃或明年再尝试时它们变得更好,这完全是公平的。
但我有点反驳,对吧?这些东西是新的。老实说,用它们来胡乱尝试很有趣。我认为值得探索。在ChatGPT的深度研究功能出现之前,我使用Windsurf作为当时的编码代理,构建了自己的研究助手。
因为我为播客准备采访材料时,总是要创建一个关于某人职业生涯的时间表,你知道,他们在哪里上学,他们的工作是什么,他们的项目是什么以及他们的职业转变。我会手动搜索他们的博客文章、LinkedIn历史记录和公开作品,并将他们所做的事情拼凑成一个时间表。这很有用。它对于指导采访非常有用,但也很费时。
所以我构建了一个网络应用程序来自动化此过程。它会对这个人进行谷歌搜索,找到他们的博客,蜘蛛式抓取链接,尝试查找他们所有的帖子,跟踪链接,评估它们是否相关,寻找他们所做的采访,转录它们,下载所有这些文档,然后尝试根据这些文档构建时间表。当我第一次认真使用它时,是为Hatress的采访准备的。
那些家伙非常注重细节,他们准备了自己构建Hatres的时间表。我发现了一些他们没有包含的内容,我认为它们可能是幻觉,但事实并非如此。确实发生了一些事情,他们只是忘记将其包含在他们的时间表中。这令人难以置信。我节省了大量工作,而且它实际上做得比我更好。但同时,构建该工具也很有趣。与编码代理一起工作具有一些我始终喜欢的构建的令人上瘾的特性。这些反馈循环,这些循环
沮丧,然后突破,这使得编程令人上瘾。我想,甚至它们或然性的本质也可能使它更令人上瘾。可变的强化循环。但也在培养新的技能,对吧?我已经学会了不要对过程进行微观管理。当我与AMP一起规划时,我会使用听写功能并长时间说出各种担忧,然后发送它并获得一些反馈,然后我们进行迭代,并一起进行一些设计。所以我已经建立了自己的诀窍。听写绝对是其中之一。
是的,我只是在这里分享我的一些经验,希望如果你对此表示怀疑,你可能会尝试一下这些东西。或者如果你正在收听并且你并不怀疑,但你的同事怀疑,也许你可以与他们分享这个。我不知道。
但我经常做的一件事是将编码代理用于小型自动化机会。GitHub Actions对我来说总是很痛苦,或者通常是构建。所以我喜欢,你知道,让编码代理进行更改,或者如果我自己进行更改,则要求它审查更改并在提交并发送之前查找任何问题,因为构建反馈循环非常糟糕,对吧?所以如果我能尽早发现问题,就能节省大量时间。
这就像获得PR审查,但以比等待构建运行(有时很慢)更快的方式进行。
我并不总是用Python编程。这是相对较近的事情,但我一直在大量使用Python,因为代理与它配合得很好。但我也发现,我一直喜欢的所有静态类型和代码检查在与这些代理一起工作时也确实是一个关键。现在,我将所有工具都用于我的代码:格式化、代码检查、类型检查。这样,当LLM进行更改时,所有内容都会通过代码检查步骤,我们就能发现问题。
我甚至使用重复代码查找器,因为LLM有时会尝试重新实现某些东西,因为它们没有看到其他地方存在现有的解决方案。重复代码查找器对于指导它非常有帮助。我最近最大的技巧,最大的改进是进行大规模重构。以稍微复杂于标准重构的方式更改常用内容的签名。
我会手动完成第一个,一旦我们完成了第一个,我可以说,“好的,现在做剩下的。”它存在于许多文件中,然后需要更新调用站点,或者还有八个这样的实例。它会启动并找到它们并完美地进行所有这些更改。使用AMP时,我使用子代理,它可以非常快速地完成此操作。这太好了。对我来说,最近的一个重大认识是,这些工具不仅帮助我更快地编写代码,而且改变了我能够处理的项目规模以及我思考重组事物的方式。
当然,它们也是或然性的,所以它们也可能弄得一团糟。我认为我们将看到AI赋能工程师的反模式,即发送重写三分之二代码库或其他内容的PR。我们仍然需要有针对性地进行更改,即使我们使用这些工具时感觉更强大。但是,扩展的雄心壮志确实是一件真实的事情。
好的,另一个假期故事。去年圣诞节,我和考特尼在墨西哥。我们在尤卡坦半岛的一个全包式度假村。非常好。我和她一起坐在泳池边的一个沙滩床上,手里拿着冰镇饮料,你知道,笔记本电脑放在我的膝盖上,她在读一本巨大的罗伯特·卡罗的传记。我试图反向工程Descript的文件格式,以便我可以通过编程编辑我的播客。
三个小时后,我找到了Descript存储其项目文件的位置。这是一个包含许多文档的zip文件。然后我们对文档进行更改,重新加载项目,测试哪些内容会中断,哪些内容不会中断。
但有些过程涉及理解Descript自身代码中模糊的TypeScript,我独自一人永远无法理解这一点。但LLM可以阅读它并在此处和彼处获取相关细节。我意识到我正在尝试一些我以前从未尝试过的事情。不仅仅是因为它在技术上雄心勃勃,因为其中一半是用我不太使用的语言编写的,并且分析故意使其难以阅读的代码。
但当我想出可以使用Descript中的此备份和还原工作流程时,取得了突破,对zip文件进行更改,然后从备份还原项目。然后,砰的一声,我的编辑就到位了。
但我并没有陷入解析所有这些JSON文件和在正确位置编辑内容或破译疯狂函数的繁琐工作中。我正在更高层次上工作,并告诉Windsurf具体的事情。我们只想依赖我们需要使用的JSON文件的部分。因为如果他们更改格式更改,我们希望我们的编辑保持稳定。
所以我们不想解析整个文件。但就在那时我明白了。我有点像编码架构师。我一直对这个角色持怀疑态度。你知道,你听说过那种只描述事物如何工作的企业架构师。但在这里它起作用了,因为LM正在做所有注重细节的繁琐工作。我正在描述,你知道,我认为最好的方法是什么。
我们从未让一个很好的自动化测试循环工作,因为Descript是UI驱动的,而我必须通过UI进行此备份和还原。所以重新加载,有点手动。最终我分心了,我从未完全完成这个项目。但是躺在泳池边,迭代这个奇怪的实验,而考特尼在看书,我意识到,你知道,有些事情发生了变化。我在不同的层次上思考。我正在探索一个有趣的问题。而且
只是丢弃行不通的方法,因为这些工具消除了足够的摩擦,我可以专注于问题的这些非常有趣的部分。我有时讨厌那种不知道自己在做什么的不舒服的感觉。你知道,当你第一次开始使用某些东西时,这种焦虑就会出现。就像我开始使用Mac或学习函数式编程时的那种感觉,一切感觉都很笨拙,或者你陷入了一个令人沮丧的反馈循环。但我已经学会认识到这种不适感通常是我成长的标志。
你知道,当我开始更认真地使用Python时,我一直试图将我的Scala习惯带过来。你知道,模式匹配和不可变数据结构等等。其中一些翻译得很好,但其中一些只是与语言对抗。但是与LM一起工作,我可以更快地放弃这种抵抗。与其强迫使用旧模式,不如开始询问,例如,“那么,用Python的方式该怎么做呢?” 该工具可以帮助我发现我独自一人永远找不到的习惯用法。
我仍然有点喜欢用我自己的独特方式使用Python。我不太喜欢这些带有大量状态的大型类。我喜欢有一些已知的数据结构可以传递。但是当你进入一个新的领域时,有一个母语人士可以教你语言的节奏,这是很有帮助的。因为这些代理背后的LLM理解如此多的不同技术,所以当你在一个新领域开始工作时,它们可以成为一个很好的向导。
就像,还记得你第一次开始编码时,一切都是新的,你偶然发现了一些功能或库,它突然让一切都变得清晰了吗?与LLM一起工作使这更容易,对吧?它带回了那种发现感。我的意思是,也许只是我,但感觉……
很高兴总是有这样一个合作伙伴在那里,他愿意探索奇怪的想法并尝试不同的方法,或者只是从一个新的角度向我解释事情。它们使整个过程感觉更轻松一些,更不像是在浏览文档并寻找描述我遇到的问题的准确内容。但是,如果这个整个探索过程对你没有吸引力,我理解。也许你喜欢你当前的工具和工作流程,
也许你非常擅长你正在做的事情,而代理远不如你,所以它们只会减慢你的速度。也许你现在只想专注于其他技能。这完全没问题。并非每个人都需要始终处于一切的前沿。这很酷。我的朋友和之前的播客嘉宾克里斯·克鲁泽告诉我,我是反反AI的。老实说,我觉得这很贴切,对吧?有些人不停地吹捧这些工具。其他人则强烈反对它们,并说它们什么也做不了。
然后像我这样的人,既不是啦啦队长,也不是末日预言家,而是务实地构建事物并获得很多乐趣。我认为这些工具很有用。我还认为我来自一个奇怪的地方,对吧?在近20年的日常编码生涯之后,我每天编写代码的时间不像以前那么多了。这让我处于一个很好的位置,可以看到这些工具如何提升我们的工作效率。
因为老实说,你不需要成为天才就能在Python方面胜过我。我从来都不是Python专家。但这让我更容易看到他们带来了多少帮助。如果你不同意我的观点,这完全没问题。并非每个人都需要将编码代理用于所有事情。我只是在这里为任何好奇和不确定的人发声。因为我的说法是,尝试一下这些工具。炒作和抵制之间存在很大的差距。
但尝试它们是弥合差距的第一步。这是一个构建事物的激动人心的时刻。我现在所做的编码与我担任全职后端Scala工程师时大不相同,你知道,当时的工作是查找容器漏洞。但我仍然喜欢编码,它非常有趣,而且这些工具存在,而且它们不会消失。
当我想到我的职业生涯时,对吧,这感觉就像另一次转变。从那个在基本程序上工作的孩子,然后是VB.net,然后是在大学学习面向对象的编程,然后从Windows转向Mac,从命令式编程转向函数式编程,从个人贡献者转向经理,然后又回到构建事物。每一次转变一开始都感觉很尴尬,但后来又感觉自然、必要且有趣。
现在我觉得我正在运用我已拥有的许多技能。分解问题,理解系统,调试错误,知道某些东西感觉不对劲或者只是错误的方法。使某人擅长构建软件的核心内容并没有改变。只是现在你可以拥有这个强大的合作伙伴来帮助完成这个过程。同样的好奇心和同样的动力总是让我兴奋地了解事物是如何工作的以及如何构建事物。这只是一个新工具。
但创造事物的基本满足感仍然存在。就像那没有改变。我是否担心某种AGI突破将会出现并取代所有分析性思维?是否会迫使我们重新思考关于就业和世界工作的方方面面?我的意思是,说实话,有点担心。这些AI似乎越来越聪明了。但那是另一天要解决的问题。现在这些工具存在,它们功能强大,而且使用起来非常有趣。我可以花时间担心过时,也可以花时间构建我从未想过有时间构建的东西。
我可以抵制这些变化,也可以倾向于它们,看看它们会把我带到哪里。对我来说,我想做什么很明显。我想构建事物。这就是为什么我说,如果你好奇,从小事做起,选择一个副项目,把它当作一个学习实验,玩得开心。你可能会发现,以这种方式工作可以满足你最初吸引你进行编程的那种渴望。或者你可能会决定它不适合你,那也没关系。但如果你像我一样,如果你仍然从弄清楚某些事情中获得兴奋感,如果你仍然喜欢杂乱的想法结晶成某种运作的东西的那一刻,那么这可能值得探索。
因为归根结底,我们仍然是建设者,对吧?我们仍然是那些看到问题并想要解决问题的人,那些想象不存在的事物并想要弄清楚如何使它们成为现实的人。工具已经改变了,但快乐没有改变。它仍然是一个伟大、有趣、迭代的过程。老实说,这太棒了。这正是我希望看到的。
这就是节目。这一集有点不同,只是我分享了我一直在思考的事情,而且我知道很多人也在思考。无论你是否对这些工具持怀疑态度或已经在使用它们,如果这个节目与你产生共鸣,或者让你思考任何事情或改变你的行为,希望只是尝试一些事情并享受其中的乐趣。我很想听到这些。而且……
如果你认识某个抵制尝试使用这些工具的人,他们是一个伟大的建设者,也许可以分享这一集。也许他们有更细致的看法,但请与他们分享。直到下次,非常感谢您的收听。