Transcription
欢迎回到 Free Code Camp 播客。我是 Quincy Larson,free codecamp.org 的老师和创始人。今天我们与 Robbie Russell 对话。他是一位软件工程师,创建了流行的开源项目 Oh my Zshell。他还经营着自己的软件开发机构,几十年来一直在此帮助像耐克这样的公司构建项目。在我们开始之前,Free Code Camp 刚刚发布了哈佛大学 CS50 的最新版本。这是一个由 David Mailen 博士教授的完整大学课程,我之前曾在此播客上采访过他。学习用 Python 编程。这个版本的课程还将教你函数、条件语句、循环、库、文件输入输出等基础知识。你将学习数据库。你甚至会学到一些 C 语言,以及大量的计算机科学概念。如果你想深化你的技能,特别是你的概念知识,这是一个绝佳的起点。这是 Free Code Camp YouTube 频道上的一个 25 小时课程。听完播客后,请务必查看。Free Code Camp 还发布了一篇很棒的文章,可以帮助你弄清楚从“哦,我完成了哈佛 CS50。嗯,接下来我该做什么?”这样的地方该何去何从。嗯,这个教程将帮助你从 Free Code Camp 上看到的初学者项目过渡到构建解决现实世界问题的真实应用程序。这是一篇很棒的读物。我强烈推荐它。阅读大约需要 40 分钟。你可能听说过 Open Claw,或者你可能听说过 Open Claw,或者,我想是 Claudebot 或 Moltbook。在过去的几天里,它已经经历了许多不同的名称。本质上,它是一个强大的代理工具,而且它很危险。你不想直接在你的系统上运行它。你想控制它,因为它非常强大。嗯,但本质上,你想要一个自己的消息网关,让你能够与外界交流,让你能够通过 Discord 等平台自动化数字任务。本教程将向你展示如何设置它。嗯,然后你将学习安全实践,例如实施基于 Docker 的沙箱,以在你的代理代表你执行复杂工作流程时保护你的主机系统。这是 Free Code Camp YouTube 频道上的一个 1 小时课程。我们还发布了关于蓝牙协议的一些重大改进、新功能、三个主要升级、被动扫描、绑定丢失原因的概述。本质上,你可以弄清楚发生了什么以及服务 UYU ID 的传播。如果你对网络工程或物联网(IoT)风格的设备感兴趣,这绝对值得一读。我们本周的歌曲。我非常喜欢这首歌。2009 年澳大利亚乐队 Miami Horror 的一首热门歌曲 Sometimes。我喜欢吉他的层次感。还有一种很棒的,就像 Peter Hook 那样的 New Order 风格,或者,你之前做的乐队叫什么?Joy Division,有点像,就是那种非常酷的 jangly 吉他riff,还有这种史诗般的合成器声音和非常令人振奋的低音线。这是一首完美的歌曲来开始你的一天。我在描述中放了链接。我想鼓励你加入我们每月捐赠给慈善机构的 10,221 位非常冷静的人。Free Code Camp 是一个慈善机构。你可以在 donate.freeccoamp.org 上支持我们的使命。你可以让这个播客成为可能。通过你的支持,你可以让 Free Code Camp 所做的许多其他事情成为可能。你还可以获得我身上这件很棒的 Free Coke Camp T 恤,并自豪地代表社区。20 美元,美国境内免费送货。如果你在美国境外,只需从资产库中获取我们的资产,非商业用途免费,如果你只想拥有自己的 Free Cocam T 恤。现在让我们和 Robbie Russell 谈谈。正如我之前所说,他创建了开源项目 Oh my Zshell,拼写为 ZSH。嗯,它是一个用于管理你的 Zshell 配置的框架,用于你的命令行终端。我用它。我认为 Free Code 团队的每个人都用它。它非常有用,而且十多年来一直非常有用。Robbie 还是 Planet Orgon 的首席执行官,这是一家他于二十年前创立的软件开发咨询公司,他曾为许多不同的公司工作过,尤其是在西北太平洋地区,比如耐克。嗯,我们将讨论“不要再发生”的文化如何会使新代码的生产部署花费很长时间。Robbie 经营着一个名为 Maintainable 的播客,他一直专注于可维护性。所以他对这个问题有非常细致的看法。嗯,他还有一些关于如何减少你的团队对一个已经工作多年并且知道一切的开发者的依赖的建议。所有那些隐性知识都会随着那个开发者的离开而消失。你如何减少你的依赖?他还有很多关于 LLM 工具的细致的观点,以及它们如何加速他的工作流程。一如既往,我们是一个不炒作的播客。我们将为你带来你可以应用的有趣见解,而 Robbie 带来了很多。Robbie Russell,欢迎回到 Free Code Camp 播客。很高兴你回来,伙计。>> 我很高兴来到这里。非常感谢你再次邀请我,Quincy。>> 是的,我想从你的一句话开始,我认为这句话很深刻。我们作为开发者的职业生涯大部分时间都花在别人的决定中。你是什么意思?嗯,这有几个方面。大多数软件开发人员更有可能在处理已有的代码。就像你每天上班,打开你的代码编辑器,无论你用什么,Vim、VS Code,随便什么。那里有一堆代码,除非你今天开始一个全新的项目,并且你是少数幸运的人之一。大多数人被聘用去一家已经写过软件的公司,现在他们有预算,因为他们有某种产品或功能需要招聘人员。所以,你将继承你的前任以及我认为重要的部分是你过去的自己所做的所有决定、时间和精力以及细微之处,你可能在六个月前做出的决定。我不知道我们的身体多久会自我更新一次,细胞再生,但我们和几年前的我们不是同一个人。所以,日复一日,我们不得不工作在所有以前在这个软件上工作过的人所做的决定的限制下。除非你乐于从事全新的事物,即使那样,你仍然在处理你为该特定项目选择使用的框架或编程语言的限制。并且必须在这些限制内工作。所以,有一些界限你必须考虑。这就是我的意思。所以你不断地生活在其中,你说,“好吧,我该如何应对?我该如何发展它?我们如何根据我现在或我们团队今天获得的新信息来调整和塑造它。”这就是我思考它的方式。我职业生涯中的一个重要主题是意识到我花了很多时间,我的公司也花了很多时间来继承很多决定,无论是技术决定、用户界面决定、项目管理决定、商业决定,比如,“哦,我们不做这个部分。”因为时间或预算、金钱等原因,我们必须削减这里的预算来发布这个功能。我们必须遵守这些限制。这不一定是坏事。嗯,这只是现实,我认为这适用于我们所做的几乎任何事情,就像在你家里一样。总有可以不断改进和完善的事情。你说“我会做得不同”,我觉得这有点像推卸责任,而且不像“我们现在能做什么?”就像我知道我需要改进房子的侧面连接前后院的门。嗯,有一个螺丝松了。已经六个月了。我想,我必须更换整个门,还是只需要更换那块木头?我还没有花足够的时间谷歌搜索这个问题或向 PT 寻求建议,但我需要弄清楚这个问题,就像有人决定以某种方式建造它一样。我想改进它,修复它。我该如何处理这些限制?这就是我们在软件工作中日复一日所做的。>> 是的,作为一名拥有二十多年经验的专业软件开发人员,并且与大量开发人员合作过,你认为大多数开发人员将多少时间用于维护现有代码,而不是去从事一些令人兴奋的新项目,比如“老板给了我绿灯。我可以自己决定如何架构它,以及我想引入哪些当代工具,你知道吗?大多数开发人员在他们的职业生涯中会看到什么样的比例?”>> 如果不是 99.999% 的比例,我会感到震惊。我是说,维护。是的,这是在处理。嗯,我想,也许如果只是,如果你能从事一项建设性的工作,然后我们可以深入探讨细微差别,比如你正在构建一个尚不存在的新功能,具有新的需求集,而你仍然必须在现有软件的限制内工作。嗯,所以,我认为从这个角度来看,这取决于你在公司中的位置。所以,我可以告诉你,维护,无论是,我认为也许区分维护任务,就像只是打理,照顾花园,除草,处理技术债务,就像>> 我认为一些公司会试图标记,嗯,我们将花费大约 20% 的时间来做这件事,80% 的时间来处理新事物,但通常即使你在处理新事物,你通常也会说,我正在给这个页面添加一个新按钮,或者几个新的,我们需要这个下拉菜单,如果这些东西被选中。所以你不是在构建一个全新的东西,你只是在附加东西,或者移除一些东西,所以你只是让它变得更复杂,因为我们知道得越多,我们就会做得越多。所以,我认为从这个角度来看,这是一个很难回答的问题,因为我不知道你如何定义维护与新的绿色地带项目。但只是,我认为,然后人们会腐烂,一些组织会轮换维护团队,或者无论你,你知道,你,你将在接下来的两周内提供支持,然后团队的其余部分将致力于新功能等等,或者,但你可能只是在处理错误,而这些也是需要处理的重要事情。所以,我不,我认为这在每个组织中都会有所不同,这是底线。>> 是的,也许定义是创建一个新的仓库,因为你写过一些关于这个的东西,很多公司会有大约 50 个仓库,而这些仓库并不一定分布在,你知道,10 个工程师,每个人拥有大约 5 个仓库,或者类似的东西。不。维护大量分散的项目,其中许多曾经是绿色地带项目,但多年来可能已经成为需要支持和维护的遗留项目,实际的动态是什么?>> 或者它们也被遗忘了。嗯,这确实经常发生,尤其是在大型组织中,总是有,我认为,哦,是的,让我们启动一个新的仓库,处理一个新项目,但是那些项目的拥有权并没有,不一定改变。我是说,它会改变,因为没有人拥有它。嗯,我认为这是相当常见的事情。但是,我有一个关于公司和团队决定何时开始做事情的看法,比如,什么时候你决定在你的私有组织内启动一个新的仓库,比如 GitHub 或类似的东西。我认为版本控制是很好的。我认为人们对处理一个全新的小东西感到兴奋。它解决了小问题,我认为这很棒。我认为我们并不总是擅长在这些东西不再被使用时或当那个人离开时将其存档。所以,有人会查看仓库列表,然后,你知道,公司会来找我们,他们会说,“有 80 个仓库,但有 60 个在五年内没有人碰过。”那么它们还在使用吗?它们部署在某个地方吗?有很多事情需要弄清楚。它们只是被克隆自其中一个吗?它是被拉入的 get subm 模块还是什么?它只是一个 gem 的 fork,有人需要通过 gem 来获取,比如 Ruby gem,所以我正在使用它,但比如你有一个 node 包或者类似的东西,你需要做一些事情,你发现了一个 bug,在你的,所以一些公司会直接 fork 这个项目,对那个第三方库进行一些修改,这样他们就有自己的版本,同时等待官方项目接受可能永远不会发生的 pull request,但至少他们让它对他们来说起作用了。所以,这些可能是你现在需要负责维护的仓库。嗯,这些可能会出现在你的,你知道,你的 package.json 或你的 Ruby gem 文件,gem 文件等等。所以,嗯,我不知道我是否回答了你最初的问题。>> 是的。是的。但基本上,有很多仓库基本上是未知的,我经常听到,如果你写的代码超过 6 个月了,而你没有回去看它,那几乎就像你必须用全新的眼光去看待它,并试图重新学习它为什么是这样构建的,也许你有一些模糊的记忆。但它很难,嗯,公司积累了这些仓库。它们积累了执行特定功能的服务器。它们积累了那些你一直在等待某个主要版本发布的项目的 fork,或者你需要自定义一些东西,而你一直在等待赶上。嗯,你积累了,很多这都被称为技术债务,更笼统地说,是一堆相对未维护的项目,当然,员工也会流失。人们离开公司,他们是唯一拥有隐性知识知道它是如何运作的人,现在有一大群人必须进行一次代码探险,试图法医式地弄清楚它为什么是这样架构的。对吧?所以,你经常会遇到这种情况,而你的机构,据我所知,你的软件开发咨询公司专注于帮助公司进入并基本上振兴休眠的仓库,或者弄清楚什么需要关闭,什么需要重写。当然,你曾说过,我将引用你的话,“重写并不总是进步。有时它们只是忘记我们已经学到的东西的一种昂贵方式。”你能详细说明一下吗?比如,以及重写的愿望。有一种倾向,就像人类一样,认为“我现在不知道我所知道的,我认为我们可以现在就更简单、更快地做到这一点,而不是处理问题。”我之前提到过我房子侧面的门,比如“哦,也许一个新的门会更容易。”但就像在软件中一样,我认为我们把它看作是一个可塑的东西,就像“嗯,它足够便宜。”我们可以深入研究 AI 是否会改变这种观点,但我们常常低估了构建正在运行的软件所付出的复杂性、时间和精力,比如,在一个组织中生产。所以,你可以谈论旧的仓库,以及那可能是一种不同的类别,但我们发现的一件事是,公司会,我们会达到一个点,那里有一个,我去年写过关于这个的文章,它就像一个技术采用的时间线,比如,早期采用者对一项技术非常兴奋,比如,让我们以框架为例,或者编程语言,比如,他们非常兴奋,无论出于何种原因,公司决定他们将构建这个项目,也许是 15 年前从以前的东西重写而来的,那也很有可能是一种情况。但让我们说这是一个全新的东西,有人说,“好吧,今天有什么新的热门技术可以使用?”然后发现很多人对这项技术非常兴奋。他们开始构建东西。那些早期采用者,他们还在那里,然后它找到了产品市场契合度。你有了客户,或者你在组织中找到了一些用例,如果它是一个内部应用程序,你只是在组织内部使用它。嗯,那些项目是我们最喜欢的,说实话,就像内部运营工具一样。但是当那些项目,你知道,你花了一段时间来处理那些项目,然后到某个时候,它开始变得像,“哦,我们需要更多的人来支持它。”所以你开始招聘和招募人员来公司工作,然后太好了。嗯,那些人就像,你知道,第二波或第三波进入项目的人,他们可能不一定总是和早期采用者一样的人。到某个时候,一些早期采用者对新技术的兴奋程度也存在,他们说,“好吧,我们不会重写这个。”然后他们就继续前进,帮助组织用一项新技术启动一些全新的东西。与此同时,那些被雇佣的其他人还在维护和处理项目,他们喜欢它。现在,你快进五年、七年、十年。你继续引进那些进入这个行业的人,因为他们对这个行业感到兴奋,或者是因为在软件行业工作的经济利益,以及他们感兴趣的技术。太好了。他们不喜欢它,不是因为他们有和早期采用者一样的大脑化学反应,他们喜欢在新想法上 tinkering 和玩尖端技术。他们只是说,“哦,这真的很棒,我喜欢使用技术。”然后你引进的人,公司最终会雇佣那些非常好的程序员,他们可以使用任何编程语言,并且可以应用这些技能。所以,到某个时候,你会达到一个点,有一群人说,“回到早些时候的观点,你生活在别人的决定中。”他们说,“嗯,周围有所有这些新的技术,感觉我们有一团乱麻,还有一些技术债务,还有复杂性,我们还有所有这些奇怪的变通方法。如果我们能使用人们似乎更兴奋的新东西,那会不会更容易?”因为如果我能加上我使用过这些其他技术,那对我的简历来说也会很好看。不是说我在找新工作,只是为了职业发展。我觉得我现在可能在处理旧技术。所以,这最终成为组织面临的一个问题。这会播下种子,人们将停止担心和投入大量时间来倡导改进你现有的状况,因为有一种紧张关系,嗯,也许,也许有一天我们会重新做这个。所以,为什么,而且他们不是故意这样做的,但就是有一种,嗯,为什么要在乎照顾事情,如果我们可以在一两年内建造一个新的,一旦我们获得预算批准。所以,我们的业务已经进入了这些情况,并说,“等等,这对公司有利吗?”无论如何,让我们摆脱职业发展方面,是的,这是一个公司需要考虑的重要事情。但是,同时,公司花了钱开发软件,你希望它尽可能长久地运行和生存,因为这是我们最好的,我们应该成为生态系统的良好管家,软件和他们过去的投资以及他们未来的投资。作为软件开发人员,我们的工作就是让软件保持运行,并能够继续对其进行更改,让我们的行业专注于,我的意思是,我们的商业模式一直专注于帮助团队现代化他们现有的技术栈,尽管这可能不那么光鲜,但可以给他们第二次机会,让他们能够继续投资于这些项目,因为软件重写的诱惑总是存在于每一个项目中。而且,我认为,一旦公司说我们不会重写这个项目。那将不会发生。所以,我们进来和公司谈话,以及我指导人们的经验是,就像,嘿,你有一个小团队,就像,让我给你这个。我将提示你思考一件事。让我们假设这是你职业生涯中最后一次有机会工作的软件项目。今天你会做些什么来改善你在这个项目中的软件开发人员的生活?你可以离开,是的,但让我们只使用这个界限。你现在可以开始做什么?人们会立即开始思考,哦,好吧,我猜如果那是情况,好吧,让我们,如何修复它?让我们开始选择我们应该开始改进的事情。然后你开始建立一些动力,并在改善你在软件项目中的开发人员的生活质量方面取得进展,你可以开始看到并建立一些新的兴趣。但有时你也需要引进外部人士来帮助你提醒你,比如那些对技术感到兴奋的人。不,不,不,不。这个软件技术今天还在运行,人们还在用它构建东西。它有很长的保质期。人们会争辩说,比如,关于 Cobalt。好吧,但我觉得对于 Web 软件技术来说,在过去的 15 年里并没有发生太多变化。我认为从根本上说,我们增加了大量的复杂性。我们可以,我不想深入讨论语言或框架,但总之,这就是我的意思。>> 好的,这非常有帮助,我将尝试解读你所说的一些内容。首先,潜在的重写幽灵会影响人们的判断,并分散他们对现在和这里的注意力,比如,我们现在要用这个软件做什么?我们要用我们的花园做什么,让它现在可以合理地居住,而不是神奇地说,“哦,我将在几年内搬到一个不同的房子。”所以,这似乎影响了很多人对实际维护软件的乐趣的看法,因为他们只是觉得,“嘿,有什么意义呢?”你知道吗?我,我,我就像在修复泰坦尼克号沉没时的时钟。谁在乎这个时钟是否准确呢?嗯,这是我最喜欢的泰坦尼克号场景之一,当我小时候看的时候。不是说我是一个巨大的粉丝,但那是我唯一一个多年来一直留在脑海里的场景,就是那个家伙检查他的怀表并更新时钟,即使船正在下沉。没有人关心。他可能是最后一个看这个时钟的人,除非是某个潜水员之类的。嗯,你觉得,重写的诱惑,你指出了一个非常重要的事情,那就是职业发展。一个组织的目标在某种程度上与在那里工作的工程师的目标相悖,这些工程师可能几年后就不在那里了,并且可能需要一个简历项目,比如,“嘿,我用 Golang 工作过”,或者类似的东西,对吧?你谈到了 Cobalt,Cobalt 几十年来一直是许多重要政府系统、许多重要公司系统的支柱。嗯,那些系统并没有被完全重写,也许它们会被完全重写,但它们一直在工作,它们一直在完成任务,而且它们不需要,我们本可以在几十年前就现代化到当代工具,但我们仍然使用那些大型主机系统。我从你那里听到的是,你需要尊重你之前的工程师的判断,而不是仅仅假设他们是,你知道,愚蠢的,而你比他们聪明。因为很多时候,当有人开始重写一个系统时,他们会想,“哦,看看这些杂乱的东西。我可以把所有这些都去掉。”然后他们开始去掉东西,然后他们开始意识到,“哦,实际上它在那里是有原因的。”对吧?是的。嗯,是的,就像,永远不要改变任何东西,直到你理解它为什么是这样,这基本上是我那里的一般生活建议。听起来这确实渗透到了很多软件开发,你知道,维护或重写的对话中。>> 非常如此。>> 是的。所以,重写并不总是进步。有时它们只是忘记我们已经学到的东西的一种昂贵方式。这是你的一句话。嗯,是的,我的意思是,当我们在考虑,我们会接到电话,因为公司会说,“好吧,我们认为现在是时候重写这个项目了,因为我们的开发团队变得非常慢。”所以,有一个,就像,轨迹,就像他们决定要重写,无论出于何种原因,所以我们会接到电话,实际上只是说,“在我们完成重写的同时,你能帮我们维持现状吗?”我们打算开始使用新技术,你将负责照顾我们的 Ruby on Rails 应用程序,并最终帮助我们将其退役,我们已经退役了几个应用程序,我们可以帮助引导这个过程,并帮助他们将数据迁移到新平台,对于那些重写成功的项目。但是,回到重写的诱惑,嗯,而且我认为,还有另一个方面,比如,现在在这个特定的,我们正在录制这个,这是 2026 年 1 月底,有很多关于使用 AI 重写软件的好奇心,作为,作为协助这个过程。嗯,所以,这甚至模糊了我们的整个观点,关于我们作为行业所处的地位,就像,嗯,我认为这些是团队可以进行的有益的对话。所以,我不认为这完全回答了你的问题,但有些事情我最近一直在思考,因为根据我们与其他一些潜在客户的对话,类似的事情,我们正在与他们交谈的是,嗯,我知道有些公司正在与拥有比他们的团队多六到九个月的 AI 辅助编码经验的人进行 AI 对话。他们正在与其他公司、其他咨询公司、软件机构、专家交谈。他们会说,“嘿,我们现在可以在几个月内重写你现有软件项目的很大一部分。”无论这是不是真的,但公司,CTO 级别的人都在说,“这很有趣。也许值得尝试,因为如果它不起作用,它就不起作用。归根结底,我们将花费大量金钱来尝试。”所以,他们正在进行研发。但他们正在做的事情是,他们现在正在将研发外包给另一个团队,而这个团队并不了解你现有项目的所有复杂性。他们没有所有实际底层业务的隐性领域知识。>> 不,他们没有。所以,所以他们会进来,比如,试图理解这一点,并向他们展示可能的东西。所以,我不是想说,嗯,现在行业里有一些江湖骗子。就像,我们看到了。所以,我一直在倡导团队思考的事情是,就像,嘿,你需要领先于此。你应该进行一次诚实的对话,作为开发团队。你知道,这听起来与我之前说的关于不喜欢重写的东西相矛盾,但我认为作为一个团队,你至少应该成为你团队中的一员,或者成为那个团队说,“嘿,如果我们重写那个,写这个呢?如果我们使用 AI 来帮助我们完成其中一些工作,那会是什么样子?我们该如何去做?会有什么优点和缺点?让我们提出几个不同的方案,不要只选择一条路,就像你要做的那样。提出两三个不同的策略供你探索。权衡它们。将其呈现给领导层,以便这些想法来自内部,你知道,呼叫来自内部,而不是来自外部的某人,因为公司将开始打电话给我们说,嘿,你能来帮我们重建这个东西吗?因为我们的开发团队似乎比以前慢多了,因为他们,所以,我认为这是人们需要考虑的事情。>> 慢得多的原因是因为他们将自己陷入平庸的 AI 生成代码中。不,因为,>> 或者用这些工具分散注意力,或者,就像,为什么,为什么人们会变慢?>> 团队又回到了早些时候的观点,他们只是决定生活在后果的世界里,然后责怪前任和过去的决定,而不是在改进他们当前项目中的开发人员的生活状况方面取得进展。所以,他们没有处理很多技术债务,改进测试套件的速度,确保他们减少了不稳定的测试数量,确保他们的部署非常快,确保我们花了大量时间,在过去五到八年里,我们增加了更多的基础设施和可观察性。嗯,但我认为很多团队实际上并没有充分利用这些东西。所以,现在一切都需要更长的时间才能从请求到实际发货。所以,我想,如果有人对你说,“嘿,我需要更改我们 Web 应用程序上某个特定界面的副本,需要多长时间才能完成这个请求?”比如,我们发现了一个错别字。需要多长时间>> 才能投入生产>> 才能投入生产?这个管道需要多长时间?比如,快乐路径,它只是修复法律术语中的错别字,或者类似的东西?>> 是的,基本上在代码库中,然后你找到它,你更新它,然后 QA 过程需要多长时间?构建过程需要多长时间?部署,所有,所有这些东西?>> 有多少人必须参与批准和审查?我认为我们以多种方式优化了我们的工作流程,以保护我们自己免受“不要再发生”的影响。所以,就像,你知道,就像,嗯,是什么?嗯,你知道,地狱的道路是由最好的意图铺成的,我们有所有这些,嗯,伟大的意图,比如,哦,我们将添加所有这些检查点来保护自己,但然后你最终会发现,比如,修复一个错别字可能需要一周,你知道,然后呢?然后,所以这给人们留下了这样的印象,比如,你的律师,你知道,你的法律团队或其他部门,比如,我们的软件开发团队似乎非常慢,因为我只要求修复一个错别字,而它需要一周才能投入生产。>> 是的。所以,你所暗示的,你说地狱之路是由良好的意图铺成的。比如,他们只是试图防止灾难性失败,但在这个过程中,他们陷入了太多的程序和流程,以至于事情需要很长时间才能完成。所以,这有点适得其反,比如,法律团队中那些技术不太好的人或者经理们看着团队,他们说,“好吧,他们,他们忘记了他们已经几个月没有发生过重大故障了,或者类似的东西,比如,没有停机时间。”嗯,他们想,“哇,为什么一切都这么慢?”嗯,它很慢,因为你不想我们发生任何重大故障。在某种程度上,你不能两全其美。比如,理论上,你可以设计一个完美的东西,但就像,现实世界并非如此。事物总是在不断变化。新的设计需求不断涌现。嗯,代码在移动。库正在被弃用。你知道,这只是,你正在维护一个相当复杂的有机体,那就是代码库,而不仅仅是代码库,还有周围的所有其他基础设施。嗯,听起来你所说的就是,当你说管理层可能说,“嘿,只是把一切都交给 AI 的诱惑,因为它不会慢,而他们完全忘记了他们的团队已经建立了一个极其强大、可靠的流程,不会导致灾难性停机。”不,嗯,而且我认为,即使与空气无关,我认为也有一个方面,如果我们对自己诚实,我们也放慢了速度。所以,需要一点张力,朝另一个方向。比如,需要一点,我们需要移除我们流程中的一些冗余。一些,一些检查点。这些,这些本意是好的,但也是我们在某个时候设置的。也许我们所有的检查点现在不像五年前那么有价值了,也许我们需要收回。这就像,你知道,就像工作流程中的官僚主义太多了,我们可能不想称之为官僚主义,但就像所有这些我们最终会做的小事情,比如,我们必须有多个人审查这些事情。我们需要一个 PR,就像,这是一个错别字,不同,你怎么分类,也许团队可以组织起来,变得非常聪明,比如,这个应该,让我们,但是,如果它仍然需要,比如,一两个小时才能完成代码更改,就像,这是一个缓慢的反馈循环,所以,部署比以前慢了,我们花了很多时间等待所有东西运行,比如,我们是否在 GitHub 上运行 CI,而我们以前在电脑上运行,而我们的电脑实际上比 GitHub 服务器快得多,你知道,比如,我们可以在本地运行测试套件,并且,信任彼此可以做到。所以,我认为这里有一些张力,我们需要作为行业来解决,我认为也许我只是来自一个,我工作在一个较小的组织,但我确实与相当大的公司合作,但我知道我们的客户希望比今天快得多,但他们并不总是愿意做出一些让步,比如,让我们减少一些保护措施,也许我们有太多的保护措施,所以我们可以,只是,信任团队可以发布一些东西,可能会出点问题,但也许这会让我们更具前瞻性。但如果你只是想保持稳定,这样就没有人需要处理凌晨 2 点的电话。公平地说,但这会以成本为代价,对你的组织来说,而且,你的开发人员会等待,就像,它需要更长的时间,作为一个软件开发人员,如果你被分配了一个任务,然后你知道,需要几天或一周才能发布到生产环境,然后你必须记住,哦,那个,现在已经上线了,如果出现错误或者什么问题,然后就像,哦,那是一两周前,哦,我当时在处理,就像,上下文,你无法从真实用户那里获得快速反馈,而在过去,在狂野的西部时代,我们只是通过 FTP 推送,你知道,就像,它起作用吗?它起作用吗?太好了。>> 终极 YOLO 推送 FTP。>> 没错。所以,也许那也不是理想的解决方案,但一定有一个中间地带。我认为这种张力,我认为 AI 辅助工具现在又给了开发人员那种快速反馈,他们说,“哦,看,看发生了什么。我可以很快地改变这个。”然后就像,他们又得到了那种,他们得到了那种兴奋感,但他们也在很多个人项目、爱好项目上这样做,风险很低,但,但那些构建块会让你成长,你需要能够处理项目的后果,因为,我认为还有另一件事是,当公司,当公司招聘人员进入一个组织,并且他们有所有这些,比如,现有的,嗯,保护措施来保护组织,是的,但那些开发人员并没有从中受益,他们不理解为什么那些保护措施一开始很重要。>> 对吧?因为这就像,每个社会都必须弄清楚为什么,你知道,比如,有些事情很重要,比如,为什么你必须有一个,比如,国家监管的,比如,供水公用事业,而不是仅仅让任何人创建一家自来水公司。>> 是的。是的。没错。>> 这是真的。>> 是的。所以,所以很多时候,他们就像,他们正在一遍又一遍地快速推进文明,因为他们是在这个小项目上做的,他们开始逐渐认识到不同事情的重要性。这又回到了我们之前谈到的可维护性。每个人都认为自己比别人聪明,嗯,他们,他们认为有很多杂乱的东西,比如,哦,为什么这个在这里?谁在乎?嗯,所以,你说的很多都是通过回到,就像,有一个新工具,你可以直接启动,比如,一个全新的服务,也许只有你一个人在使用它。你可以,你可以直接告诉 LLM 工具,给它一个提示需求文档,它就会开始,你知道,你的代理会开始为你提交 pull request,这看起来很神奇,就像,哇,看看我移动得有多快。为什么旧的方法这么慢?但它与工具关系不大。它与减慢速度的人类流程有关。>> 对吧?而且,好的软件仍然需要清晰的所有权,共享的理解,能够经受住,比如,现在的时刻,比如,但我们需要记录这些事情。我们需要让这些决定在未来被理解,如果任何人,为了我们自己未来的自己。嗯,自动化测试的一个最好的理由,比如,我们应该在一定程度上编写自动化测试,是为了我们自己,这样我们就可以把它从脑子里拿出来。我们可以记录我们的需求。嗯,另一件事是,比如,代码,有人可以改变它,而不会感到害怕去改变它。比如,恐惧是需要认真对待的。我认为这是一个,嗯,好的软件,比如,要求我们认识到这一点,就像,我们如何减少恐惧?所以,我们可以谈论,是的,也许所有那些保护措施都能减少恐惧,但有时我们也需要让自己暴露在坏事发生中,因为那是我们学习如何做事并提出更好的解决方案来管理这些事情的方式。也许我们五年前做出的一些关于如何处理这些保护措施的决定是当时我们最好的想法。现在可能有新的方法来处理这些类型的保护措施。也许我们不需要那种非常费力的工作流程,因为现在有一些仪器或可观察性,或者一些 AI 辅助工具可以帮助我们更快地修复一些东西,或者,哦,如果一次部署总是需要,比如,不到 3 分钟,而不是 30 分钟,那不是很棒吗?我觉得这些是我们仍然可以弄清楚的事情,比如,我们如何才能快速地,嗯,粗暴地处理,以应对我之前提到的那个错别字例子,我觉得我总是,我总是倾向于那个,因为我觉得它通常会突出沿途的许多挑战。我问,我们真的需要每次都考虑所有这些步骤吗?它只是增加了一个障碍,这使得你不太可能感到非常积极和兴奋地花一些额外的时间来处理很多维护类型的任务,比如改进代码库,改进你的测试套件,比如,>> 嗯,反正总是需要很长时间。所以,>> 我今天有什么令人兴奋的事情要做?所以,>> 是的,我的意思是,我绝对可以看到,人们会更兴奋地跳下床,喝咖啡或茶,然后想,我要开始处理这个新项目了。我要开始着手了,而不是,好吧,维护这个由一群人在 5 到 15 年前写的代码库的第 n 天,里面有特殊的注释说,“不要碰它。我不知道它是如何工作的,但不要改变它。它太重要了。”嗯,我知道你会在你的工作中看到很多这样的东西,比如,基本上是维护别人的代码。嗯,我想谈谈现在经营一家机构。你是一家专门从事绿色地带开发,而是对现有项目进行开发,并从中获得更多生命力的机构。嗯,这是一项重要的工作,因为正如我们所说,如果从根本的底层业务决策来看,这些系统可能还有几十年的效用,而不是仅仅,你知道,你在追逐一些性感的工具,它稍微改善了开发人员的体验,这很重要,因为开发人员想玩得开心,他们想在做出改变时感到自信。你也强调了这一点。但是,让我们谈谈它的感受。
我目前经营着一家专注于项目维护的开发机构,因为你们服务于波特兰地区许多公司之类的。但我最近在 Free Code 播客上与一些在孟加拉国经营机构的人聊过,他们谈论了这些新工具的使用情况以及它们如何变化?>> 是的,首先澄清一下。是的,我们的总部在波特兰,但我们的客户遍布欧洲和美国各地。我们主要在美国。在波特兰地区,我们确实有至少一个重要的客户。嗯,但总而言之,现在工具方面最大的不同在于,我们有两种客户。有些客户有自己的工程团队,我们介入帮助他们,比如我们会让他们在一段时间内使用我们的一个开发人员,你知道,这就像人员增强或团队增强,我们会嵌入一个开发人员一段时间,或者我们介入帮助一个团队改进一些现有的工作流程,或者我们会签订一份为期几个月的合同来帮助他们改进代码库的某些领域。然后,我们还有其他项目,这些项目不需要两三个全职工程师来处理,因为这可能是一个内部应用程序,而应用程序本身并不是业务。它是他们如何运行某些内部运营的一个组成部分。所以,我们会承担这些公司的项目,因为他们可能有一个情况,也许有一两个人曾经负责过这个项目,也许是一个长期合作的自由职业者,或者他们可能有几个员工,但后来只剩下一名员工,他独自一人在那里工作了很长时间,然后他们要离开去一家拥有更多开发人员的公司工作,你知道,所以我们会承担这些项目,我们成为这些公司的开发团队。所以,我们就像嵌入到那个组织中一样。所以,我们有两种类型的项目。我们负责代码库和基础设施的每一次更改。我们为他们管理所有这些。我们还有其他公司,我们会在一段时间内作为访客介入,利用我们广泛的技能集和接触不同类型公司的经验,为他们提供一些新的视角。>> 好的。为了快速理解,我来总结一下。你们有嵌入式开发人员,然后你们还有一种模式,就是“嘿,我们将接管你们所有的软件工程需求”。因为无论你们在做什么,它都不需要全职开发人员,或者业务已经改变,而企业确实会外包。>> 这是人们不喜欢谈论的事情,但并非所有企业的最佳时光都在前方,但它仍然在完成它需要完成的工作。你和我谈论过马鞭行业。就像最后一个马鞭公司。在马车成为过去很久之后,仍然会有一些对马鞭的需求,而且它可能不像以前那样了,但这可能是一个可持续的,你知道,潜在的数百年业务,因为马可能仍然会存在一百年后,对吧?所以,接管那些项目,然后当你>> 第一个,当你嵌入一个开发人员时,他们不仅仅是帮助维护的开发人员,他们还在以 Planet Argon 的方式对其他开发人员进行交叉培训,对吧?这可能就像是 Ruby on Rails 的“约定优于配置”的理念,以及围绕着完成工作、注重业务并且不迷失在“酱汁”中的许多其他理念,比如>> 这是趋势技术,或者我们必须拥有 XYZ,因为每个人都必须拥有 XYZ。不,让我们回到基本原则,什么能真正带来价值,什么能真正完成工作,对吧?所以,那个工程师将在那里宣扬你们完成工作的方式,并可能“去编程”那些在 Hacker News 上花费了太多时间的人。>> 一点点。是的。而且我们可能不喜欢,这些不是你试图完成的事情,或者他们会介入,你觉得呢?然后我们也可以分享客户与我们合作的其他好处之一是,他们可以接触到我们所有的轶事和故事,比如“哦,我们实际上与这家公司合作过,他们有 70 名开发人员,他们正在处理这个问题,他们一直在使用他们网络应用程序中的某种模式”,以及所有这些微服务,他们的团队从 70 人减少到 80 人,再到 40 人,然后出现了一些新问题,因为他们说“哦,我们有太多东西要管理了”,所以他们后悔了他们成长过程中做出的一些决定,因为他们认为他们的团队会继续增长。所以,我们如何拥有一个,我认为我们应该思考,我们如何以软件将扩展,团队将随着软件扩展而不断扩展的心态来开发软件。但我们学到的是,团队需要进行更多关于“当负责维护我们正在开发的软件的人越来越少时会发生什么”的对话。也许这是这个特定项目的理想状态。就像,是的,我们需要 50 个人来构建它,但理想情况是,在七年后,将有 20 个人来维护它。所以,你为了达到那里需要的东西,你可能会根据你今天或明天认为你的组织结构可能会是什么样子来组织你的代码库,但五年后,那个组织结构图可能会大大压缩。而这可能是理想情况。所以,然后你就会有人在做其他项目。所以,我们会介入并帮助人们认识到,在做决定时要小心,因为大多数人就像我们之前讨论过的,他们被聘入的组织已经有事情在进行中。已经有决定的。你在成长。如果你是在招聘高峰期被聘用的,你可能会认为团队会继续招聘人员,但当他们停止招聘,并且需要更少的人来维护时会发生什么?如果你还在那里,你将不得不与你所有可能不在那里的同事的决定一起生活。所以,你也需要控制住这一点。我认为这是我们可以提供的,在我们进行咨询服务时。嗯,但关于我们作为咨询行业的一员的另一部分是,如果我们坦诚地说,我们的一些专业知识有点商品化了。就像现在有人会说,“嘿,我们组织遇到了一个奇怪的技术问题,人们可以去 Perplexity 或 ChatGPT 谈论一些想法,并获得一些合理的建议,如何解决它。”他们是否会遵循那是另一回事,但它至少会给你一些好的建议,而且这并不是说人们找不到这些信息。就像我们学到的一切,都是从同行那里学到的,从讲故事,从与其他客户交谈,或者多年来在会议上的“走廊谈话”中学到的。所以,这一切都不是什么秘密。它只是不像贸易秘密之类的,但它更容易获得。我们可以提供的是一点点问责制。所以,我们不得不稍微改变我们的模式,思考我们如何不仅仅是给人们“这是我们可以开始的方向,这是我们的建议”,而是“也许他们需要更多的外部问责制,一点点更多”。所以,我们如何以某种方式变成教练?我们如何让他们“好吧,我们在这里。我们将帮助你完成这个过程。我们不会为你做所有事情。你的团队需要学会自己照顾你的花园。”就像一个伟大的园丁会说,“这是我们今天做的。”但如果你看到这些类型的事情开始出现,你可能想把它们从花园里拔出来。我认为这是任何顾问现在都可以提供的,不要仅仅成为一个能做事的人,因为做事会变得更加商品化,而且总会有,但我们已经听说了好几年了,就像“谁会最便宜?”我们将把工作外包给,你知道,另一个国家,而且我们现在自己也做了一点。所以,这就像,嗯,质量并没有下降,我只是不知道。这很有趣,但是的,总之,>> 是的。所以,如果你外包给另一个咨询公司或类似的东西,你就会非常深入地参与到这个过程中,你说的是吗?另一个机构>> 或者,如果你有远程开发人员与你合作,只是处理一些特定的项目,但他们正在使用你的方法论>> 而且你参与其中。你在循环中。是的,质量保证>> 并帮助向利益相关者报告进展,并解释为什么事情很复杂,成为谈话中的第二个无偏见的发言人,因为有时领导层会介入,特别是如果新员工被聘用,他们会说“发生了什么?为什么一切看起来有点?为什么开发团队现在看起来有点卡住了?事情似乎比我在其他公司工作时慢。”然后我们可以介入说,“是的,这是我们看到的,这是我们可以做的。这是你的团队可以做的,你知道,领导层可以做的,无论是预算、专业发展,嗯,我认为有时那些公司,那些组织希望我们告诉他们,‘你可能想解雇你团队中的这两个人,因为他们对团队来说是个问题’。”但我们试图避开这些事情,但它确实会出现。嗯,我确实被像首席执行官这样的人聘用,他们说,“嘿,我需要你,是我的技术领导层有问题吗?那实际上是问题的一部分吗?”所以,嗯,让我们来谈谈这一点,因为这对任何管理开发人员的人都会有所帮助,他们可能是一名开发人员,但他们已经走了好几步,他们可能作为开发人员进入,然后走上了管理路线,现在他们有一个开发人员团队,他们在层级上可能比他们低一两层,他们如何识别,你知道,有问题的开发人员?就像这个人实际上可能在帮助,我经常将事物与去健身房进行比较,你可以每天去健身房,然后将类固醇注射到你的手臂中,或者在你屁股里,我认为他们注射的地方,我从未服用过它们,你可以获得结果,而且,当然是结果的幻觉,它们是否可持续,但是,如果你想以正确的方式去做,投入时间和精力,那么进步会慢得多,而且对于一个每天都在注射类固醇的团队来说,去健身房并以老式的方式去做会非常困难,在他们停止使用类固醇之后,对吧?他们将无法获得相同的进步感。我想你在查看开发人员团队时遇到了很多这类事情。你有什么建议来识别那些看起来进展很快的人,因为他们正在注射类固醇,或者他们可能不打算长期留下来,所以他们正在引入更多的技术债务,而他们实际上是秘密的净负面?你是否识别出一些你喜欢提出的模式,给经理?你知道,这是一件有趣的事情。我试图反思我直接参与的一些参与。而且我通常,你知道,说实话,大多数人都有一个怀疑,他们知道那个人或那些团队成员是谁。所以,他们通常想要一些验证,无论哪种方式,要么支持他们的理论,要么不支持。所以,他们会让我们有点像,他们可能会埋下种子,比如“嘿,你能留意一下某某人,然后告诉我们”,这有点奇怪,你知道,我不想让听众说,“好吧,我们永远不应该聘请外部顾问,因为他们只是在找出,你知道,就像,它是什么?两个鲍勃的东西,还有《办公室空间》>> 《办公室空间》。是的。是的。你知道,就像“你在这里做什么?”所以我说,“我不是,我们不是因为这个原因来的。我们是来帮助组织和团队改善他们的日常生活。”嗯,然后如果在这个过程中有人不再被留下来,可能有一个合理的原因。我不知道我们是否曾经,你知道,如果有什么的话,我可以数出一只手上的数量,我推荐过团队放手的人,他们就是不放手,而且他们不在乎。所以,他们甚至不听我们的建议,即使我们给了建议。嗯,这通常是那些已经工作了 15 年的人,他们把一切都留给自己,他们不善于与他人合作,他们也不善于分享代码库的责任和所有权,并且非常保护自己的。而且不是因为,也不是因为这是工作保障。这实际上是一件奇怪的事情,我认为与他们的遗产有关。它更多地来自一种尴尬,我一直认为,作为软件开发人员,我们都有我们可以想到的项目。如果有人听着,想一想你非常自豪的项目,但你明天不得不把它交给别人来接管,传递接力棒,你有什么感觉内疚?你有什么感觉,“我真希望我能做 XYZ 来让下一个人更容易一点”?因为就像,我有一个练习,在我的一篇新闻通讯中,我让人们开始,写一封信给我,就像“如果你必须交接,今天就是你在这个项目上工作的最后一天。你必须快速发送一封快速电子邮件,说‘你应该知道关于代码库的事情。你有 20 分钟的时间起草一封电子邮件。发送过去,你就走了。’>> ‘你应该知道什么。有什么陷阱?有什么你会写在那封邮件里?’然后那些,所以当我谈到,回到那个点,关于,你知道,那个其他,那个开发人员,他们对他们没有机会做的事情感到尴尬。所以,有一种奇怪的事情,我认为,如果他们承认他们没有机会做 XYZ,所有这些“最佳实践”,我都在用空气引用,对于我们的音频听众来说,这会更好。所以,我认为他们有一种自豪感,因为公司知道他们在过去 15 年里有多可靠,甚至某些领导层也说,“哦,那个人就是我们的,那就是我们的开发人员。她一直都在那里。”所以,这就是他们的身份。现在你把接力棒传给别人,别人就得承担所有这些决定,以及他们没有时间改进测试覆盖率、添加文档的时间,因为从来没有多少人会阅读文档。他们的遗产现在被玷污了,>> 你知道,这是一个非常棘手的情况。我们见过很多次,通常是小型组织,这些组织>> 你说的是那个开发人员担心人们会意识到我没有我想象的那么好,我只是在敷衍了事,因为我想完成工作。>> 不是敷衍,只是跳过,没有添加很多不必要的流程,因为这已经持续了 15 年。>> 你知道,直到其他人,我认为这只是,他们从来没有真正地,他们没有真正地为团队优化它,因为一直以来只有几个人在处理它,那是他们的责任范围。那么,写非常详细的提交消息有什么好处,如果只有你一个人会看呢?>> 嗯,我会说>> 所以这基本上是优先事项。是的,我会说,无论如何,你仍然应该写非常清晰的提交消息。但是,听起来如果你已经安顿下来了,你正在做很多开发工作,就像我们发表了一篇非常受欢迎的文章。它可能被阅读了超过一百万次,在 Free Code 的出版物上,叫做“我们解雇了我们最好的开发人员,我们做出的最好的决定”。>> 这围绕着一个非常有趣的讨论,关于“好吧,他们解雇了这个人,他一直在构建所有东西,但随着时间的推移,他变得有点领土意识,并保护不同的系统,代码变得极难维护”。然后是漫长的过程,就像在解开那个代码库,并在他们解雇这个人之后将其移交给其他人,而这个人只是,并不是说他们被激励去走自己的路,而是他们变得非常保护他们的代码,并且他们觉得不需要解释一切。但是,任何公司,假设它是一个有偿付能力的公司,仍然有现金流之类的公司,它将继续存在,对吧?就像公司很少说,“好吧,我们破产了。我们可以继续经营,但我们就这样破产了,对吧?那真的很罕见。所以,你应该假设,只要还有市场在服务,公司就会继续经营下去,而且它可能会超过那个在那里做了很多工作的开发人员的职业生涯。15 年是很长的时间。>> 是的。>> 你知道,嗯,很多开发人员的职业生涯,特别是如果他们是薪酬丰厚的开发人员,他们可能会在 50 岁或 60 岁时退休,对吧?在其他领域你做不到,但在软件开发中你可以。如果情况是这样,你看到一个 40 多岁的开发人员,你必须考虑,“哇,这个人可能在 5 到 10 年内就会离开。我们需要迅速采取行动。”你会对一个组织中有几个关键开发人员,但他们不一定准备好进行代际交接的经理说什么?>> 我认为,我会告诉他们,有几件事他们可以做。你可以工作。嗯,你的,你的,那个人,如果你有一个领土意识强的人,或者一个在那里工作了很长时间的人,他有没有休过长假?你们有休假吗?或者你能想出某种理由来测试你的团队在没有他的情况下如何处理事情一段时间吗?你需要做什么?就像,这是继任计划,归根结底,任何健康的组织,无论它是什么,这都不是软件开发本身特有的问题,但就像,我的业务伙伴,他计划在明年左右退休,所以我们必须考虑继任计划,而且这并不是开发人员的东西,但这是运行一个组织良好的任何组织的责任的一部分,就是考虑继任,当这个人辞职或需要离开时会发生什么?我们会做什么?你能计划吗?健康的答案是制定一个计划,并考虑继任计划对特定角色的意义,你可以考虑这一点,然后将其应用于软件代码库的视角。但是,比如说,Free Code Camp 有继任计划吗?如果 Quincy 需要因为个人原因退出,帮助你,你知道,就像,也许,也许没有。我认为,嗯,是的,我们有,我们有,以防万一我死了,这是唯一的原因,除非我精神失常,我无意离开 Free Code Camp,只是为了清楚起见,而且 Free Code Camp 是一个慈善机构。即使我想退休,我也没钱。>> 对。但我确实认为,这很健康,而且,你知道,我曾在一个非营利组织的董事会任职,我们作为董事会一直在讨论继任计划的问题。我们说,“什么时候才能进行继任计划?”我们说,“好吧,让我们希望执行董事永远不会离开。”我们说,“但我们需要计划。”你知道,至少给我们一个框架,说明我们如何开始处理这个问题。我们对如何处理这个问题最好的猜测。而且你知道你不会把所有事情都做对,而且没关系。但我认为,归根结底,你可以找到能帮助你度过这些情况的人。嗯,有时是引入外部支持,寻找其他专家,知道如何处理现有代码库的人,就像,我猜,从我个人的角度来看,我确实认为,正如你所说,马鞭,将会有需要能够深入到一个混乱的局面,然后说,“好吧,发生了什么?你如何部署这些应用程序?我们如何,让我们回到基本原理,我们会弄清楚的。”因为我们多年来处理和继承的许多项目通常是因为有人被解雇了,或者另一个机构/咨询公司被解雇了,我们不得不被扔进去。我们没有机会与之前的开发人员交谈。是的。我们仍然可以处理这些项目,未来 5 到 10 年。所以,外面有一些人拥有这些技能,任何开发人员都可以做到。我曾经有过一个时候我没有这个技能,现在我有了。所以,我认为这只是,我会在这个行业里的任何人那里找到一个健康的思维方式,就像我们会弄清楚的。现在有很多工具可以帮助我们更快地弄清楚。>> 是的。是的。关于工具,我知道你已经尝试过一些 LLM 代码生成工具之类的,你已经探索过了。你对哪些工具感到兴奋,你认为它们确实名副其实?我们当然被炒作包围着,你知道,硬件公司的 CEO 说,“哦,你不需要教你的孩子编码了。”之类的话。我们正在逆流而上。就像许多知名人士基本上说,“学习编码已经死了”之类的话。这就像我每天与人交谈的很大一部分是安慰他们。不,没那么简单。嗯,但你认为哪些工具是你真正使用的,你认为它们正在提高效用,你认为它们可能值得一些企业,一些开发团队采纳,它们确实名副其实,尽管一切可能都被夸大了。>> 事物肯定被夸大了。我想到了一些事情,我的意思是,有一些开源工具我总是很兴奋,但它们不一定是 AI 驱动的,但我的意思是,我确实支付了,你知道,像 ChatGPT 这样的工具。我确实支付了 Claude Code。我正在使用,你知道,每月 200 美元的计划。对我来说,对我的组织来说,这并不是一个巨大的成本问题,我有点敏感,因为,我有点贵,但就我能用它做的事情而言,我可以说,它正在收回成本,至少给我一种它正在收回成本的错觉。所以,我认为,但我没有花很多时间去尝试各种 AI 工具。我一直有点更倾向于,我有点怀疑。我将让其他人,我不是这项技术的早期采用者。我将让其他人尝试一下。也许这有点来自于,我觉得我对 Web 3 时代非常愤世嫉俗,或者,你知道,我没听到人们谈论,我的天,>> 正在构建智能合约之类的。>> 是的。没错。没错。我问,那是什么?你知道,我以为那就是我们一直想朝着的方向前进的。所以,但是,你不能否认,你可以给 Claude Code 一个合理的提示,然后看着它为你生成一些代码,然后说,“嗯,还不错。比六个月前看起来好多了。”仍然不够好,所以我认为,它仍然需要你弄清楚如何指示它,以及你的参数是什么,以及它将如何,即使你可能在你的代理 Markdown 文件和所有规则上工作,但当你使用 Ruby 时,这是我们的团队遵循的原则,这是我们的风格指南,你知道,我们必须编写,我们一直在编写测试,我们尝试基于 TDD,并且总是确保在运行测试之前运行你的 linter,因为你的测试可能会通过,然后你可能会运行你的 linter,linter 会破坏你的测试,然后有很多小的工作流程,这些都是我们仍然在做的事情,你只是试图让代理更快地为你做这件事。嗯,所以,我认为,我们正在一些客户项目中使用它,客户现在,我认为,也许关于咨询的一件事是,六个月前,客户对它感到紧张,因为他们担心安全数据问题,但他们说,“好吧,现在我们已经能够向他们展示了,这有点像我们正在被协助,我们不是让代理代码在他们的代码库中横行,我们说,有一个人在指导这件事,而这个人对完成的工作负责,并提交给项目。”我 Robbie 负责,如果这个东西出了很多 bug,我必须解释自己,那是在我身上,这并没有改变,对吧?所以,给团队,我认为,如果>> 我们听到的事情是,也有客户好奇,“也许我们不需要像 Planet Argon 这样的团队,也许我可以自己做这件事。我没有 Ruby,也许我们不需要开发人员”,因为他们看到了去年的炒作,而且他们已经,我们有一些客户不是软件工程师,他们会拿走存储库,然后尝试使用 Claude 或类似的东西来运行它,然后他们说,“哦,我们将尝试构建一些新的登陆页面,构建一个新表单之类的”,然后就没声音了,我们再也听不到他们的消息了,他们说,“一切又恢复正常了”,然后他们说,“好吧,他们说,“好吧,那对他们来说还没有完全奏效”,但他们可能可以用一些可爱的东西来启动一个新的网站,然后构建,你知道,就像那样。你可以做那样的东西。我认为这很棒。也许我们不再需要担心那些类型的项目了。嗯,当它更复杂的时候,它还没有完全达到那个水平。所以,回答你的问题,不,我认为我说的和别人说的没什么不同。就是说,Claude Code 正在显示一些价值。嗯,我也使用 Copilot,因为 GitHub 足够好,可以给我免费许可证,因为我的 zshell,他们想让我使用它,我也使用了。是的。这在社区中产生了一些影响。那是一个完整的话题,但我认为,我认为在更广泛的社区中,关于它是否合乎道德存在更多的紧张关系,而那是一个我不太想深入的话题。但是>> 是的,我们可以深入探讨,但是>> 我可以总结一下我的感受,如果这有帮助的话。代码,开源代码被训练在开源代码上>> 明确地放在开源中。当然,我们 15 年前写代码时不知道它会被用来训练 LLM,但因为它是在公开的,而且它是开源的,比如 BSD 许可证,MIT 许可证,>> 我个人不认为 LLM 代码生成与 AI 艺术之类的相同。因为当你制作你的项目开源时,你有一个同意的程度。有多少?但我认为它不像艺术话题那样具有爆炸性。所以,我个人没有意见。就像,如果有人提交了一个 PR,而且很清楚,其中一些是由 AI 编写的,但你实际上有一个很好的观点,我读了这篇文章。基本上,一切都归结为,你能解释和辩护这个 PR 所做的所有不同的更改吗?它实际上并不重要,它们是你的更改还是 LLM 的更改,只要你理解原因。而 LLM 在保持在轨道上,不意外地触及大量其他不需要触及的东西方面非常糟糕,而且如果你不加检查地让它们运行,它们会在整个代码库中留下巨大的,你知道,足迹。但是,对于像选项卡补全这样的功能,我认为它对开发人员非常有帮助,你仍然在查看代码,并且在你编写代码并运行它时,你正在实时查看它。我认为这是一种明确的>> 好,而且它并不完全明确,因为人们会在他们的实际语法和他们实际编写代码的能力方面出现萎缩。但是,我认为它不像很多人认为的那么大问题。我不知道你的想法。不,我认为,我认为你引用的文章是,它可能是,你需要让人类参与到过程中,就像我的,你知道,当我们打开我的 zshell 来处理我维护的项目时,我们必须制定某种 AI 贡献政策,我们查看了许多不同的项目,看看不同的项目是如何处理的,我们发现,自然而然的事情是,“好吧,我们将制定一项关于 AI 使用的全新政策”,因为许多其他相当知名的项目都这样做了,它们有大段的内容讨论 AI 何时可以使用,何时不可以使用。然后,但我想,如果我们越是把它当作一个独立的事情来对待,我们就越难真正地理解它到底是什么,它只是我们工具带中的另一个工具,我认为我们需要,只是因为炒作是如此之大,我认为我们只需要知道,实际上,这只是我工具带中的另一个工具,我不会让它看起来像是,哦,我的 zshaw 或我们的开源项目的贡献与以前一样。我的意思是,我想说的是,我们决定不制定一个庞大的基础,比如“这是我们对 AI 的看法”,它更多的是,“让我们现实一点,你可能正在使用 AI,我们甚至不知道你是否在使用,但如果你在使用,我们希望你披露,我们不需要知道你的提示,因为我不知道我们是否能区分,是你让它写了,你知道,一整文件还是代码,还是它只是自动完成了?而且,当你使用 VS Code 时,AI 是什么?我不知道界限在哪里,我不知道如何关闭它,你知道,就像没有 AI 帮助,那是什么样的,如果它只是像自动完成,就像你给出的例子>> 是的,其中一部分只是 AI 这个词太模糊了,但是,就像让 LLM 根据上下文窗口中的内容生成代码,通常是你正在查看的文件或整个代码库,那里有,就像 LLM 辅助>> 代码生成,基本上>> 但是的,是的,想法是,我们仍然希望你解释,如果我们想和你谈谈,请不要提交>> 大规模的代码库更改,因为它们总是最慢的,我们才能做出反应和响应并合并,即使你写了所有东西,如果你做了巨大的改动,就像我们重构了我的 zshell 来让它更快,你触及了 50 个文件,你是谁?你知道,就像,让我们>> 即使在 LLM 工具出现之前,这也不会被接受>> 所以现在>> 事情应该是>> 是的,合理的,范围内的变化>> 我们是一群志愿者,我们的时间有限,而我们可以快速审查和批准的五行更改,就像在你的工作中一样,如果你在软件开发方面有工作,或者你正在思考这个问题,以及你将来会从事这些工作的学生。就像那些更改更容易批准,所以尽量保持小。所以我认为,因为这太多上下文了,对吧?所以,要理解。所以,这就是我们引入一些 AI 指导方针的方法,让我们把它作为我们一般贡献的一部分,而不是把它当作一件大事。但这也给了我们的维护者自由,就像,这个 PR 是由一个我们从未与之互动过的人提交的。这闻起来,我们的直觉是,这是 AI 生成的。我们问了他们一个问题,他们似乎无法回答和解释。我们将直接关闭它,说我们不做这个,因为没有人真正花那么多时间在这上面,而归根结底,我们正在努力创建一个工具,让人们与终端互动更愉快。所以,我们并不是说不接受 AI 贡献,因为我们真的无法让任何人对此负责,但我们也说,我们保留权利,就像,让我们尽可能地为我们人类保留它。>> 是的。你工作中一个更深刻的观察是,瓶颈不是代码生成,创建新代码,打开新 PR。而是审查这些 PR,并能够理解,它基本上就像代码审查是真正的瓶颈。而我猜,2026 年开发软件的很大一部分,对于许多依赖这些工具来实际生成代码的人来说,将是阅读代码,审查它,确保一切都说得通。但对你的团队来说,特别是运行这个非常受欢迎的开源项目,有数百万人使用。>> 嗯,其中很大一部分只是成为质量的守门人,并确保奇怪的垃圾不会侵入你的代码库。我的意思是,你主持可维护性播客,对吧?你,你所做的很大一部分是维护软件,而这可能是你经常思考的事情。所以我建议大家看看这个 AI 政策,这是非常深思熟虑的,而且很清楚你付出了很多思考,什么才是实用的,而不仅仅是空想的理想,而是什么才能在很长一段时间内可持续地运作,因为我认为很多人只是凭本能,也许是把手指放在空中,看看风往哪里吹,比如“我们对 AI 代码贡献需要有多严格,才能表现出我们是‘开发者优先’,或者无论是什么情绪。”但你的想法是,我不想在六个月后,一年后,当完全无法区分 AI 生成的代码和人类生成代码时,或者当每个人都在使用这些工具,并且变得>> 完全晦涩难懂,我们就会,你知道,不允许它们,诸如此类的事情。所以,你正在制定一个持久的政策,对吧?>> 是的。而且还有一点>> 并给自己和我们自己灵活性,在我们觉得有用的时候使用这些工具,而不必,就像,如果工具对我们自己更有意义,为什么我们不使用它,然后说,“好吧,我们正在撤销我们的整个政策”,就像,让我们对自己诚实一点,而且,而且我也,如果我,我想使用 AI 来帮助我改进一点文档,让这几段话更清晰,我不想因为我能做什么和不能做什么而感到受限制。>> 你自己>> 你不一定想因为我所做的而感到肮脏,哦,我是在欺骗人们吗?我认为,只要关注输出,而不是到达输出的过程,是一个很好的地方。>> 也许披露它,然后就没关系了。我认为我们披露得越多,我们就越容易评估情况。>> 是的,所以我想转移到我们的最后一个问题,因为你非常慷慨地分享了你的时间,我知道你很忙,经营着一家机构,同时还要维护这个流行的开源项目,我使用它,Free Code 团队的几乎每个人都使用它。我认为,所以,让我们来谈谈命令行工具,因为你经营着一个流行的命令行工具,它基本上使命令行更加可定制,哦,我的 zshell,它也让人们能够真正拥有它。我喜欢模板系统和所有这些。很多时候我会在我的终端里,人们会问,“哦,你怎么让你的终端看起来像那样?”我说,“哦,看看我的 zshell。”对吧?但是还有其他基于终端的工具,并且有一个完整的,你知道,终端工具生态系统正在兴起。你能谈谈你对其他一些开源的、以终端为中心的项目的兴奋之处吗?>> 是的,有几件事,你知道,这只是回归到基本原理,或者基础。所以,我认为,我想解释一下,有命令行工具,还有终端用户界面,而终端用户界面就是一个例子,就像你安装了 Claude Code 之类的东西,如果你在本地终端中安装并运行 Claude,它会弹出一个你可以与之交互的小界面,就像那样,这是一个终端用户界面,我们有终端用户界面,只要我们有计算机,有终端计算机,在我们有桌面之前,你可以用鼠标滚动等等,我们就有文本界面。所以,Omaze Zshell 是一个命令行界面。这是两个。所以,我认为我现在觉得非常有趣,我非常兴奋的事情是,比如 Ghosty,这是一个新的终端。它是一个开源终端。我现在穿着 Ghosty T 恤。这是一个开源项目,它是跨平台的,所以它也利用了计算机的一些较新的功能,而这些功能在上一轮终端创建时并不存在,你知道,如果你在 Mac 上工作,你知道,它自带一个终端,这很好,但我多年来一直在使用另一个叫做 iTerminal 或 iTerm,以及 iTerm 2,我仍然经常使用它,但我一直在使用 Ghosty,因为我获得了它的早期访问权限。而且它是一个不同的,你知道,一点点配置,但它有一些新的功能和技术,这有点令人兴奋。而且它是一个开源项目,你可以观察。我不太理解,我不是一个足够低级的程序员来完全理解代码,但看着它发展并成为社区的一部分很有趣。所以我对此感到兴奋。然后你可以做一些很酷的事情,比如使用那个终端来嵌入技术到其他软件中。所以我认为在未来几年里,我们会看到更多 Ghosty,因为 Ghosty 也只是一个你可以用来嵌入到其他软件项目中的库。所以我认为这正在改变,而且我认为,归根结底,我认为我没有预料到的是,AI 工具,每个人基本上都像 ChatGPT 是一个命令行界面,因为你正在与工具进行短信交流,或者你正在进行对话,并获得快速反馈。它就像,你不是通过点击来获得答案,你是在与,你知道,与计算机互动。
就像通过计算机终端一样,OMY Z shell 就是那个空间中的一个工具,所以我们一直在思考如何优化这种体验。看到人们在终端和 Zshell 中变得越来越兴奋和舒适,这确实令人兴奋。我认为 Zshell 一直是一个很好的切入点,它让人觉得没那么令人生畏,更舒适一些。现在人们正在吸收这种精神,并创造出非常漂亮的终端用户界面和更好的工具。你知道,你会看到很多很酷的小动画和颜色,以及终端中的那种氛围。比如,如果你使用 bun 来安装东西,它就会变得更丰富一些。人们花更多的时间来制作这些动画,因为我们的电脑速度快了很多,而且像 Zshell 这样的技术是在 20 到 25 年前发明的,那时我们还没有现在的计算机和 CPU 处理能力。所以我觉得这很令人兴奋。
嗯,还有其他工具,比如还有一个开源项目叫做 Omachi,这是一个 Linux 项目,也是由 Ruby on Rails 的创始人 DHH 创建的。它本身并不是技术本身,而是社区能够迅速地像这样说:“我们要买一台全新的电脑,我们要安装 Linux,我将生活在终端和桌面上,摆脱我典型桌面环境的一些陈规,并尝试优化我的工作流程。”所以,我认为人们正在重新渴望获得更多……我正在寻找那个词?他们想要升级。我觉得每个人都觉得“我了解足够的 CLI 快捷方式来应付事情”,但是“我能否真正成为这些工具的超级用户?”这很令人兴奋。我喜欢看到这种精神发生。
我现在每周只使用 Linux 大约 15% 的时间,但我有另一台电脑安装了 Linux,所以我可以在它们之间切换。所以,我正在进入编码模式,但我的大部分工作仍然依赖于我的 Mac。而且,我也没有像典型的软件开发者那样编码那么多,因为我经营着一家公司,我花更多的时间在电子邮件和 Zoom 会议上。
是的,成功的一个不幸的症状是,你必须花更多的时间与客户沟通和发送电子邮件,而不是花时间在工作上,很多时候是这样。
好的,所以 Ghosty 是跨平台的,它可以在 Linux、Mac 和 Windows 上使用。
嗯,然后你提到了 Machi。
是的,你想推荐一下那个叫什么来着?
FZF 是一个模糊查找器。它是一个非常酷的 CLI 工具,用于进行模糊匹配。我会附上一个链接,人们可以去玩一下。但对于 OMI shell,也有一个很好的插件,叫做 FCS。
好的,太棒了。然后是 Omari。
Omachi。是的。
好的,那就是你刚才说的那个。
它确实有一个 R,但它是一个不发音的 R。我想它可能参考了日语。我忘了那个参考了,但是的,它有点像策展,我认为这个想法是有人对 Linux 环境进行策展。
好的,所以非常主观。非常适合 DHH 这样非常主观的开发者。
太棒了。很高兴能请到你。简单回顾一下我们谈论的内容,我们谈到了你对在 AI 驱动的新时代维护开源项目的看法,包括贡献和拉取请求。我们谈到了许多关于公司希望能够保持“快速但安全”的张力的哲学,以及多年来他们积累的可能感觉在拖慢速度但实际上是出于好意的安全措施。关键是要找到平衡点,对吧?然后我们还谈了很多关于你作为一家机构如何运作,比如帮助嵌入开发人员,或者为特定公司承担整个工程部门的工程角色。我们还谈到了企业有时会收缩业务,当业务收缩时,可能没有必要拥有一个完整的工程团队,但你仍然可以维持业务,因为开发人员成本很高,他们的时间很有价值。
你得让他们有事做。是的。
是的。所以我从中学到了很多。我希望大家都能喜欢阅读你的优秀博客 Robbie on Rails,它非常有见地。我想说的一件事是,你和我都没有机会真正谈论,但我们都是拥有自己网络空间的大力倡导者,而不是完全依赖你的 Facebook 页面,比如我公司的假 Facebook 页面,或者仅仅依赖某个给定的平台。如果你通过拥有域名来真正拥有和控制自己的命运,我认为这是一件非常有益的事情。
确实,我同意这一点。
是的。
是的。你已经在 Robbie on Rails 上做了 20 多年了。
是的。
好的,谢谢你邀请我,Quincy。
是的,非常愉快。大家,下周见。编码愉快。
编码愉快。