Transcription
这些公司从复杂的层层叠加中获利,它们就有动力让这种游戏继续下去。这就是为什么我,从一开始,就从未对将我的 Rails 工作商业化感兴趣,因为我知道我可以拥有关于我们应该如何构建软件的所有崇高理想,我们应该保持简单,我们应该压缩复杂性而不是将其层层叠加。我会说,所有这些最终都会消失,因为维持和发展业务的需要会压倒一切。我最终会成为一个复杂性的商人。我对此不感兴趣。今天的嘉宾是大卫·海内梅耶尔-汉森。大卫·拜尔坦率地说令人尴尬。他是 Rails 的创造者,Rails 是有史以来最受欢迎的开发框架之一,也是 Basecamp 的联合创始人兼首席技术官,纽约时报畅销书作家,以及十多年的职业赛车手。在我们的谈话中,我们探讨了大卫对软件开发的许多强烈看法,包括软件和基础设施中的过度复杂性、人工智能的作用以及开源的未来。我们还谈到了他的赛车以及他如何从零开始学习任何主题。那么,在简短的赞助商致辞后,让我们深入探讨。嘿,大卫,欢迎,非常感谢你今天和我们在一起。我的荣幸。所以,大卫,由于你在 Rails、Basecamp 以及所有引发了大量关于软件工程在线讨论的观点上的工作,你确实无需介绍。所以,我认为,这可能是我准备起来最容易的一次采访,因为我非常熟悉你的观点,但同时也是最难的一次,因为我必须挑选几个精选的主题来问你。所以,我将从一些最近的事情开始,因为几天前你发表了一篇题为“复杂性的商人”的博文,我非常喜欢,它反对当今科技中存在的一些不必要的复杂性和层层叠加,我认为这是你工作中的一个共同主题。你已经多次谈到这一点,从托管自己的服务器,自己处理身份验证等等,这让我想起了我自己的经历,因为一种反驳可能是,技术历史上一直通过增加剥离复杂性的层来蓬勃发展,让我们在更高的抽象级别上工作,而不必关心细节。那么,这里有什么不同呢?你是否认为我们今天拥有所有这些层层叠加,它们有点被夸大了,在某些情况下应该被撤销?我认为问题在于,随着你添加更多的层,堆栈就会越来越高,而且通常要理解整个事物并构建一些真实的东西,你现在需要一个更广泛的、更多专家的团队。这确实是我试图反对的本质。我无意构建额外的层来让我们走得更远,如果这需要我们拥有一个庞大的团队,并且团队中的每个成员都必须是,我是一名前端框架专家、工程师,无论在一家大公司里可能存在什么头衔,才能构建有竞争力。我想致力于那些能让单个开发人员真正在线上建立一家有竞争力企业的工具和方法。我通过压缩复杂性的想法来审视这一点,而不是打包它,不是添加更多隐藏它的层,而是压缩它,这样你仍然与实际问题保持接触。它只是,它更少,因此有更多空间。对我来说一个很好的例子是 ActiveRecord,它是 Rails 中的对象关系映射器。当你使用 ActiveRecord 时,你并没有脱离 SQL。ActiveRecord 是一个——不是它是一个抽象,它是试图压缩大量 SQL 工作复杂性的尝试,甚至不一定是复杂性,而是它的劳动。一旦你达到更大的规模,你仍然需要了解数据库是如何工作的。我们并没有试图完全隐藏下面有一个 SQL 数据库的事实。这是我们与对象关系映射器早期的一些想法或观点之争。当我开始从事 Rails 工作时,Java 世界里有一些东西非常努力地试图抹去你甚至知道下面是 SQL 的想法,你甚至需要考虑 N+1、连接或其他任何东西,并且整个查询语言被包裹在某种不同的翻译或方言中。我对此不感兴趣。我想压缩复杂性,但要保留它,这样你就能与之建立联系,这样你就可以容纳更多,然后使单个开发人员能够完全有竞争力,并能够构建一个他们可以围绕其启动业务的整个系统。基本上,你的意思是,所有这些层层叠加并没有真正消除复杂性。它正在用一些特定于新层的不同复杂性替换,比如说,底层层的原生复杂性,这只会增加更多的噪音,更多的专家,并使事情变得更复杂。你是在说这个吗?本质上是的,我认为一个很好的例子,或者一百万个很好的例子,但如果我们举一个可能更容易理解的例子,关于系统管理,许多开发人员都有这种感觉,管理服务器超出了他们的范围。他们做不到。有人能把它包装在 Kubernetes 里吗?例如?他们能把它包装在另一个实体里,然后我就可以试着去理解它吗?但它最终还是归结为服务器,而且你经常会遇到这种情况,就像我多次遇到的那样,你登录到 AWS,然后你说,这是运行服务的简单方法,对吧?而且它非常复杂。在你试图完全消除一个复杂性领域时,你最终会发现你提出的解决方案变得更加复杂,并且变得更加零散,更加需要专家,因为我们如此拼命地想摆脱一些固有的复杂性。如果你是一个有网页开发人员的小团队,正在开发一个系统,你应该渴望对 Linux 的工作方式有一个基本的了解,例如。你应该有一个基本的了解,哦,这里有一些端口,它们是打开的,我可以 SSH 到一台机器,等等。因为如果你不愿意理解这一点,你将被迫理解,基本上,同样的事情被包装在一个通常是商业套餐中,然后看起来,哦,你是 AWS 专家吗?那太好了。但不是真的。就像,如果你换到别的地方怎么办?如果你想摆脱这个阶层怎么办?如果你理解了基本原理,那往往更具永恒性。我认为这与 ActiveRecord 的例子相同。你实际投入的任何时间来理解 SQL 的工作原理以及查询是如何构建的等等,这些都是永恒的知识,你可以在 95 年学会这些东西,30 年后,它仍然在带来回报。这是学习如何成为一名开发人员与如何经营一家好企业理念非常契合的领域之一。杰夫·贝索斯,他恰好拥有我公司的一小部分股份,很早就告诉我和杰森,他投资于那些不会改变的事物。对他来说,亚马逊的想法是,人们明天不会醒来,希望送货速度变慢。当时,亚马逊能在他们付出的价格上两天内送达包裹是革命性的。现在他们可以在 12 小时内送达。他们一直在投资于此。当我看着开发人员时,我看到了同样的事情。你在哪里投资?如果你投资于对 SQL 的良好理解,例如,这将带来回报,可能直到永远。如果你花时间理解 Linux,服务器如何工作,它们如何连接,以及你如何设置它们,它将带来回报直到永远。现在,弄清楚什么是持久技术,什么不是持久技术,并不总是那么容易。但我认为有一些线索,有一些领域,你可以看到一个普遍的周转率非常高。我认为 JavaScript,虽然有其优点,但已经获得了这种周转的声誉,对吧?总是有新的框架。它们似乎几乎持续不了五分钟。然后就有了别的东西。这似乎不是一个你可以进行长期投资的稳定基础,这些东西将在未来带来回报。这可能是我对 Rails 感到非常自豪的事情之一。所以 Rails 是一个 Web 框架。Web 框架中有很多周转。但如果你学习了 Rails,比如说,即使是 15 年前,并且在那时学习了 ActiveRecord,你仍然可以从中获得回报。今天的 ActiveRecord,有更多。它可以做更多事情。但基本原理非常相似。事实上,你可以一直追溯到开始。如果你回到我 2004 年为 Rails 做的原始视频博客,那个 15 分钟的如何创建博客的视频,并将该代码的形状与现代 Rails 应用程序进行比较,即使是像 Shopify 这样的大型 Rails 应用程序,你也会发现该形状与 Shopify 这样的大型应用程序之间存在巨大的重叠。如果你打开一个 Shopify 控制器,你会看到类似这样的东西:嘿,这里有一个形状是可以比较的。所以,我正在尝试采用这种策略,投资于那些不会改变的事物,无论是对我自己的账户,我的个人投资带来回报,还是我所做的工作并鼓励他人采纳,都具有相同的质量,我们不是在不断地周转概念,然后扔掉它们,第二天又从头开始。我认为这是编程职业可能最公平的批评之一,就是这种没有“剩余价值”的想法。你就像每年一样,好像你从一片荒芜的土地开始,你必须重新种植和重做一切,这会让人疲惫。而且跟上步伐变得困难,以及所有其他事情,对吧?我们如何抵消这一点?我们如何确保土壤保留一些养分,以便如果我们明年重新种植,我们就能从去年、前年以及几十年前我们好好照顾我们大脑中的土壤中获益。——是的。我喜欢这个角度,专注于永恒的知识和抽象,它们不——我的意思是,好的抽象在我看来是那些,根据你所说的,它们不会让你完全脱离底层概念和这些永恒的知识。我认为 ActiveRecord 是一个绝佳的例子。所以你正在为避免所有这些层层叠加辩护。例如,你提到了基础设施,你已经多次说过,你可以自己运行 VPS,而不是通过所有这些中间商。但你认为这总是如此吗?或者也许今天,2024 年,做这些事情的工具已经跟上了商业平台提供的水平?因为,例如,我经历过 Heroku 时代,据我所知,当时自己创造类似的开发者体验并不容易。但也许 10 到 15 年后,我们有了所有工具,我们不必通过平台、服务工具、那些 SaaS 工具来做这件事。我认为你说得对。我喜欢将其与医疗专利进行类比。所以有人投入大量资金来想出一种处理糖尿病患者的新方法,例如。他们获得了专利,然后在医疗界,我认为,我不记得是多久,是 18 年,17 年,还是什么的,他们对这个想法拥有专有权,并且可以从他们投入资金来想出这个想法中获利。但然后,在某个时候,药物专利到期了,它变成了仿制药,价格暴跌,突然变成了商品。化合物只是由那些不知道他们是如何想出化合物的人组合起来的,但他们知道如何制造东西。这对世界有好处。它对双方都有好处。它实际上对世界有好处,我知道制药公司因为……昂贵的药物等等而受到很多批评,这是可以理解的。但替代方案是什么?你希望没有新药吗?你希望没有新的医疗创新吗?我认为专利制度以及医疗领域中这种短暂的制度实际上是一个很好的权衡。我们将奖励那些带来新创新的公司,如果他们偶然发现了什么,他们将获得超额的回报。然后最终我们将将其变成仿制药,我们将从中获得更大的利益。对我来说,Heroku 正是如此。Heroku 出来的时候,我认为是 2010 年左右,2011 年左右,它在人体工程学方面遥遥领先。开发者如何将他们的应用程序上线,他们理所当然地从中获得了巨大的好处,并且从中获得了巨大的经济效益。但现在,足够的时间已经过去,不仅我们谈论部署时处理的核心构建块,特别是容器化,这确实是转折点,对吧?当我们从一种部署方式,我们只是将文件移动到一个必须由系统管理员精心配置的“宠物”服务器上,而这个管理员需要坐下来四个小时。浏览器来设置所有依赖项。然后我们转向了一个我们处理容器的世界,这些容器被广泛共享,你只是依赖于一个根镜像,你只需要添加你自己的小东西,而不再需要进行所有的小宠物管理。一旦我们进入了这个领域,我们。就使得将 Heroku 这样的东西,Heroku 体验的经济学变成仿制药成为可能。这就是我过去几年一直充满热情的工作,自从我们决定 Basecamp 和 Hey 以及 37signals 的其他产品将离开云端以来,我想要一套通用的工具集,一套不与商业供应商绑定的工具集,但具有该体验的人体工程学。我不想说,“好吧,让我们回到石器时代吧。让我们回到宠物服务器,有人必须花四个小时来处理它,然后才能准备好接受部署。”不,不,我想要 Heroku 设置的人体工程学。我想要那个命令。我想要所有这些,而且我们可以拥有它。我认为同样的事情也发生在复杂的方面。我甚至不知道一个好词是什么,因为我一说那个词就有点想吐,复杂的。听起来太做作了,但我们使用的另一个词,雄心勃勃,我也讨厌。让我们称之为现代吧,因为没有更好的词了。现代 Web 应用程序,尤其是在前端。在相当长的一段时间里,要获得高保真度,这实际上是一个我喜欢的词,高保真用户界面,感觉非常快速、敏捷和响应迅速,并且可以与旧的 2005 年整个页面重新加载和刷新的方式形成对比,然后你就会失去一切。如果你想要那种应用程序风格相当长一段时间,你就不得不忍受不合理的复杂性以及不合理的——以及来自转译器、打包器、管道等的复杂性。当人们看到这种复杂性的混乱时,他们非常渴望想,我能不能付钱给别人来避免这个问题?我能不能付钱给某个平台来解决所有问题?我们经历过那个时代相当长一段时间,自己做非常复杂,然后出现了一堆平台来解决这个问题。然后底层基本原理发生了变化。浏览器赶上了。突然之间,你可以编写现代 JavaScript,它可以使用任何东西,而不仅仅是老式的 JavaScript 和文本文件,来生成那种高保真用户界面,这些文件直接发送到浏览器,而无需在你的端进行任何操作。这是另一个例子,就像,你知道吗,你有一个专利锁定时期,进步,真正的进步,而不是打折的,它是真正的进步,被锁定在这些溢价中,你必须支付的复杂性溢价。好吧,我想要一个现代应用程序,我不太喜欢如何处理它,但我必须这样做。我们和 Rails 一起经历了这件事。我将 Webpack 集成到了 Rails 中,那是什么,Rails 5.2 或 6 或什么的。我一开始就知道,哦,天哪,这在概念开销方面,在复杂性方面太昂贵了,但我想要那个东西,我不想回到过去,我想要这些现代用户界面的感觉,如果 Rails 要跟上想要开发的新应用程序,我们必须这样做。所以我有点捏着鼻子,不情愿地接受了复杂性,然后我意识到专利框架,或者专利时间到了,它已经过了专利期,现在我可以获得相同的结果而无需付出相应的复杂性,我就说,是的,给我报名,让我们摆脱打包器,让我们进入#no build,让我们做所有这些事情,只是为了摆脱所有这些复杂性,只是为了压缩复杂性。我们仍然与它是什么以及它如何工作保持联系,当我处理 JavaScript 时,例如,我仍然必须知道什么是浏览器,DOM 如何工作,我不能抽象掉所有这些,我不想抽象掉所有这些,但它占用的精力更少,头脑空间也更少,对吧?难怪在过去的时代,从 2010 年到 15 年,我们最终分裂了行业。突然出现了前端开发人员,而这些前端开发人员与后端开发人员完全是不同的类别和物种。我认为那不是一件好事,我认为这是我们在 Web 开发世界中创造的最糟糕的分裂之一,我们本可以做得更好,当时人们是全栈的。全栈,我的意思是使用标签在这里,因为全,或引号,因为全栈听起来很老,听起来过时,听起来像是你可能在 20 年前或 15 年前做的事情,而我当时想,不,不,不,我们不会那样看。我们将从单个个体能够产生的生产力来看待它,如果我们在这方面倒退,而我们已经倒退了相当长一段时间,这就是整个分裂的原因,它意味着单个个体不再能够产生我们所追求的结果,所以我们必须拥有前端开发人员,他们必须与后端开发人员分开,因为没有一个开发人员能够记住所有东西。这是承认复杂性太昂贵了,我们无法想象单个个体能够支付它。不,不,那是失败状态。我的意思是,我们应该看看,然后说,好吧,也许就像 Webpack 和其他一些复杂性一样,我们会捏着鼻子一会儿,因为我们想要结果,而且我们不知道如何才能得到它,但我们绝对应该努力解决这个问题,重新将事物结合起来,并使事物变得足够简单,以便单个个体和程序员都可以做前端和后端,而我们不需要这种行业裂痕。——但你认为我们最初是怎么走到这一步的?我的意思是,我有时认为,框架和开源工作中有很多来自大型科技公司的工作,可能更适合大型组织而不是我们其他人,小团队,但这足以解释为什么复杂性会爆炸,即使是小型项目,还是有其他激励因素或什么?你认为呢?——我认为这是关键组成部分。许多开源项目,尤其是在过去 10 到 15 年里,已经从大公司中提取出来,而动态和定价则完全不同。就像,如果 Facebook 不在乎他们需要 10 个不同的专家来组成一个团队,那没关系。一个小创业公司,绝对没关系。当我们 2003 年开始 Basecamp 时,我就是唯一的技术人员。这就是为什么我最终选择了 Ruby。这就是为什么我最终构建了 Rails,因为我需要构建工具来使那个单一的开发人员,我,如此高效和有能力,以至于我们可以完成所有事情,因为我们从来没有打算雇佣一个 10 人的团队来构建 Basecamp 的第一个版本。否则,如果那是现实,它就不会发生。这是我在去年的 Rails World 主题演讲中谈到的。我认为这种趋势,即许多开源项目被从大公司中提取出来,与另一种趋势相结合,即 SERP,零利率现象,或者它代表什么。在一段时间里,许多创业公司都得到了非常丰厚的资助,以至于工具是否高效并不重要。构建第一个原型需要一个两三个人还是十几个人的团队并不重要,因为钱是免费的,而且很容易获得。现在,那个阶段已经结束了,我认为这就是为什么我们现在开始进行这种对话,为什么我们开始看到更多地关注控制复杂性,因为它根本负担不起。我们根本没有足够的资本,很多公司也没有足够的资本可以这样浪费。你也有那个。然后你还有第三个动态,这是我在“复杂性的商人”中谈到的。复杂性卖得很好。这是开源软件的悲惨现实之一。许多开源软件,一旦它与一家试图推广它的商业公司紧密相连,有很多例子,就不再有保持简单的动力了。事实上,有很高的动力继续使其复杂化。因为如果它不复杂,为什么你需要他们的咨询服务?为什么你需要他们的追加销售?为什么你需要所有这些其他东西?简单的软件不需要所有这些周围的东西。它不需要顾问,不需要那么多培训,不需要所有这些传统的建立开源业务的途径。现在,这是一种阴谋吗?有人说,哦,让我们制造很多复杂的软件,这样我们就可以卖掉所有这些。不,不是。但激励会驱动行为。它们经常以人们不会同意的方式驱动行为。这和乌普顿·辛克莱的名言一样,一个人很难理解他薪水依赖于他不理解的东西。这就是激励,对吧?——喜欢这句名言。——这些从复杂层层叠加中获利的公司,它们有动力让这种游戏继续下去。这就是为什么我,从一开始,就从未对将我的 Rails 工作商业化感兴趣,因为我知道我可以拥有关于我们应该如何构建软件的所有崇高理想,我们应该保持简单,我们应该压缩复杂性而不是将其层层叠加。我会说,所有这些最终都会消失,因为维持和发展业务的需要会压倒一切。我最终会成为一个复杂性的商人。我对此不感兴趣。为了避免这种情况,我必须将业务的两个部分防火墙化。我通过发送最终用户应用程序赚钱,然后我乐于为开发人员制作工具,而——而不必担心他们是否使用它,或者如何使用它,这意味着我不必追求与复杂性商人必须追求的相同的东西。我们可以更忠实于一种连贯的软件构建模型,即使它不像你所说的,在市场上那么受欢迎,那么有响应。这就是为什么,例如,去年我们从我们的一个前端包中删除 TypeScript 时引起了如此大的争议,因为人们有一种想法,市场正在要求类型安全。市场正在要求……更多的 TypeScript。你为什么不提供市场要求的东西?我不在乎市场想要什么。我想按照我想的方式构建软件。我想保持简单。我不喜欢静态类型。我不喜欢显式类型。我实际上喜欢 JavaScript。我认为它是一种很棒的语言。它是我的第二喜欢的语言,遥遥领先,但第二喜欢的语言,Ruby。我不想用 TypeScript 来玷污它。现在,我可以这么说,同时仍然承认其他人正在从 TypeScript 中找到价值,他们喜欢它。太棒了。很好。别让我也这样做。对吧?以及那些,或者那种做出没有人会给你许可的决定的能力,是我喜欢的。对吧?就像如果我们有 Rails 公司,我们有一个董事会,而董事会正在查看关于 TypeScript 日益增长的受欢迎程度的图表,他们都会说,嗯,我们应该加入一些 TypeScript。你能以某种方式将 TypeScript 加入下一版本吗?我不想要这些激励。你认为,你认为这是不可避免的吗?我的意思是,我可以想到之后的戏剧,而且你可能已经看到了,彼得·莱维尔斯在 Lex Friedman 的采访中,他明确谈到了由公司支持的开源框架,这些公司可能会提供托管服务。这会产生,你知道,对每个人来说,激励措施都很模糊。你认为,因为在某种程度上,提供商有动力创造某种复杂性或锁定元素。你认为这是不可避免的吗?一旦你尝试通过一家公司来支持开源,使其在商业上可行,最终就会导致过度复杂化和锁定趋势,因为追求利润。简短的回答。是的。我认为这正是激励因素所指向的。我认为有些公司比其他公司更成功地阻止了这一点。有些公司是由个人组成的,他们更强烈地认为要保持简单。他们比其他人更能抵制这些激励的拉力,但最终激励将塑造整个行业以及它的发展方向。我认为这就是为什么我们仍然能够如此特立独行地进行 Rails 工作以及我所做的事情,因为这些激励因素根本不会吸引我。所以,要存在于这个引力场之外,你就可以在世界上自由漂浮。我认为这让很多人感到不安,为什么你不跟随潮流?为什么你不跟随这个大方向?——但那就是礼物。那就是摆脱引力场、远离那些激励因素的礼物。我认为我之前用过医疗行业的类比。我认为这与医疗行业非常相似。有很强的动力去创造治疗方法,而不是治愈方法。开发一种你必须年复一年服用的治疗方法来处理某种疾病,比开发一种治愈方法要有利可图得多,一种治愈方法你只能卖一次。你可能从一次销售中获利,但一种需要年复一年服用的治疗计划,就像一种订阅。这就是整个世界在软件中如何转变的,对吧?就像我们都想要订阅。我们都想要经常性收入。我们都想要 MRR 和 ARR 以及所有其他东西。我们不再只是想卖产品了。那不像把人们变成持续的现金流那么有利可图,对吧?我也在某种程度上犯了这个错误,在我商业工作中,对吧?就像我们以订阅方式销售 Basecamp。所以这就是为什么我能认识到这一点,对吧?我可以看到,哦,哇,那是一个非常强大的力量,它会把你拉进去,拉近它。但这也是为什么我试图在商业世界中与之抗争。所以,Once.com 是一个直接源于此的想法,试图逃避这些激励。我们能否将软件恢复为产品而不是服务?这在商业上。但这正是我一直以来在开源世界中的想法。我不想提供服务。我不想承担供应给你东西的责任,在那里我必须担心正常运行时间。不,不,我卖给你的是一个工具包,我卖给你。我免费送给你,对吧?这是一个礼物。现在这些是你的工具。这里有一把锤子,这里有一把锯子,这里有一把螺丝刀。你可以用这些工具建造出令人惊叹的东西。如果你投入足够的努力,你可以用这个工具集建造出令人惊叹的泰姬陵。但这是一个礼物,现在你得靠自己了。如果你不知道如何使用锯子,并且你的一根手指被切断了,我概不负责。锯子需要锋利,或者锋利。否则它就不能很好地砍伐那些树木,砍掉一根手指。很好,那是套餐的一部分。这就是我一直以来对开源和我的参与的看法。我把它看作是一种礼物经济。实际上,即使那也是一个误称。它不是经济,它是一种礼物交换。我来到礼物交换,然后我说,大家好,这里有一些我为自己制作的工具。你可以免费拿走。如果你不拿,我负责。你有任何可能分享的工具吗?我们可以交易吗?这就是 Rails 成为今天的样子,多年来有近 7000 人贡献了他们的工具,在礼物交换中。我们来来回回。所有这些礼物分享的总和是一个极其充满活力的评论,与公地悲剧相反,对吧?就像是战利品,是评论的辉煌。这就是开源在运作良好时的样子。喜欢这个,喜欢这个观点。我喜欢你和 ones that.com 所做的工作。你之前说过,追逐 MRR 和订阅,每个人都在这样做,因为它更有利可图。我实际上并不完全确定它是否更有利可图。我认为它更可预测。这让人们更舒适。但有时我认为一次性购买可能同样有利可图,甚至更有利可图。我认为它们作为一项业务很难处理。但我不会认为它们不如有利可图。这是一个很棒的观点。我在这里想到了另一个类比,那就是电影业。电影的制作成本越来越高。随着成本越来越高,你需要别人的钱。别人的钱通常会带来这样的要求:你知道吗?我想要可预测的回报。我不想有一天一无所获。第二天却获得百倍的回报。人类非常厌恶风险。通常,他们会倾向于更安全的选择。这就是我们如何得到一万亿部续集,一切都必须是系列。一切都必须是漫威第 27 部,因为那是一个久经考验的公式,我们可以从中获得东西。这在某种程度上是有效的,直到它不再有效。最近电影业的动荡很大程度上是因为其中一些配方不再像以前那样奏效了。我认为订阅软件世界也是如此。我们很长一段时间以来,每个人都接受了这样一个事实,是的,当然,旧软件应该按订阅出售。然后最终消费者,无论是个人还是企业,都会意识到,嘿,等等,我正在为 475 个不同的订阅付费。是的,每个单独的可能并不那么昂贵。你把它们加起来,它绝对是惊人的昂贵。这必须改变。这就是我之所以对 Once.com 的想法感兴趣的原因之一,因为它感觉像是当每个人都在拐弯时,你却在之字形前进。我们拐弯了很长时间,对吧?就像 Basecamp 已经 20 岁了,我们在 SaaS 浪潮之前就写下了它,当时你仍然需要说服人们在线上输入信用卡是安全的。然后你意识到,你知道吗,一旦每个人都转向了某种模式,那么就有了新的开放领域供替代。软件的许多工作方式都是如此,无论是商业方面还是其他方面。钟摆在摆动,对吧?我认为我们早就应该摆脱一切都按订阅收费的模式了。是的,是的,是的,喜欢这个。所以我们谈了很多关于复杂性,软件的去向。所以,我必须问你关于人工智能。因为几天前,我看了那个视频,我认为是一个八岁的女孩完全通过将自己交给人工智能来编码。她做了一个哈利波特聊天机器人,我认为我们使用 React 连接到 OpenAI。你有着对软件开发方向的强烈看法的历史。所以我想利用这个机会来弄清楚人工智能可能会把我们带到哪里。首先,你用人工智能进行编码吗?我把它用作一个非驾驶的结对程序员。我非常喜欢它。绝对喜欢它。我们几个月前就开始了,并且一直有一个 LLM 在运行,我会问问题,就像我设想如果我坐在那里进行结对编程一样,我会问我的结对程序员,嘿,你知道如何使用这个 API 吗?你知道如何做这个吗?我喜欢它。但我也发现,它有一个非常微妙的界限,在你主动侵蚀你自己的肌肉之前。这就像跳进一个外骨骼,然后你说,哦,天哪,我拥有超人的力量,但你越使用那个外骨骼而不是你自己的肌肉,那些肌肉就越萎缩。肌肉就是这样,对吧?要么使用它们,要么失去它们。我在处理 Amakub 时发现了这一点。Amakub 是我对 Ubuntu 的混搭,可以说,因为我切换到了 Linux,我想要一个漂亮、高效的编程环境,我发现 Ubuntu 的默认安装让我有所期待。我不得不学习很多不同的东西来弄清楚,哦,我需要这个包,那个包来把它们组合起来。所以我想,嘿,你知道吗,我可以构建这个,我可以构建一种方法来将 Ubuntu 从这个通用的东西,它必须吸引从学校到政府办公室的各种人,变成一个对开发者,我,我自己的,看起来很棒的东西。所以,我开始着手这项工作,对吧?我开始用 Bash 来做,因为我想,你知道吗,我可以用 Ruby 来做,我们可以用 Ruby,但这感觉像是一个 Bash 的工作,我发现这很有趣。这是关于设置东西,关于安装东西等等。Bash 实际上,它作为一个编程语言受到了很多批评,我不会写 Bash 风格的 Web 应用程序,不会。但作为配置工具来设置新机器,我认为它实际上是正确的工具。它在推动界限方面非常有效。一旦我试图做一些复杂的事情,需要更多的编程,我就会说,“是的,Bash 真的不想让我这样做,对吧?”它不想。让我找一个更简单的方法来做这件事,我可以用一些条件语句等等来做。但无论如何,我以前没有怎么用过 Bash。所以,我经常会问 LLM,“我该如何写这个?”也许我会写一些 Ruby,然后让它帮我翻译成 Bash。我发现的是,A,它工作得非常好。天哪。在 Stack Overflow 或 Google 或其他地方查找语法或习语会花费我更长的时间,而我却能立即得到答案。我也发现,这些答案需要更长的时间才能在肌肉记忆中沉淀下来。我会不断地查找相同的东西。对我来说,那是“哦,该死”的时刻之一。就像,我真的学到什么了吗?在这个 LLM 会话结束时,我比开始时更聪明了吗?还是我实际上有点愚蠢了?我没有完整的答案。我并没有停止使用 LLM。我仍然觉得它们非常引人注目。其中一个原因,讽刺的是,是 Google 已经变得很糟糕了。我记得当 Google 是我们学习编程的方式时,因为它是查找网络上事物的一种非常强大的方式。网络是一个不同的地方。它没有被 cookie 横幅和各种横幅以及其他东西所覆盖。有更多直接的信息。现在,LLM 基本上给了我们那个好的 Google,那个你问问题就能得到,希望是正确答案的 Google。所以,我绝不反对人工智能。一个八岁的女孩可以坐下来做一个完整的程序,这真是太神奇了。我还不清楚人工智能的未来到底是什么。甚至我想要什么,这是另一件事。我实际上喜欢编程。我喜欢编程不仅仅是为了得到解决方案。我也喜欢这个。但我喜欢编程的方式,就像我实际上不弹奏乐器一样。但我家里有几个人弹奏乐器。我妻子弹奏乐器。我的孩子们弹奏乐器。他们喜欢演奏。我妻子喜欢坐在钢琴前弹奏一首我们可以放在 Spotify 上的歌曲。你根本不需要努力。你不需要为此付出任何努力。我们就能听到音乐。不,不,不。我想弹钢琴。我想成为那个弹奏曲子的人。我对编程的感觉就是这样。我喜欢弹奏电脑的钢琴。那么,如果我能得到那个的 Spotify 版本呢?那么,如果我能让 AI 来做这件事呢?那真的是我想要的吗?现在,当然,在某个时候,我想要的东西与商业可行性以及世界如何变化之间存在交叉点。我的意思是,你可以在 1920 年代去说,“我真的很喜欢马。我喜欢用马送牛奶。”没错。是的,好吧。你知道吗?这已经不再是一个选择了。你不能再用马送牛奶了。——我们必须谈谈,但马还在那里,对吧?马还在那里。它们现在有点像奢侈的娱乐品。也许编程也将变成这样,本质上是骑马。一群特权人士,他们只是喜欢这样,可以坐下来继续编程。但我也认为,我们可能正处于炒作周期的顶峰,就像 2017 年的自动驾驶汽车一样。2017 年,马斯克出来做了声明。到年底,我的意思是,你可以通过你的 Model S 赚钱,因为它们会载着陌生人。它实际上会是一项投资。而其他一些汽车制造商则说,“我们甚至不会在这些车里安装方向盘了。”因为,是的,那没有发生。就像,现在更接近发生了。——伊恩·韦莫在旧金山和多伦多给很多人留下了深刻的印象。——是的。——FSD 12.5 令人印象深刻。——但花了很长时间。——是的。——我们越来越近了。但什么时候才能实现呢?对吧?你可以回想一下。我记得当我看到《割草机人》时,这部 1995 年的经典虚拟现实电影。我看了之后,我说,“我的天哪。大约两年后,我将生活在虚拟现实中。我将成为一个虚拟形象,漂浮在太空中。”是的,没有,那没有发生,对吧?我们今天有 VR。它比以往任何时候都好。我喜欢玩,什么游戏?Beat Saber。游戏。很棒。太棒了。它重写了社会吗?不真的。还记得 Segway 吗?Segway 出来了……嗯,实际上,你必须相当老才能记得 Segway。我想它是在 2001 年左右出来的。他们说,“我们将重写城市。我们都将骑着这些两轮车到处跑,这就是……”然后更早,在 1950 年代,我想是这样,冯·诺依曼和所有计算机科学的先驱们都说,“是的,在接下来的十年里,我们将拥有通用人工智能。”是的,好吧。很难预测未来。事实上,几乎是不可能的。我们能做的最好的事情就是看看已经存在的未来,但只是还没有广泛传播。这是那句名言,你可以看看现在已经存在的东西,然后说,我们会更多地拥有它吗?以那种方式,可能吧,但很难想象不存在的东西。就像一个可以写我们所有代码的人工智能,一个我可以这样说,“嘿,你能帮我管理 Basecamp 吗?听听一些客户的意见,一些功能请求,然后你就可以自己合并拉取请求了。”就像那个通用人工智能的理想,我们会实现吗?现在,当然,在我们现在所处的位置和那个可以为我们做整个业务的通用人工智能之间有很多中间阶段,而且那可能很有帮助,但我们不知道它在哪里。而且这些东西往往非常不均衡,我们获得了巨大的、巨大的能力加速。然后我们推断,“哦,在曲线的早期,如果你只是把这条曲线向前推五年,我们将拥有通用人工智能。”一个很好的例子是喷气式飞机。我们从莱特兄弟开始,那是 1907 年左右,我们从纽约时报的著名文章开始说,“人类飞行需要一万年。”六个月后,他们真的在飞行。无论如何,十年后,我们在战争中使用飞机。另一个,那是什么,三十四十年后,我们发明了喷气式战斗机。然后我们又过了几十年就登上了月球。我们发明了洲际飞行,如果你在 1950 年代,他们刚刚发明了 737 的前身,你可能会想,“我的天哪,20 年后,我们将从日本飞往哥本哈根,只需一个小时。”然后就停止了。它就停止了,对吧?我们达到了一个天花板,我们仍然在处理,我认为 737 是基于 50 年代原始机身的迭代版本。我们只是达到了一个我们无法真正改进的天花板。我的意思是,我们已经改进了。燃油经济性有所提高。梦幻客机上的窗户比……1950 年代的大了 30%——相当温和,对吧?!相当温和!现在我们是否正处于人工智能的喷气式洲际飞机进化的 1950 年代或 60 年代天花板的边缘。我不知道。这不令人兴奋吗?这不令人兴奋吗?这就是我觉得整个人工智能辩论如此吸引人的地方,就像,我们正处于一个我们可以想象两种方式的时刻。我们可以想象通用人工智能就像,可能还有三年,可能还有五年,也许整个社会将在五年内被改写。这真是令人惊叹的想法,对吧?或者我们是 1995 年的 VR。是的。我们是 1964 年的喷气式飞机。我们是 1958 年的人工智能。我不知道。那很令人兴奋。我不知道下一季的现实会给我们带来什么。很好。是的。我同意。而且我认为预测未来是不可能的。而且从长远来看思考它并没有多大用处。我认为是这样。我进展太快了。所以我认为最有用方法,即使是工程师,也只是从好奇心出发来处理这些事情。我的意思是,有时我听到这种形式,或者,我感觉到了,而且我认为,因为我喜欢编程。
就像你说的,有时我担心这会变成一种负担,因为我会抵制使用更多工具。所以我尝试,甚至强迫自己去尝试新事物。顺便说一句,我非常喜欢你用 Bash 举的例子,因为我认为当前一代人工智能工具最能实现的一件事就是让你在所有语言中都具备基本的熟练度,这能让你真正地为工作选择合适的工具。如果你看看过去 10 到 15 年,很多事情都趋于相同,你知道的,相同的语言,相同的框架,因为移植你的技能非常方便,你知道的,选择创建原生应用程序之类的。所以我很高兴看到许多曾经是小众的、现在仍然是小众的事物的障碍已经大大降低了,因为你可以为此使用人工智能。而不是,你知道的,我已经非常精通 Rails 和 Ruby,而人工智能让我更上一层楼。我并不真正相信这一点,但我非常相信你所说的用例。这也是我亲身经历过的。我认为我从这次经历中得出的结论是,你必须在某个时候尝试摘掉辅助轮。是的,你说人工智能能让你更上一层楼,得到更快的答案。但有时也要尝试一下,我甚至能不靠它骑车吗?或者这现在已经变成了一种习得性无助,我不知道如何保持自己的平衡?我需要那些辅助轮,永远吗?这是一种我不太自在的依赖程度。但我也完全同意你的看法,你不可能通过退后一步大喊“我们不应该使用人工智能”来获得任何东西。我们应该暂停人工智能六个月。你在说什么?进步只会不断前进,你必须适应它。人类历史上没有任何一项发明能够实质性地提高人类的生产力,而我们却能够说,“是的,实际上,我们就不做那个了。”总会有人去做。在大多数情况下,生产力的提高对整个地球来说都是净收益。我们可以以新的、创新的方式利用我们多余的产能,这会提升我们所有人,这也是我们经济增长以及所有其他事物的原因。甚至不是经济增长,这听起来太抽象了。增长的繁荣,我们可以获得更多,我们可以获得更多,这总的来说是一件好事。是的,我完全同意。我们还有几分钟时间,但我真的很想问你这个问题,然后转到一个完全不同的话题。因为不是每个人都知道你也是一位非常有成就的赛车手。你参加过勒芒 11 次。这是最高级别的专业水平。我现实生活中不赛车,我玩很多模拟赛车。这是一个非常自私的问题。也许通讯的读者对此并不关心,但我想问。你如何在一个与你的核心工作完全不同的领域,在非常有限的时间里,而且你已经做了这么长时间,学习某件事并达到最高水平?有趣的是,我学习事物的方法论,无论我在哪个领域,都是一样的。我曾希望得到这个答案。我学习编程时并没有意识到这一点。但在我达到一定的熟练程度后,我能够回顾并思考我用来更快地学习编程并更快地变得熟练的一些技巧。然后我将这些相同的技巧明确地应用于摄影。我想拍出体面、好、出色的照片,仅仅是为了记录我、我的家人以及任何事物的回忆。我只是想,“好吧,编程中有什么是有效的?”其中之一是培养一双能够欣赏好东西的眼睛。它为什么好?在摄影中,这是教你分辨白平衡的能力,例如。它偏了吗?它有黄色调吗?它有品红色调吗?那里有些东西。构图,三分法,诸如此类的事情。哦,有一种方法可以注意到这一点。色彩校正,如何让图像更有趣?其中一些是通过看照片来培养的,我会看一张好照片,然后尝试在自己的场景中重现它。然后我就会学到什么很难。哦,这是我必须调整的东西,等等。你识别出好的东西。你还不完全知道为什么某样东西好,但你然后就尝试去复制它。不要试图说,“哦,让我来想出一些超级有创意的。”不,让我先学习基础知识。我通过跟随别人来学习基础知识,简单地尝试复制他们所做的。赛车也是完全一样。从我开始赛车的那一刻起,我就会尝试寻找那些比我快得多的职业赛车手。然后我就可以比较数据叠加。这是它与编程非常接近的一种方式。你得到一个单圈的诊断,你看到,“哦,这个人在这里油门。他们以这种方式松开刹车。”然后你意识到,“这就是我需要做的。”然后你也意识到这并不容易。仅仅知道某事与做某事是不同的。我知道我应该在勒芒的第一个减速带前 120 米处刹车。我应该以这种方式减缓刹车。我从大约 40 巴开始,我需要达到 80 巴,但到了顶点,我需要稍微松开一点,因为路中间有一个颠簸。我可以看到数据中的颠簸,因为我们有减震器轨迹。你看到减震器轨迹中的峰值。然后我必须再次加速,因为我需要汽车的前部载荷。我需要汽车的质量在前轮上,才能让我转弯,从而完成下一个弯道。其中有很多是首先确定什么实际上很重要。什么更重要?是刹车阶段吗?是松开阶段吗?是出弯吗?那里有一些知识。然后一旦你有了知识,就尝试复制它,然后以这种方式建立你的技能。我发现赛车驾驶实际上与学习摄影非常相似。它与学习编程非常相似。很多都来自于初学者的心态。这是一个学习概念,你想到,“首先,我将完全谦虚。我不好。”没有人,让我这样说吧。没有人第一次坐进赛车时就能开得很快。这只是你可能更有天赋,这意味着你可能比其他人学得更快。但你必须进去,在你学习之前,你会很糟糕。拥抱糟糕。拥抱你字面意义上的无能。你没有能力做这件事。因此,你应该最大限度地向比你更有能力的人敞开心扉,向他们学习。这就是我看到的,尤其是在赛车驾驶中,但在所有领域都是如此,人们很快就放弃了,因为他们达到了基本的熟练程度,然后他们认为自己很棒。我总是想,你知道吗?这在我看来太愚蠢了,尤其是在赛车驾驶中,秒表会告诉你你是否很棒,对吧?如果你偏离了杆位,你就不是最棒的。——非常客观。这让我想到,你知道吗?首先,我不是最棒的。我什么都不知道。我应该像海绵一样。我应该接受我不好这个事实。然后我应该向那些擅长的人学习。然后我应该将我的比较对象,至少是我的直觉,视为整个世界,对吧?我不想成为我当地赛道上最快的赛车手。那对我没有任何意义。在我赛车生涯的早期,我就想,“我想参加勒芒。”参加勒芒的人都很厉害。实际上,他们不是厉害。他们是跑车驾驶方面世界上最好的,对吧?所以要在那个水平上竞争,那就是……我应该衡量自己的标准,比如成为我当地赛道上最快的人,这对我实现那个目标没有任何帮助。所以它让我长时间保持初学者的心态,就像我实际上相当……我可以为自己拍拍胸脯,当我开始与世界上最好的人竞争时,按照我本可以与之比较的当地标准,我相当快。但我很糟糕,而且与世界上真正最好的人相比,我仍然在很大程度上很糟糕。所以很多事情都关乎如何选择你的尺度?你选择谁,你认为在你所在的行业或领域中你想向他们学习,以及你如何毫无自大地复制他们所做的事情?是的,太棒了。我的意思是,我从中得到的启示是培养对好东西的良好品味,拥抱糟糕的心态,并非常系统地复制、改进,不要与你……你知道的,你当地的竞争对手进行比较,而是想象你想要去的地方,你想象你想在勒芒比赛。是的。是的,太棒了,并且要利用技术。你玩模拟赛车吗?例如,你呢?你知道,有一个日益增长的趋势。模拟赛车正在帮助很多人过渡到现实生活中的赛车,而维斯塔潘对此深信不疑,很多人。我们是技术人员。所以我很高兴技术能够普及像赛车这样的领域,而赛车历史上非常昂贵。所以你对此有什么看法?这是你做的事情还是你关注的事情?是的,我喜欢模拟赛车,就是这个意义。我的意思是,赛车对于几乎世界上所有人来说都极其昂贵且难以承受,如果你想在勒芒这样的地方比赛。所以,我们都能通过越来越引人注目的模拟来接触它,这对我来说是惊人的。我认为我的问题是模拟还不够好。我完全相信这个普遍的概念,我也有模拟器,我用模拟器来准备。但我也很清楚模拟器中的物理反馈与汽车中的物理反馈之间的距离。我从驾驶赛车中获得的满足感很大一部分,特别是像我驾驶的那种汽车,即那些产生超过 4 G 的 LMP 原型车,那种物理感觉是我驾驶的一半。你知道的。当我坐在模拟器里时,那不存在,对吧?你得不到那种物理反馈,你通过方向盘获得物理反馈。这是我看到模拟技术发展真正进步的领域之一。我想我大约 10 年前得到了我的第一个模拟器,方向盘还可以。然后我大约一年半前得到了一个新的模拟器。我当时想,我的天,方向盘感觉就像在真车里一样。我通过方向盘获得的反馈现在已经达到了现实的 97% 的保真度。哇,这太不可思议了。如果我能,如果我能把其他东西也达到那个水平,我很乐意放弃现实赛车,然后全力投入模拟赛车。但我们还没有达到那个水平,而且这种怪异的价值对我来说很难应对。事实上,我可以说,对于我所做的赛车类型,我发现过多的模拟赛车实际上是有害的,因为我开始内化和编程我的大脑,使其适应模拟器中的现实刺激,就像你有时会做一些游戏引擎的物理不允许你做的事情一样。然后你就会在真实的赛道上,现在你受到宇宙物理定律的约束,而不是游戏引擎的物理定律,你可能会遇到一些糟糕的惊喜。我知道有一些模拟赛车手和职业赛车手非常擅长区分这些事情并来回切换。我所接受的是,我变得真正擅长赛车驾驶的方式是,我在大脑中编程一些东西,然后一遍又一遍地运行这个程序。我非常擅长坚持一个程序。我不擅长改变程序。所以我不能只在一个类别中快速,跳到另一个类别,在模拟器中快速,然后跳到现实赛车,因为我必须卸载旧程序,然后加载新程序,对吧?我希望它能像《黑客帝国》那样,他只是插进去说,“我知道功夫。”不幸的是,对我来说不是这样的。我希望如此,但是的,我真的很喜欢模拟赛车的潜力。我迫不及待地想让它变得更好,直到他们以某种方式找到模拟 G 力的方法。是的,是的,我们也希望如此。我们最终会到达那里的。也许你知道,我不知道我们现在在哪里,无论是,你知道的,在膨胀的期望中,你知道的,比如人工智能。也许我们会有点膨胀,或者,你知道的,我们会继续进步,但最终我们会到达那里。所以大卫,再次感谢你这次聊天。我非常喜欢。再次感谢你来到节目。这是我的荣幸。这太棒了。非常感谢你。谢谢。