Linguista

「LexFridman#461」Lex Fridman与ThePrimeagen访谈

视频链接:ThePrimeagen:Programming, AI, ADHD, Productivity, Addiction, and God | Lex Fridman Podcast #461 内容提要

摘要

本次 Lex Fridman 对话 ThePrimagen (Michael Pollson) 是一次深入探讨编程、人生、以及两者之间关系的访谈。ThePrimagen 分享了他对编程的热爱,最初源于大学时对链表和递归的顿悟,以及 Lisp 和游戏开发经历如何激发了他对创造的无限可能性的认识。

访谈中,他坦诚地讨论了编程中最痛苦的部分,并非技术难题,而是当一切都变得已知、缺乏挑战和创造力时的那种“无聊”。他强调了“整个系统”视角的重要性,并介绍了自己作为一名“工具工程师”的角色,喜欢为其他开发者构建工具。

穿插在技术讨论之间,ThePrimagen 讲述了他极具戏剧性的人生故事。他分享了早年接触色情、父亲去世、以及高中时期社交困难的经历。他坦诚地描述了自己与毒品(包括冰毒)的斗争,以及一次自杀未遂如何成为他的人生转折点。随后,他描述了一次深刻的宗教体验如何让他获得了“良知”,并最终引领他戒除了毒瘾、色情,并在学业上取得突破。这段经历深深地影响了他对人生价值、人际关系(特别是与妻子的关系)以及爱的理解。

在 Netflix 的工作经历部分,ThePrimagen 详细描述了他如何从一个对 Groovy 语言一无所知的工程师,成长为解决关键问题的专家。他分享了几个“破坏生产环境”的趣闻,并强调了理解现有代码库、而非总是从头开始的重要性。他通过“Repulsive Grizzly Attack”漏洞的故事,揭示了大型软件系统面临的潜在安全风险,以及调试的复杂性。

访谈中,ThePrimagen 深入探讨了编程工具和方法。他极力推崇 Kinesis Advantage 键盘和 Neovim 编辑器(特别是 Vim 动作),强调了通过优化工具来提高效率和减少认知负担的重要性。他详细解释了自己的工作流程,包括单显示器设置、大量快捷键的使用,以及如何通过 Harpoon 插件快速在文件之间切换。他还分享了自己对“work hard, get smart”的理解,强调了持续努力的重要性。

关于 AI,ThePrimagen 持有复杂而谨慎的态度。他承认 AI 在某些方面(如生成样板代码、提供不同视角)的潜力,但也表达了对过度依赖 AI、忽视基础技能的担忧。他认为,优秀的程序员应该学会利用 AI 作为工具,但不能完全被 AI 取代,尤其是在处理复杂、需要“关心”和“品味”的任务时。他强调, 尤其要学会debug。 他还分享了自己使用 AI(如 Claude)进行非编程任务(如模拟 Twitch 聊天)的实验。

访谈最后,ThePrimagen 强调了爱、宽恕和人际关系的重要性。他认为,编程不仅仅是一项工作,更是一种充满乐趣和创造力的活动,甚至是人生意义的来源。他鼓励年轻的程序员要热爱编程,但也要珍视生活中真正有价值的东西,不要为了追求成功而牺牲健康、关系和道德。同时, 他也认为要不断学习. 学习各种不同的编程语言, 并能很好地掌握所使用的编程工具.

总而言之,这是一次坦诚、深刻且鼓舞人心的对话,展现了一位程序员在技术、人生和精神层面的多重探索,以及他对编程的热爱、对人生的思考,以及对未来的展望。

访谈实录

双方的角色:


简介 (0:00)

Lex: 欢迎大家收听 Lex Fridman 播客。今天我们的嘉宾是 Michael Pollson,他在网上更为人知的名字是 thePrimagen。他是一位程序员,通过软件构建有趣的东西,娱乐并启发了数百万人。无论您是新手还是经验丰富的开发人员,多年来一直在软件工程领域奋战,总之,thePrimagen 是一位传奇的程序员,也是一个伟大的人,他的人生故事跌宕起伏,鼓舞人心。

Lex: 为了支持这个播客,请查看我们在描述中的赞助商。现在,亲爱的朋友们,有请 thePrimagen。


对编程的热爱 (0:42)

Lex: 你最喜欢编程的哪一点?编程时,什么能给你带来快乐?

Prim: 我可以告诉你我第一次在编程中感受到爱或快乐,或者说那种兴奋,那是在大学里。那是数据结构课的第二节课,授课老师 Ray Babcock 正在讲链表。在蒙大拿州立大学,你必须学习 Java,所以他解释了整个链表的概念。然后他展示了代码,代码里写着 abstract class Node 之类的,我不记得具体是什么了。然后它有一个私有成员,而这个私有成员的类型是 Node。我以前从未见过这样的代码:一个名为 Node 的类,它的一个成员是它自己。我第一次意识到:“天哪,这没有尽头。没有办法迭代。这不是 10 个项目的集合,这是一个无限项目的集合。”那一刻,我的思绪仿佛爆炸了。你真正能表达的东西是巨大的,我能看到内存的样子,我能看到这种在空间中跳跃的东西。我记得我完全被震撼了,因为在那之前,一切都只是“我有一个包含 10 个项目的列表,我有一个包含 20 个项目的列表”。它非常死板和渺小,我构建的东西也非常小和微不足道。突然间,我觉得在那一刻我可以构建任何东西。这太神奇了,我记得坐在教室里,我不记得那些课有多长,但我记得我完全被这个概念深深地影响了。

Prim: 我就坐在那里看着,我在软件工程课上也有过完全相同的经历。当我们讨论装饰器模式时,你可以用递归的方式不断地构建这些对象。我并不是说这样做是个好主意,但仅仅是看着它,意识到有这么多奇怪而独特的方法可以解决问题,就像你的头脑能想到的任何东西,你都可以创造出来。我记得我对这种可能性感到非常兴奋,一切皆有可能。

Lex: 是的,让我们来哲学地探讨一下链表。对于不了解的人来说,链表中的节点对它所在的世界一无所知。它只知道它所链接的东西,它的邻居。也许这是对我们所有人的象征,一个隐喻。在这个星球上有数十亿人,而我们只了解我们当地的小网络。这很美,你会意识到,在那个简单的数据结构中,你可以构建任意大的系统,它们就像穿过内存的根。当然,这就是为什么你会得到所有允许你向内存中倾倒垃圾并产生内存泄漏的编程语言,因此,当你试图找出未释放的内存在哪里时,你会产生无限的痛苦。对我来说,是的,你说的链表确实很美。递归也是,当我最终理解了编写递归函数的含义时。是什么,是什么让你明白了?因为我想我们可能都做过阶乘,你知道,只是对它做一个快速的阶乘。但它并没有真正触及本质。是什么让它触及本质了?

Prim: 我不记得第一次了。我记得我的第一次。你怎么能不记得你的第一次呢?

Prim: 那是魔法。我经历过太多次了。

Lex: 你是个链表爱好者,你可能很习惯递归了。

Prim: 我只记得周围都是括号的海洋。我的意思是,那可能是我在高中的时候,我想是 Java 或 C++。哇,我怎么不记得了?一定是 C++。然后大学里,通用的垃圾软件工程课程是 Java,但那些叛逆者,那些酷孩子们都在用 Lisp。那时你在做人工智能,当时所谓的人工智能,那就是 Lisp。如果你想编写一个国际象棋引擎,你会使用 Lisp。

Prim: 对我来说,我真正爱上编程的时刻可能是在使用 Lisp 并编写程序和国际象棋引擎,各种玩游戏的引擎的时候。然后我可以和那个东西对战,而那个东西会打败我。被你创造的东西摧毁的乐趣。生命游戏也是,细胞自动机。那时我构建了各种编程语言,这与编程语言无关,更多的是与你创建的系统有关。这让我充满了无限的快乐。类似于链表的情况,创建一个系统,其中每个单独的单元格只知道它的邻居,并以非常简单的规则运行。但是,当你把这个系统作为一个整体来看待,并允许它随着时间的推移而发展时,它可以创造出无限的复杂性。天哪,有很多时刻,我只是看着细胞自动机创造的美丽复杂性,这让我充满了无限的快乐。但是,是的,我只记得括号。所以我对第一次的最初记忆淹没在括号的海洋中。

Prim: 天哪,我的第一次是用 Java 写的。虽然我的第一次更死板一些,有点像企业,你知道,一种企业的体验,但冰冷而毫无意义。我在一个实验室里,每个人都在使用 CentOS,或者 CentOS,我总是叫它 CentOS the Freshmaker。所以我就像在一个非常冰冷的环境中。

Lex: 很好,谢谢。

Prim: 我在一个冰冷、死板的环境中,用我的微软键盘用 Java 编程。我仍然有这种绝望的记忆,因为我热爱编程。这是在链表之后,我无法理解递归。所以我去了大学商店,买了一本书,是 Dell 和 Dell 学习 Java,它有一个关于递归的部分。我打开它开始阅读,但它并没有打动我。我就想,也许我不是一个程序员,也许我不够格进入这个能够弄清楚递归到底是什么意思的人的圈子。所以 Dell 和 Dell,我仍然记得他们的确切短语是“每个崭露头角的年轻开发者都会解决这个递归问题”,那就是汉诺塔。你猜怎么着,我不知道我现在是否能解决汉诺塔问题。这是一个非常难的递归问题。我就坐在那里想:“天哪,我做不到。”我在实验室里坐了8个小时,10个小时做这些事情,非常担心这是递归周,我们必须做一个实验室作业,我做不到。我记得我真的很担心。然后因为我总是,我的大问题是,好吧,做阶乘,为什么不使用 for 循环?好吧,斐波那契数列呢?为什么不使用 for 循环?我不明白递归的目的是什么,我不明白它。它如此强大,为什么?它看起来像一个非常复杂的 for 循环。我就是不明白。然后那天实验室来了,题目是“我要给你一个二维数组,你需要从文件中读取。这是一个起始位置,这是一个结束位置,这是一个墙。我希望你找到一条穿过迷宫的路径。”我就坐在那里想:“好吧,我想我可以向上走,我可以创建一个已访问的网格,这样我就知道不要再访问这些地方了。”突然间,一切都开始明白了。我想:“等等,我不知道迷宫,但如果我向上、右、下和左走,每次我到过那个方块就跳回去,不要访问它。”就像,我可以,它会一直进行下去。在那一刻,我意识到我实际上理解了递归,我一直都理解递归,我只是从来没有遇到过一个真正有意义使用它的问题。这就是我最大的失败,我用我现有的问题来衡量我的理解,这些问题只是列表遍历,这不是递归的一个好用途。我记得那种解放的感觉,天哪,递归,那是我生命中一个伟大的时刻。

Prim: 我的意思是,公平地说,这确实需要一种信念的飞跃,因为人们会告诉你,那些墨守成规、教条的 Java 讲师会告诉你,这很重要,理解递归很重要,但它需要一种信念的飞跃,这是一种不同的看待世界的方式,这是一种强大的看待世界的方式。

Prim: 我实际上记得了,我想我第一次,我想我记得我的第一次了。

Lex: 好吧。

Prim: 我想是深度优先搜索,可能是某个游戏中的某个东西,为了实现递归,了解你可以递归地搜索状态空间中的轨迹,这真是令人兴奋,想象一下,你可以看到可能性。

Lex: 就像数字在飞舞。

Prim: 就像《美丽心灵》,然后那时我也发现了阴谋论。我看到了真相。

Lex: 好吧,我们在说什么?


编程最困难的部分 (10:15)

Lex: 对你来说,编程中最痛苦的方面是什么?在早期,你有什么深刻的痛苦的编程记忆?

Prim: 我想说,我能记住的最大的一个,肯定是两个经历之一。第一个经历是我在一个叫做 Schedulicity 的地方。

Lex: 我不可以说这个地方的名字吗?我不确定他们现在是否还在运营。

Prim: 不好意思,名字很奇怪。哦,Schedulicity。实际上,这个名字太糟糕了,以至于当你看他们付费的谷歌广告关键词时,他们会确保自己排在列表的顶部,拼写简直是疯了,因为没有人知道如何拼写 Schedulicity 这个词。所以这就像,谷歌为此进行的优化真是太搞笑了。

Lex: 好吧,回到正题。

Prim: 最让我痛苦的,我认为编程中最糟糕的方面是,当你什么都知道的时候。所以当我在那份工作时,每天我进去,都没有惊喜,没有问题,我不理解代码库。当然,这是公平的,我不理解代码库的所有内容,但我知道我要进去,我要从数据库中生成某种对象,我要从数据库中取出那个对象,然后把它映射到网页上显示。没有创造力,没有,什么都没有。这非常像工厂流水线的工作。对我来说,那是一个非常困难的时刻,我不喜欢编程,因为我已经知道了,我已经确切地知道了我那天要做什么,我知道我将要克服的所有障碍。没有未知的未知,如果你愿意的话。在任何时候都是已知的。对我来说,这就是编程中最糟糕的部分,当你已经知道解决方案时,这只是一个你打字有多快,把它从你的头脑中转移到你的手上的问题。

Lex: 所以缺乏不确定性,缺乏挑战,就是痛苦。

Prim: 是的,这很深刻。

Lex: Prime,我不仅仅是长得好看,我希望你知道这一点。这是一个很低的门槛。


编程类型 (12:31)

Lex: 你如何定义自己?

Lex: 我喜欢问一些一般性的问题。

Prim: 38 岁,男性,美丽妻子的丈夫。

Lex: 好吧。你直播各种编程。但你是什么类型的程序员?你是全栈开发人员,Web 编程吗?也许你可以列出所有不同类型的编程,然后根据你的身份,包括性取向,把自己放在那个位置。

Prim: 是的,我可以。我们可以把它们都放在那里。加号,我的意思是,显然这两者非常非常紧密地联系在一起。我见过你对某些语言表现出近乎性兴奋的程度。我想你对 Okamel 或 OCaml 感到非常兴奋。

Lex: 我们走吧。

Prim: 谢谢 Dylan Moyward。

Lex: 哇。

Prim: 我没想到会这样。这升级得太快了。

Lex: 不管怎样,你如何定义自己?

Prim: 好吧。首先,让我们先做前面的,或者中间的问题,也就是不同类型的原型。我认为这是一个非常有趣的问题,因为如果你上 Twitter 或者你是个新手,你的想法可能是只有 Web 编程,也许还有一些其他的东西,比如游戏编程,但你用 JavaScript 在 Web 上做游戏编程,你知道,对编程世界的看法非常狭隘。我敢打赌,如果你现在问很多人,什么是最流行的编程形式,他们可能会说 Web。如果你说哪个包含的仓库最多,GitHub 上有多少百分比的仓库是基于 Web 的,他们可能会说 90% 或某个巨大的数字。但现实是,有一个完整的嵌入式机器人世界,你熟悉机器学习方面,有网络,有性能、操作系统、编译器,有各种不同类型的编程垂直领域,你可以进入。所以我们经常从 Web 或某个相当狭窄的角度来谈论编程。我认为这更多的是 Twitter 的社会结构,而不是它真正代表了整个编程世界。我认为很多编程都非常有趣。构建你自己的语言是一种非常有趣的体验,每个程序员都应该这样做一次,只是为了对事物的工作方式有一个完全不同的看法。

Prim: 至于我做什么,我一直把自己看作是一个工具工程师。在我的工作中,通常我会从 UI 开始,然后他们会说:“好吧,嘿,我们需要一个这个东西的库。”所以我就成了编写库的人。在 2012 年、2013 年,我正在为一个 Web 编写一个 UI 库,它的行为就像 iPad 一样。你可以在上面捏合和缩放,但它仍然是一个网页,因为我们当时没有这些东西。那是一个画布,必须做所有的矩阵运算和所有这些东西,你知道,感觉就像你在 iPad 上,但实际上不是在 iPad 上。顺便说一下,这是 iPad 2。所以这是很久以前的事了。所以每次我找到一份工作,他们都会说:“好吧,嘿,我们需要做一个库。嘿,你能开发一个构建系统吗?”那时没有 Grunt,没有 Gulp,没有这些东西。所以我必须手工制作我自己的 JavaScript 构建系统。所以我总是落入为开发者构建工具的位置,让他们能够成功。我一直非常喜欢这个领域。所以当我去 Netflix 工作了 10 年,我想说,我的 10 年大部分时间都在为开发者构建他们可以使用的东西,以便他们在工作中取得成功。所以我只是,我一直非常喜欢这个方面,因为你的利益相关者和使用你的程序的人理解编程,他们会说:“嘿,我需要这个。”通常他们需要的东西实际上是他们想要的。而对于人们,人们想要东西,但他们实际需要的东西与他们实际想要的东西之间经常存在这种奇怪的分离。人们,你知道,这就像亨利·福特的那句老话,“我只想要一匹更快的马”,他说:“不,你实际上想要的是一辆汽车。”所以就像,你必须玩这个游戏,试图真正弄清楚它。而开发者,就像,我知道你在做什么,我知道你想要什么,让我们一起弄清楚。

Lex: 这实际上给了你一个非常好的关于编程的全局视角。我喜欢这个想法,从界面开始,比如你需要捏合和所有这些东西,然后弄清楚使之发生所需的整个事情,包括可能的副业工具,如何使其更高效、更有效率,所有这些东西。所以整个,整个事情,这真的很酷。

Prim: 好吧。这意味着,根据全栈的一般定义,这将是全栈,意思是,也许是的,相对于像系统引擎一样从底层开始,试图优化某种特定的东西,而没有看到像结果界面会是什么样子的大局。很多人在 Web 编程中,他们从未超越事物的外观前端。他们总是假设会有人,某个在黑暗的地下室里默默无闻的人来实现后端。

Lex: 某个吉尔福伊尔会在那里做后端。

Prim: 是的。我喜欢称自己为通才。举个例子,你知道,在 Netflix 的某个时候,我构建了 websocket 连接。所以对于电视来说,websocket 的工作方式是我编写的代码。所以你知道,我构建了帧的东西,在那之前,我正在做与内存有关的事情,在那之前,我为一个工具构建了 UI。就像,我只是能做这件事。你只要告诉我该做什么,我就会去做。我不会太担心,我不想在某个特定的活动中变得超级好。我不想成为世界上最伟大的 Kubernetes 工程师。但是,如果我必须去学习 Kubernetes,我会去学习它,并学习如何部署一些东西,然后希望继续前进到下一件事,如果这有意义的话。

Prim: 我在 Reddit 上发布了关于我要和你交谈的事实,有很多精彩的问题。有人提到我应该问你关于 DevOps 的问题。你能解释一下 DevOps 是什么吗?它是程序员的一种特种部队吗?它是开发者的海豹突击队 6 队吗?DevOps 是什么?你能定义一下吗?你是一个 DevOps 工程师吗?

Prim: 人们一直告诉我 DevOps 不是真实的。实际上有平台工程师、云工程师、信息工程师。我经常认为,我认为最简单的方法,如果我们只是做一些基本的术语,DevOps 就是那些确保当你启动一个服务时,它不会消失的人。这是所有能够在规模上操作东西的骨干。如果你想想,如果你只是写一个夫妻店式的网站,那些做 PHP、做 WordPress 的人,他们会构建一些东西,他们会把它交给 I don't know Lenode、Digital Ocean 某个公司。他们真的不需要一个非常复杂的构建、部署,所有这些。这只是一个简单的网站,这样他们就可以销售他们的商品。所以他们真的不需要那个。所以这就是我对 DevOps 的看法,当事情需要扩展时,那是你需要雇佣的人。

Lex: 是的,那些人实际上很棒。我在谷歌工作的时候,是的,是的,有所有这些花哨的机器学习人员,但是那些运行计算、基础设施的人,基本上是确保事情不会崩溃的人,他们就像巫师,他们是非常不可思议的工作垂直领域。显然,我正在使用一个非常宽泛的术语来描述,我确信,你知道,因为确保事情不会崩溃,你也可以说这是一个 SRE(站点可靠性工程师),你知道,那些在谷歌穿飞行员夹克的人。所以当我们说 DevOps 时,我认为人们对术语非常挑剔,特别是在这个类别中。他们会说,实际上,你指的是基础设施工程师,而不是站点可靠性工程师。好吧,是的,我听到了。但一般来说,当有人想到 DevOps 时,他们会想到管理服务器及其生命周期和可靠性的人。

Prim: DevOps,它是真实的吗?我不确定。

Lex: Versell 杀死了 DevOps 吗?

Prim: 哇,这,你几乎是个记者了。这是一个标题。


人生故事 (20:08)

Lex: 让我们回到开始。好的,婴儿 Prime。你提到了 Netflix。你,哦,顺便说一句,我在 Netflix 工作过。

Prim: 对于不了解 thePrimigen 的人来说,他提到了他非常成功,曾在 Netflix 工作过,基本上每隔一句话都会提到。

Lex: 差不多和我提到 Neovim 一样多。

Prim: 哦,太好了。告诉我更多关于 Neovim 的信息。

Lex: 不,请不要。所以,婴儿 Prime,从一开始,你就有了一个非凡的人生,我认为这对很多人来说都是鼓舞人心的。你经历了很多痛苦的低谷,包括吸食冰毒、失去,就像你提到的,你从中走了出来,成为了一名成功的程序员,一个激励了大量人进入编程领域,并在生活中取得成功的人。所以也许我希望你能从头开始讲述你整个人生旅程。

Prim: 我想,如果我们要从整个旅程开始,我认为最好从我四五岁的时候开始。那是我第一次接触到色情内容。它在我的生活中占据了很大一部分。所以我不认为从我还是个小男孩的时候一直到我 20 多岁,有一天我没有想到色情内容。所以就像,每一天,即使在那么年轻的时候。所以这是一个非常消耗思想、消耗时间、消耗思想的事情,从很小的时候就开始困扰着我。当我 7 岁的时候,我的父亲去世了。那是一个非常艰难的时期。我仍然记得我去了中国,我们被告知了一些规则,其中一个规则是“嘿,不要谈论上帝,如果你要说,就用‘爸爸’这个词代替。”我就像,“好的,爸爸。”那是我在 17 年或很长一段时间里第一次说那个词。说那个短语太奇怪了,我只是觉得:“哦,这是我一生中说过的最奇怪的事情。”感觉太奇怪了。

Prim: 快进,随着我长大,显然,我非常擅长电脑,当然也擅长访问色情内容。我在互联网上玩电子游戏。有趣的故事,我想这个家伙的名字是 Twitch 上的 Lord Talk,我不记得他的名字了,但他制作了这个名为 Grail G R A A L 的游戏,Grail Online。当我还是个小男孩的时候,它就像塞尔达传说,除了它还有一个关卡编辑器,它有一种类似 C 的语言。这就是我发现如何编程的方式,我看着这些符号,弄清楚它们的含义,然后我能够让游戏中的事情发生。这就是我进入编程的介绍。所以谢谢你,那个家伙,不管你的 Twitch 名字是什么。

Prim: 好吧,继续。随着我长大,我的社交能力非常差。我不是一个非常擅长社交的人。高中很残酷,经常被人取笑。我不会说我在高中过得很愉快。绝对感觉格格不入,或者说错位,如果你愿意的话,我不确定哪个词是正确的。当然,在那个时候,我总是想,我想被接受,融入。我确实忘记说一个故事。在我父亲去世后,我的哥哥,他开始吸毒,并把我介绍给了大麻。所以 8 岁的时候,我吸了一段时间的大麻,直到大概 11 或 12 岁,休息了一段时间,然后在长大一点后又吸了很多。所以我很早就接触了很多这些东西。15 到 18 岁,大量饮酒。

Prim: 当我高中毕业时,或者说当我即将高中毕业时,我感到非常悲伤,如果你愿意的话,我对一切的进展感到非常悲伤。试图自杀。显然,这是一个非常糟糕的尝试。我现在还在这里,我对此非常高兴。我很高兴我没有坚持下去。不得不去医院。当我出来的时候,我仍然记得从医院出来的那一刻,就像有什么东西坏了。你读过《时间之轮》这本书吗?它有 14,000 页左右。但在大约 12,000 页的时候,兰德不得不故意杀死一个女孩,主角,那是他崩溃的时刻,他变成了坚硬的兰德,Quindelar 兰德,如果你愿意的话。对于那些了解《时间之轮》的人来说,会欣赏所有这些。对于那些不了解的人来说,这非常混乱,我理解。

Lex: 不是亚马逊的电影节目。

Prim: 不是那个,不是那个《时间之轮》。所以现在我们回到正题,在那个时候,就像我内心有什么东西坏了,我就不在乎了。所以所有那些社交上的笨拙,如果你愿意的话,所有那些都随着我消失了,但其他一切也都消失了。所以我开始使用大量的毒品,LSD、迷幻蘑菇、冰毒,吸了很多冰毒。然后去了大学,继续做了很多事情。我服用了太多的迷幻药,以至于好几年,当我走过高对比度的物体时,我的眼睛旁边会出现小波浪线。所以就像,整个那段生活都被糟糕的决定所标记。

Prim: 然后,在我 19 岁左右的时候,我有一个晚上,我感受到了上帝非常戏剧性和真实的存在。就像我有一个选择,就像弗罗多在剃刀上,如果我朝任何一个方向走,我都会掉下去,我需要改变我的生活,你现在必须做出选择,你想这样做还是不想?我记得我说:“好的,我确实,我确实想改变我的生活。我不喜欢这种经历,我不喜欢我的生活方式,我仍然非常悲伤,我仍然感到非常绝望,我仍然感到所有这些事情,我只是假装是另一个人。”然后那天晚上我就睡着了。我的生活没有任何改变,一切都还和以前一样,第二天我醒来,还是同一个人。我就想:“哦,这真是一种奇怪的经历。”然后我就去上班了。然后我记得,我想那天晚上我看了色情内容,突然间我有了良知,我有了这种深刻的羞耻感。我就想,我一生中从未感到过羞耻,我不知道现在发生了什么。然后突然间,当我吸食大麻时,我感到深深的羞耻。当我伤害了某人或做了错事时,就像我从那天晚上开始有了良知。这就是我的礼物,如果你愿意的话。就像在那个时候,我甚至没有选择,我不得不改变我的生活,因为无论出于什么原因,我都在那一刻改变了。

Prim: 从那以后,我开始在学校里真正努力。我总是开玩笑说我在高中得了 2.14 分,我有一个老师手写了一张纸条给我,说我是她教过的最差的学生。所有这些,我不是一个真正的好学生。然后在那个时刻,就像,好吧,现在生活改变了,我开始努力学习。你知道,我试着成为一个好学生。结果发现这真的很难。我真的很糟糕,我仍然得了 C。我去学了微积分预科,然后不及格。我想:“天哪,我以前是聪明的数学家伙,现在我是一个失败的白痴。”就像,我质疑自己。我在数学学习中心花了几个小时学习。然后,在经历了这段旅程的一年半之后,就像有什么东西明白了,我从最差的人变成了最好的人。在那之后的一切,我不知道发生了什么。突然间,我成了数学最好的人。我开始上我的计算机科学课程,我真的什么都懂了。就像一切,在努力了几年之后,突然变得更容易了。我不确定这是在几周内发生的,还是更容易开始的,但这首先是由大量的困难造成的。

Prim: 然后,当我开始真正渴望和热爱学习的过程时,是在所有这些年之后,事情开始变得更容易的时候,因为我只是被做某事的愿望所激励,而不是认为它会变得更容易。然后突然间,它开始变得更容易了,这很棒。我想这就是我开始经历人生最大变化的地方。在那个时候,我开始真的非常非常想再也不看色情内容了,因为每次都感到非常羞耻,我真的想停止。这是迄今为止最难戒除的瘾。吸烟也是一个非常难戒除的瘾,令人震惊的难戒除的瘾,但色情是迄今为止最糟糕的。然后我想大约 22 岁的时候,我终于戒掉了所有的瘾,如果你愿意的话。然后有一年的时间,我只是在努力,我想大概是在 21 岁零三个季度左右,我不确定我在哪里停止了所有的瘾,至少是表面的瘾。然后在某个时候,六个月后,一年后,遇到了我美丽的妻子。事情开始变得越来越好,我越来越喜欢工作,我喜欢编程,我开始每天编程 12 个小时。我看了《社交网络》这部电影。在那之后,我就想,我要创办一家公司。所以那天晚上我开始了我的第一家公司,顺便说一句,它是用 PHP 编写的。

Lex: PHP?

Prim: 是的,5.2 或什么的。那是一段美好的时光,美好的时光。我非常有动力去做这件事,我会编程,有时我会连续编程 24、36 个小时,我不停地做,这就是我在任何时候都想做的。我想我的妻子有点厌倦了我,她会说:“你能送我去学校吗?”我会说:“不,我在编程。”我不是一个很好的人,你知道,我没有把事情想清楚,我只是太投入了,我不停地做。这就是我成为我的故事,如果这有意义的话。


苦难 (30:12)

Lex: 让我们试着逆向工程一些痛苦和一些胜利。你有时让它听起来很容易。让我们试着更好地理解它。也许当你 7 岁的时候,你对你经历的痛苦有什么看法,失去你的父亲。你认为这产生了什么样的影响?你对那段时间有什么样的记忆?

Prim: 我能表达的最好方式是,我从来不知道父亲是什么。我还很小,我可能可以压抑,或者甚至有能力记住长期的事物,因为我知道大多数人不记得他们小时候的很多事情。所以我不确定,如果我要失去一个父亲,我可能正处于失去父亲的最佳年龄,你知道,如果你要失去一个父亲,如果你 11 或 12 岁,那是一个可怕的年龄。那是我哥哥的年龄,他沉迷于毒品,再也没有走出来。所以我更多的是一种模糊的感觉,只是渴望我希望我有一个父亲。

Lex: 这对你的进化,对你的生活有什么影响,有那种渴望?

Prim: 我认为这就是为什么我在社交上如此糟糕的原因,因为我在寻求认可。我需要认可。我想很多人都渴望得到认可或爱的形象,而我没有。所以我认为我在其他一切事物中寻找它。如果我要对我在那段时间的行为进行心理分析,我并不是在积极地思考这个问题。但是的,我总是想找一些东西来填补那个空缺。


高中(31:44)

Lex: 我认为很多听众会对你在高中的经历产生共鸣,比如成为局外人,被欺负,在家里经历各种各样的复杂情况。你会给他们什么建议?

Prim: 高中最糟糕的部分是,你周围都是和你同龄的人,感觉是永恒的。你认为你周围的人,你觉得是会陪伴你一生的人。至少我是这么想的,直到很多年后我才真正意识到,他们将是你生命中最不重要的人。这非常令人震惊,特别是如果你现在正处于其中。现在他们是你所经历的一切,但有一天这一切都会停止,然后真正的生活开始。这是一件令人震惊的事情,如果我能告诉自己这一点,也许我会成为一个非常不同的人。

Lex: 这说得太好了。我的意思是,这就像一个试运行,你知道,就像在电子游戏开始时,有一个小教程,那就是。实际上,那应该是一个尝试的机会,冒险的机会。因为之后真正的生活将开始,那里会有更多的后果。在这里,你可以,你知道,如果你喜欢一个女孩,就约她出去,尝试。如果你被欺负了,就打回去。尝试。

Prim: 我不会容忍打人。我会狠狠地揍他们,学一些柔术,学习如何把他摔倒。然后,然后那个拒绝你的女孩会想:“嗯,也许我会给那个家伙第二次机会。”做一个坏蛋。这是一个尝试的机会。

Lex: 这是为踢屁股做的非常鼓舞人心的演讲。这是真的。

Prim: 我的意思是,这其中有一些非常真实的东西,我认为,特别是我,我的意思是,我不知道女孩的高中经历会是什么样的,但作为一个男孩,高中肯定有很多身体上的要求。至少在我长大的地方,有很多身体上的衡量。我想在所有的学校都可能不真实。 高中,但如果他们充满了男孩,那可能是真的。所以就像,是的,做这些事情,去 BJJ,做任何这些活动,可能确实有帮助,因为即使你从未踢过别人的屁股,对自己有一定程度的自信可能也是一件非常有价值的事情。但只要记住,这是你生命中如此短暂的时刻,就像一个巨大的帮助。

Lex: 我的意思是,你表达的方式完全正确。这就是它的感觉,这些人将与你共度余生,这就是整个世界。所以这意味着,如果有人欺负你,或者你在高中的地位等级中处于低位,那就意味着你将处于世界地位等级的低位,你将在余生中完蛋。这带来了巨大的压力。这就是为什么在心理上,成为一名高中生是极其困难的。我认为父母和社会经常低估了成为一名高中生有多么困难,心理上有多么困难。有些人会患上抑郁症并处于自杀的边缘,这是非常非常困难的。

Prim: 是的,我认为这甚至,你知道,人们总是说,在我的时代,你知道,等等等等。我认为现在确实比以往任何时候都更难,因为当我还是个孩子的时候,人们是有资格的,这意味着这是一个酷的人,这不是一个酷的人。今天,人们有了量化。你有 32,514 人关注,你有 12 个赞。人们可以直观地看到你在任何平台上的确切社交价值,这肯定会更加困难。我想象有很多人,有很多压力放在这上面,这感觉可能更糟糕,更糟糕的是不酷,因为你有一个确切的数字表明你有多么不酷。

Lex: 那里的挑战和任务是记住,仅仅因为你的社交圈在社交媒体上和高中认为你不酷,实际上可能意味着你很酷。你需要找到那种酷,并让它成长,让它蓬勃发展,这样当真正的生活开始时,你可以全力以赴。

Prim: 这是一种很好的表达方式。我认为,如果有什么的话,高中真的不擅长挑选酷的人。无论形成的系统、等级制度是什么,它都是一个如此基本的等级制度。你擅长非常普通的事情,这就是你上升的方式。你的父母给你买了一辆昂贵的车。

Lex: 昂贵的汽车。

Prim: 物质的东西。

Lex: 是的,完全正确。

Prim: 这是一个贪婪的搜索。他们没有一个适当的搜索,所以他们只是达到了那个局部最优。但启发式,我的意思是,即使是贪婪搜索的目标函数也是一个非常糟糕的目标函数。那些赢得高中游戏的人通常不会是那些赢得更令人兴奋、更美丽的生活游戏的人。所以做一些史诗般的事情,尝试一些东西。怪人才是会成功的人。高中里的怪人,可能是因为他们也受到欺负,他们会受到更多的心理折磨,并探索自己的思想,思考成为人类意味着什么。因为如果你在高中获胜,你不会受到挑战。

Lex: 你没有自我反省。

Prim: 你没有尝试。所以,只要它不会让你崩溃,受到折磨在某种程度上是有好处的。


色情成瘾 (37:30)

Lex: 色情成瘾。这是另一个强有力的问题,我认为可能会引起很多人的共鸣。有趣的是,你说这是最难克服的瘾之一。

Prim: 让我这样说吧。有些成瘾有更大的社会关注,而色情不是其中之一,这使得它非常困难。你的朋友都不会为你加油。如果你在 Twitter 上说“我戒掉了色情”,他们会说“这对你来说很好,但不是每个人。”你知道,没有人会对冰毒提出这样的论点,对吧?没有人会说“好吧,不是每个人都必须戒掉冰毒,好吧?这实际上是一个很好的行业,那些制作它的人,他们也很好,对吧?”没有人会提出这样的论点。而对于色情,你会有一个完整的事情,朋友们会认为你这样做很愚蠢,或者不管是什么。就像你,这是一个更困难的问题,因为它感觉是被接受的。

Lex: 而且我认为这也是一种你可以私下参与并向世界隐藏的瘾。有些成瘾很难长时间向世界隐藏。

Prim: 是的。

Lex: 色情成瘾可能是你可以持续多年的一种,然后它可以加深。这可能是一个严重的问题。

Prim: 感谢上帝,我在互联网之前长大,因为色情太容易获得了,太容易陷入那种瘾了。

Lex: 你能谈谈它对你的生活产生了什么影响吗?也许是一些低谷,还有如何克服它。

Prim: 我想说,就影响而言,你会对女性有一个长期而破碎的看法。我可以再次,我只是从男性的角度说话,色情最基本的事情是你为了自己的欲望或想要而使用另一个人。这不是一种深刻的需要。没有必要,没有对色情的需要。这纯粹是一种基于欲望的活动或性欲,无论你想用什么词来填充。这纯粹是一种物化活动。其他人在那里供你享受。所以我认为你会带着这种想法。

Prim: 我确实认为我在高中约会的女孩或高中和大学之后的女孩,我把她们看作是达到目的的手段。我认为色情极大地改变了我的这种看法,我没有给予另一个人应有的价值。我认为它确实贬低了人性的价值,这就是我的观点,它使人们成为商品,我不认为人们是商品。 我认为每个人都有价值。所以在那段时间里,对我来说,这就是色情的巨大影响,你知道,这是消费主义失控,或者你可以争辩说是物质主义失控,而且非常难戒掉,就像你说的,因为我可以看色情,然后我可以出去吃午饭。没有人会知道,没有人会有任何想法。这是一个非常私人的,它可以是一个非常短的会话,它不必是需要,你知道,你不能服用迷幻药然后出去吃午饭,对吧?你的整个一天将会是非常不同的一天。所以这是一个非常快速、容易获得的东西,然后显然还有所有的科学和统计数据,比如男性在观看或接触色情图片后的一段时间内会做出更糟糕的决定。还有整个多巴胺效应,就像你不断需要越来越多的多巴胺。这就是为什么人们通常不只是看五分钟的色情内容就结束了。就像,你知道,互联网上总是有第一百个标签的笑话。这是因为它,这就是这个持续的多巴胺循环,你不断地这样做。所有这些东西说起来都很好,我相信统计数据和科学以及所有这些东西对于某些人来说是非常好的论据,但对我来说,它归结为,这真的是一件好事吗?这真的是我们想要的吗,是以如此亵渎或不尊重的方式来评价人们?我真的认为这对灵魂有害。即使所有的统计数据都说这对你有好处,我仍然认为这实际上是不好的。

Lex: 你必须从长远来看,从心理上来看待它对你与人之间关系的影响。

Prim: 比色情更广泛地说,我对所谓的“男性领域”的问题是,我认为和很多女人睡觉是很棒的,很棒的,但问题是,把这作为你生活的主要目标。与色情相似的是,你贬低了最棒的事情之一,那就是亲密关系。对于深厚的友谊来说是这样,对于人际关系来说也是这样。我认为色情在最纯粹、最黑暗的形式中就是这样做的,重要的东西是性,而不是与另一个人的深层联系。我想,再次回到高中和男性领域,如果目标是上床,这有助于提升地位和自信,所有这些都是很棒的,我认为,这可能是一种瘾,但对很多人来说,更棒的事情是深厚的友谊或与浪漫伴侣的深层亲密关系,那也很棒,两者都很棒。拥有就像,我会说,不存在一个宇宙,或者不应该存在一个可能的论点,即一个拥有无意义性行为的人比我和我妻子拥有更好或更有意义的生活,我们在一起 15 年了,我们有一个非常,我可以在任何情况下依靠她。而如果你过着另一种生活,当然,它可能感觉很好,但它没有意义,它没有真正的价值。

Lex: 这是绝对正确的。我确实认为上床可以对年轻男性的自信产生巨大的积极影响。

Prim: 我认为,从一定数量的性伴侣那里,你可以收集大量的数据,你可以释放你对异性的紧张感,对人际交往的紧张感。这将使你更清楚地看到世界,并真正找到那个你可以与之建立深厚亲密关系的人。有时候,对社会构建的“上床”的价值的紧张感会蒙蔽你的判断力。如果你通过多次上床来释放这种紧张感,那么你就可以清楚地看到世界,上床并不像你说的那么重要,找到合适的人,包括我应该把友谊也放在这个范围内,不仅仅是浪漫伴侣,还有深厚的、持久的友谊。

Prim: 我认为你是对的,我们的社会非常重视上床。我相信这在任何男性群体中都是如此,在历史上的任何时候都是如此。我相信这是一个非常常见的笑话,从未真正停止过。所以我相信这是存在的,但有一些道理,在你之后,你知道,是谁说的?吉姆·凯瑞,我希望每个人都能变得富有,这样他们就会意识到金钱不能解决你的任何问题。意识到社会告诉你的超级重要的东西实际上并不是重要的部分。这很重要,这是你们关系健康的一个很好的标志。如果我和我的妻子连续几个月都没有性生活,那就说明出问题了,这意味着我们不再处于同一个层面。但是,仅仅因为你有很多性生活,并不意味着你有一个良好的关系。所以这是一种独特的,我忘记了正确的术语,但这是看待问题的一种独特方式。我们的社会如此强调这一点。也许这就是为什么色情如此难戒。但对我来说,最重要的部分,真正有回报的事情,就是拥有我的妻子。我不看,我努力,我拼命地努力不去看任何其他女人。我希望我不会像马克·扎克伯格在白宫那样被抓到。你知道,我不看色情。我的妻子对我完全有信心,她不会在任何情况下质疑我。这建立了一个更深刻的,我认为是一个非常深刻的关系,因为信任是如此之大。

Lex: 我认为关系的深度可能与你们彼此之间的信任成正比。

Prim: 是的。

Lex: 在没有信任的情况下很难建立深厚的关系。

Prim: 是的。

Lex: 可能一个先决条件,也许是信任的一个组成部分,是脆弱性,你冒险与另一个人保持脆弱,当这种脆弱性得到回报时,就会建立这种非常牢固的信任,这是一件美好的事情。

Prim: 是的,我,我个人,鉴于我的立场,这更具挑战性,你知道,对世界保持脆弱,有一群人想因此而伤害你,但我认为无论如何,保持脆弱是值得的。

Lex: 风险总是值得的。

Prim: 在某种意义上,风险总是值得的。显然,每个人都有不同的生活,他们必须用不同的方式来过滤他们的行为,对吧?因为没有社会关注的人,他们的风险回报情况可能只是局部影响,这对他们来说可能同样具有破坏性或伤害性。所以在我个人看来,这总是值得的,因为找到我的妻子显然是我一生中最有影响力的或改变性的事情。或者说第二有影响力,我会说,那天晚上与上帝的相遇可能才是最有影响力的,导致了其他一切,但妻子将是下一个最有影响力的。我的意思是,我现在正在清理自己,我变了,我是一个改变了的人。


上帝 (47:16)

Lex: 我们能尝试逆向工程一下你找到上帝的那一刻吗?在 19 岁?因为感觉那对你来说是一个巨大的飞跃,逃离痛苦,逃避成瘾或旅程的开始。你认为发生了什么?

Prim: 我认为这只是感觉我没有一条线是我不愿意跨越的。一切都很好,然后突然间,在那一刻,就像我有了一种深刻的恐惧和理解,我正在走上一条路,这真的是你想走的路吗?我不知道这条路的结果会是什么,或者类似的事情。我倾向于不去猜测我不知道的事情。我只知道在那一刻,我有选择,我只是选择了,我不再想要它了。这有点混合在整个事情中,就像我没有价值,我把所有的意义或价值都包裹在性或上床中。所有这些事情,我们刚才谈到的所有事情,就像那是我的全部价值所在。那是一个拥有你的价值的非常糟糕的地方。就像一切都到了一个点。我不能告诉你那是星期几,我不能告诉你任何事情,除了那是晚上,我在蒙大拿州立大学的 South Hedges。加油,山猫队!那是我们在橄榄球比赛中做的标志,别担心。但这就是我真正能告诉你的,因为那天晚上并不比其他夜晚更特别或更不特别。特别的是,我至少有机会做出选择。

Lex: 你能给其他人一些建议吗?可能有很多正在与色情成瘾作斗争的人,不仅仅是年轻人。你能给他们什么建议?如何克服它?

Prim: 对我来说,为了克服它,我不得不意识到我正在从我未来的妻子那里拿走一些东西。有些人会说:“哦,一旦你有了女朋友,你就可以停止了。”就像,“不,因为你从未停止这个问题。你不能通过替换它来停止一个问题。”我没有女朋友,我没有这一切。我只是意识到我真的从我未来妻子的东西中拿走了。我当时甚至不认识我现在的妻子,她不在画面中。我不确定她当时是否在蒙大拿州立大学。所以就像,一旦我意识到这一点,我想它就从我的头脑转移到了我的内心,他们说这是宇宙中最远的距离。我终于明白了。这就是事情真正改变的地方。

Prim: 所以,如果你要说,什么会帮助你改变,我不知道是否有灵丹妙药。如果有人能给你一种药物,我忘记是谁说的这句话了,但有一句非常有趣的短语,大致是这样的,他是一个非常沮丧的人,他正在与自杀作斗争,他在回忆录中写到了这一点,他去看这些医生,医生实际上说:“这是抗抑郁药,它会帮助你。”他说,问题是科学家告诉我,我可以触摸我的大脑,让自己快乐,就是这样。他们可以伸进去,配置一些东西,我就会快乐。他说,对我来说,这很像走到田野里,服用一种药物来看到雨。我可以向外看,看到雨,它会落下,它是银色的,它很漂亮,但所有的庄稼仍然会死,因为实际上没有下雨。我必须自己发现如何快乐。所以对我来说,我看色情的原因是因为我不快乐。我试图找到意义,我试图在某件事中找到价值,对吧?一件最终应该给我这种终极满足感的东西。但它不会。无论你多么努力,无论你多么认为它会,都没有出路。没有色情内容会给你你想要的满足感。这就是它令人上瘾的原因。这就是我的呼吁,为什么你不应该这样做。但我只能通过意识到这一点来摆脱它。

Lex: 我认为这描述得非常精彩。你知道你正在做的这件事正在阻止你找到你未来的妻子。未来的妻子可能意味着更多,甚至更广泛地说是通往繁荣、美好生活的道路。

Prim: 我认为我们做出了很多选择,这些选择阻止了我们打开通往未来任何事物的大门。我认为真正好的是想象,就像我们对高中说的那样,生活中有很多轨迹会让你真正快乐。你需要以一种方式构建你的生活,让你有机会沿着这些道路前进。有很多成瘾,有很多选择阻止我们沿着这些道路前进。所以只要相信你将拥有一个美好的生活,并从你的生活中移除那些阻止你走上这条道路的东西,这基本上就是你所做的。这是一个信念的飞跃,如果你放弃色情,一个更好的生活正在另一端等着你。

Prim: 是的,我绝对不能说需要多长时间才能过上更好的生活,但对我来说,没有办法在宇宙中拥有我所拥有的关系,而不首先采取这些步骤,因为我无法以适合她的方式来重视我的妻子。我会通过我当时正在看的镜头或视角来重视她。

Lex: 不得不问,我从来没有吸过冰毒。

Prim: 这是一个很好的过渡,顺便说一句。

Lex: 天哪,我不知道我在做什么,说实话,关于这个采访的事情。但是,是的,冰毒和 LSD,你知道,我做过死藤水,我做过很多次蘑菇。

Prim: 关于这个话题,我应该说,在 Twitter 上和科技界,一般来说,很多人对死藤水持负面态度。有些人是积极的。我不知道,我认为这真是碰运气。我有一些不可思议的经历,但我不认为我想向任何人推荐它。这是一个风险,这是一个严重的风险。这真的是碰运气。你可能会遇到你的恶魔,他们可能会摧毁你,或者你可以遇到你的恶魔并放开他们,或者你可以像我一样有这样的经历,显然我没有恶魔。我很确定他们在地下室的某个地方,但我从来没有在毒品上见过他们。是的,我总是一个非常快乐的,我是一个快乐的酒鬼,我是一个超级快乐的,在死藤水上,充满了爱。我不明白,我不明白恶魔在哪里。但那是我的生物化学,不管那是什么。对于其他一些人来说,你知道,一次旅行可能很棒,下一次旅行可能会完全摧毁你,毁掉你的生活。所以我不知道这方面的建议是什么,也许避免它,但我们都会死,生活,你知道,我倾向于冒险,但毒品,如果你搞乱你的大脑的生物化学,你真的可以以一种会折磨你的方式摧毁自己。

Prim: 虽然我通常会建议人们完全避免毒品,除非你是疯狂的混蛋亨特·S·汤普森。

Lex: 这真是对这个话题的介绍。对不起。冰毒是什么感觉?这是,这是一个很好的介绍。我,我,我喜欢你非常正确,至少在致幻剂方面,没有保证,没有,仅仅因为你买了产品并不意味着你会玩得开心,对吧?有很多,就我个人而言,我觉得这些东西,我相信精神领域,对吧?我相信恶魔和天使存在,我相信上帝存在,那种领域就像,我不知道它会让你接触到什么。但这是一个非常非常不同的体验。现在有些人会说:“哦,这只是你大脑中的一堆化学物质,它们都混在一起了。”LSD 会把你所有的路径都混在一起。就像,是的,这些经历是深刻的,我有一些非常奇怪、非常酷、非常糟糕的经历,我有过所有的经历,我只能告诉你,我个人总是说同样的话。我做出的选择,我永远无法收回,我永远不会把它从我自己身上拿走,因为我不知道没有所有这些经历,我是否会成为今天的我。但如果你没有过那种经历,我支持你,或者至少部分支持你,也许更严重的是,我不认为你需要那些经历。我不认为它们会,你不必让自己经历这些,来做出好的决定,或者意识到人有价值,对吧?你可以,你不必这样做。至于冰毒是什么感觉,冰毒就像,如果你曾经吸食过可卡因,可卡因开始时会有一个 15 分钟的舞会,就像,太棒了。然后就像,5 个小时就像,感觉很奇怪,对吧?我不知道该怎么形容。冰毒就像那样,除了我没有那么多的舞会或任何舞会,但我只是有那种感觉,持续了 12 个小时。

Lex: 是的。

Prim: 所以滑了很多滑板,跑了很多路。

Lex: 你会说这是一种愉快的感觉,还是更像是一种逃避生活孤独的方式?是愉快的还是消极的?

Prim: 在实际的时刻,而不是后果,而是在那一刻。所以,我的意思是,这就像一个非常有趣的领域,你不能说这是普遍的。

Prim: 通常你会发现有两类吸毒成瘾者。那些喜欢阿片类药物的人和那些喜欢兴奋剂的人。他们通常不喜欢,吸毒的人很少两者都做。他们真的只是找到自己的一方,然后去做。所以冰毒是每个人都会喜欢的东西吗?从类别上讲,正如你所看到的,就像人们如何体验吸毒成瘾一样,不。但对我来说,就像,我有一个非常,它有点像 ADHD 的性质,就像这种,你知道,你精力充沛,你有点活在当下。所以就像,你活在当下,但就像,“哦,我活在当下,”你知道,就像一切都如此强烈,你知道,就像你真的想活在当下。所以就是不断地体验那种感觉。那太棒了吗?

Prim: 有些人,你知道,我的妻子总是告诉我,对某种情况感到紧张或焦虑,也可以是激动的感觉。我忘记了她确切的说法,她可能会非常失望我搞砸了,但你可以用非常不同的方式看待这两种经历。有些人在人群面前感到兴奋,有些人在人群面前感到这是他们一生中最糟糕的经历。他们实际上宁愿死,这是一种疯狂的想法,而不是站起来说话。所以对我来说,冰毒是那种令人兴奋的一面,但与此同时,它并没有完全给我我想要的东西,无论我在寻找什么,我都会用它来尝试获得我想要的东西,但它从未给我我想要的东西。

Lex: 是的。对我来说,我有很多非常美妙的经历。不推荐它们,但就像 YouTube 政策,顺便说一句,你必须说,顺便说一句,无论你做什么,都不要做非法活动。但我有很好的经验,但无论你做什么,都不要这样做,Primagen 先生。我没有主人,我没有 YouTube 或任何东西。我想说什么就说什么。

Prim: 我只是,说真的,不,我不。我不关心 YouTube 或任何人。老实说,我只是对我说的话很小心,因为我只是有积极的经历,我不希望年轻人听了之后认为他们应该尝试这种经历。我认为更强有力的信息是,即使没有这些,生活也很棒。

Prim: 这是我肯定在酒精方面尝试的东西。所以对我来说,你知道,我是一个内向的人,我害怕世界,社交互动让我感到焦虑。酒精绝对是一种有时有帮助的东西。但我认为,老实说,甚至不是酒精。就像在一个人跟我说话的时候,我必须做点什么。我可以只喝一种液体,如果他们,是的。

Lex: 嗯。

Prim: 这就像啤酒的社交意义。就像,是的,嗯哼,是的,我们玩得很开心。我认为这对我有用,如果液体看起来像酒精,它也能达到同样的目的。

Prim: 因为像酒精,如果你有一种威士忌或啤酒之类的东西,它会发出一种信号,我们应该玩得开心。所以我们正在社交,对吧?我们正在变得疯狂。然后这意味着你实际上不需要酒精。你可以在没有酒精的情况下变得疯狂。

Prim: 是的。但当你的手中有饮料时,会发生某种社交信号。所以我参加过一些聚会,我不喝酒,但只是做一个假的饮料,我也可以玩得开心。所以我一直在,但也就是说,你知道,环游世界,有时你能喝一瓶伏特加,这对我的工作非常重要。但这就像一种文化体验,而不是成功的社交互动的一个必要组成部分,一个能给你带来快乐的社交互动。所以,不喝酒,我认为你也可以不喝酒玩得开心。

Prim: 所以所有这些,天哪,我说毒品对我的生活产生了良好的影响,我非常小心,因为我认为对于大多数人来说,不,对于大多数人来说,从长远来看,它们会产生负面影响。所以我认为如果你要选择其中一个,就不要吸毒,不喝酒意味着有一天你可以成为美国总统,孩子们。

Prim: 我应该说,天哪,他最有趣的一句话是,健怡可乐很棒。这是他最有趣的一句话,如果你喝酒,你会讨厌我,我只是喜欢,这让我很开心,只是,“天哪,这真是太有趣的一句话了。”自我意识和幽默很棒。但我支持你。我使用毒品的所有原因都是一种,某种程度上的逃避。我相信这就是我会把它放进去的原型或盒子,或者追求试图感受一些无法从它们那里得到的东西。就像试图在你的工作中找到意义。你可以在你所做的事情中找到满足感。这是一件非常好的事情。你可以找到满足感,并对你创造的东西感到高兴。你可以对这种经历感到兴奋。但你不能找到,我怀疑你能找到目的,你知道,也许有些人在特定的工作中,你知道,就像这显然是非常宽泛的描述,如果你是一名急救医生,你拯救了某人的生命,也许你可以在整个经历中找到目的,对吧?所以我并不是说所有的事情,但就像编程一样,大多数程序员,你不能简单地找到你的目的。毒品也是一样,你找不到你正在寻找的东西,但它们是一种非常好的分心。然后,在某个时候,这种分心会带来沉重的代价。

Prim: 我认为福奇博士可能最了解沉重的代价,但你只是在做一笔交易,在某个时候,账单到期了,账单可能非常非常大。


毅力 (1:02:59)

Lex: 你提到的另一个时刻,我认为真的很鼓舞人心,是你,你知道,你微积分预科不及格,你在学校里真的很挣扎,你意识到学校真的很难,然后最终你能够坚持下去,我不知道,突破那堵挣扎的墙。你能通过建议的方式弄清楚发生了什么,以及你能给那些正在挣扎的人什么建议吗?

Prim: 是的,我会把它描绘得更清楚,一个非常快的速度。我学了微积分预科,不及格。我又学了微积分预科,不及格。我又学了微积分预科,得了 C。所以我学了三次。然后我在夏天学了微积分。所以微积分 1,在那一次的期末考试中,期末考试是一个两小时的期末考试,我 30 分钟就完成了,那是全校的最高分。我继续成为所有微积分和微分方程的最高分。我是 400 人中唯一一个完成微分方程期末考试的人,我得了最高分。所以就像,我变得非常优秀。我不知何故从非常糟糕变成了非常优秀。所以我的,我所做的就是,我必须赢。这不是一个选择,不是“哦,你知道,这会很好。”就像,如果我不能做到这一点,我就不能毕业,我就不能完成我的学业。所以每天我都起床,去上我的几个小时的课。在那之后,我直接去了数学学习中心,做了那些问题。当我回到家时,我只是拿起书,它后面有奇数答案,我会一遍又一遍地尝试解决这些问题,直到我完全掌握它。它变成了这样一件事情,我只是,简单的死记硬背取代了,能够有效地记住乘法表,但对于微积分来说,一切都记在脑子里,反三角函数的代换,三角函数的代换,泰勒-麦克劳林级数,所有这些东西,一遍又一遍,最终它们变得容易,它们变得非常容易。只是我必须把它塞进去。有些人,你知道,你听到这些故事,他们几乎不来上课,他们得了 A。我从来都不是那样的人,我一直都是那个必须坐下来,阅读所有内容的人,我不擅长抽象概念。我喜欢从具体到抽象,而不是从抽象到具体。非常不擅长从理论上谈论事物,然后再尝试应用它们。但如果我能从字面上做一次,那么对我来说,进入抽象就非常容易了。所以就像,对我来说,我必须,时间是无可替代的。

Prim: 所以如果你,如果我要给出建议,那就是你必须花时间在马鞍上。一个小时又一个小时会让你慢慢变得更好。一开始,这是令人沮丧的,令人沮丧的,这并不有趣,因为你做得很糟糕。但在某个时候,如果你能做得足够长,你就不会变得糟糕了。然后你会开始变得还可以。然后在某个时候,你甚至可能会变得很好。当你擅长某件事时,感觉很棒。这就像一种探索性的东西,如果你玩过乐器,你就不必再考虑所有那些小事情,你需要做才能正确地演奏一些东西,你开始思考如何探索那个空间。就像,你一个完全不同的问题。编程也是一样。编程有一种相同的感觉。就像,你会跨越那个障碍,它变得神奇,而不是一件苦差事。

Lex: 是的,一旦你跨越了那个障碍,不知何故,其他事情变得更容易了。但是,如果你想拥有一个真正成功的生活,那么你会发现下一个障碍。

Prim: 下一个障碍。是的,我一直都是这样。一切都非常艰难。是的,我没有,我没有免费的午餐。一切都只是很多痛苦和挣扎。

Lex: 我想有人说过,关于这个话题,你认为“事半功倍”是你讨厌的一个短语。Reddit 上有人告诉我这个。

Prim: 我不只是不喜欢它,我讨厌那个短语。

Lex: 告诉我,告诉我你的仇恨。你怎么看?

Prim: 我不喜欢这个的原因是,其中有一种隐藏的暗示,那就是你已经知道什么是更聪明了。所以就去做吧。实际上,事情应该很容易。你不应该那么努力。你应该只走快速、简单的、明显的道路,然后,就完成了。就像,我从未在我做过的任何事情中经历过这种情况,一切实际上都非常困难,而且大多数时候我甚至不知道自己在做什么。所以我甚至不知道聪明是什么样子。所以对我来说,我学习如何聪明工作的唯一方法是非常非常努力地工作,并且知道没有捷径。然后当我终于弄清楚什么是聪明时,当我聪明地工作和努力工作时,那就更好了。

Lex: 我认为这其中有一个深刻的、深刻的真理。有很多这样的短语在我们的社会中让我抓狂。但是,对不起,那个短语真的被接受了,如果我们能在这个问题上多说一会儿,因为它真的让我很困扰。所以一个,你说的很好,那里的假设是事情应该很容易,如果你没有看到简单的道路,你就是一个失败者。这就是“聪明地工作”,你为什么要花那么多时间?所以这让很多挣扎的人觉得自己是一个失败者。因为,就像,我看不到。然后我有的选择,好吧,我就去,我就会偷懒,然后也许深刻的真理会不知何故降临到我身上。是的,我认为我从未,而且我不认为我见过伟大的工程师在没有极其艰苦的工作的情况下找到聪明的方法。那些伟大的工程师的烦人之处在于,回过头来看,他们忘记了艰苦的工作,因为他们记得他们现在从所有高效的、聪明的工作中体验到的所有快乐,他们已经弄清楚了如何去做。他们忘记了。所以当他们给出建议时,他们会给出愚蠢的建议,“好吧,就去做吧,你知道,简单的方法,这是简单的方法。”不,不,不,不,不,不,不,你必须投入时间。就像,你知道,乐器是一个很好的例子。

Lex: 吉他和钢琴,我投入了,我不知道几千个小时。现在当我解释柔术时,我听起来像那些人中的一个,就像,你知道,放松,你知道,在柔术中,顺便说一句,放松是一个非常棒的事情,对于身体上的努力,比如钢琴等等。但要学习如何放松你的手,如何放松你的思想,你的身体,并利用你的身体的生物力学来施加正确的杠杆和时机,所有这些,这需要数千小时的学习。仅仅是学习如何放松,就需要大量的非常艰苦的工作。在柔术中,这需要几个月的时间,让你一次又一次地被打败,直到你,你知道,哭着坐公共汽车回家,你的自尊心完全破碎和摧毁,然后就像一个小的元素在深夜或第二天早上被弄清楚了。从抑郁中,有一株小植物长出了这朵洞察力的花。你利用这种洞察力,然后在下个月和下一年再次被打败。然后你成长,成长,成长。从中,你发现了柔术或柔道有多么简单,只是对我自己而言,或者钢琴或吉他。然后,是的,深刻的真理或对一项技能的掌握在你最终达到它时感觉很简单,但对于大多数人来说,这条道路将是艰难的。

Prim: 你能,我想我应该对这个短语做一个补充,我认为这个短语应该是努力工作,变得聪明。

Lex: 很好。那是 T 恤。

Prim: 这应该是这样的。

Lex: 同意。好的,那是一个题外话的题外话。我能再说一个我绝对讨厌的文化短语吗?

Prim: 是的。

Lex: 旅程比目的地更好。每个人都听说过这个,对吧?嗯。花一秒钟来应用这意味着什么。这意味着从现在开始,你只朝着一个更糟糕的地方前进。这实际上就是它的意思,对吧?享受旅程,庆祝目的地。这应该是这样的。但是,不,人们说这些短语到处都是。有这些非常肤浅的短语,它们没有逻辑上的界限。你就像,这是什么,为什么旅程会比目的地更好?因为你总是这样,我想这甚至可能是 C.S. Lewis 的一句话,C.S. Lewis 说:“不,这太糟糕了。不要,旅程实际上并不比目的地更好。”

Prim: 我喜欢那些反激励的海报。进步,前进比后退更好,即使你仍然无处可去。我觉得这一点非常非常真实,在加利福尼亚待了几年,这很痛苦。积极性。如果它今天没有打破你,别担心,它明天会再试一次。有很多非常棒的海报。

Lex: 我甚至不知道这是一个东西。

Prim: 这是个东西。

Lex: 天哪,我想要那个。

Prim: 嘿,嗨,这是 thePrimagen。你知道,我在这段播客中忘记提到的一件事,对我来说,忘记这一点真是太愚蠢了,就是我的妈妈在我的生活中扮演了多么重要的角色。在我父亲去世后,她每天必须工作 18 个小时,她真的让我们的家庭能够生存下去。我一直都很尊敬她,我一直认为她很棒,她真的是我决定重新振作起来的原因。我把她看作是我的内部灵感,让我继续前进,因为我真的想让她感到骄傲,在所有那些年的高强度努力中,我真的想确保她知道我是如此感激。所以,嘿,我只想说,谢谢你。爱你,妈妈。


Netflix (1:12:55)

Lex: 对于那些不知道的人来说,你曾在 Netflix 工作过。顺便说一句,顺便说一句。现在你是如何从那里,从我们提到的困难,从挣扎,从成瘾等等,到一个你在这个令人难以置信的工程公司工作并构建酷炫的东西的地方的?所以,请讲述 Netflix 的故事。

Prim: 是的。所以,你知道,我之前提到过,我想做我自己的创业公司。所以,我忘记了有多长时间,一年或两年,或者两年半,建立了一家创业公司。PHP、jQuery,每个人最喜欢的语言都放在一起。你可以用 jQuery 解决数学问题。所以我就像完全投入了,不停地做这件事。这是 Stack Overflow 的鼎盛时期。我们在 Stack Overflow 上问一些非常愚蠢的问题,比如什么是更 Pythonic 的,然后你会得到很多赞,并试图偷走大量的业力。所有有趣的事情要做,美好的时光。我就像如此投入,呼吸,我吸入它,呼出它,这就是我每天所做的。所以就像不停地建立一家创业公司。最终,这家创业公司失败了,所以我必须,你知道,去找一份真正的工作。

Lex: 你能说这家创业公司是什么吗?

Prim: 过去想想真是太疯狂了。在我告诉你它是什么之前,我想讲一件关于我父亲的快事。我父亲在 90 年代初,大约 91 年、92 年,正在建立一家类似于电话卡的公司,你可以预先购买长途电话分钟数。如果你还记得 90 年代,大约 97 年、98 年、99 年,10 10 220,所有这些不同的东西,拨打中心,对吧?所有这些你可以预先购买长途电话的公司都出现了,而且非常非常大。所以我父亲比这个概念早了六年,最终他的创业公司失败了,但他只是很早地发现了后来会非常非常流行的事情,特别是在电信领域。我,随着我长大并做了我自己的创业公司,我做了一家创业公司,那是短信营销。那是在 2010 年,你可以收到关于各种交易的短信,所有这些东西。当然,10 年后,你现在不会停止收到短信,短信营销风靡一时。所以我也像我的父亲一样,在电话营销领域有一家创业公司,只是早了五年。

Lex: 这么说你几乎总是走在时代的前面,你是一个有远见的人,这公平吗?

Prim: 不,事实上,我并没有走在时代的前面。我只是,有人会说,我在那种情况下运气不好,但我确实看到了,当时我做这件事的时候,这对我来说似乎是显而易见的。80% 的手机都是功能机。当我通过短信出售时,大多数人都有翻盖手机,这就是这家特定产品的名称。我们也有短码。所以这很,你知道,很聪明,对吧?六位数。当我出去销售它时,在那段时间里,我只有一部翻盖手机。我甚至没有智能手机。因为它们对很多人来说是站不住脚的。所以,你知道,这真是疯狂的时代。

Prim: 但在那之后,显然,我必须找一份真正的工作。我们住在蒙大拿州博兹曼校区旁边的一间公寓里。我们楼下的那个人一定吸食了某种毒品。他威胁要杀了我们好几次。会尖叫,完全失去理智。非常不理智的人。我们叫他愤怒的楼下人。有一次,我妻子掉了一个电池,双 A。所以不是一个大的,我们不是在谈论 B 电池或 D 电池。我们只是在谈论一个双 A。掉在地上。我要杀了你,就像疯了一样。绝对不理智的行为。所以,我必须去找一份真正的工作。我们需要搬出去。我们要开始我们的生活了。所以我在一个小地方工作,我之前谈到了那里的无聊。我必须去一个叫做 Web Filings 的地方,在那里我工作了大量的时间。在那段时间里,我仍然在尝试创业,做了一个,你可以预先祝愿你朋友的生日祝福,然后它会自动通过 Facebook 发送。我们称之为 grief feed。这很聪明。尽管如此,我讲那个故事是因为我所做的一切都是探索、构建、完成事情、工作、学习公司生活、学习如何在公司生活中沟通、能够在工作中取得成功、了解大量当时存在的技术。当时的一项重要技术,特别是 2013 年,是 RxJS,如果你还记得那个的话。

Lex: RxJS?

Prim: 那是 C# 的一个链接,移植到 JavaScript。

Lex: 对于不了解的人,我猜 C#,它最接近的邻居是什么?Java?Java 就像,他们显然只是拿走了 Java,然后剽窃了它,但现在它是一种如此动态、有趣的语言,它似乎可能是一个非常酷的实用与不实用的界限。

Prim: 我不太喜欢在微软公司穿着褶皱裤子编程。

Lex: 褶皱裤子是必须的吗?

Prim: 我想是的。

Lex: 好吧,我们会回到这个问题的。我们能回去吗?

Prim: 好吧,Web Filings。

Lex: Web Filings。

Prim: 那是我必须做所有矩阵运算和构建系统的地方,所有这些,这真的推动了我,因为他们还希望我每周工作 60 个小时。这不是非常健康的工作生活平衡,是非常艰苦的工作,就像那种非常艰苦的工作,进入前沿的东西,真正了解世界,真的让我能够非常自信地谈论事情,因为你知道,我们必须为 UI 构建非常复杂的状态机,为了我们正在构建的东西。所以当我开始使用 LinkedIn 时,不可避免地,由于我接触过所有这些技术,并且有一些书面记录表明我接触过这些技术,微软,或者说,该死的,Lex。

Lex: 褶皱裤子。

Prim: 褶皱裤子伸出手来。

Lex: 不,Netflix 伸出手来。

Prim: 并说:“嘿,我看到你做过 RxJS,你知道,我们做了很多。你想来面试吗?”你知道,我总是被告知,你不应该拒绝一种手写的、个人的面试邀请。这远在机器人之前,即使是机器人,也很明显可以看出是机器人。这是 Netflix 的一位经理,Jeff Wagner,我的第一位经理,他写了一张非常好的便条,就像:“嘿,我看到你正在做很多这些事情,我们真的需要 JavaScript 方面的帮助。我很乐意让你来面试。如果你对 RxJS 感兴趣,我们甚至也在使用很多 RxJS。”所以我想:“好吧,你知道,我可以来,我会面试。”

Prim: 你看,面试开始了。我想我在面试中途给我的妻子打了电话,我感到很沮丧,绝对崩溃了,因为我说,她可能还记得这个,但我说:“我们现在必须做出决定,我们真的要搬到加利福尼亚吗?”因为那时我已经知道我得到了这份工作。我只是把它们淘汰出局,我在那方面做得很好。所以我确信我会在 Netflix 找到一份工作,你知道,人们对面试和所有这些事情总是感到非常害怕。幸运的是,不知何故,我避免了这种情况。我没有考试焦虑,我没有这些,因为当我进入这些情况时,我的唯一目标是展示我已经知道的东西。所以就像,我走进这种情况,我一直在为这个每周 80 小时的工作准备了大约 5 年。所以只要走进去,我只是展示我知道的东西。这非常适合当时的 Netflix,2013 年初的 JavaScript 时代,在电视上。所以这太棒了,完美地解决了问题。在那里被录用了。

Lex: Netflix 在加利福尼亚的什么地方?

Prim: 这是旧金山洛斯加托斯。所以,如果你熟悉,所以经典的象征人们做的,这是旧金山,是的,奥克兰,圣何塞,洛斯加托斯就在下面一点,是的,有点在圣何塞以南。

Lex: 同一个大都市连续城市。黄石公园是蒙大拿州的黄石公园,那个节目?

Prim: 是的。是的。

Lex: 有一个,是的。

Prim: 所以基本上就像凯文·科斯特纳骑在马上一样?你是骑着马去校园的吗?

Prim: 不,不。但我喜欢那些刻板印象,实际上,我的意思是,完全公平地说,当我 15 岁的时候,我开着车在现在非常繁忙、人口稠密的街道上,用 22 口径的枪从我们的车窗里射杀地鼠。所以就像,蒙大拿州曾经是一个与今天不同的地方。蒙大拿州有很多地方仍然非常乡村,仍然有更多的旧世界。所以,是的,有点,你知道,你可以从蒙大拿州得到你想要的任何东西。就文化而言,我不确定区分加利福尼亚州和蒙大拿州的最佳方式。这只是不同的期望。我可以说的加利福尼亚州或者至少当我说加利福尼亚州时,我指的是硅谷,因为显然洛杉矶和加利福尼亚州和硅谷的态度非常不同,心态非常不同,你不能把它们进行比较。我可以说硅谷的一件非常积极的事情是,每个人都在努力构建或创造一些东西,这是一种非常令人兴奋的能量。你遇到一个人,他们有一家创业公司,他们正在为这家创业公司工作,这非常令人兴奋。你知道,这有很多负面影响,我们都可以同意,我们的整个生活被商业化可能不是那么好,但在那里,每个人都对构建一些东西感到兴奋,这是一种非常酷的体验。

Lex: 是的,这很棒。

Prim: 兴奋,能量。是的,蒙大拿州没有。我对像《黄石公园》这样的节目有一种浪漫的钦佩,置身于大自然中。这很美。

Lex: 是的,我喜欢骑马。我也,有人说 Reddit 上有很多关于你的智慧,其中一些可能是假新闻,但有些关于马和这种事情,就像你写,你喜欢马,你喜欢骑马?

Prim: 我们的房子旁边有马。我们的邻居有更多丘陵的土地,他们的一匹马摔断了腿,所以他们不得不把它放下。所以我们只是说:“嘿,我们在更平坦的土地上。你可以把你的马放在我们的财产里。”所以我们只是有马在我们的房子周围跑。

Lex: 那挤牛奶呢?有人问了关于牛和奶牛的问题。

Prim: 所以我只有空奶牛。如果你不知道奶牛的意思是女孩,空的意思是,嘿,他们试图让奶牛怀孕,奶牛没有第一次怀孕。所以他们正在淘汰那个基因。奶牛现在,或者说空奶牛现在要去牧场放牧一年,然后变成美味的 T 骨牛排和各种东西。所以我们会把空奶牛放在我们的财产里。所以没有给空奶牛挤奶。如果你试图给空奶牛挤奶,它们会非常生气,因为它们不是产奶的奶牛,对吧?你必须让那头奶牛怀孕,然后一旦你让它怀孕了,你必须把它置于一种永久的挤奶状态,所有这些。这比我们所做的要复杂一点,我们只是让奶牛吃草,我不需要碰它们。

Lex: 好吧,这太棒了。Reddit 不是一个关于我的智慧的好地方。他们会给你最疯狂的答案。我们会一次又一次地回到 Reddit,我的朋友。所以,是的,你迈出了进入 Netflix 的一步。

Lex: 那是什么感觉?

Prim: 你知道,这是其中一件事,当你谈论它时,人们喜欢把它琐碎化,因为这就像,哦,你在 2013 年冒险进入一家 FANG 公司听起来超级冒险。我的妻子怀孕 36 周了。我们不得不去一个我们不认识任何人的地方。我们即将迎来我们的第一个孩子。我们甚至没有医生。如果你不知道,生孩子就像,你想要与医生建立关系。那里有一整套事情。所以这有点,这是一个非常艰难和伟大的经历。所以我去了一份工作,他们的文化手册,所以在这段时间里,这是 Netflix 仍然有那种老一代 X 的感觉。他们的文化手册是快速雇佣,快速解雇,你知道,它非常直截了当,嘿,这就是我们的运作方式,你不符合标准,我们就把你踢出去。所以就像,我要离开一个更安全的地方,去一个我不认识任何人的地方,去一份大胆宣称要解雇所有人的工作,还有一个即将生孩子的妻子。所以就像,而且我来自蒙大拿州,每个蒙大拿人天生就不喜欢加利福尼亚州。所以所有这些事情都涌入了,这将会是,哇,这将是一个非常紧张的经历。这肯定很难。这不仅仅是一些简单的经历,我们只是,“哦,我现在在 FANG 工作。”你知道,我们必须克服这一点。生孩子非常困难。我们的第一个孩子非常困难。你知道,没有任何家人在身边帮助你。你知道,这对我妻子的打击比我大得多。


Groovy (1:25:23)

Lex: 你的技术学习曲线是什么?你穿着你的格子裤出现了,打扮好了。是什么?你必须学习什么关于技术栈,因为我想象 Netflix 是一个令人难以置信的基础设施,必须提供大量的数据。我只是被 Netflix 震撼了,还有像 YouTube 这样的公司,必须提供,服务大量的数据。

Prim: Netflix 在所有公司中拥有最容易的工作。

Lex: 即使我们有,你可以说,也许我们在观看时间上超过了 YouTube,我不确定我们是否做到了,但让我们假设 Netflix 的观看时间是 YouTube 的 5 倍,不管是什么。Netflix 有一个比所有其他公司都容易得多的问题。让我们回到这个问题上。我将首先告诉你关于技术栈,但我会告诉你为什么它有一个更容易的问题。

Prim: 所以当我第一次到那里时,他们给了我我的 PlayStation 3。我的老板说:“去学习一些代码。过几天回来告诉我你学到了什么。然后我会开始给你一些错误来修复。”

Lex: 等等,PlayStation 3?你在说什么?

Prim: 我在电视团队。我必须插上 PlayStation,开始在 PlayStation 3 上启动程序,并弄清楚如何在电视设备上运行 Netflix。

Lex: 哦,所以就像你有不同种类的设备。

Prim: 为什么是 PlayStation 3?其他不同的 2013 年设备插入 T。

Lex: 好吧,很酷。

Prim: 是的。没有那么多电视有 Netflix,更不用说他们称之为 Darwin 应用程序的了,这是他们的新应用程序。所以如果你在那年早些时候买了一台 Vizio,你会得到他们较旧的版本,叫做 Plus UI。你会得到他们较旧的版本。没有多少人有较新的版本。我们不再支持 Plus,或者说我们从未积极开发 Plus。我们只在 Darwin 上做事情。所以我必须学习整个技术栈。后端,或者说中间层,实际后端和前端之间的中间层是用 Groovy 编写的。正如我所了解的,Groovy 是,如果你不熟悉 Jenkins,那么你可能从未与 Groovy 互动过。但 Groovy 是一种 JVM 语言。这是一种非常有趣的语言。但这就是它在 Netflix 开始的方式。

Lex: 哦,它是 Apache。

Prim: Apache Groovy 是一种强大的面向对象编程语言,它运行在 2007 年发布的 Java 虚拟机上。它已经发展成为一种结合了静态和动态类型功能的多功能语言。

Lex: 好吧,所以 AI 对你撒谎了。Groovy 不是一种强大的、伟大的语言。这句话让它听起来比实际情况酷得多。你可能会遇到一百个人中的一个,他们接触过 Groovy,然后说:“哦,是的,Groovy 很棒。”其他 99 个人会说:“但愿你永远不必接触那种语言。”所以,当我到那里时,没有一个人,在 Netflix 没有一个灵魂,有 40 多名工程师,几乎没有人知道 Groovy 是如何工作的。不知何故,人们只是把这些脚本拼凑在一起,把它们都放在那里,它就工作了,这是在有 Groovy RX 端口之前。我们编写了我们自己的版本,叫做 WX。这是一场噩梦。Observables,所有这些东西。我记得有一次,他们告诉我,哦,是的,你知道,有了 RX,这真的很容易。你只要说你需要做什么,它就会映射出来,然后,砰,砰,砰,一切都会多线程运行。我想,哦,哇,真的吗?所以我所做的就是,observable sleep 1,因为我只想看到它睡眠,然后做下一件事。结果发现,当一个线程睡眠时,没有线程可以唤醒它。我刚刚关闭了所有的暂存环境,因为我运行了它大约 10 次,就像,“哦,它没有响应,哦,它没有响应,哦,现在它甚至没有回来了。”破坏了所有人的所有暂存环境。所以没有开发者可以在下午的剩余时间工作,因为我锁定了所有的实例,因为事实证明,它实际上不是多线程的。我们被告知的每一个假设都是谎言。没有人知道他们在做什么。那是一段疯狂的时光。所以我只是自然而然地被吸引到那里,因为我擅长 printf 调试,我擅长做这些事情。所以我想,好吧,我会弄清楚这个,我会做这个。所以我不得不重写我们在前端为电视做数据结构的方式,从所谓的 lolo 电影列表到 lolo,这是一个推荐对象列表,用于电影。为什么我们需要这样做?想想这个。你有两个列表。一个有《虎胆龙威》,布鲁斯·威利斯,因为你喜欢布鲁斯·威利斯。另一个有《虎胆龙威》,因为你想要硬汉做艰苦的工作。好吧,在那些日子里,我们只有一种方式可以展示你为什么想要它的证据。所以我们不能说:“哦,因为你喜欢这部电影。”你会去看那部电影,说同样的话。所以我们必须添加一级间接,我们可以用推荐信息来装饰视频或电影。

Lex: 好的。所以你可以抽象到推荐空间,而不是电影空间,对吧?

Prim: 是的。所以你不能把它挂在视频上,因为显然那样的话,对于显示相同视频的所有内容来说,它都是一样的。我必须做所有这些,我用 Groovy 写的,我是,我只是做了,人们就像,你是怎么用 Groovy 写的,就像,好吧,我读了一天的语言参考,然后编程了,你知道,这很疯狂,对吧?你这是什么意思?这是一种非常激进的语言,我们可以这么说。所以我就成了知道这些事情的人,所以他们只是给我越来越多的这方面的工作。这就是我擅长的地方,成为那个愿意做别人不做的事情的人。

Lex: 你能实际谈谈 printf 调试吗?就像你走进一个系统,世界上有很多这样的系统,就像 Twitter 以前就是这样,当埃隆收购 Twitter 并进入时,有这个旧的、粗糙的代码库,就像一个 JMS,你必须基本上做 printf 调试,就像进入一个代码库并弄清楚的过程是什么,这他妈的是怎么回事?这个东西是怎么工作的?有哪些缺陷?有哪些假设?你必须逆向工程所有这些其他的工程师过去所做的一切,以及几个月和几年来的混乱,你必须弄清楚这一切是如何工作的,才能做出改进。

Prim: 我一直擅长 printf 调试的原因是,我得到的第一份副业之一是在我还在学校的时候为政府编写机器人。所以我会以合同的形式做这件事,每周这么多小时。我的老板亨特·劳埃德,顺便说一句,他是一位伟大的教授,他说:“嘿,这是你的电脑,这是机器人,这是你插上它的方式,这是你运行代码的方式。你能编写闪存驱动程序、以太网驱动程序吗?你能编写行星煎饼电机吗?这里有一些手册。我丢了一些,你自己弄清楚吧。我会回来的。”所以对我来说,这就是政府工作。所以我想:“好吧,我会弄清楚所有这些事情的。”我把它们都弄清楚了。从机器中获取任何东西的唯一方法就是打印。所以就像,我必须变得非常擅长通过打印来解决问题。所以这有点像我掌握的一种技能,我可以通过 printf 调试来解决很多这些问题。显然,我不是一个游戏开发者。可能是一个不同的世界,可能应该使用,我认为约翰·卡马克在这里谈到了调试器有多棒。不同的世界。因为当我在 Netflix 时,有一些机器存在于 AWS 上的某个地方,我没有登录到它们。我甚至不知道如何登录到它们。我甚至不确定我是否有登录到它们的凭据。它们在某个地方运行一次,我必须弄清楚发生了什么以及为什么会发生。所以就像,我要成为,这就是我一直在训练的。我是一个 printf 调试冠军。所以就像,我可以非常快速地完成这些事情,并弄清楚为什么它们会以这种方式发生。

Lex: 你是一个特殊的人。我认为这是一个令人难以置信的技能,能够进入任何代码库,进入任何情况,并进行 printf 调试,这意味着,就像,你在一个黑暗的房间里,你在那个房间里摸索,试图弄清楚这个房间是什么。

Prim: 我有代码,所以就像我能勾勒出正在发生的事情。我不理解服务或任何东西,但你可以很快开始猜测出了什么问题,对吧?但打印方面可以帮助你确认你的直觉,测试你的直觉,并构建越来越多的信息,然后你开始从那里积累一个更大的图景,哪些边缘情况会破坏系统。我的意思是,我认为这种类型的情况对很多工程师来说都是令人生畏的。他们在那个时候崩溃了。我认为这真的是一件很强大的事情,能够进入一个代码库,这通常是很少有人从头开始的技能。实际上,这是 Web 开发中的根本问题,一般来说,他们会说,“我不知道发生了什么,我要从头开始写我自己的东西”,而不是对语言空间、问题空间进行 printf 调试,因为在这个代码库中已经有很多智慧和解决的问题。这是一个更重要的技能,了解,从过去的错误和智慧中学习,从祖先那里学习,并在他们之上构建,而不是把它全部扔掉,从头开始。这显然是你在 JavaScript 框架中看到的东西,每天都会出现一个新的 JavaScript 框架。

Prim: 所以我有一个关于这个的非常棒的故事,我认为这对我对其他开发人员的看法影响最大。有一个开发人员,他总是以我认为非常奇怪和怪异的方式编写东西。这与 Falcor 有关,我们的数据获取库,用于 Netflix。这将在移动设备上运行,所以我必须用 Objective C 编写。它必须在电视上运行,它还必须在 Web 上运行。所以它在所有东西上运行,我和另一个人负责这个东西的工作,以及请求方面,我们必须删除我们已经拥有的信息,待处理的请求和新数据。所以我必须根据某人的请求来弄清楚所有这些,然后只最佳地请求我们没有的东西。他用一种非常愚蠢的方式写了它,我想,这家伙真是个傻瓜。所以我删除了所有内容,开始编写它。我想,看看这有多好,看起来真好。我想:“哦,那里有一个边缘情况。”好吧,我可以看到他为什么这样写。但这没什么大不了的。我的其余代码真的很好。到最后,我几乎逐行复制了他已经写的东西。这与我的风格略有不同,但我只是写了相同的代码。我想,我是一个白痴。在这种情况下,我是白痴,因为它已经是一个解决的问题。我只是没有花时间去学习他做了什么。相反,我通过重写整个东西来重新学习了他所做的。我认为这是一种对人们来说极其重要的技能。我在自己身上看到了这一点,这对我来说是一个持续的斗争。例如,当我面对一个代码库时,但这通常适用于生活,在那里有人做了很多工作来做一件事,你应该投入大量的时间,并真正擅长弄清楚他们做了什么,为什么他们这样做。做大量的 printf 调试来理解他们做了什么。这是一种比从头开始更有效地深入理解问题的方式。即使有一种持续的诱惑从头开始,因为从头开始很有趣。你可以解决难题,所有这些东西,但这通常不是正确的做法。通常痛苦是正确的做法,对大多数人来说,理解别人的代码库是痛苦的。我强烈建议从头开始,如果你想理解一个概念。你不知道 HTTP 服务器是如何工作的,创建一个 TCP 套接字。学习如何解析 HTTP。它会变得非常容易,你会说:“这就是为什么当我收到一个请求时,我必须等待文本。我现在明白为什么文本由于某种原因不存在了。我明白了。”所以你通过简单地解析一些东西来获得这些新的视角。


Falcor (1:36:49)

Lex: 好吧,回到 Reddit 的智慧。显然,关于你在 Netflix 的编程生涯,有一些模因和传说。你提到的这个 Falcor 系统,有人,我想是 Tee,顺便说一下,他的名字怎么发音?

Prim: Teach。

Lex: Tee?

Prim: Okay. Tee。是 TJ,但我们叫他 Tee 或 Telescopic Johnson。

Lex: 哦,哇。这么多名字。你知道 DDoS,分布式拒绝服务攻击。你显然能够完成那个的简化版本,只是 DOS。那是一个传说。所以你基本上破坏了系统。

Prim: 是的。是的。

Lex: 你能讲讲那个故事吗?

Prim: 我很乐意。所以这个 Falcor。所以有这个 Falcor 的事情,对吧?我确实在其他人之前发现了这个错误,我确实向安全部门报告了它,它非常糟糕,以至于它有了自己的名字,Repulsive Grizzly Attack。他们甚至给出了如何做的例子。实际上,这意味着有一个请求同时针对内存和 CPU,并将摧毁,你看,Netflix,下面的那个实际上是写的文章。我没有被提及,这有点令人沮丧,考虑到我是发现它并告诉每个人它有多糟糕的人。不管怎样,不得不为它编写修复程序,或者说第一个修复程序。所以这就是它的工作原理,你可以用 GraphQL 做一些非常相似的事情。它有同样的危险。任何这些类型的 RPC 请求,你可以请求尽可能多或尽可能少的数据,框架都容易受到这种攻击。

Prim: 所以对于 Falcor,你要做的是,你可以给它一个数组。这个数组被称为路径,那是通往数据的路径。但有时你不想,就像你不想写出我想要电影,我想要行 z 或列表 z 或行 z 列 z 标题,我想要你知道的行 0 列 0 描述,我想要你知道的,你不想写出所有这些。相反,你可以说我想要行 0 到 10,列 0 到 10,标题和描述。你可以用一种非常紧凑、漂亮的小格式来写,它会给你所有这些数据。它会去服务器,服务器会填充所有这些,然后把它给你。哦,该死的,列表 3,它只有三个视频。所以当我尝试重新请求数据时会发生什么?我需要一种方法来告诉我的系统,你已经请求了数据,但那里什么都没有。这被称为一个盒装值。所以就像,类型,东西,值,那里什么都没有。我们已经请求了它,那里什么都没有。他们称之为,你知道,这就像一个哨兵值,如果你愿意的话,一个盒装值。我们有一个我们传递的叫做 materialize 的小特殊标志。这意味着当你请求一条路径时,我们将确保我们填充它,这样我们就不会意外地擦除任何东西。在最后,我们会说:“好的,你所做的请求已经被执行了,那里什么都没有。”好吧,如果我请求行 0 到 10,000,列 0 到 10,000,再多一项到 10,000,然后是一堆属性,然后要求它具体化,会发生什么?我将要在 JVM 中创建数十亿个对象,机器会发生什么?它停止运行。

Prim: 然后,如果我们尝试 JSON,即使它可以创建所有这些,我们然后要求它进行 JSON 序列化。它不会正确地做到这一点。这是不可能的。所以这就是攻击向量,一个简单的 while 循环就会关闭并控制 Netflix 很长一段时间,因为一个请求会杀死 AWS 上的一台机器。所以这意味着它会关闭所有这些。这是在网站上,这是在电视上,这是在移动设备上。这是深刻的。这是最糟糕的部分。它已经在生产环境中存在多年了。所以我们甚至不能回滚它。没有,哦,糟糕,让我们回滚到两周前,我们会向前修复并弄清楚。不,就像我们可以回滚到 2011 年。这就是我们的选择,2011 年,仅此而已。所以我们必须找到一条前进的道路,所有这些。所以就像,如果有人发现了这一点,将会发生的问题的数量是难以估量的。

Lex: 为了清楚起见,提供视频的基础设施将关闭。

Prim: 是的。UI,就像你不能在 UI 中执行任何操作。令人惊讶的是,你仍然可以流式传输视频,但你永远无法到达要流式传输的视频,因为你将采取的每一个行动都将被完全关闭。所以这不是 DDoS,因为你不需要一堆计算机来通过发出大量请求来压倒系统。一个请求,一台机器。如果我们有 50 台机器为数百万个请求提供服务,只需要 50 个请求就可以关闭整个 UI。

Lex: 是否有可能对基本上任何软件系统进行 DOS 或 DDOS?防御所有,你知道,关闭所有这些攻击向量可能非常困难。如果你采用任何足够复杂的软件系统,可能有太多的方法可以压倒它。

Prim: 是的,这是 ext。我的意思是,这就是为什么人们使用 Cloudflare。我认为 DHH 说得最好,就像我们有我们的网站,我们在外面有一个强大的保镖。所以 Cloudflare 内置了一堆实用程序,因为你知道,显然这就是为什么每个人都讨厌所有这些连接到互联网的蓝牙设备,因为它们只是变成了攻击向量,人们使用它们来对其他站点进行 DOS 或 DDoS。所以你不需要复杂的东西。你只需要一堆请求进来,你就可以关闭网站。这就是为什么这些前端非常擅长发现这些问题所在。但 DOS 有点不同,因为它不必通过使用大量请求来消耗资源来压倒。它实际上只是意味着存在一个拒绝服务攻击。其中一个可能是存在一个正则表达式攻击,Cloudflare 实际上对自己做了这件事,并关闭了自己,这是有一个正则表达式扩展攻击,如果你知道有人正在运行一个特定的正则表达式,你实际上可以提供最大程度地糟糕的输入,然后那个东西会进行超级处理。处理单个请求需要 10 秒钟。然后你只需要发出数百个请求,你就可以关闭整个服务。这不像你需要一些巨大的机器来发出万亿个请求。你只需要一些少量就可以完全摧毁一个服务。所以 Web 是一个非常困难的地方,要正确地做到这一点。

Lex: 这非常吸引人。我也想知道有多少超能力的,什么是黑客?

Prim: 与好人相比,与坏人相比,有多少坏人?坏人方面的技能分布是什么样的?他们不断地试图攻击。我假设可能有大量的非常简单的人。

Lex: 脚本小子,对吧?

Prim: 只是人们试图做一些事情。然后有大量的社会工程,黑客攻击不是用电脑完成的,而是通过,你知道,Kevin Mitnick 在他的书中有一个经典例子,你会打电话给某人,假装是 Charlene,我们正在进行一些审计,我认为你的 PIN 码在文件上已经过时了,它仍然是 2323 吗?他们会说,不,是 4747。你就像,谢谢莎伦,你知道,砰,你刚刚黑了他们,对吧?经典的人们喜欢纠正错误的信息,这是一个标准的。所以有很多方法可以黑客攻击。所以我假设有一些非常棒的白帽黑客,有一些非常棒的黑帽黑客,但漏洞空间,困难的事情是,发现一个漏洞,你不让任何人知道,白帽黑客仍然必须做出同样的发现。这就是我认为真正的问题所在,黑帽黑客在某种意义上有一份更容易的工作,或者至少是一份他们可以利用更长时间的工作。一个是发现谁在破坏系统的过程,另一个是试图找出如何破坏系统的过程。而且似乎大多数软件都是用牙签和胶水粘在一起的,每一块都存在很多危险。

Prim: 还有社会工程方面,这是一个真正的攻击向量。我认为这是从长远来看将在世界上造成最大损害的攻击向量。特别是随着 AI 工具变得越来越容易,大规模地说服人们,某种奶奶电子邮件,我认为这是一个非常严重的攻击向量,人类心理等等。

Prim: 我总是假设,每当有一个女孩接近我,这都是某种社会工程项目。某种攻击向量,某个情报机构。事实上,我很确定我们回到了《美丽心灵》。

Lex: 美丽心灵,是的。

Prim: 我在楼上有一块白板,我计算每个人的轨迹和移动。

Lex: 不过,关于攻击向量,你是对的。

Prim: 特别是在人工智能时代。我不认为很多人都在谈论的一件事是,随着我们越来越多地整合人工智能,提示注入是一件非常难防御的事情,因为它不太清楚如何防御它。如果它只是一个,你知道,归根结底,一个单词计算器,生成单词。如果你能找出正确的单词计算器输入,它可能只是打破它的边界,开始做一些它不应该做的事情。未来将会有很多产品容易受到他们从未想过的攻击。就像,你忘记了一个边缘情况,这已经够糟糕的了,当你编程时。现在你必须猜测人们可能会想出什么,让一个可以访问系统的东西能够做到,对吧?你没有办法推理它。它的推理来自 Reddit 和它读过的其他单词,以及如何把东西放在一起。这是一个非常,这是一个将要发生的巨大空间。这就是为什么我个人认为,不要给太多的权力,我们不知道即将发生的攻击。


破坏生产环境 (1:46:19)

Lex: 是的,我们给软件系统提供的权力越多,它们造成的损害就越大。这肯定是事实。但它们能做的更棒的事情越多,这就是我们作为人类文明一起携手走过的刀刃。我们会蓬勃发展还是毁灭自己?问号。

Lex: Reddit 上的好人,要求我问你关于你破坏生产环境的那次。这与 Falcor 有关吗?你破坏了生产环境吗?这是,我已经破坏了很多次生产环境。我因为很多愚蠢的原因破坏了生产环境。有一次,我破坏了生产环境,因为我来自 PHP,在 PHP 中,static 意味着在 PHP 的生命周期内是静态的。PHP 是每个请求的生命周期,对吧?这就是为什么 PHP 如此低效的原因,每个请求都是它自己的实例,因此静态内存是针对生命周期的。我猜我从来没有把这一点放在一起。所以我有一些对象,我把它们变成了静态的,因为我想:“哦,我只需要在请求的生命周期内使用这个。”你看,那些不是生命周期的。一大堆错误的数据到处都是。人们出现说他们来自所有这些不同的国家,一切都错了,因为我只是,哎呀,我制造了一个难题。所以那是我做的一次。另一次是我搞砸了,如果你在网站的主页上,等待 Lady Gaga 的视频发布,你正在观看倒计时。如果它达到零,广告牌就会冻结,它就不会工作。如果你刷新它,它会工作。但揭示,大揭示,我搞砸了,我的老板非常生气,好莱坞的其他人也对此感到不满。那就像,我的错。对不起,Jeff Wagner。我记得那一次,我特别记得那一次。有一次,我发布了一个错误,同样是在广告牌上,如果你按下添加到我的列表,我不小心编程了一个无限循环,你的整个网页就会冻结。

Lex: 其中一些错误是不是很难发现,直到你开始?

Prim: 那个看起来很容易,回过头来看。循环,是的。我们在那些日子里实际上有人工质检,他们应该检查所有的东西。所以我不觉得那么糟糕,因为我的人工质检也错过了它。就像我们都错过了它。但它太简单了。你只要按下那个按钮,砰,它就会完全冻结网站。

Lex: 用保存值的全局变量污染代码,就像 PHP 允许你做的那样,这是一个棘手的发现,因为你依赖它,但可能会有其他人为它赋值。

Prim: 到处都是数据竞争。我只是不明白,就像在我的脑海中,静态就像,哦,这是为了生命,我只是当时太沉迷于 PHP 的世界了,我只是做了一个,回过头来看,这太明显了,但在当时,这很难。

Lex: 总的来说,推送到生产环境,我和 Peter Levels 谈过这个。我的意思是,显然他主要是作为一名独立开发者在运营,但他经常在他有数千甚至数十万人使用的网站上推送到生产环境,意思是,没有测试,就像推送修复一样。

Prim: 你的组织越小,这显然就越容易。我想每个人,我认为没有人会争论这种观点。如果只有你一个人在一个项目上工作,那么你直接推送到生产环境显然要容易得多,因为你是唯一一个在工作的人。你知道所有的细节,如果出了什么问题,你会发现它。所以对我来说,这是有道理的。我认为他的运作方式非常适合他所做的。你不能把他所做的转移到微软、Netflix 或谷歌,因为这显然会是一场灾难,因为有很多人都在推送到生产环境。所以,我的意思是,我个人很喜欢这一点。我认为你必须衡量你正在构建的应用程序及其复杂性,以及你正在推送的内容,以及有多少人在上面工作。我认为所有这些都会影响你如何做到这一点,因为并非所有应用程序都是一样的。就像我正在开发的那个具有缩放和滚动功能的应用程序,我们拥有自己的所有东西,这是一个非常深入的、逻辑繁重的应用程序,这与网站上发生的事情无关,大多数代码是库代码。如果你没有一个好的测试套件和类似的东西,在推送之前运行,那就更难了,因为当你挤压那个球时,你知道,不同的东西会在不同的区域弹出。这比如果你做的是一个更视觉化的东西要困难得多,因为一个视觉化的东西,你只影响这个区域的视觉效果,你可以测试它,这通常就是它的结局。而你知道,所以这取决于耦合和一切。所以,我的意思是,我喜欢他的方法,顺便说一句。我对任何以这种方式运作的人都非常尊重,因为我认为这是一种很好的方式。这太好了,因为它打破了科技 Twitter 的这种观念,哦,你必须使用所有这些昂贵的服务,你需要使用所有这些东西,因为如果你不使用所有这些东西,如果你不使用最新版本的 React,如果你不使用最新版本的这个,你根本就不会成功,这是不可能的。就像,不,不,那不是软件。大多数软件不是新东西。大多数软件是旧的、糟糕的软件,有人必须维护它,它实际上非常非常棒,并且有很多非常难的问题,如果你从不同的角度来看待它,它实际上是非常棒的。

Lex: 对于不了解的人来说,他的技术栈在 Web 开发方面是 PHP、jQuery 和 SQLite。

Prim: 是的,所有伟大的东西。

Lex: 我只是惊讶他仍然使用 jQuery,因为在这一点上,在现代 Web 上,一切都是,我的意思是,你有 document query selector 和 add event listener click,对吧?它几乎拥有了你已经需要的一切。它有 DOM content loaded。我过去使用 jQuery 的所有原因都是在按钮上添加一个点击很困难。你必须处理 IE7、IE8、IE9,对吧?那些都是困难的差异。而现在这太容易了。我很惊讶它甚至是。

Prim: 这绝对是一种权衡。

Lex: 我仍然使用完全相同的技术栈,PHP、jQuery 和不同类型的 SQL。但问题是,你知道,你继续使用 jQuery,因为你可以非常快速地完成工作,并且没有明显的性能影响,你检测不到。所以就像,为什么要换成其他东西?但正如我们将要讨论的,探索和学习总是好的。并非所有工具都擅长解决所有问题。所以你认为的真正问题是,你会遇到这种权衡,你有一个你非常熟练的工具带。你知道所有的细节。没有未知的未知。但在这方面没有惊喜。你知道你正在构建什么,你知道你正在进入什么。你将能够解决这个问题。但是,如果你使用不同的语言或不同的体验,你会发现有些东西能够更容易地以更有效的方式表示状态,你可以在某些方面非常有效地解决问题,而不是在其他方面。所以就像,如果你不花时间去探索,你可能会错过一些东西,这些东西可以让你在这个特定的问题子集上变得两倍好。所以我觉得能够看到所有问题是很重要的。所以虽然我理解为什么人们这样做,但为了效率起见,我不想只关注一件事。


Netflix, Twitch, and YouTube 基础设施 (1:53:34)

Lex: 让我们回到 Netflix 平台的基础设施,更广泛地谈谈 Netflix、Twitch、YouTube。每当我使用这些服务中的任何一个,我都会被提供这些服务所需的基础设施所震撼。YouTube 和 Twitch 与 Netflix 不同,创作者可以自己进来上传内容。在消费方面,YouTube 每天有超过 1000 亿的观看量,超过 10 亿小时的观看时间,但在创作者方面,每天上传 100 万小时的视频。100 万小时。就像你必须,你必须服务两者,你必须提供一切。这对我来说难以置信。你能,也许你能谈谈你自己的直觉,只是放大它,提供这种基础设施需要什么?

Prim: 对我来说,我发现非常复杂,我无法想象工程时间的是,你如何在这种情况下创建一个边缘?我的意思是,当人们说这句话时,如果你没有经验,边缘就是你将数据传递到 B 的地方。你希望那个边缘尽可能靠近客户,因为那是数据所在的地方,然后客户和你正在做的事情之间的通信非常非常小。显然,光速会增加,跳数会增加,你必须远程调用的服务数量会增加。它们都会增加,它们都会给系统增加低效率。所以像 YouTube 这样的东西,他们希望能够尽快提供这些数据。但他们的数据不断变化,相关性几乎与项目的新鲜度直接相关。所以就像,你如何缓存这些东西?你如何做这件事?所以他们一定有一个令人难以置信的缓存网络,我甚至无法想象这需要什么。这对我来说,太令人印象深刻了。一百万小时的观看时间,有多少种不同的分辨率,有多少数据?一百万小时的观看时间是什么?是 4K 一百万小时的观看时间,还有 1080p,还有 720p,还有 1440p?这个数字是一个疯狂的数字。

Lex: 实际上,你说的是对的,这很聪明,对于 YouTube 来说,通常新事物非常重要,要向所有人展示,所以你不能依赖缓存或简单的缓存。你必须尽可能快地提供新事物。

Prim: 是的,我的意思是,这太不可思议了。所以有整个系统,推荐系统,它了解每个观看 YouTube 的人,它必须将新事物整合到其中,同时还要缓存这个令人难以置信的你可能感兴趣的视频集群。所以,并整合广告,对吧?在 YouTube 和 Twitch 的情况下,等等。这是一个非常棘手的问题,因为你必须考虑,这个的缓存命中率是多少,因为有这么多,因为现在问题实际上归结为空间。空间实际上成为一个真正的问题,就像他们有多少数百 PB 的数据,他们必须,好吧,我们缓存什么,我们在哪里缓存这个?我的意思是,我想的是以 GB 或 MB 为单位,他们必须以我甚至不知道名字的字节版本来思考,对吧?这是一个非常不同的问题。这就是为什么我说 Netflix,Netflix 在缓存方面有一份更容易的工作。所以如果你从未查找过它,它叫做 OCA,我们知道我们正在发布哪些视频,我们知道在特定区域哪些视频很热门。这是一个非常有限的集合。我们不会突然得到,哎呀,我们有一百万个新的观看小时,对吧?我们甚至不必担心这是一个问题。相反,就像,好吧,我们知道《怪奇物语》第五季即将发布。我们将在世界各地的每个 OCA 中预先缓存《怪奇物语》第五季,因为那东西即将受到冲击,对吧?所以就像,它能够做出一种与你在 YouTube 上必须做的不同的决策。

Prim: 然后 Twitch 甚至更疯狂,因为现在你实际上是在接收视频,并试图让它同时为所有视频输出。你必须将视频从任何格式和任何比特率转换为系统中更有效的东西。向 Twitch 工程致敬。因为那是一些,那是一些严肃的工作。

Prim: 这是某个混蛋 Lex 出来在 Twitter 上谈论 YouTube 功能。

Lex: 所以,就像,我听着,你在你要求的功能上没有错。

Prim: 我认为这是一个工程问题,如何允许快速迭代和添加功能,而不必集成或影响整个代码库。所以在代码库的边缘改进某些功能,而不必咨询代码的母舰。这是一个大团队,对吧?这就是根本问题。当你达到 YouTube 的规模时,有处理数据仓库的团队/组织。有处理交付的团队/组织。有一个团队/组织,就像中间层,你如何,你知道,他们将成为与这些地方对话的小型微服务。然后你有这个前端引擎。所以,对于一个小功能,你必须让中间团队,你必须让后端团队,你必须让所有这些。

Prim: 举个简单的例子,Netflix,你熟悉反乌托邦的《黑镜》吗?

Lex: 是的。是的。

Prim: 第一季第一集。你知道第一季第一集吗?每个看过《黑镜》的人通常都知道这一集。

Lex: 好吧,是的,我不记得它是什么了。原谅我的语言。

Prim: 但他们称之为“猪操蛋”集。

Lex: 哦,是的,当然。一旦你看过这一集,你就会知道这一集。

Prim: 好吧,当 Netflix 采用它时,我被拉进了一个房间。有一个副总裁,一个副总裁,一个产品设计师,一个副总裁,他们说:“嘿,我们即将发布我们自己版本的《黑镜》第三季,我想当时是第三季。我们需要第一季第一集不是人们首先看到的东西。所以让我们颠倒一下季的顺序。”这需要我,我有大约 20 名工程师,我必须召集起来才能做到这一点。这就是大公司的问题,最终每一件小事都必须成为自己的团队。所以即使是很小的,也没有小功能这样的东西。

Lex: 颠倒选择季节的下拉菜单的顺序是一个与一群副总裁和工程师的会议。

Prim: 这真的很有趣。

Lex: 必须有一种方法来加速它。公司的自然扩张和增长的官僚主义确实减缓了这一点。但仅仅是看到埃隆的工作方式,他的团队仍然能够保持非常快的速度,即使公司在增长。必须有一种方法,一种流程来做到这一点,特别是对于,是的,对于“猪操蛋”剧集。我不知道这在优先级列表中的哪个位置,但对于像那样重要的事情,你应该能够快速做到这一点。

Prim: 我不知道。你能谈谈,你会怎么做?

Prim: 我可以先告诉你它是如何完成的。请记住,在像 Netflix 这样的地方,我认为当时有一个叫做 Dexter 的产品,我不记得了。这是我们实际的电影元数据仓库,它将与好莱坞高度集成,那是那一方能够管理所有这些的地方。所以就像,嘿,你需要能够标记需要反转的东西,因为我们会遇到很多这种情况。我们确实遇到了很多需要反转的热门节目,所有这些。所以就像,我们需要能够反转剧集编号、季编号,我们需要能够隐藏季或剧集编号。就像在切尔西·汉德勒的节目中,这是一个每日节目。所以就像,你不需要剧集编号,你只需要最新的一个。所以就像,存在着整个问题。所以就像,好吧,你需要在你的 UI 上做这件事。然后你需要能够存储这些数据。然后我们需要能够去那些能够从那里获取视频数据并将其提供给我们的服务层的人。我需要去和他们交谈,并说服他们需要给我新的方法和一切来做到这一点。然后我需要去编写方法来获取它。然后我需要去 UI 并使其可访问。现在我需要去网站人员那里,我需要去移动设备人员那里,我需要去电视人员那里。所以就像,你可以看到这件事像滚雪球一样。

Prim: 对我们来说,Netflix 做得非常出色的一件事是,在我和这些高层人士会面后,我是 c,我是船长。我现在是船长。所以,我去所有这些团队说:“嘿,经理,我需要,我需要一名工程师,我们需要在接下来的几个月内完成这件事,因为我们有《黑镜》要上映了。”她会说:“好吧,给你。地图团队,我需要有人帮助我从 LMO 中获取数据。”所以就像,“好吧,你和这位工程师一起工作。”我会去 VMS 团队,好吧,我需要这位工程师。我会去广告牌团队,我需要这位工程师。我会去所有这些小地方获取所有这些小块数据。然后我是船长。所以我会说:“你正在做这个,你正在做这个,你正在做这个,你正在做这个,我正在做这个,我们走。”所以就像,这奏效了,作为一个大公司,我们能够走得相当快,事实上,它需要 20 名工程师来完成这样一个简单的任务。我们能够在大约三周的时间内完成它,但我认为与有多少人参与相比,这仍然很了不起。

Lex: 好吧,因为你有做这件事的自由。

Prim: 你说船长,这对于大公司来说非常强大,这是一个风险,因为你可能会搞砸它,你可能看不到更大的背景,法律上或任何,以及对行业或所有合同的影响,所有这些。所以这是一个风险。这是一个你必须继续承担的风险。然后,如果你搞砸了,你就修复,然后可能支付法律上的代价,无论是什么。但从长远来看,这种风险是值得的,因为你将继续创造一个更好、更好的产品,不断发展行业,不断创新,领先于行业,等等。

Prim: 是的,是的。不仅如此,我认为有一件事非常重要,是的,产品会变得更好,但你雇佣的人和你留住的人会更好,因为他们是那些表现出成熟的人。他们是那些你可以给他们一些东西,他们就可以召集军队,让事情发生的人。那是一群非常棒的人。所以你也会自然而然地选择出优秀的工程师,他们不仅仅是擅长编码,他们擅长编码,他们擅长解释,他们擅长说服,他们擅长,你知道,你必须创造一个非常精简的、能够快速行动的团队。

Prim: 我认为对于伟大的工程师来说,不得不等待,好吧,让我们安排下周三与副总裁的会议,这会摧毁他们的灵魂,他们要么不想再做出贡献,他们离开公司,要么他们只是退出,接受金手铐,你知道,买一栋漂亮的房子,专注于家庭。

Prim: 我觉得我会在那种情况下死去,老实说。就像,那是,那是我的死刑判决,那里没有理由去尝试,没有理由去做任何事情,我只会进去,就像有效地像僵尸一样度过我的一天,然后就这样。我不想那样生活,我想感觉我在努力做一些事情。

Lex: 我还应该提到,在所有这些之上,所以你出色地阐述了 Netflix 必须解决的挑战是多么令人难以置信。除此之外,对于 YouTube,你知道,元数据的事情,因为用户可以上传视频,并且有一个 API,他们可以自动上传并自动更改所有这些东西,其中每一个都是一个攻击向量,正如我们所提到的。这是他们在工程方面和法律方面必须认真考虑的事情。他们可能会遇到各种各样的麻烦。所以他们必须考虑到所有这些。这真是太令人着迷了。

Prim: 法律方面是显而易见的,但这并不是,我一开始永远不会想到有人会说,上传你不允许拥有或拥有的图像,但我保证这会发生。然后你有整个孩子的一面,对吧?想想当你把某些东西标记为儿童友好时。有多少次他们把色情内容偷偷放进泰勒·斯威夫特的视频或其他什么东西里?那是几年前的事了。有整个泰勒·斯威夫特或什么的,我忘记是什么了,我以为是泰勒·斯威夫特,但会有这些模拟视频出现,然后,砰。这是一个,这是一个非常糟糕的问题,我很高兴这不是我必须尝试解决的问题。

Lex: 是的。好的。所以,是的,YouTube 和 Twitch 和 Netflix 正在做一项令人难以置信的工作。


ThePrimagen 的起源故事 (2:05:36)

Lex: 你最终选择了,你是个疯子,离开 Netflix,开始一段新的旅程,成为一个独狼,开始直播。那是什么?那是怎么回事?

Prim: 所以,我已经直播了将近七年了。它实际上是从 Netflix 开始的。我们做了一项慈善活动,Extra Life。向 Extra Life 致敬,因为他们开始了我的直播生涯。实际上,你只是直播,你筹集的任何资金都会捐给患有癌症的儿童研究。他们是一个伟大的慈善机构,因为他们不收取管理费用,他们为自己的网站和一切筹集捐款。所以这是一个非常伟大的、直接的慈善机构。非常喜欢他们所做的事情。这非常酷,因为我现在住在南达科他州,但我实际上可以选择一家医院,钱会直接捐给那里。所以就像,从 A 到 B 有直接的影响。所以这是一个非常酷的组织。我的朋友 Guy Sereno,我喜欢叫他“nice try guy”,他可能是我一生中遇到的最伟大的工程师。他只是说:“嘿,来做这个吧,我们都要做这个。”所以我玩《堡垒之夜》。在那之前,我想:“我最好先学习如何直播,我最好获得会员资格,这样我就可以接受订阅,然后如果有人给我订阅,我也会支付。”所以 2018 年 6 月左右,我开始了,我开始直播。我开始直播一些《堡垒之夜》,最终获得了会员资格,最终做了整个 Extra Life 的事情,我最终非常享受。我想,这很有趣,我当时在玩《堡垒之夜》,好吧?请注意,当时我是一个《堡垒之夜》主播。我开始真正享受它,我继续这样做。然后有一天,我决定做一些编程,因为我真的很喜欢 Vim,我认为我用 Vim 很快,也许人们认为编程很酷,因为当时真的没有编程部分。我做了,我有大约 30 个人出现,这就像,在那时感觉是令人难以置信的数字。所以我想,哦,天哪,有 30 个人在看我编程。所以它只是继续进行,它继续发生,它只是不断增长。我年复一年地这样做,我会做我的工作,我会回家,和孩子们一起吃晚饭,我会给他们读《指环王》和《霍比特人》。在那段时间里,我会给他们读半个小时。然后我会放下它。然后每周三个晚上,我会编程到凌晨 2 点,或者玩电子游戏到凌晨 2 点,直播,并建立起这个副业。我做了很长时间。然后最终,它一直运作得很好。我开始制作 YouTube 视频。然后那开始变得更好。这只是一个漫长的过程,直到去年四月。我去了主播奖,我宣布了编程类别,Pirate Software 赢了。这太棒了。那是一段美好的时光。在那段时间里,他给了我一个挑战币,只是说,你必须去做,全力以赴。所以我就坐在那里,我的妻子可以证明,这就像一种情感上的动荡,需要很多,这很糟糕,你知道,因为我没有,Netflix 是一个非常安全的选择。这既非常有趣,又具有挑战性,我喜欢很多与我一起工作的人。总的来说,这是一件非常棒的事情。我有一个非常棒的老板。我真的很感激他。我现在还时不时地给他发短信,他是一个非常好的人。所以就像,我要离开所有这些东西,去追求一些不确定的东西。现实是,直播和所有这些事情,你知道,人们今天可能爱你,明天可能恨你。有很多事情涉及到公开的一面。我有 Netflix 作为后盾。所以就像,如果公众第二天恨我,我会说:“再见,我走了。”我不关心。现在就像,现在我要把这个当作一份工作。所以这其中有一个巨大的动荡。最终我说:“好吧,我要做这个。”这让我想起了我第一次决定加入 Netflix 的时候。我越来越老了。没有很多机会去做这样不寻常的事情。随着你年龄的增长,这些机会不断减少。这可能是我能做的最后一件疯狂的事情了。让我们试一试吧。所以在四月,我全职投入了。我想我没有回头。我做这个全职工作还不到一年,这很有趣。最重要的是能够真正探索并在直播中做这些事情,人们真的很喜欢观看和参与,这是一种非常有趣、艰难、令人惊叹、困难的体验。

Lex: 我的意思是,这是一个非常鼓舞人心的飞跃。这是一个非常艰难的飞跃,有很多原因,就像你概述的那样,但也有它的孤独感。我认为这是一个相当孤独的追求。

Prim: 是的,只有你和相机,还有观众,以及其中的起起落落,这真的不是一个团队。我确实有一件幸运的事情,我想说,我的编辑 Flip,向 Flip 喊话。他说,如果我说向 Flip 喊话,对他来说意义重大。

Prim: 但我爱你,Flip。我爱你。我爱你。

Lex: 天哪,他,你知道,正如他所说,他一无所有。他成长得很艰难,生活中有很多艰难的决定。他正在努力摆脱困境,他只是说:“嘿,我会为你全职编辑。”所以我就说:“好吧,50/50。我在 YouTube 上赚到的任何钱,你都得到。我们要一起做这件事。”我们这样做了很多年,每个月几乎赚不到一美元。所以就像,这是一个不可思议的飞跃。现在,我们可以一起工作。所以我确实得到了一个团队方面,我认为这很好。但这不像在 Netflix 那样,我可以听到人们正在构建的东西。我没有团队,我没有产品或周期,我没有一个我必须努力取悦的经理。就像,这非常孤独,我不认为很多人意识到它实际上有多么孤独。

Lex: 是的。所以把这种孤独与,在我的情况下,我不知道有多少人攻击你,我,你知道,我受到的攻击率低得惊人。

Prim: 我觉得是的。

Lex: 你是,人们通常,我的意思是,有时取笑那种事情很有趣,但它主要是真的。我的意思是,你给世界带来了如此多的爱,激励了这么多的人,即使你在取笑一些东西。

Prim: 是的。

Lex: 但对我来说,把它的孤独与强烈的攻击结合起来,这很艰难。这在心理上可能很艰难,这是一段非常艰难的旅程。你会想念与团队合作吗?即使是从软件工程方面,就像你可以共享代码或讨论代码,是的,协作方面?

Prim: 是的。多件事情。一,嘿,我们爱你,Lex。所以不要让这些事情让你沮丧。

Lex: 谢谢你。谢谢你,我也爱你。

Prim: 谢谢你。嘿,有一点,有点结合的时刻。

Lex: 紧张感有点强烈。我感到不舒服。

Prim: 是的。不管怎样,团队。我真正怀念的一件事是,即使当我讨厌人们做事的方式时,也能看到其他人如何解决问题。这真的太神奇了,就像原始的创造力,这么多人拥有,就像,哦,哇,我永远不会这样做。疯狂,对吧?哇,这太棒了。你内在地处理这件事,你会想,哦,我现在在我的工具带里有了一个新的小工具。你知道,因为在某个时候,当你第一次年轻并且刚开始编程时,很难找到一个导师。我的意思是,任何有几年经验的人都会比你好一点,但就像无限地比你好。这感觉很疯狂,人们有多么优秀。所以你必须找到导师,你向人们学习。然后随着你变得更好,这种可用性变得非常小。所以这是我真正怀念的一件事,那种被迫一起解决难题。

Prim: 我认为也有一种技能,从其他人那里挖掘智慧。我通常试图接近,即使是初级人员,年轻人在精神上,至少对我来说,这是一种技巧,假设他们是世界上最聪明的人,比我聪明得多。所以我把他们说的每一句话都当作潜在的智慧,这帮助我挖掘潜在的智慧。因为随着年龄的增长,很容易判断,就像,“哦,是的,好吧,好吧,我经历过,我记得那种感觉,我记得那种想法,那是不正确的。”不管是什么。但只要假设你不知道,我不知道我在做什么,而另一个人是这个圣人,从那种互动中,我认为你实际上可以学到很多东西。我最喜欢的互动是当我们都这样想的时候。所以我们,从那里,我认为这是一个伟大合作和互动的催化剂。这也让一切变得更好。你知道,与一个好斗和消极的人一起工作真的很糟糕。我不介意好斗,如果这是,我试图弄清楚现在做什么最好,而不是仅仅因为你是一个消极的人而好斗,事情必须是这种特定的方式,因为如果它们不是这种特定的方式,那就是世界末日。这实际上让我很难合作。

Lex: ThePrimagen 这个名字的起源故事是什么?

Prim: ThePrime 这个名字的起源故事是,你熟悉一款叫做 Turok 的电子游戏吗?任天堂 64。

Lex: 是的。

Prim: 所以 Tur Rock 有 Tur Rock 1,然后是 Turok 2。Turok 2 是一款非常困难的游戏。这是在第一人称射击游戏时代,他们只会给你一定量的生命值,你必须去发现生命值并获得生命值,你必须在几乎不死的情况下通关整个游戏。

Lex: 那是一个古老的,那是第一个版本,对吧?那是 Tur Rock 1,然后是 Tur Rock 2。Turok 是一款著名的第一人称射击游戏系列,具有恐龙、动作和科幻元素。自 1997 年问世以来,该系列已经发生了重大变化。

Prim: 是的,你看,就在那里。1998 年紧随其后的是《邪恶之种》,具有更大的关卡、更具挑战性的谜题和更致命的敌人。值得注意的困难,它非常非常非常困难。好的。所以当我得到它的时候,它是一个黑色的卡带,不像你标准的灰色的任天堂 64。它是一个黑色的卡带,它是一个很棒的游戏,对吧?我得到了它,我把它放进去,我玩了,我每天玩大约 10 个小时,连续玩了一个月,我通关了,这是一种不可思议的、伟大的体验。Tro 2 的最后一个领导者叫做 primogen。所以当我还是个孩子的时候,当你在五年级的时候,这就像超级酷,以坏人的名字命名。所以很长一段时间以来,在任何互联网上,就像我之前提到的 Grail online,那就是 prime,这很棒。然后,你知道,我最终成为了一个成年人,就像,好吧,你知道,我是一个成年人,我的名字是 Michael Pson,你知道,这就是我在互联网上很长一段时间的名字。我记得,大概是 2017 年、2018 年左右,我记得科技界变得多么糟糕。这只是一个超级自命不凡的地方。大量的生殖器比较。所有最糟糕的事情。Ken Wheeler 因为玩圆圈游戏而被取消了。就像,这很难向不在那里的人描述,但这只是最糟糕的地方。科技非常不有趣。这非常糟糕。一切都太,它不是学术性的,因为它是研究。这就像:“我们正在构建最复杂的东西,这是为聪明人准备的,你们其他人都是笨蛋。别担心,我们会为你设计,笨蛋。我们会向你展示如何制作完美的架构。”我记得我改变了我的 Twitter 昵称,因为我太生气了,回到了我的电子游戏名字,因为我想让事情变得有趣,我想阻止这种情况。

Prim: 所以当我开始直播技术时,我的目标变成了摧毁任何那种技术心态,因为它不包括任何人。每个人都认为他们是聪明人,他们为傻瓜设计。就像,不。我希望技术成为一个人们觉得可以发挥创造力、感到兴奋并实际构建一些东西的地方。如果你是新人,没关系,你可以很笨,问一些愚蠢的问题。从你的愚蠢中学习。没有人期望你聪明。选择你想要的任何东西,实际上做一些事情,玩得开心,并构建你的疯狂想法。哦,你要重新发明轮子,重新发明轮子。了解你正在做什么,学好它,并互动和东西。这与那里的情况非常不同。Arnold Schwarzenegger 谈到了这一点,当他第一次开始演戏时,他的名字就像人们讨厌的东西,正如他曾经说过的:“你的声音很奇怪,你的身体很奇怪,你的名字,你的名字无法发音。没有人会,schnitzle,没有人会记住这一点。”是的。他说:“但现在这个名字是最强大的部分。”对我来说,我一直觉得这很相似。虽然我的名字没有那么酷,我也没有阿诺德那么受欢迎,我也没有那么强壮或好看或成功。尽管如此,这个名字代表了这种反文化运动,在我的内心,我只是讨厌那里的东西,我想打败它。所以这就是事情。现在人们因为我的名字很奇怪而记得我很清楚。所以就像,我,不管出于什么原因,它变成了它自己的东西。所以这就是,现在我永远不会改变它。

Prim: 当时我永远不会改变它,因为那是我对机器的愤怒时刻,如果你愿意的话。

Lex: 嗯。

Prim: 是的,我只是希望人们能够发挥创造力,再次玩得开心。没关系。

Lex: 胡子呢?这是一个史诗般的胡子。这是一个史诗般的胡子。它有自己的生命。有一个起源故事,还是你们在某个时候发现了彼此,还是它从你生活的挣扎的黑暗中出现的?它来自哪里?

Prim: 最初的胡子是,这是不刮胡子十一月,在它成为 Movember 之前,那是过去的不刮胡子十一月。在不刮胡子十一月之后,你有了所有这些头发。所以你自然要做的事情是什么?你必须留一天胡子,对吧?所以每当我忘记,你知道,长时间不刮胡子,然后我让它开始长得很长,我只是觉得,“哦,这很有趣,我会留胡子。”所以有一天,当我在直播时,这是其中一次我只是没有刮胡子,然后我开始让它长出来,然后我长出了一点胡子,然后我只是留了胡子。当我这样做的时候,人们会说:“嘿,是胡子时间。”我就想:“见鬼,感觉这就像一种生活方式的决定,对吧?这是有趣的时光。”所以突然间,留胡子变得令人兴奋,我把它剃掉了,我想:“哦,好吧。”但你知道,我的一部分就像,你知道,留胡子会带来一种奇怪的能量。所以我想,我要回去。告诉我的妻子原谅她。她对我的留胡子的决定不太兴奋,但我只是决定留回来。就像,这是正确的事情。就像它的一部分一直是我的能量,胡子。它一直都在那里。只是后来才变得可见。

Prim: 感觉就像,是的,我们在离线聊天,一个成功的关系的组成部分是牺牲,你的妻子愿意牺牲,让你留胡子。

Prim: 显然,我不愿意牺牲不留一个。


学习编程语言 (2:20:52)

Lex: 你做了一件令人难以置信的事情,你在直播时尝试了一堆不同的编程语言,你,就像,你全力以赴地学习某些编程语言,比如 Rust,然后是 Go,然后尝试选择一种新的,但也在不断地试验。所以,也许我可以问的一个问题是,关于学习,你学习一门新编程语言的方法是什么?也许你对学习一门新编程语言有什么建议,当你开始这段旅程时?

Prim: 所以我尝试了很多不同的方法来完成这个学习过程。我尝试了很多不同的方法。显然成功的一种方法是开始构建一些东西。把你的手放在键盘上,你知道,特别是如果你已经知道如何编程。你会想:“好吧,我现在正在使用 Zigg,我如何做一个主函数,这样我就可以运行程序了?好的,我现在知道如何构建了。好吧,我如何做一个 if 语句?它是什么样子的?好吧,我如何声明我自己的函数?我如何做模块?”对吧,你只是通过谷歌搜索,如果你愿意的话,来达到最终产品并构建一些东西。这是一个好方法,一个很棒的方法,因为我发现重复,死记硬背显然是最好的方法。你必须多次复习,你可以肯定地走出去,用它构建很多东西,我喜欢最初的这种熟悉事物的感觉。但除此之外,我发现通过这样做,你也会陷入陷阱,你有点谷歌,你试图用你以前的所有经验来解决语言中的一个问题。所以你没有那种语言的特殊之处,你有所有其他语言的特殊之处。所以你最终可能无法非常有效地使用它,但你当然可以学习它并变得擅长它。

Prim: 所以我最近一直在做的第二种方法,这是受到 Ghosty 的创建者 Mitchell Hashimoto 的启发,就是从阅读语言参考开始,整个内容。所以最近我一直在阅读这些语言的整个手册。就像 Zigg,我快完成了。你知道,这需要 8 到 10 个小时的坐下来阅读。我会拿出我的电脑,练习一些来自实际文档的东西。这样我就能学习所有的东西。所以当我再次开始构建时,我记得,好吧,我知道这里有一个东西,让我回去重读一下,因为现在我的大脑中有了它的索引,我会记得。所以我不认为有正确或错误的方法。我的意思是,归根结底,正确的方法总是你最终必须构建一些东西。你不能只是阅读它。你必须把你的手放在键盘上。你必须构建一些东西。然后一旦你这样做了,你就会真正发现是什么让它痛苦或是什么让它伟大。如果你没有语言提供的广度,你可能只是因为不擅长它而使它变得痛苦。

Lex: 你到底在读什么?像语言参考?

Prim: 语言参考。所以它只是浏览每一个功能,从上到下,对吧?它描述的每一种方式,所有不同的东西。就像我认为 Ziggs 是,你知道,它是一个体面的大小,但它不仅仅是阅读单词。你还想内化每个概念。所以这需要很长时间。我是一个阅读速度慢的人。

Lex: 所以你就像在构建,用人工智能术语来说,就像一个背景模型,就像,因为我不认为你可以在完成阅读后立即开始构建,因为你可能忘记了。

Prim: 是的。

Lex: 你知道如何做一个 for 循环,就像你,你忘记了细节,你只是在建立设计选择,可用的功能集,优点和缺点是什么,所有这些东西,然后你开始构建。

Prim: 这真的很有趣。

Lex: 可能不是你会向初级开发者推荐的东西,刚开始的人。

Prim: 如果你不知道 if 语句是什么,那不是一个好的学习方式。对我来说,最好的学习方式是真正动手操作键盘,构建极其简单的东西,然后慢慢增加复杂性,因为理解什么是类和方法和实例,而不是蓝图,这是类,而不是函数,而不是模块,所有这些东西,对吧?这需要时间来学习,所以这是一种完全不同的学习方式。

Lex: 我想知道,因为对我来说,现在学习,人工智能是一个巨大的帮助,但我已经有很多经验了。我想知道,如果你从头开始,这是否是一个好主意,但我仍然认为这可能是一个非常好的主意。但基本上是使用人工智能生成一些代码,并通过玩弄不同的部分来弄清楚它在做什么。也许你能评论一下这方面,就像人工智能在学习过程中的使用。

Prim: 这是我同时有希望和厄运的地方。是的。这和谷歌或 Stack Overflow 是一样的。它只是让事情变得更民主化。我可以用我自己的声音和我自己的语言,以可能最个人的方式提问,它能够产生答案,并希望帮助指导我。现在,不管它的错误和不正确性,就像,最终只是把它作为一个学习工具,并能够以你自己的声音来制定和阅读答案,我认为这是超级强大的,我认为这太棒了。但我觉得会非常困难的部分是,我们不再重视记住事情,作为一个社会。自从互联网出现以来,我就可以查一下,我就可以查一下。不需要,你不需要记住你的乘法表,对吧?你可以只使用你的计算器。你可以做所有这些。我记得我只是坐在飞机上,我看到有人在他们的手机上做了世界上最简单的加法和减法,大约 10 次。我想,你为什么不,就像你已经知道这些了。你应该能够做这些事情。我意识到我们有点卸下了我们的大脑,对吧?哦,我不需要知道这些事情,因为我可以查到它们。这在某种意义上不是一个坏答案,我能理解。我不需要记住每一件小事。但这也让我意识到,你有点发展出这种习得性无助,出现了一个新的错误,我会问人工智能。人工智能说:“哦,好吧,我必须修复这一行。”你修复了这一行。你实际上没有学到任何东西。你只是把它当作一种快速获取某些东西并继续前进的方式。所以你为了速度而牺牲了知识,这在某些方面是一件好事,你知道,我们必须在工程中一直做出这些权衡。有时你必须快速行动,牺牲知识,我完全同意这一点。但我担心,我们将创造的是一代无能的程序员,他们可以很好地做某些事情,但任何独特、定制或需要额外努力的事情都可能变得非常困难。这可能会导致一个鸿沟,初级人员永远停留在初级。我不想看到这种情况。我想看到人们成长,我想看到人们,你知道,实际上能够把这当作一种手艺。所以这就是,这就是我的希望和我的担忧,人工智能,我认为可以同时做到这两点,因为如果你可以问任何你想问的问题,你不必依赖一本书来给你确切的答案,如果这本书只是说错了,你无法理解,就像,对不起,你不能学习这是什么。就像递归对我来说,我花了太多时间,直到有人给了我正确的问题来理解递归。你可以想象人工智能可以更快地为我解决这个问题,因为它可以给我正确的问题并更好地引导我,但如果我总是让人工智能解决递归问题而不自己学习呢?

Lex: 所以如果我要求人工智能生成代码来做某事,实际上,大部分时间,人工智能生成的大部分内容对我来说都是正确的。但有些时候,它不是,从根本上不是,对我来说,区分这两者,我认为需要很多经验。我认为要学习这种知道“不,不,不,这里需要一个不同的、全新的解决方案,而不是你提供的那个。你错过了重点”的技能,这是一种技能,你如何学习呢?你通过从头开始构建来学习。所以两者可能都非常必要。

Prim: 是的。

Lex: 但我认为作为学习如何编程的第一步,生成一个函数来生成 for 循环和所有这些东西是很好的,然后只是搞乱不同的行,修改它们以尝试调整程序的行为。从程序行为调整的方式或创建的错误中,你可以了解语言的语法、语言的行为,所有这些东西。所以这是,我认为这是一种超强大的学习方式,但,是的,你还需要从头开始编写。

Prim: 在某个时候,你必须取下训练轮,因为我认为你真正发现的是阅读和编写代码之间的区别。我可以很好地阅读很多语言,我可以看到发生了什么,我可以理解它,但我不擅长编写它。我可以理解很多关于 C++ 的东西,我可以阅读它,但我只是不,因为我太久没有做过了,我不记得所有的分号和冒号,你知道,你做 public 和 private,以及你如何命名约定,所有这些东西加在一起,然后你就会想,哦,我真的不擅长编写它,虽然我可以阅读它。所以这就像,这两种技能之间存在着一个技能差距。

Lex: 好吧,让我谈谈各种语言。关于什么是最好的编程语言,这是一个俗气的、荒谬的问题。让我们说,什么是每个人都应该学习的最好的编程语言?也许,让我们选出前五个。我要打开 Stack Overflow 开发者调查,因为我认为我们有,那是你的方式。你不喜欢它们吗?

Prim: 不,不。那些不是,你必须记住,因为,我的意思是,你是一个数据人,对吧?你知道数据中的偏差。

Lex: Stack Overflow 自然偏向于什么?

Prim: 好吧,他们有不同的专业开发者、初级开发者,他们有不同的切片。

Lex: 好吧,偏见是什么?我听到了,但谁填写了 Stack Overflow 调查?

Prim: 在 Stack Overflow 上参与的人。谁在 Stack Overflow 上参与?主要是非常非常新的人,还有一个喜欢回答问题的人。所以我不确定 Stack Overflow 是否是一个获取数据的好地方,它可能是一个非常有偏见的数据集。

Lex: 真的只有新人吗?

Prim: 我的意思是,那是使用 Stack Overflow 的人。

Lex: 好吧。这个上面最流行的技术是 JavaScript、HTML、Python、SQL。SQL 是更一般的,我确信他们没有做 SQL 的各个种类。顺便说一句,发音 SQL vs. SQL?

Prim: 是 squeal。

Lex: Squeal?

Prim: 你 squeal。

Lex: Squeal?

Prim: 我认为 squeal 是正确的方式。

Lex: Squeal。

Prim: 快乐的尖叫是 squeal light。我的 squeal,postgress squeal。

Lex: 顺便说一句,我之前说“猪操蛋”时有很多快乐,出于某种原因。

Prim: 说到这个,你能相信吗,那是我进行过的一次真实的谈话?

Lex: 是的,那是。

Prim: TypeScript, Bash, Java, C#, C++。它在很大程度上与你期望的世界一致,但比如汇编。为什么汇编比 Ruby 更受欢迎?谁,谁只是在写汇编?没有人手工编写汇编,除了可能那个正在开发 TLS 1.3 并手工制作一个密码学算法以成为最快的算法的人,对吧?

Lex: 是的,汇编是一个奇怪的。也许人们在学校里写它,但即使在学校里,对于像操作系统课程之类的东西,我不知道他们是否还在写汇编。

Prim: 他们,我不认为。

Lex: 是的。不管怎样,Swift 和 Ruby 比汇编更不受欢迎,这似乎很荒谬。但是,好的,我明白你对这些的看法了。但至于前五种语言,这可能太宽泛了,因为你可以说出很多。我认为你可能应该按你想做什么来归类它。所以如果你想进入游戏开发,也许 C、C++ 可能是好的选择,或者 JavaScript 和制作画布游戏。我可以看到这也是可行的,但你知道,你受到了使用 JavaScript 的限制,显然是因为它,你不能做那么多,因为语言不够快,无法做那么多。所以记住这一点很好。如果你要进行后端工作,你知道,如果你想要一份工作,如果你正在找工作,也许 C#/Java 或 JavaScript 或 Go 将是不错的选择。如果你想做嵌入式,你可能想做 C,C++。那可能是一个不错的选择。所以你必须,我认为你必须首先确定你真正想要得到什么。

Lex: 如果你只是对编程感到好奇,我与很多人交谈过,是的,你可以考虑工作,但基本上他们的问题是,好吧,我应该学习的第一种语言是什么,也许我应该探索哪几种语言?

Prim: 我能说一些会让很多人愤怒的话吗?

Lex: 当然。

Prim: 我认为如果人们对任何事情一无所知,他们应该学习的第一种语言是 JavaScript。

Lex: 为什么这会让人愤怒?

Prim: 哦,因为人们只是,首先,我不应该说任何关于 JavaScript 的好话。是的,通常的模因是你讨厌 JavaScript,对吧?不,JavaScript 是一种美丽的语言,它有很多非常棒的东西。其中之一是,你可以用很少的努力表达任何东西。所以对于一个新人来说,我认为能够画一个框子并移动一个框子是非常棒的。这很棒。你可以看到它的视觉效果。我认为这是 JavaScript 真正伟大的一件事,你可以做到这一点。然后你可以说,好吧,我想了解后端,我要发出一个请求。你可以编写一个快速的后端,现在你开始对编程有一点了解了。我可以把它保存到数据库,我可以把它取下来,我可以把它放在屏幕上,我可以让它动起来,我甚至可以把它放在画布上并以 2D 或 3D 渲染它。所以就像,你可以用 JavaScript 做的事情有很多种,这是进入编程的一个很好的方式。但在某个时候,你必须说,好吧,我现在需要更多地了解整个事情。

Lex: 我的意思是,是的,就像你说的,你可以制作游戏,你可以做前端、后端 Web 开发。你甚至可以做嵌入式。他们实际上有 J,就像 West Boss 正在构建他的 Roomba 或什么东西,并用 JavaScript 和 React 进行编程,这是世界上最糟糕的嵌入式语言选择,但你仍然可以做到。我们也提到了,就应用而言,任何与数据或机器学习相关的东西,Python 都是领先者。

Prim: 是的,那是一个很好的选择。

Lex: 看起来 Python、CUDA 和 C++ 会是一个强大的组合,因为很多这些 Python 库,我假设,你只是在幕后偷偷地使用 C++ 或 C。

Prim: 好的。所以 JavaScript,我会说 Python。Python 也是一个很好的选择。你可以用它做很多事情,但你不能写前端。所以,如果你喜欢前端怎么办?如果你真的只想设计东西,而你不知道呢?

Lex: 好吧,对于这个,JavaScript。

Prim: 但 Python 是一个不错的选择,因为你不能在 JavaScript 中轻松地做 ML 的东西。

Lex: 我们是否将 HTML 和 CSS 算作编程语言?

Prim: 我认为有一些技术定义,如果你使用它,如果你使用 CSS 和 HTML 的某种组合,它实际上就像,它可以是一种图灵完备的语言。但我的意思是,出于实际目的,不,HTML 不是一种语言。你知道,对我来说,听着,是的,图灵测试是一个很好的测试,但对于那些不想那么学术的人来说,如果我不能编写一个函数和一个 if 语句,我不觉得那是一个,我不,如果我不能循环、if 和 function,我不觉得那是一个好的,那是一种编程语言。

Prim: 尽管现代 HTML 有很多功能。它拥有的功能之多令人疯狂,但它更像是一个规范,而不是其他任何东西。我指定它是一个弹出窗口,我指定它具有这种可访问性,这种外观,这种,你知道,在这些条件下看起来像这样,像这样转换,移动到这里,我不知道。

Lex: 我有点喜欢这个列表中流行的编程语言。我喜欢 JavaScript。

Prim: 你喜欢 Bash?

Lex: 好吧,是的,我非常喜欢 Bash。

Prim: 为什么?

Lex: Bash 是那种,就像,你真的喜欢,你真的喜欢它吗?

Prim: 我喜欢它,直到我需要一个数组。

Lex: 作为一种编程语言,不。但我喜欢,我喜欢命令行。

Prim: 这就是我喜欢的地方。

Lex: 没有人喜欢 bash。

Prim: 你是什么意思?

Lex: 现在有人非常生气。

Prim: 你的意思是,你经常使用它吗?

Prim: 是的。

Lex: 学习它是很好的,对吧?

Prim: 熟悉命令行是很好的,因为它有点像一种超能力。就像,我想我在 Twitter 上关注 FFmpeg。

Lex: 很棒的账户。

Prim: 就像,有一些 Twitter 账户是合法的。而且,你知道,我认为 ffmpeg,就像他们有所有这些你可以在命令行上添加的参数,这就像一种只有极少数巫师理解的神秘语言。但是一旦你开始慢慢理解,我只是处于掌握之旅的开始阶段,你在每一步获得的力量就像,它呈指数级增长。感觉就像。

Prim: 我的意思是,FFmpeg 只是这个令人难以置信的,你会称之为一个库系统吗?它背后的人一定是非常聪明的天才,因为他们必须处理所有这些编解码器,所有这些容器,所有这些,媒体编解码器世界的奥秘,他们是大师,他们了解压缩,这是另一个超级迷人的技术问题集,我不知道,ffmpeg 只是让我感到它存在的快乐,但你需要一种 Bash 类型的舒适,命令行舒适来使用它,真正释放它的力量。

Prim: 是的,我认为 ffmpeg 可能是我们这个时代最有影响力的库之一,Twitter 账户是如此不正常。这是最令人惊奇的事情,因为我认为 ffmpeg 没有得到它应得的爱。每个应用程序,OBS 可能在幕后使用 ffmpeg,所有专业的东西都在幕后使用 ffmpeg,但你知道,他们没有得到他们应得的爱。我只是喜欢它,我认为它们是最好的。

Lex: 是的,我会说 JavaScript、HTML、CSS、Python、SQL,我的意思是,SQL,squeal 是一种编程语言。

Prim: 是的,这是一种非常复杂的编程语言。

Lex: SQL 很有趣。我会,我相信你可以把它归类为一种编程语言,它有,如果你有 case 语句,你可以用它做的事情很疯狂。你可以做函数,你可以做所有这些,你应该,存储过程,这就是你让你的生活变得糟糕的方式。

Prim: 我会说,所有顶级语言,没有一个是严格的静态类型语言。所以即使是 TypeScript,你也可以,你知道,我不喜欢 this any。所以对于正在学习的人来说,做一些更严格的事情会很好,比如 Go、Rust,甚至我的意思是 C++。你可以做 C++,你可以在 C++ 中做一些类型擦除,你也可以在 Go 中做,但在大多数情况下,这是一个很好的语言。它可能会有点疯狂。新的 C++ 看起来很棒。每个人都一直告诉我新的 C++ 很棒。

Lex: 嗯。

Prim: 它具有你想要的每一个功能,以及你不想要的所有功能。

Lex: 完全正确。我的意思是,有智能指针,有转储指针,有各种各样的指针。

Prim: 没有内存泄漏。这不是一个问题。

Lex: 面对枪,柔软的床,那里什么都有。

Prim: 除非你喜欢内存泄漏,它也有,如果你想要的话。这太棒了。

Lex: 好吧,这个怎么样?我实际上想真正学习的语言,至少存在于我的好奇心库中。有三种语言,分别是 Swift、Elixir、OCaml,然后我要把 Odin 也加进去,只是因为 gingerbell 很棒。但 Elixir 和 OCaml,我没有掌握一种强大的函数式语言。这是我真正缺乏的。

Lex: 是的,我听说过关于 Elixir、关于 Odin、关于 Okamo 的令人难以置信的事情。显然,我是一个喜欢 Lisp 的人。

Prim: 我从未做过。

Lex: Lisp 也可以属于这一类。

Prim: 就像学习或 Clojure。我认为现在每个人都告诉你使用 Clojure。

Lex: 在 Lisp 的情况下,我不想说 Lisp 的坏话,但关于现代社区,社区是什么样子的,这很重要。而且似乎有一个令人兴奋的,也许很小,但一个令人兴奋的社区围绕着 Elixir、Odin 和 Okamo。所以这有助于,你可以说,你可以在 Twitter 上发布一些东西,比如我完成了这个,人们会感到兴奋,这很好。这是一种很好的感觉。你可以在 Twitter 上发布一些东西,如果你在 Elixir 中做了一些很酷的事情,你会得到一千个赞。

Prim: 是的。

Lex: 这是一个相当大的数字,对于这样一个利基话题来说。编程已经是一个相当小的话题了。然后你进入函数式编程。那是小话题中的一个小话题。

Prim: 我没有得到那么多。如果我发布一些关于 Emacs 的东西,我会得到蟋蟀。如果我发布一些东西,如果我自豪地使用 Neovim,会有很多人说:“是的,干得好。”因为它就是最好的编辑器。

Lex: 嗯,也许这只是炒作。

Prim: 回到内战。

Lex: 是的,有时你必须牺牲,从优越的编辑器 Emacs 中走出来,选择 Neovim,只是为了受欢迎。你牺牲了正直、价值观和质量,只是为了受欢迎。所以,你做出了选择。

Prim: 我喜欢你的表达方式。好的。不管怎样,我们在谈论什么?我喜欢你把这些分成几类。这很棒。现在我的,我正在探索的“副业”是。

Lex: 副业?

Prim: 是的,副业。

Lex: 我喜欢。

Prim: 它们现在不是我的主要内容。Go 是我最喜欢用来构建 Web 应用程序的,如果我要构建一些具有复杂逻辑的后端,Go 非常方便,但我对它表达我需要的一切的能力感到非常沮丧。如果你有一个列表,一个异构列表,一个包含两种类型的列表,Go 就不是那么有趣了。所以我可以看到,我正在探索的是 Jai 或 J,或者像 Jonathan Blow 所说的语言,以及 Zigg。它们都有很多力量,它们都非常有趣。它们肯定有脚枪。它们肯定更,你知道,它们不会对你手下留情。Zigg 看起来像是一种非常棒的语言,Jai 也是。它们都非常酷。

Lex: 是的,实际上,我看到了 Dave Plamer 对近 100 种语言的速度测试,Zig 位居榜首。

Prim: 那是一个错误。我的意思是,当我说错误时,我并不是针对 Dave Plamer。他是一位非常有才华的工程师。只是 Zig、C、C++,所有这些正在测试的语言,它们都是 LVM 后端,对吧?那才是真正把东西变成可执行部分的东西。如果速度有差异,那就意味着在一种语言中,你没有正确地表达你应该表达的东西。就像,有语言球测试,它一直在 Twitter 上流传。Zigg 大概排在第六或第七位,低于,我忘记了哪种语言。我玩弄了这个例子,在参数中添加了 no alias 这个词,这意味着进入这个函数的内存片段,没有全局指针,没有任何东西指向它,所以编译器可以做出这些非常酷的优化。我让它比 C 版本更快。所以这只是意味着它没有正确指定,仅此而已。

Lex: 是的。但这仍然,这对我来说仍然令人兴奋。Zig、Rust 和 C++ 之间的竞争非常有趣。部分是为了速度,部分是为了编写高性能代码有多容易。我会说,我认为 Zig 如此有趣的原因之一,与 C 或 Rust 相比,C 是终极语言。它可以做任何事情。你有预处理器宏。你可以用它做很多事情。但它也很困难,它也很简单,你可以学习它。所以它有点像它自己独特的野兽。当你真正擅长 C 时,C 是一种神奇的语言,人们真的很擅长它。人们对它评价很高。Rust 是一种超安全的语言。你可以在 C 中做的事情,你甚至不能在 Rust 中表达。Rust 会是安全的,安全的人会在晚上抱着你,让你保持温暖,对吧?它将是最好的。但在中间的某个地方是 Zig。Zig 有可选值。如果你不熟悉可选值,那只是意味着这里有一个值,或者没有。但你必须先检查它,然后才能使用它。所以它可以防止整个空指针解引用段错误问题。这在 C 中默认情况下是不可用的。你必须自己构建这个东西。这是 Rust 中的唯一选择。但 Zig 说:“嘿,如果你有一个指针,你不能把它表达为 null,除非你标记它可以为 null。”有一些方法可以绕过它。有一些其他类型的指针和类似的东西可以做到这一点。但在大多数情况下,Zig 就像,它会在大多数情况下给你安全。所以它就像一点点安全,但更像 C。所以它有点像给你你想要的那个区域的一切,你可以表达安全代码和不安全代码。这非常容易编写。这非常漂亮,或者至少它背后的想法非常漂亮。语言本身很平淡,但在一切事物中都有美。

Lex: 是的,Prime。你用 Rust 编程了很多。你喜欢 Rust 的什么?

Prim: Rust 的优点是什么?缺点是什么?也许你可以谈谈你已经提到的内存管理。内存管理的挑战,其中几种语言解决了这个问题。但是,是的,你喜欢 Rust 的什么?

Prim: 我喜欢 Rust 的地方是,释放你正在使用的内存的能力直接与堆栈相关联。所以每当你创建一些东西时,都有一个堆栈变量,或者有一些堆栈内存,无论它是一个指向堆的指针,一个指针和一个长度。所以你知道一些堆栈上的内存和一些堆上的内存,因为像字符串这样的东西并不全在堆栈上。它有一些在堆上,一些在堆栈上。当那个堆栈变量超出范围并被清理时,它也会清理堆上的内容。所以它有点简化了整个,哎呀,我忘记释放我的内存的想法。它只是为你做的。所以它不是一个垃圾收集器,它会在稍后做。它不像 C,你必须自己调用它。它介于两者之间。现在人们使用了很多策略,竞技场和所有这些,使 C 部分更容易,我甚至没有提到它,但它只是让它更容易了。但 Russ 做的非常漂亮,这就像一个非常酷的想法,我非常喜欢。我认为 Russ 做的第二件非常好的事情是,可变性是你必须指定的。所以你不只是创建一个变量,然后改变它。你必须说,这不仅是一个变量,它是一个可变变量。我认为这使得代码非常易读和易于理解,因为任何没有 mute 这个词的东西,你知道它肯定不会改变。围绕这一点有一些规则,但你明白了大概的意思。

Lex: 与大多数编程语言不同,你必须明确地声明这将是 ch,这将要改变。

Prim: 是的。这真的很有趣。我的意思是,它是安全的。它试图成为,这种安全性可能是它的创造限制。让我们咨询一下 AI 霸主。Rust 是一种速度极快、内存效率高的系统编程语言,强调性能、类型安全性和并发性。

Prim: 该语言在不使用垃圾收集器的情况下强制执行内存安全,正如你所说,而是利用独特的“借用检查器”在编译时跟踪对象生命周期。这可以防止常见的编程错误,如空指针解引用和内存泄漏等等。

Prim: 是的。你也谈到了元编程。你喜欢哪种语言的元编程?

Prim: 我喜欢 C++ 中的元编程,但它是一团糟。至少当我编写 C++ C++ 17 标准时,我认为。这只是一团糟。

Lex: 特别是调试起来一团糟。

Prim: 是的。我会认为自己是一个元编程新手。我只用它解决了一些问题。这有点像今年我要做的,我真的,我想看看末端能走多远。所以我对这个问题没有强烈的意见。Zig,我真的很喜欢 Zig 的一件事是,元编程也是语言本身。所以你不必,就像,没有替代方案。在 Rust 中,有一个替代方案。当你创建一个宏时,你必须使用宏语法。在 Zigg 中,它就是它。你只需编程它。如果你希望它在编译时,就添加 comp time 这个词。所以你可以做,你可以创建编译时的素数列表,在 zeg 中,这是一个有趣的、独特的事情。所以你有在编译时执行的代码,然后你可以在运行时利用它的结果。

Lex: 太酷了,对吧?这就是我看待它的方式。

Prim: 但是,我还没有使用它到我觉得我可以超级权威地谈论它的地步。

Lex: 你一直犹豫不决。你今年要选择哪种语言?

Prim: 我将继续把 Go 作为我的主要语言,我的两个副业,我将探索并尝试构建一个服务,它可以进行大量的与聊天和 11 Labs 的对话,并向客户端发送内容,并使用 websockets,我想确保,我只是想看看,它们在这个领域的表现如何,你知道,我可能使用了错误的语言,就像 J,我不确定,它并没有真正为 Web 世界设计。我刚刚完成了读取 Twitch 聊天的功能,它要求我使用 Berkeley 套接字。如果你不熟悉 Berkeley 套接字,这就像旧的做事方式。这是你在 C 中做的方式。所以你必须经历创建你自己的连接的整个过程。我必须创建我自己的连接。我必须从套接字读取。然后我必须解析所有的 IRC,对吧?你必须从头开始构建它。没有像新的 TCP 连接到这个服务器这样的东西。你必须说,我正在创建一个套接字。你将属于 IPv4 家族和 TCP,你将做,你知道,我现在必须获取你的地址,并用 DNS 查找你的地址,获取该地址,然后用 TCP 连接它。所以它仍然更加手动。它在这个领域更加原始,但这很有趣。

Lex: 你做过哪些史诗级的项目,在直播中或一般来说,让你记忆深刻?


史诗级项目 (2:51:03)

Prim: 我最喜欢的,抱歉打断你。抱歉,我现在真的很兴奋。

Lex: 我们走吧。

Prim: 好的。兴奋的手势。我最喜欢的项目是我去年做的那个。有人构建了一个 Doom ASI 端口。

Prim: 所以你可以用 ASI 玩 Doom。这意味着你可以在你的终端中玩它,非常非常有趣,非常令人兴奋。然后我拿走了那个 Doom ASI,并把它发送到浏览器,这样人们就可以在浏览器中玩 Doom Asie。但我让 Twitch 聊天可以通过输入 Twitch 聊天,取一段时间内的移动平均值,并像控制器一样重播它来控制 Doom ASI 的那个实例。我让 Twitch 聊天通过垃圾邮件击败了第一关。但有趣的部分是,我使用了许多有趣的编码技术。所以我使用了四叉树来能够使用更小的数量,使用行程编码。尝试创建我自己的压缩算法,因为如果你要发送一堆 asky 内容,它仍然非常昂贵,因为你必须表示颜色。颜色并不便宜。最重要的是,你必须表示 asky 的样子。好吧,我意识到,你知道,你可以做所有这些有趣的压缩技术,就像你发送下来的 asy 的形状,在很多这些引擎中实际上与那个像素的亮度成正比。所以就像,你会使用 8 或井号来表示白色,但黑色,你会想要使用句点或逗号或竖线,你知道,更小的东西。所以就像,我然后开发了所有这些不同的压缩算法,将大量数据,可能需要 GB 才能发送给成千上万的人,让所有人同时看到相同的图像,让所有人能够同时与 Doom 互动,我通过尝试找出如何使它尽可能小并将其全部发送出去,将它从 GB 变成了 KB。这非常有趣。绝对玩得很开心。

Lex: 所以你实际上把它发送给聊天中的所有人。所以管道在哪里,那个管道,聊天是如何能够控制 Doom 的?

Prim: Twitch 聊天。

Lex: 是的。

Prim: 所以他们会去,人们会发送 W,如果你说 W,它会按住 W 150 毫秒,如果在那段时间内大多数人都说 W。

Lex: 很好。

Prim: 他们如何获得你在屏幕上的输入?

Prim: 所以,最初我打算通过 Twitch 发送它,但 Twitch 大约落后 5 秒钟。所以这就是为什么我把它发送到一个网站。

Lex: 很好。

Prim: 所以每个人都可以从我的电脑看到网站。典型的延迟大约是 70 毫秒。所以就像,他们基本上可以看到在那段时间内发生了什么。这非常令人兴奋。所以我们有 1,000 人,或者我有 1,000 到 1,400 人在疯狂地按 W 和 F 来开火和转弯,我们杀死了一些僵尸。我们在第一关的最后炸毁了桶来杀死小鬼。

Lex: 你是如何从 Twitch 聊天中获取 W 的?有 API 吗?

Prim: IRC。我使用的是 IRC。

Lex: 好的。

Prim: 所以只是一个小的 TCP 套接字,然后你只需解析 IRC。

Lex: 那里几乎没有延迟。

Prim: 好的。是的,我认为有几百毫秒。但这足以让它变得有点困难,因为人们经常会过度转向,然后向前走,错过门,然后他们不得不回去。

Lex: 这太棒了。

Prim: 这太棒了。所以那是我认为有史以来最喜欢的项目,只是因为它,我从来没有做过很多编码。编码就像,你知道,你通常做什么?好的,我需要发送一些东西。我不知道,gzip 它。服务器会这样做。服务器会做正确的事情。我不需要考虑它。相反,就像,我想一下它。我要发送正确的东西。

Lex: 是的,你必须考虑压缩。

Prim: 是的,还有更多对 FFmpeg 的爱。他们必须经常考虑这个问题。

Prim: 最终受到了 FFmpeg 及其卓越性的启发。

Lex: 你能谈谈一般的聊天社区吗?就像你直播的一个重要部分是与你交流的人类。你能谈谈不同的聊天社区吗?首先,哪个是最好的聊天社区?YouTube、Twitch 还是 X?

Prim: 这是我为 YouTube 感到难过的地方,因为我认为从技术上讲,它是最糟糕的,但这不是 YouTube 的错。让我解释一下原因,然后我会解释为什么你错了,但请继续。

Lex: 我知道你爱,我知道你爱 YouTube,但让我解释一下为什么。

Prim: 当你进入 Twitch,你进入任何人的频道,他们都有这种像文化人类蜈蚣一样的东西,随着模因的流动,整个 Twitch 都会做出反应和变形。所以你去到的每个频道都有这种相同的文化。每个人,有很多相似的表情。所以它非常紧密。所以当我直播时,我会得到所有相同的笑话,就像你看到 I don't know Sodapoppin 或一些大主播 Asmin Gold,无论是谁,Prate Software 直播。所有相同的模因都会通过完全相同的管道流动。所以这是一个非常整体的社区。所以每次你开玩笑,你开的玩笑就像在以太中一样。Twitter 也有一点。科技 Twitter 有一套笑话。所以你可以看到它。Twitter 聊天的问题是现在那里没有人,你知道。通常,为了说明这一点,我在 Twitch 上有大约 1,500 到 3,000 人,在 YouTube 上有大约 800 到 2,000 人,在 Twitter 上有 50 人。所以就像,差异是巨大的,但它们都,Twitter 有同样的事情,正在发展,有模因不断地流过它。所以它们非常紧密地联系在一起。YouTube 似乎没有。他们只是一群人。人们去 YouTube 是出于各种原因。我要去 YouTube 学习。所以他们不是在模因列车上。他们不在这个文化时代精神列车上。他们就像,但你为什么要使用这个 if 语句,当在这个特定的情况下使用 switch 语句时。你就像,好吧,这不是我在这里要做的。

Lex: 你想成为模因列车的船长,或者你想乘坐模因列车。

Prim: 是的。或者你只是想能够在你的聊天中创造一种文化,因为你的聊天将是那种在 Twitch 中流动的时代精神的某种变体,它在 X 和 Twitch 之间非常连续。这感觉与 YouTube 非常不同步。然后 YouTube 也做得不好,有些人会争辩说做得很好,因为你可以游泳。游泳是指你可以改变你所处的时间戳。所以突然间,你会说:“哦,是的,你知道,关于我开着我的面包车去踢足球的事情。”然后 20 分钟后,你会谈论 Zigg,有人会说:“我个人用这个来开车去踢足球。”你就像,“我们在说什么?”就像,所以 YouTube 也是一个非常不连贯的聊天,因为它取决于他们在视频中的位置。顺便说一下,游泳来自 Netflix,叫做游泳。

Lex: 游泳这个术语?

Prim: 是的,那是,我们,人们说游泳。

Lex: 哦,所以你,你不是在编造这个术语。

Prim: 谢谢你。

Lex: 哇。

Prim: 是的。但这可能是编造的,可能只有 10 个人在 Netflix 上说过,所以没有人会知道,他们会说:“是的,对的。那发生在 Netflix。”

Lex: 回到项目,是什么项目塑造了你作为一名程序员?无论你在直播中做的还是离线的。

Prim: 对我来说,我不知道是否有一个项目我可以指出,但我可以指出一个特定的点,我认为它会发生,我认为你可以从中学到很多东西。你写的任何小程序都会在 1,000 到 5,000 行代码之间。我认为这是一个相当小的项目。你可以把它与更大系统中的任何功能相关联,你知道。网站上的一个特定功能可能是一千行,几千行。在某个时刻,你的所有选择都会累积起来。我通常发现在 5,000 到 10,000 行代码左右。你所做的选择要么让你感到沉重,要么让你感到自由。所以正是在那个时候,我觉得我学到的最多,因为我喜欢到达项目或代码库的某个小部分的那个点,因为在那个时候,我可以测试,a,我对如何设计软件的最初直觉有多好,但 b,现在我需要回去思考,我将如何以一种更有效的方式在这个范围内进行测试?我如何将它扩展到 20,000 行代码?我如何用我所拥有的做所有这些事情,或者我需要重新考虑它?我发现这是真正最好的学习发生的地方,每个人可能都有一个不同的数字。

Prim: 随着你经历每一个数字,或者你希望你的项目有多么完整,我认为你会得出不同的数字。我认为这个数字应该随着你经验的增加而变大,因为你知道,有些项目有 100 万行代码,但它们肯定不是整体的,对吧?代码库的每个部分都是某个时代的胶囊,具有某种编程风格,有些更偏向函数式,更偏向类,更,如果它是 C++ 中的预处理器宏,上帝保佑你的灵魂,对吧?你会发现各种各样的东西。这就是为什么我喜欢把它想象成一个功能或你正在做的事情。通常大约 5,000 行是我发现事情变得有点,我做出了好还是坏的决定的地方。这就是我学习的地方,就在那个阶段。我试图让它达到这样的程度,我应该能够凭直觉完成 20,000 行,而不会对此感到不安。

Lex: 首先,仅仅是享受你创造的东西的部分。是的,大约在那里,你可以坐下来,看到所有的部分一起跳舞。对我来说,调试,你可以看到你所做的选择具体化为调试有多容易。我是一个坚定的支持者,我想你过去提到过这一点。我到处都放断言。

Prim: 不,你是我这样做的原因。

Lex: 是的?

Prim: 你是第一个。继续,对不起。真的?好的。

Lex: 对我来说,编程的乐趣之一,无论是 try catch 块,无论是断言,还是测试,我都能看到我之前在我的王国中布下的断言雷区的所有回报,通过我能多快地调试一个系统,随着它变得越来越大,我可以首先发现错误,在它们成为真正的错误之前,以及我能多快地解决这些错误。这给我带来了快乐。对我来说,很多编程的乐趣在于创建强大的系统,这些系统不会崩溃,能够正常工作。它们在大多数情况下都能正常工作。在某种程度上,对系统进行压力测试,并从系统中获得一切正常工作的信号,这是一件让我充满快乐并确保系统实际工作的事情。所以,是的,我不知道是 5,000 行代码还是 10,000 行代码。如果是 Java 或 C++,那就是数百万行代码。但是,是的,在 Python 中,我会说 10,000 行代码。那时你第一次看到魔法。但不管怎样,你说。

Prim: 好吧,所以你和约翰·卡马克就断言进行了一次对话。你谈到了这个想法,到处放置断言,当你程序中的某个状态不应该被表示时,它实际上会使程序崩溃,你已经主动做出了这个选择。我以前从未这样做过,我知道这是一种古老的技术,我显然一定太年轻或太笨,不知道人们会这样做。我是在 Java 中长大的,我认为这可能是我没有遇到这种情况的原因。我看到了这一点,我想,我对如何更多地使用断言感到好奇。然后我遇到了一个叫 Yuron 的人。他是 Tiger Beetle 的首席执行官和创建者。这就像世界上最快、最棒的金融数据库。它是由一家需要进行大量金融交易的公司衍生出来的。它是用 Zigg 编写的。他们所做的是,他们进行确定性模拟测试,他们只是使用 NASA 创建真正优秀软件的保证。就像,不要使用 size,指定你期望的 int 的确切大小,所有这些,他们做的这些事情都非常具体,其中之一是每个函数都应该包含两个断言,无论是正空间,比如,你知道,这些事情应该发生,还是负空间,比如你不应该,这个指针永远不应该为 null,你正在编程不应该发生的事情。通常你只是不指定这一点。你永远不会想到这一点。所以每个函数,到处都有所有这些断言。这些断言在生产和测试中都运行。它们始终处于开启状态。然后他们进行确定性模拟测试,运行 200 年的随机数据,完全是垃圾,通过系统,看看它能走多远。当断言发生时,他们会说:“这是导致它的输入。这是发生的每一个细节。”现在你可以确定这是哪里出了问题。这太酷了。所以,在你、约翰·卡马克和 Yuron 之间,这就是我,好吧,我必须真正,还有 NASA,我也会把 NASA 算进去。NASA 可以加入其中。我想:“好吧,我想试试这个。”我试过了。我构建了,有点像这个大的反向代理,为我尝试做一些游戏开发的东西。我只是对断言发疯了。然后我构建了一个完整的模拟测试,可以确定地做所有事情。所以,你知道,即使请求的结果也会以特定的顺序出现。我发现了一堆我永远不会发现的错误。然后我为我正在制作的一款游戏做了这件事,我发现了一些错误,我的光标离开了屏幕。它会导致所有这些不同的问题,因为我从来没有测试过它们。这非常有趣。这是一种非常棒的编程方式。

Lex: 我认为随着时间的推移,你会培养出一种技能。这不仅仅是说你必须指定前提条件,就像所有必须为真的东西。它还添加了一些你可能甚至没有想到的东西,你必须预测一些非常奇怪的事情。如果你添加断言,特别是在复杂的函数或复杂的类中,能够捕捉到非常奇怪的事情,这将为你节省很多麻烦,它将帮助你了解你自己的代码。

Prim: 这是我认为 Jonathan Blow 的事情之一,要么是在与你的对话中,要么是,他在演讲中说,当他开始一个项目时,他通常不知道如何实现它,就像它将如何工作。我认为他说他想要一种编程语言,这可能是对 C++ 的批评,我不确定在哪里,他想要一种编程语言,使他尽可能轻松地不知道自己在做什么,不知道他将如何实现它,并快速到达一个他能弄清楚的地方。我认为编程的一个基本部分是在不知道下一步要做什么的情况下构建东西。你可能有一个松散的设计,也许是一个严格的设计,但实际上你正在解决的难题不是,这在根本上是一个黑暗的房间。在那里,你必须预测可能出现的各种奇怪情况,同时又不能真正了解一切,这就像一场战争迷雾。这是一个真正的技能,预测可能出现的问题,并在它们上面放置断言。在精神上,对我来说,这也是一种非常好的编程方式,构建,生活,有非常严格的断言,比如,如果出现这个问题,你会修复它。你不能只是视而不见。这种将警告视为错误的想法,确保你的代码编译时没有任何警告。这对我来说是一个巨大的飞跃。就像:“但是有很多。”我不认为这真的很重要。就像:“不,不,不,警告。”确保你认真对待每一个问题,即使是模糊的问题,因为从长远来看,这实际上会创建更容易使用的代码,更有趣的代码,更健壮,更能抵抗各种奇怪的情况,所有这些东西。这是一种不同的编程方法,可能更像 NASA,而不是 Web 编程风格,但是,是的,这让编程对我个人来说更有趣了,因为编程中最痛苦的事情之一是,当你超过 10,000、20,000 行代码时,你必须找到一个错误,那个错误可能需要几个小时,可能需要几天才能找到,那是折磨。

Prim: 是的,当你的系统变得足够大时,其中一些错误只是,它们非常困难。我,你知道,祝福任何在百万行代码库上工作的人的灵魂,因为它,我无法告诉你我有多少次花了几天的时间,只是试图找出错误的根本原因。甚至不是修复,只是为什么会发生这种情况。这很难。所以我喜欢,我喜欢断言,因为我不擅长它们。我可以看到这绝对是一种我没有,我没有经常练习的技能,这意味着它不是一种肌肉记忆类型的东西。所以这只是我喜欢的事情之一。这是一种非常有趣的解决问题的方式。因为我永远不会想到,你知道,如果我错了,我会做什么。我会崩溃这个东西。我将在这里崩溃它,因为我不应该出错。但相反,你会想,哦,实际上,这是完全有道理的。我应该崩溃这个东西。我在这里做了一些非常糟糕的事情。为什么会存在这种情况?然后你会想,这将解决一整类问题。

Lex: 是的。特别是如果它在生产环境中,就像,好吧,用户会看到这个崩溃。就像,是的,你应该尽量减少任何用户看到崩溃的次数。不是通过拥有一个漂亮的蓝屏或什么之类的,而是实际上停止一切。这将成为你永远不会让这种情况发生的动力。你实际上会投入时间来确保它永远不会发生。好的部分是,有了 Web 和所有这些,你总是可以弹出一个东西,说:“嘿,事情出了大问题。我们无法恢复。”或者你可以给他一个好的消息,然后记录下来,这样他就可以看到它,然后衡量你多久这样做一次。你知道,我理解,对于 Web 项目来说,这有点有趣。你想一直崩溃服务器吗?如果你发布了一个糟糕的版本,并且你不断地崩溃你所有的服务器,你知道,这是一个你必须接受的赌注。

Lex: 我认为这更适用于单个系统,比如机器人等等。


多动症 (3:13:41)

Lex: 你,你与多动症作斗争。我想很多人都受到你的启发,你能够在患有多动症的情况下保持高效和蓬勃发展。你是如何克服它的?

Prim: 多动症会影响很多事情。所以我会从一些最简单的事情开始,因为有一些直接适用的东西,然后有一些附带损害的适用的东西会发生。所以有一件事真的帮助了我克服多动症,那就是成熟。我认为这只是每个人都需要更多的东西。这意味着我发现当我想坐下来阅读时,我变得如此不安和失控,我只是,我只是无法处理它。我只是觉得我会读一页,但什么也没读进去。我必须停止听从我的那一部分,它只是说:“哦,天哪,我甚至做不到。”我说:“不,我要重读这一页。我要强迫自己以正确的方式做这件事。”所以成熟有一个方面真的很有帮助,无论如何,我都会做我要做的事情,我会把它做好。也许这需要我更长的时间,这没关系。这不是重点。重点是我正在做这件事。所以这就是我的一件事,我认为这通常会有帮助,无论有没有多动症,你知道,情绪的恢复力就像一个非常重要的方面,这很有帮助。所以我认为这是一个很大的部分,真的有帮助。有些事情我仍然在挣扎。就像很明显,我在哪些方面真的很糟糕。

Prim: 只是想一想我所有的缺点。我缺点比优点多。所以编程显然有一些东西可以让我保持专注,这是我的强项。所以一开始我只能做一会儿,然后通过那种情绪恢复力,我能够做得越来越多。所以现在我可以一次做 10、12、15 个小时,我非常喜欢它。所以这变成了一种乐趣,就像演奏乐器一样,我真的很投入。但是,如果到了,嘿,你需要安排你自己的牙科预约,做所有这些其他事情,或者确保孩子们为这一周准备好饭菜,我在这方面一直很糟糕,而且可能会继续非常糟糕。所以我必须说,我之所以如此出色,其中一个原因是因为我有一个非常好的妻子,她帮助我清理了生活中很多导致我分心的事情,让我陷入一个奇怪的境地,我只是分心,什么也做不成。所以她真的帮助了我。所以如果我声称自己独自战胜了多动症,那就太愚蠢了。相反,我发现,在我真正可以控制的地方,我做得非常好。而那些我显然需要做得更好的事情,我的妻子帮助了我很多。所以我有点作弊了。也许我找到了一个作弊码,一个充满爱的妻子,但这就是真正帮助我的东西。

Lex: 你说了很多有趣的事情。所以关于阅读,对我来说,听有声读物也是如此。我在这方面做得好多了,你知道,我会在精神上走神,是的,你知道,读一页,你什么也不理解,你实际上没有读进去。是的,我强迫自己重读它,或者重听有声读物,这对我来说是一个更常见的问题。我经常在跑步时听有声读物,这很容易走神。

Prim: 这是一种技能。

Lex: 我没有意识到听有声读物是一种多么重要的技能,尤其是在有其他感官输入的情况下,比如当你跑步的时候。所以我必须强迫自己真正注意每一个字。如果我没有,就像走神了,不记得我在过去 30 秒里听到了什么,我强迫自己重新听一遍。有时这意味着,就像五次,直到我,就像惩罚自己,“你要一遍又一遍地听这些无聊的东西,直到你掌握了那个小技巧,放大,你就像,是的,有人在那里做事情,有大自然,这不重要,你在听每一个字。”

Prim: 把它加载进去,并试图保持专注,即使周围有很多干扰。

Prim: 是的,这绝对是一种学习的技能,需要很多时间。当我说,你知道,哦,我能够从这里做到这里,我说的是在五年的时间里,每天都这样做。这不是一些小的,没有,你可以,做出这个决定的好处是,你今天就可以做出这个决定。你现在就可以做到。你将会说,从现在开始,我永远不会再犯这个错误了。我会说,我要读 50 页。我会坐下来读 50 页。当我分心时,我会回到我记得的最后一个地方,然后重新开始。这是一个你可以做出的决定。这是一个成熟的,你知道,非情绪化的决定。你可以这样做。这可能只是在做出这些决定的头几年非常痛苦,然后它变得更容易,然后它变得更容易,然后它变得更自然地改变你自己。

Lex: 是的。对于每一种媒介,每一个平台,我认为这就像一种新的技能。对我来说,使用社交媒体就是这样,就像我最终会,你知道,我在平台上刷屏。

Prim: 是的。

Lex: 一个解决方案是完全不看,这有点像我目前主要倾向的。但我觉得我应该能够检查,阅读,好的,感受一件事情,学习一件事情,然后放下它。

Prim: 是的。

Lex: 而不是这种茫然的眼神,你不再注意了,你内心已经死了,之后你感觉很糟糕。我不明白。事后糟糕的感觉是真实的,严重的。我绝对可以,我百分之百地注意到,我花在刷屏上的时间越多,我就越焦虑。

Prim: 是的。

Lex: 我能感觉到。就像我内心有什么东西,我不知道怎么说,除了它想出来,但我真的不知道那是什么。这不是愤怒,但也不是,你知道,这非常焦虑。这就像我早上醒来时的感觉的对立面,我感觉很好,我看着外面的大自然,看着太阳,这就像一只鸟在鸣叫,诸如此类的事情。刷社交媒体,即使是非常积极的东西或任何东西,仍然与鸟鸣不同。

Prim: Instagram 上的鸟鸣与现实生活中的鸟鸣不同。因为 Instagram 上的鸟鸣,我会开始滑动,直到有不同类型的恶魔在我脑海中战斗,然后我,你知道,是的,不同的焦虑,不安全感,不管是什么。只是混乱的混合。而现实生活中的鸟鸣,那是美丽的。但同样,这和有声读物是一样的。这归结为,天哪,这些谈论冥想的人,我认为他们可能发现了什么,因为就像,这就是,这就是能够平静而专注地专注于一件事情,无论是阅读还是有声读物,还是存在。当他们观察呼吸时,你能够静音其他一切,并从焦点中移除其他一切。

Lex: 是的,那是一种技能。我听到过一个非常漂亮的说法,我们在美国真的误解了自由,因为我们通常认为自由就是做任何你想做的事情的自由,而这个论点是,它不是做任何你想做的事情的自由,它是能够做你想做的事情的自由,以及你真正想做的事情有多频繁,你却不做,因为你被困在做一些你让自己相信你现在想做的事情。所以就像,我想要自由,我想要控制我的能量的能力,并能够做我想做的事情,而不是在数百万的干扰中分心和被摧毁。我们中的一些人得到了一手更糟糕的牌,我们中的一些人得到了一手更好的牌,但我不认为有任何人在技术时代不为此而挣扎。

Prim: 是的,那是一种技能。你能对实现编程专注力的技能说些什么吗?你有没有一个过程,你如何坐下来并尝试解决一个问题?所以所有不同的,不仅仅是干扰,还有开始一个项目、思考设计、如何保持真正的专注的挑战,因为这真是一项艰巨的智力努力。

Prim: 我想在这一点上,我很幸运。但当我刚开始的时候,我记得编程的每一个部分我都必须去查。我必须去阅读。我一直都有支线任务。每一步都是一个支线任务。为什么我的屏幕在我试图渲染这个东西时闪烁?哦,我不知道双缓冲。为什么会发生这种情况?我该如何写入屏幕?你知道,一切都是一个问题。我的问题比答案多。所以我一直有这个支线任务的问题。我发现这是一件非常累人的事情。但当我非常非常了解我的乐器时,我没有那么多的支线任务了。我变得越来越能够专注于我想做的事情。我发现这是一件超级超级有用的事情。所以当我说我有点幸运时,意思是,我已经花了这么多的时间来为这一刻做准备,现在当我有机会做某事时,我可以只做那件事,而且我不,我可以只是在飞机上,我可以编程几个小时。我不需要查任何东西。我不需要做任何事情。我甚至不需要测试代码。我可以在飞机上写一千行代码,我非常有信心它会是 98% 的好。我对此非常满意,因为这让我能够专注于解决我试图解决的问题。我的大脑 100% 的力量都在解决一个问题。

Prim: 这就是为什么,这也是我推荐学习打字和学习你的编辑器的原因,你甚至不必考虑这个动作,因为那些必须,即使你只是向下看,那仍然是你必须花费的心理处理能力,看着一个你已经知道键在哪里的键盘。就像你,你知道,在这一点上,如果你已经打字数千小时,你知道键在哪里。停止向下看。你会很快学会的。所以这就像,我不会花那么多时间和那么多精神上的努力,比如查找东西,我会记住,你知道,我会把它记在心里,然后我就可以快速前进,这感觉很好。这就是我战胜它的方式。因为现在我可以做一些事情,就像没有更多的问题了。现在只是我通过这个媒介来表达自己,感觉真的很好。

Lex: 我相信仍然有一些事情会吸引你,比如好奇心,比如干扰,就像我想知道你如何,你知道,每当,我想你有互联网接入。

Prim: 是的,Twitter 是一个很大的问题。

Lex: 你会好奇一些事情,包括,我想你在说你在编辑器中优化了一切,但你,好的,你总是可以改进一些东西。你总是可以找到更好的插件和宏,哦,让我,你知道,我刚刚发现这个小痛点,让我花接下来的 5 天时间为我的编辑器创建一个插件,或者其他什么,来消除那一个痛点,而你本应该继续前进,而不是去做支线任务。

Prim: 我有一条规则。那就是我不编辑我的 RC,除非发生了一些灾难性的事情,比如有人更新了一个插件,我不知道他们更新了它,现在我的编辑器中有一个硬错误,我必须向前移动。但我有一条规则,我会每年编辑一次我的 RC,我的 Neovim RC 或任何东西。一些让我烦恼的事情,我会把它写下来,我会记住它,我会想,“好吧,我想改变这一点。”但我不会回去。现在偶尔我会打破那个规则,如果我知道,哦,我想要一个新的重映射来做这个命令,这只需要 13 秒。复制粘贴,做这个,砰,完成。我有了这个新的重映射。在这种情况下,这是完全有道理的。但我不去探索插件,我不试图解决每一个问题,我不想要一个完美的编辑器,因为那是一种永远不会停止的追求。我只是说,这很好,很好的断点,我不会再这样做了。所以上个月我花了,我可能花了 100 个小时,就像编辑每一个可能的关于我如何启动我的系统的事情。让我可以从零到 60 在几乎没有时间。一切都是我想要的方式,Neoim,一切都完美地设置好了。足够快乐,我不会再碰那个系统了。也许我明年会碰它。也许我会休息一年。你知道,这只是,我对这很好。我对不完美很好。

Lex: 好的,0 到 60。让我们谈谈完美的设置。你的完美编程设置是什么?键盘,操作系统,多少个屏幕?椅子?

Prim: 所有这些。

Lex: IDE?我们走吧。

Prim: 所以键盘。你正在使用我最喜欢的键盘,Kinesis advantage。拯救了我的职业生涯。漂亮的键盘。凹面和拇指簇非常重要,因为如果你真的考虑一下,特别是如果你正在使用 querty,当你按下符号时,就像在标准键上,你只是在做这个,一直。退格键,回车键,符号,就像你只是在做这个。这只会弄乱你的手腕,不断地这样做。当你不断地做像 control 和 shift 这样的事情时,这只会把你弄乱。所以就像在这里。这在生活中要好得多。

Lex: 对于不了解 Kinesis 键盘的人来说,我认为你体验最多的就是你刚才说的,退格键真的很容易按下。

Prim: 是的。

Lex: 与普通键盘上的情况相比。所以退格键通常象征着,你正在删除一个东西。它象征着一个错误。不象征,它通常意味着一个错误。所以,你不仅在打字时犯了一个错误,你还必须采取一个身体上痛苦的、烦人的行动来纠正那个错误。对于我们大多数人来说,我们会犯很多错误。所以 Kinesis 只是让它变得愉快、快速和容易,在身体上纠正错误。这可能是我喜欢 Kinesis 的第一个原因,其他一切,是的,超级加分,宏和位置,凹面,就像你提到的,但错误是愉快的。

Prim: 是的,我同意。这就是为什么,这就是为什么我喜欢这个。所以我说这是最重要的事情之一。

Prim: 我发现非常非常重要的下一件事是一个显示器。我是一个单显示器的人。

Lex: 什么,真的吗?

Prim: 所以当我编程时,当我做任何事情时。现在当我直播时,我显然有第二台运行直播的计算机,因为,你知道,我有时会崩溃我的计算机,我必须重新启动它,或者其他什么。所以我确实有第二个屏幕,我把东西放在上面,但大多数时候你会注意到,即使当我直播时,你也在那里,我必须手动切换到流媒体聊天频道才能阅读它。那是因为我在一个屏幕上操作。所以我有一种完整的风格,我喜欢导航,灵感来自《星际争霸》,我相信按一个键就可以到达你想去的地方的心态。所以关于我的设置的一切都是按一个键。所以当我想去 Twitch 聊天时,alt two,Twitch 聊天。

Prim: 当我想去我的浏览器时,alt one。那是我的浏览器。Alt three。那是我去我的编程的地方。那是力量手指,显然。中间的大手指,就在那里。只需按下它。Alt six 将是 GIMP。所以我的 GNU 图像处理程序。所以如果我想画画,我就去那里。当我过去有 Slack 时,它是 alt 5。如果我有一个备用终端,我需要在那里运行一些额外的东西,那就是 alt four。我所有这些,一切都被完美地映射到单个键。然后当涉及到使用 T-Mox 时,我把所有的终端都放在一个终端中。

Prim: 现在我能够在它们之间切换。前缀 1 转到我的 Vim 编辑器。无论我在哪个项目中,它总是第一个 T-M 标签,如果你愿意的话。我不确定他们叫它会话,但我不确定如何描述它,如果你不熟悉 T-Mox 的话。一个标签。第二个是我的备用终端。第三个是我的长期运行进程终端。第四个是我的长期运行进程终端。我已经设置好了,所以每次我去一个项目,它都会自动生成会话 1 Vim,会话 2 备用终端,会话 3 也会打开它。所以就像,一切都准备好了。一切都经过优化,我这样做。如果我想去一个项目,它在任何终端中都是 F,将弹出一个模糊查找列表,其中包含我操作系统上的每个文件夹,我可以通过几次击键进入其中一个文件夹,砰,我现在就在那个文件夹中。所以它的方向非常明确,通过键盘尽可能快地找到我需要去的地方。

Lex: 通过键盘。

Prim: 然后在 Vim 中,我开发了一个叫做 Harpoon 的插件,我按下一个按钮,我可以将其中一个文件固定到一个临时缓冲区。我想 projectile 可能与 Emacs 中的这个类似。我不记得了。

Prim: Projectile,我想 projectile 更接近于我的会话化脚本。不管怎样,所以现在我可以,我有四个固定的文件,我可以通过一个按键进入任何一个固定的文件。所以就像,因为每次你开发一个功能,通常你有三个文件,你主要在这些文件上工作,我可以模糊查找其他文件,这就是它。但通常我只有这三个我总是在它们之间切换的强大文件。所以就像,现在一切都是,我想去浏览器,那是一个按下。我想去我的工作站,那是一个按下。我想去一个特定的文件夹,我需要更改文件夹。有时你会在两个不同的项目之间工作。所以在 T-Mux 中,那是前缀大写 L,它会在你的最后两个项目之间切换。所以我有备用项目,我甚至可以在项目中切换,几乎是一个键。所以就像,嘟,嘟,嘟。只是试图优化它,这样我就不会想太多,因为我认为搜索疲劳是一个巨大的失败,你必须寻找,就像当我看到人们在 Mac 上这样做,然后爆炸所有不同的窗口时,这让我感到焦虑。我想,你为什么要用你的眼睛来搜索你想做的事情?把它变成一个按键,永远不要再考虑它。

Lex: 你让我思考了很多,我是否可以用你的系统生活,它是否更好,因为它感觉更好。至少在智力上感觉更好,可能不太适合。

Prim: 在某个时候,有几个深刻的事情你说了,就像,你正在切换的窗口或任务的数量,无论是编程,你正在处理的文件数量都很小。

Prim: 是的。

Lex: 在任何一个时间,在任何一个 20 分钟的时间内,或者类似的时间。所以,好的,这是一个深刻的真理。有时我们认为,哦,我需要完全的搜索自由,但你不需要。你通常只在一小部分上工作。但我想,权衡在那里,就像我总是有三个显示器,当我旅行时没有,但我的快乐的地方是三个显示器。

Prim: 就像你真的需要所有这些都出现在那里吗?所以你转过头。

Lex: 我拥有的显示器是两个垂直的。

Prim: 好的。

Lex: 这对于某些类型的内容来说更好。我的意思是,它们是垂直放置的,所以你可以阅读。你可以用你的眼睛快速扫描。

Prim: 有趣。所以我不这样做。我甚至让它放大到我可能一次只有 25 行代码,在我的 27 英寸显示器上。

Lex: 是的,我认为没关系。

Prim: 我觉得当我不能看到更多时,我从根本上受到了限制。

Prim: 因为你的眼睛擅长跳跃,就像,好的,就像,你为什么不搜索?为什么不按几个键?Control U,control D,向上和向下跳半页。

Lex: 因为猿的视觉系统被设计成,就像加载大量信息,就像,如果每次你必须调查这个桌子,这个桌子上有什么,你必须按一个键,你可以开发整合这些信息的技能,但就像,它真的很有效,如果你有一张纸,像这样,我正在看着它,我的眼睛将能够加载信息结构,信息的主题,就像你只是可以更快地做到这一点。我想有一个很大的成本,因为你,你知道,这是一个额外的显示器,但有一些东西是垂直的,当垂直放置代码时,看到代码是一个 iffy 的,因为代码你真的,一次 25 行,我认为你可以做很多。这更适合文章,特别是其中有视觉信息或文档,你可以更快地跳转。但我正在尝试,当你如此雄辩地说话时,我想知道我是否只是在欺骗自己,我需要那个。

Prim: 我能用键盘快捷键完成所有事情,并且只在一个显示器上拥有所有东西吗?

Lex: 这是我应该尝试的事情,因为我是自动处理一切的坚定支持者,用键盘,因为你可以移动得非常非常快。你不必思考。我的一个,你知道,因为我也做创造性的事情,比如录制音乐或视频编辑,这很难,你知道,其中一些程序并没有让这变得非常容易。在带有 auto hotkey 的 Windows 上,你可以做很多,但仍然有一些限制,你用键盘能做多少。那就是,这真的是一个痛苦。他必须使用鼠标。但是,天哪,你真的让我思考。这是,你知道,即使是文本,阅读,我从根本上认为我同意你的观点,你可以看到更多,你可以上下看,看到这两个东西。也许在文章或类似的东西中,我可以,你知道,如果这里有一个很大的图表,占据了你的整个屏幕,加上文本,我可以看到为什么放大以获得所有这些信息会非常有益。但对我来说,我只能看到一平方英寸。真的,这就是我的眼睛实际上能聚焦的全部。所以当我阅读时,我就在这里。然后我必须从结构上尝试模式匹配我认为信息的样子。然后我必须开始阅读它。所以我不确定我是否真的从拥有很多东西在屏幕上获得了任何真正的好处,而不是我可以放松我的眼睛,我甚至不必集中注意力。文字太大了,就像我实际上编程时放得很大。我的文字比这个大,当我编程时。所以这只是,它太舒服了,我甚至不必费力去阅读代码。但你必须训练你的大脑,让你知道你可以像空间一样使用按键导航。

Prim: 是的。Neovim,顺便说一句。

Lex: 哦,也许这都与 Neoim 有关。

Prim: 好吧。然后 Neovim 显然是下一个大的。我喜欢 Neovim。原因是,我认为你可以提出所有你想要的关于哪个编辑器是最好的论点。我不认为你可以提出一个论点,Vim 动作不是优越的。

Lex: 我们开始了。你能解释一下 Vim 动作吗?这是什么?

Prim: 所以 Neo Vim,Vim 是一个老式的编辑器。Neo Vim 是一个对老式编辑器的现代诠释。是的。嗯,用外行的话来说,用 Neo Vim 工作需要什么?

Prim: 好吧,我以为你在谈论 Vim 动作。这就是你知道的,你知道我知道,但你知道那个模因,就像,“嘿,Jarvis,我能告诉你关于 Vim 动作的事情吗?因为他们的大脑里装不下任何其他东西,因为他们只有 Vim 动作。”因为你说 EL5,就像向我解释,就像我 5 岁一样,但在我的脑海里,就像,好的,E 是跳到单词的结尾。L 是多一个,伙计,我太坏了,我喜欢,好的,Vim 动作,当我听到字母时。嗯,是的,你可以这样想,Vim 有一种语言来描述文本中的移动,因为它的主要操作模式是操纵或编辑文本,所以这是一套经过深思熟虑的移动、删除、抽出、粘贴、复制,所有这些东西,这些东西进入了为处理几乎代码而优化的动作。举个很好的例子,假设你有三行代码,你想删除它们。如果你在 VS Code 中,拿起你漂亮的小鼠标,突出显示那些东西,按下退格键。这很可爱。你的手离开了键盘。虽然很容易做到。这非常适合初学者。我以前是一个巨大的 Vim 憎恨者。所以我只是想让你知道,在我们进入这个之前,我可能是最大的 Vim 憎恨者。如果有像扫罗到使徒保罗这样的人,我就像 Vim 的扫罗到使徒保罗。只是为了让你看到差距有多大。或者你可以做一些事情,就像,我不知道 VS 代码快捷键是什么,但我相信你可以按一些键来删除你所在的当前行。删除,删除,删除。你可以在 Vim 中这样做。我可以输入 DAP。删除段落周围。该段落中的所有连续代码,我将删除。所以 D。然后我可以选择我要采取的动作。AP 围绕段落。或者也许我想要 D F,意思是跳到与我将要按下的下一个字符匹配的下一个字符。所以 DF 左括号将删除从你的光标到第一个左括号的所有内容。所以你可以用这些小按键来描述你的动作。当你变得非常熟练时,你知道,你见过那些能掌握《堡垒之夜》的人。掌握 Vim 动作也是一样。当你变得如此优秀时,你不再考虑每一个单独的动作。相反,你只是想,删除段落,跳到这里,跳到这个,突出显示这个,抽出这个,做这个,你知道,它变得如此之快,你可以以非常快的速度出色地编辑文本。当你非常了解你的语言,非常了解你正在处理的问题时,编辑文本和输出代码实际上成为许多瓶颈之一。人们总是谈论,大多数时候我在思考,大多数时候我不是在思考,我在编程。我知道我想做什么,我想尽可能快地去做,因为我已经做了这么长时间了,我对一般的领域非常熟悉,这对我来说成了一个巨大的问题。我无法告诉你我有多少次纯粹地被我打字不够快这一事实所困扰。我只需要得到,我只需要把它从我的头脑中弄到文本编辑器上。这就是为什么我认为 Vim 动作在所有方面都是优越的。让你的手保持在键盘上,在主行上,并且可以以非常广泛和快速的方式操纵文本。

Lex: 哦,所以这不仅仅是关于编写文本,这是关于修改文本。

Prim: 它主要是关于修改文本。是的。我相信大多数编辑器,包括 Emacs,包括 VS Code,都可以做所有这些相同的事情。但有些东西他们只是不鼓励你去发现这些东西。

Lex: 是的,这是很多技术的一个重要的事情,许多技术可以做很多事情。

Prim: 是的。

Lex: 但这与社区或语言的风格或任何类似的东西有关,鼓励你在一开始不要偷懒,并学习编辑文本的快速方法,在这个特殊的例子中。

Prim: 是的。如何使用键盘。这是一个迷人的,关于技术如何使用的现实。你想被鼓励尽快找到快速的东西,这样从长远来看,它是高效和有趣的。这需要很长时间才能产生红利。很长时间。但除此之外,请注意我没有说 Vim。我不是说去使用 Vim。我说的是 Vim 动作。让我再举一个例子。好吧,我是一个忠实的粉丝。好吧,假设你有一行包含一些变量,你正在调用的一些函数,一些接受字符串的东西,你需要再次这样做。所以你,你,你通常会复制那一行。你会把那一行粘贴在下面。你会进入字符串并更改字符串。假设它正在调用某种配置。你需要用三种不同的配置字符串调用它三次。在 Vim 中,我可以,我喜欢按 shift V 来突出显示整行。然后 Y。有些人做 Y Y。Y Y。

Lex: Y Y?

Prim: 但我不喜欢做双的。我喜欢能够做两个不同的手指,因为你可以比一个手指快得多。这只是我的一个小优化,因为你不能那么快地按下它。反正非常优化我的方法。所以我抽出那一行,粘贴那一行,CI 双引号将删除第一个出现的字符串中的所有内容。然后我可以输入字符串,escape,保存。所以就像,它被优化得如此之快,我可以在其中快速跳转。而复制和粘贴行可能速度相同,但导航到字符串,删除字符串中当前的内容,然后,你知道,这在 Vim 中是一个非常快速的动作。我只是经常这样做。

Lex: 回溯一个非常愚蠢的问题。CI?

Prim: 在输入字母和使用字母导航和编辑之间有什么区别?你如何在两种模式之间切换?

Prim: 好的。所以插入模式意味着你只是在输入文本。是的。然后普通模式意味着你正在移动你的光标。

Lex: 你如何在这两种模式之间切换?

Prim: Escape。Escape 从插入模式进入正常模式。要进入插入模式,按 I 将你的当前光标移到开头,按 A 到光标的末尾,大写 A 到行的末尾,大写 I 到行的开头,O 在下面放一行,然后把你的光标放在适当的缩进位置。Shift O 将你当前的行向下移动,然后放一个新行。就像你可以看到,有,就像,我经常按 escape。我把它映射到,我做 cr,除了一个边缘情况。人们讨厌我习惯了它,只是因为我使用 Intelligj,我真的讨厌按 escape 键。所以我就习惯了按 a。

Lex: 所以如果你使用 Neoim,这似乎是一件必不可少的事情,将 escape 映射到某个东西。

Prim: Caps lock 将是你的标准选择。哦,是的,我把它映射到 cool。我明白了。是的。所以这真的很容易按下。砰,砰,砰。没什么大不了的。但是,是的,我认为如果你愿意学习它,动作是优越的。但如果你不愿意学习它,那么它们就不优越。你应该直接不用。

Lex: 如果你喜欢痛苦,那就好。如果你不喜欢,那实际上会更糟。

Prim: 这要糟糕 100 倍,对吧?所以,如果你喜欢痛苦,你就使用 Neoim。

Lex: 完全正确。

Prim: 是的。你现在明白了。如果你喜欢快乐,你就使用 Emacs。哦,对不起,对不起。Emacs 有没有过一个好的文本编辑器?我知道他们是一个伟大的操作系统,但我从来没有关注过他们是否得到了一个好的文本编辑器。

Lex: 操作系统?我认为你被误导了,我的朋友。所以至少 30 分钟关于 Emacs 与 Neovim 的讨论是 Reddit 要求的内容。

Prim: 你实际上使用过 Emacs 吗,以便能够说这么多废话?

Prim: 不,我用了一年。

Lex: 你用了一年?

Prim: 是的。是的。Doom,Space Max 和常规 Emacs。

Lex: 但你不懂 Lisp。所以你,你真的用过它吗?

Prim: 我有点像黑客一样,你知道,就像,好吧,这就是配置,你知道,就像你了解了它的方式,并做了所有这些。

Lex: 所以你建议掌握 U of M,并真正了解它的深度,但 Emacs 只是,在使用之前可以做出判断?

Prim: 我认为,我认为每个人,你在这方面抓住了我。是的,不。Neovim 中写的是 Lua。

Lex: 是的。

Prim: Lua 将是配置语言,但你有,它用 C 编写,但你有 Lua 用于,Lua 是一种非常简单的语言。任何人都可以编程 Lua。我实际上不知道为什么,我想这是因为我对 Lisp 的热爱,所以我选择了 Emacs。我认为你只是选择一条路,然后沿着那条路走下去。嗯。而且,因为这两个社区之间存在着如此激烈的、激烈的战斗,你就开始战斗,只是因为其他人都在战斗,然后有一天你就像一个骑在马上的老战士,你不知道这一切是为了什么。

Prim: 我的意思是,这非常悲哀,说实话,直到今天,我还没有尝试过 Neoim。这,我认为是因为有一个学习曲线。很多这些编辑器都有一个学习曲线。要真正地学习它,要真正地学习它。我认为这是对 VS Code 或 Sublime 或 Atom 的一些批评,它太容易了,不学习它,只是随便使用它。有一个很大的好处,编辑器迫使你有一个学习曲线,你接受艺术,科学,编辑的过程,认真对待,因为你花了很多时间在它上面,你最好学习如何使用这个东西。

Prim: 我最大的收获,我试图用所有这些话来说的是,我真的不认为编辑器显然不能造就程序员。但我认为,如果你不知道如何很好地使用你的编辑器,这很能说明你作为一名程序员的性格。有些人愿意将他们的生命奉献给编程,并花费 50,000 个小时进行一项活动,却从未花时间彻底学习他们的编辑器,这似乎很奇怪。你永远不会在另一个世界中看到这种情况,人们能够构建一些东西或做一些事情,却完全忘记了这些东西是如何工作的,只专注于他们工艺的一个部分。所以对我来说,就像,你如何使用它并不重要,我想看到的是,这个人知道如何使用它,他们知道如何很好地使用它。当出现问题时,他们可以说出问题存在的原因,他们可以去修复问题。对我来说,就像,你去吧。你已经做到了。你现在了解你的工具。用这个工具去征服吧。

Lex: 特别是对于你经常使用的工具。你必须看看你的一生,你的生活,无论如何。如果你是一名开发人员或任何东西,你经常做的事情是什么?

Prim: 会议。

Lex: 是的。是的。我的意思是,对不起,继续。继续。问一个问题,比如如何才能更好地完成这件事?因为你每天都这样做,每天几个小时。你花了多少时间思考如何做得更好,或者在会议的情况下,是否要做这件事?

Prim: 令人惊讶的是,人们没有足够地这样做。我看到了这一点,回到柔术。有很多人出现并做柔术或武术,他们以同样的方式一遍又一遍地做,他们投入了大量的精力,他们不问,我如何做不同的事情来更快地提高,在柔术或任何运动的情况下。练习钢琴或吉他也是如此。他们不,他们只是虔诚地投入大量的时间,并从变得更好中获得很多乐趣。他们没有足够地问元问题,我如何才能做得更好?对于编辑器来说,令人惊讶的是,有多少人只是那样做。

Prim: 是的。对于打字来说,令人惊讶的是,有多少人只是那样做。就像你说的,他们在啄,或者低头看。就像,通过学习盲打,你可以获得的生活质量的提高,就像,打字时不用看。就像,这是,这是无法估量的。你给你的生活带来了很多快乐,因为我们所有人都打了很多字。是的。我的意思是,我之所以非常高效地使用 Emacs,我确信,你知道,撇开玩笑不谈,我觉得 Neoim 有更多的空间来实现我在 Emacs 中所拥有的那种效率,能够快速移动,正如你所描述的,编辑。这是一种真正的快乐。这不仅仅是效率,它就像,是的,当你精通编辑器时,你可以获得一种自由。

Lex: 我之所以选择使用 VS Code,是因为我觉得将会有一系列功能的加速,Neo Vim 或 Emacs 将无法赶上,我不是说在未来 5 年,我是说在未来 30 年,就像,我觉得我几乎想承担不断学习新编辑器的痛苦,只是切换并学习,因为我已经在 EMX 中变得如此舒适,你知道,有了这个键盘,所有的快捷键,因为我知道如何编程,我觉得这,你知道,neoim 可能在 50 年后不会存在,也许会,我不知道,但我觉得你想学习这些不同的技术。

Prim: 你知道 cursor 是一个很好的例子,我现在主要使用 cursor。我会回到 VS code 和 cursor,使用 AI 的技能是一种真正的技能,就像从快捷键到时机,到窗口的布局,到我如何思考何时何地使用 AI,它不会分散我的注意力,它赋予我力量,不仅仅是为了好玩,为了乐趣,为了实际的生产力衡量。这是一种技能。我觉得如果我留在 Emacs,我会陷入舒适的局部最大值。也许对 Neo of him 来说也应该如此。我应该尝试它。说真的,我相信有一个插件,像一个副驾驶类型的情况,你可以用 Neo 设置。我可能应该考虑这一点。但是像 cursor 正在 IDE 方面做很多非常有趣的事情,不仅仅是生成代码和手动编辑代码。

Prim: 它就像不断地能够重写代码。就像 tap tap tap tap,移动光标,但也修改代码部分并很好地进行差异的想法,无论是 cursor 还是 VS code 赢得了与 co-pilot 的这场战斗,我不知道,但就像,这感觉像是一种有趣的,与你刚才描述的非常高效、快乐的体验不同的体验,你正在向我推销这个,因为 Neoim 显然没有人工智能,但你可以。

Lex: 是的,绝对可以。我 100% 同意 cursor 看起来像一个非常酷的产品。我实际上认为有很多非常棒的东西正在出现,所有这些。我可以看到自己从 neovim 迁移。我不使用 neoim 是因为我喜欢 neovim,我使用 neovim 是因为我喜欢我演奏的乐器。所以就像,如果 cursor 能够满足这些需求,我可以看到自己迁移。我没有某种痴迷的依恋。我很好奇,你知道,每次我使用人工智能,我都认为我只是有技能问题。我认为我在使用人工智能方面有很多技能问题。我还没有能够以一种我真正喜欢的方式使用它。我们,我们会谈论它,但在此之前,哦,坐在球上,我忘了说。

Prim: 坐在球上。是的。

Lex: 桌子需要适当的高度。

Prim: 一个显示器。我应该在屏幕的三分之二处。我不喜欢转头。我更喜欢我的手处于手枪中立位置。

Lex: 在那里。

Prim: 坐在球上。

Lex: 瑜伽球。

Prim: 瑜伽球。这是怎么回事?

Prim: 它只是有助于保持良好的姿势,因为当我有东西可以靠着时,我会这样做。

Lex: 所以你坐着几个小时,没有,等等,你在做什么?我坐在一个球上,然后我弹跳。

Prim: 你的背靠着一个东西吗?

Prim: 没有。

Lex: 他妈的?

Prim: 好吧,你还怎么,像,你还怎么,你是世界上唯一一个坐在瑜伽球上编程几个小时的人。你确实意识到了这一点,对吧?

Prim: 感觉很好。我的意思是,好吧,我,问题是,每当我有一个背部,我就只是懒散,我发现自己变得不舒服,我想,为什么我不舒服?我的肩膀有点不舒服,我只是喜欢,我像鸡一样伸着脖子,你知道,就像。

Lex: 但你能够在瑜伽球上保持几个小时的姿势?

Prim: 是的。所以我就能做到这一点,然后我发现如果我懒散了,我就像,“好吧,不行。必须回去。”

Lex: 你有令人难以置信的背部肌肉,还是什么?

Prim: 不,我,好吧,我不认为保持姿势,保持直立需要令人难以置信的背部肌肉。是的,我认为这是一个非常基本的人类功能。

Lex: 我不会认为自己是一个强壮的人。

Prim: 基本的人类功能?我不知道。

Lex: 事实和逻辑。好吧,很酷。

Prim: 有一个屏幕,Neo Vim,操作系统,Linux。只是因为我想要一个好的窗口管理器。这就是按下按钮,打开 Chrome 的全部内容。我只是使用 i3。我相信我可以使用比 i3 更好的东西。人们总是告诉我所有这些窗口管理器都非常好,但我只想要,我只有那三个屏幕,我在它们之间切换。所以它真的,我真的不在乎我使用什么,只要我可以按一个按钮然后去。

Lex: 是的,我也是。所以一半一半。一半 Linux,另一半 Windows,Linux 的意思是 WSL。

Prim: 那是什么?

Lex: Windows 子系统 Linux。

Prim: Weasel?

Lex: Weasel?看,不。必须有一个更好的,更积极的。Weasel 听起来,似乎很适合微软。

Lex: 所以人们经常指责我是某人的托儿。有时是独裁者。如果我是任何人的托儿,那就是 Windows。我每周都会收到比尔·盖茨的支票。

Prim: 好吧,他不再是微软了。

Lex: 鲍尔默,开发者,开发者,关于。不,我只是开玩笑。我认为,天哪,我需要尝试 Mac。我需要,我需要尝试。我周围都是有 iPhone 的人。我使用安卓。

Prim: 你使用安卓。

Lex: 是的,你看。

Prim: 看,哦,我们一起是失败者。

Lex: 失败者在一艘正在下沉的船上。嗯,好的。所以,只是为了和你保持一致,并向你的朋友 Tee 致敬和喊话。他直播,顺便说一句。他是一个主播,我已经订阅了,我一直在享受它。我的忠诚正在慢慢地从你转移到他。质量,他要好得多。外表,智力,技能,一切都好得多。不,好的。所以他,你知道,你让他的一天很开心。好吧。所以,他说你,你知道,让你的一天很开心。他提到他喜欢 Neoim,因为它让他能够消除做他不喜欢的事情。这是一种很好的方式来表达你描述的自动化过程,将快捷方式分配给痛苦的事情。所以那个过程,我的意思是,我想知道你是否同意这一点。

Prim: 完全同意。我们在使用 Neoim 方面有非常相似的心态,为什么人们应该使用它,所有这些东西,以及如何使用它。好吧,他肯定把它发挥到了更高的程度。他花了更多的时间在自动化上,所有这些。我不一定从获得完美的设置中获得很多乐趣,但有很多东西可以学习。他非常非常擅长他所做的事情。他绝对可能是其中之一,他 30 岁,编程时间不长,他是最有才华的开发人员之一,这是肯定的。看到一个人有多聪明是非常令人震惊的。

Lex: 所以人们应该去看看他,teej dv。

Prim: 是的,T DV。他的名字,他的姓是 Dere Dise D。

Lex: 哦,这不是一个开发者。

Prim: 好吧,是的。

Lex: 好的。是的。所以这只是 TJ。那是他的名字。拼写有点有趣。

Prim: 你喜欢他什么?

Lex: 哇,他付了你多少钱让你问这些问题?

Prim: 数千美元。太多了。我甚至数不清那么多美元。他,信任,显然信任是最重要的事情,特别是在所谓的流媒体 YouTube 世界中,如果你愿意的话。很容易找到想要成为事物一部分的人。人们倾向于依附于事物,很难找到一个你真正可以信任的人。所以他只是一个我可以真正信任的人。他总是说实话。他是一个好朋友的所有正确的东西,在这种努力中。

Lex: 作为一个好朋友,他告诉我我可以用来背后捅你的问题。

Prim: 好的,我讨厌他。我忘记了我有多么不信任他。说到 Harpoon,你提到了它。他说,你知道,问你关于,基本上需要多少年或几十年才能过渡到 Harpoon 2,真正发布它,开发它等等。你能描述一下 Harpoon 是什么,以及为什么你似乎无法完成任何一个项目吗?

Prim: 好的,这是一个非常好的问题。所以 Harpoon 2 实际上已经完成了。我这样做是为了避免漩涡和我将不可避免地得到的成千上万的问题。我把 master 分支保留为 harpoon one,我把 Harpoon 2 保留为 harpoon 2 分支。那些不阅读自述文件的人说我现在只使用 harpoon 2,那是他们的错。就是这样。我只是不想,我真的不喜欢回答关于开源的数百个问题。我以前喜欢做开源和所有这些,但我有点在 Falor 的那些年里让我的灵魂崩溃了。所以我想我只是有点对成为一个真正活跃的维护者过敏。我构建的所有东西都只是为了我自己。就像 Harpoon 只是为我构建的。这就是我,我花了三个月的时间试图找出文件的最佳导航方式,这就是我想出来的。所以 Harpoon,这是对备用文件的一种理解。如果你熟悉备用文件,通常你会在所有编辑器中都有这个,你可以在其中返回到你刚刚在的文件。所以这意味着你可以有效地拥有两个文件,你可以在它们之间来回切换。你可能已经用过很多次了。非常快速的导航方式。非常好的东西。我想要一些,我想要备用文件,但像三个或四个。所以这就是 harpoon 的全部内容,只是能够固定一个文件。所以我有一个按钮可以按下以转到文件,另一个用于另一个,另一个用于另一个。所以我最多可以有四个。我只有我的四个力量手指。对于 D'vorak 来说,那是什么?那是 htns。所以如果我按 control htn 或 s,它会转到四个文件之一。就是这样。这就是它的全部。你可以从技术上使它成为可能,这样你就可以添加函数并在外部执行事情。所以你可以打开终端,你可以向服务器发送请求,你可以用它做任何你想做的事情。我只是让它主要用于打开文件。

Lex: 既然你提到了,你使用什么键盘布局?你使用 Dvorak?

Prim: 我使用 D'vorak,但我使用 D'vorak 的自定义版本。我使用它的原因是,在 2017 年,我们刚刚有了我的第二个孩子。那是圣诞节,我的手臂非常疼痛。我坐在那里很害怕,就像:“哦,天哪,这是我的职业生涯的终结吗?我完成编程了吗?一切都结束了吗?”所以我决定创建我自己的键盘布局,优化以防止我正在经历的疼痛。所以我使用 D'voric 作为基础,然后以对称的、合理的方式布置符号,以便它是打开、关闭、打开、关闭、打开、关闭,对吧?它们都在这里。我实际上必须按住 shift 才能按数字。所以符号实际上是我的第一个东西。所以它非常适合笔记本电脑键盘布局。所以我可以以非常有效、很好的方式使用我的笔记本电脑。这就是我开始使用 D'Vorak 的方式,所有这些。如果你,因为我当时没有 Kinesis,我当时甚至不知道 Kinesis 的存在,所以我不建议这样做。所以当我发现 Kinesis 时,也是在 2017 年,我当时想:“哦,好吧。”

Lex: 你会向人们推荐 Kinesis 吗?

Prim: 从技术上讲,我是 Kinesis 的赞助商。所以,人们,你知道,很难相信一个由它赞助的人。但在我成为赞助商之前,我就已经使用它了。他们是我联系过的唯一一家赞助商,我说:“我需要你的赞助。你就是关键。无论如何我都会使用你。是的,你不。你可以说不,但我真的很喜欢它。”在我使用 Kinesis 的前 3 年里,他们给了我免费的 Kinesises。

Lex: Kissi 作为你的赞助?

Prim: Kissi?是的,我总是很矛盾。我尝试离开过很多次。你不能。它太好了。

Lex: 但你看,我有这种荒谬的情况,就像带着它旅行一样。我能理解。

Prim: 是的。

Lex: 是的。我的意思是,我实际上,你知道,要去乌克兰的战区。有一个 Kinesis 键盘,一台笔记本电脑,还有一些其他的小东西,仅此而已。就像,Kinesis 键盘真的会占你带到战区的体积的 30% 吗?你知道,看起来答案是肯定的。是的。就像你真的从中获得了那么多的价值吗?我认为这对我来说可能更多的是精神上或心理上的。它感觉像家。有一种舒适感与之相关。

Prim: 我试图离开。天哪,我喜欢这种体验。你只是。这就像你与事物建立的一种关系。

Prim: 这是。是吗?但我正在努力弄清楚这是否是一种有毒的关系。

Prim: 我认为这主要是爱。

Lex: 我认为这是爱,就像所有的关系一样。有一些,你知道,推拉,复杂性。但他们说距离会让心更亲近。所以也许有时 Kinesis 键盘需要留在家里,笔记本电脑键盘可以是那个,这样你的心就会变得更加亲近,这种联系会变得更深。

Prim: 正如你所说,我已经想念它了。所以我不知道,我想它会一起去所有的旅行。但如果它坏了,你知道,我担心 Kinesis 会倒闭。我想,这里的商业模式是什么?谁实际上在使用这些键盘?对吧?但显然它仍然很强大。我应该提到,当我第一次成为你的粉丝时,我听到你谈论咖啡和终端。我仍然不,顺便说一句,明白你在说什么。我需要实际使用它。但你,你经营很多东西,一家咖啡公司。天哪,这闻起来真香。所以这个是暗模式,深烘焙,全咖啡豆。上面有很多东西。非常 devi 店服务器 Web。

Lex: 你能通过 SSH 合法地订购咖啡吗?

Prim: 所以现在,这是你获得咖啡的唯一方式,通过 SSH。那是那种。

Lex: 好的。所以,我能不能,起源故事?

Prim: 你,是的。

Lex: 是的,对。我打算做某种命令行命令来请求,或者像 d-help,或者像 man。

Prim: Man coffee。

Lex: Man coffee。好的,所以我和 TJ,又是同一个 teach teach TV,顺便说一句,非常惊人的设计,由 David Hill 完成。它们非常非常好。嗯,所以让我给你一个基本的想法,就像,那一定是一年半前。我和 TJ 谈论过,就像:“嘿,你知道,每一个有一定追随者、有一定在线影响力的人,他们总是在销售一种东西,但我没有什么可卖的。我真的不想做商品。我从来没有真正喜欢过做商品。我只是觉得,我不知道。这对我来说没有那么有趣。”

Lex: 不想有龙舌兰酒。

Prim: 我不,我不想要龙舌兰酒。我想要一些,我也想要一些我真的不觉得卖它不好意思的东西。你知道,有很多人会上网,他们会为一大堆产品做广告,就像:“哦,好吧,试试这个,试试这个。”这就是为什么我实际上只做过 Kinesis,因为就像:“好吧,我可以指出我生活中非常糟糕的事情,我非常害怕,现在它不再糟糕了。”所以就像,“好吧,这有道理。”但其他一切总是,你知道,对我来说更难。所以我们只是聊了很长时间,我们喜欢 Neoim。所以我们只是想:“哦,如果我们能从 Neovim 做些什么呢?”我们有点像在嘲笑这一点。就像,从 Neovim 订购太荒谬了。嗯。然后在某个时候,我们只是想:“等等。”也许我们可以做,比如咖啡?每个开发人员都喜欢咖啡。也许我们可以弄清楚这个咖啡生意。所以我有一个好朋友叫 Dax。

Lex: THDXR Dax?

Prim: 是的,Dax。Dax,他是一个非常时髦的人。

Lex: 时髦的?

Prim: 哦,是的。他有很多时髦。

Lex: 胡子?

Prim: 是的,他有胡子。非常,他做 SST。他做了很多事情。非常有才华。我们会称他为 DevOps 工程师。他不止于此。但,非常有才华的人。他和一个叫 Adam Vegan 的人,顺便说一句,伟人。我们一直带他去韩国烧烤。他什么也不吃。还有 Liz,她对终端咖啡公司非常重要。我认为没有她,我们就无法做到我们所做的事情。然后还有设计师 David Hill。他做 Laravel,他为 Laravel 设计。非常有才华的设计师。所以我们都走到了一起,我们只是在嘲笑我们如何,我们可以做一些荒谬的事情吗?这就是我们想出来的。

Prim: 是的,就像这样。你只需打开网站。你实际上,你实际上不能订购。我们实际上不允许你订购。该网站是一种看起来像终端的东西。使用下面的命令来订购你的美味的全咖啡豆 SSH terminal.shop。

Prim: 是的。所以你只能 SSH 进入它。所以你必须复制那个命令并把它扔进去。如果你想在你的已知主机中添加小终端商店,你可以这样做。

Lex: 你如何处理付款?

Prim: 通过 Stripe。所以我们要做的一件事是添加一个移动结账,它会在终端中显示一个二维码,你就可以在你的手机上结账了。但现在你输入你的凭据,它通过所有终端,就像所有终端,是的,SSH,显然它代表安全外壳。它使用椭圆,你知道,量子安全算法来确保你的数据没有被拦截。

Lex: 是的。但是他使用人工智能吗?我很确定 DAX 使用人工智能。

Prim: 所以你说了量子。所以我不知道。量子人工智能。这甚至可以成为一家公司吗,如果它不使用人工智能?

Prim: 我们有一些加密链和一些量子人工智能,你知道,由聚变驱动。所以这非常,非常狂野。不管怎样,所以,是的,我们只是走到了一起,我们想,这是什么,这是来自迈克·泰森的战斗。好吧,迈克,就在那天晚上。迈克·泰森亲吻了记者,然后走了出去。

Lex: 没有任何衣服。

Prim: 我们为某人做了一个广告。但很好。我们决定开一家咖啡店,然后我们想,与其仅仅把它做成 neim,如果我们把它做成 SSH 呢?因为每个人都有 SSH。你有 VS Code,启动 VS Code。你可以从 VS Code 内部订购咖啡,对吧?因为你的底部终端可以访问 SSH。Bada bing bada boom。这有点有趣。所以我们真的,我喜欢这个。我们只是想做一些事情,在那里没有一个级别,没有一个世界让我对销售这个和人们购买它感到不好。这是一种好的、合乎道德的咖啡。我们开发了整个供应链和一切。所有都是包装好的。所有都是精品。所有都是真正的,就像它是非常高端的咖啡。它尝起来真的很好。在这一点上,我不喜欢喝其他的咖啡。我对此有点生气,因为它没有那么好。所以这有点有趣,我迷上了我自己的东西。我现在对我的供应非常兴奋。我刚订购了 16 袋,并把它送给我的家人,试图说服他们。但这只是这样的事情,你,我没有卖给你一个会影响你的创业公司的软件产品,这可能会导致灾难。我没有说服你做一堆会改变你的职业生涯的事情。我只是说:“嘿,这里有一些咖啡。”就像,这就像一种有趣的体验。

Lex: 这很有趣,一切。幽默感很棒。是的。人们应该去 terminal.shop。

Prim: sh terminal.shop。

Lex: 我正在和那些不知道 SSH 是什么的人说话,在那里你可以阅读命令,然后弄清楚如何使用 SSH,我的意思是,这是一种网站上的文档。

Prim: 如果你不能使用 SSH,你可能就不应该担心购买我们的咖啡。这就是全部。

Lex: 好吧,你可以学习。你可以学习你。如果你很活跃,并且你是一个电脑人,你喜欢启动终端并感觉自己像个黑客,那就去做吧。

Prim: 我们甚至有订阅。我,我希望看到的是,这就是它出现的方式,我认为在光标对话中,我希望一个人工智能代理,你知道,做了这件事,就像人类学的计算机使用或类似的东西,实际上采取了订购咖啡的行动,当它在编程时。

Lex: 是的。

Prim: 就像,嘿,给我订一些咖啡,它实际上会经历订购的整个流程。

Lex: 整个流程。

Prim: 但更好的是,如果你没有要求它订购咖啡,你要求它做一些事情,作为一个切线,一个支线任务,它做了,这就是计算机使用所做的,对吧?

Lex: 他们展示了它能够去,我认为是谷歌搜索一些图像,暂停一下,然后继续做其他事情。不管怎样,是的,超级酷的想法。喜欢它。


用人工智能编程 (4:08:47)

Lex: 说到这个,让我们谈谈人工智能。好吧,你对人工智能在整个编程软件工程经验中的作用既有积极的看法,也有消极的看法,就像今天这样。你认为,你对人工智能的总体看法是什么?它擅长什么?它不擅长什么?

Prim: 好的。所以我的总体看法是,它归结为一些非常简单的事情,那就是,如果你正在做一些非常可预测的事情,人工智能非常好。当你做一些不可预测的事情时,人工智能就不是很好用了。如果你正在使用任何更前沿的东西,人工智能将不会使用它,或者人工智能不会非常擅长使用它。就像,它在 Zigg 方面不是很好,因为 Zig 就像,比如说,文档较少。它在 Typescript 方面非常好。我认为有很多有趣的事情将通过人工智能出现,我认为很多人并没有真正做好准备或思考过。TJ 是这个想法的起源,但我认为将会出现很多市场操纵,如果你愿意的话,通过人工智能,这意味着,嘿,你想研究最好的木工工具。好吧,有人会购买广告位。有人会购买高级训练数据,对吧?他们是那些在 LLM 中获得巨大推动的人,但 LLM 并不一定要作为广告来推销,因为它实际上不是一个直接的广告。他们只是在训练数据中有一个更高级的位置,一点点额外的学习。你知道,就像,有很多关于人工智能的事情,我害怕即将发生。很多都归结为人们没有学习或做出权衡,生产力是唯一重要的事情。我不认为生产力是唯一重要的事情。如果你想构建一些复杂和困难的东西,生产力并不是唯一的事情。你实际上必须进行深入学习,并将其追求到基础之上。所以,我将人工智能视为一种非常酷的东西。它感觉像一个魔术。我记得我第一次使用它的时候,我提前获得了 GitHub Copilot 的访问权限。事实上,Nat Friedman 看到了我的 Twitch 剪辑,我向 GitHub 索要它,他亲自给我发了提前访问权限。这太棒了。当我使用它时,它正确地预测了一个 if 语句。我的思绪完全被震撼了,因为在那之前我什么也没有。现在就像,第一次。我记得我想,天哪,这将极大地改变编程。然后我用得越多,我就越,对我个人来说,我一直在引入错误,我无法弄清楚为什么。我意识到的是,我有点发展了,我没有很好地副驾驶。我自动驾驶要好得多。我阅读代码的能力与我批判性思考和编写代码的能力,它们绝对是不同的技能水平。我不认为当我只是阅读代码时,我做得很好,而不是当我编写代码时。所以我在那里挣扎。

Lex: 我确实认为这是一种技能。

Prim: 是的。

Lex: 对人来说是技能问题。

Prim: 技能问题,对于那些不知道的人来说,这就像一个标签,有时用来嘲笑。在这种情况下,有几层,嘲笑,但也是认真的。意思是,批评是基于你缺乏技能,而不是某种基本真理。

Prim: 是的,我认为这就是我实际上使用 copilot cursor 很多的原因,是为了发展编辑 AI 的技能,这样我就能更好地学习如何做这件事,因为我认为当我做得越来越好时,我开始更好地利用 AI,在这个时候,它有点像样板代码的东西。嗯,你可以从头开始做出开箱即用的、新颖的设计决策或棘手的设计决策,但填写一些东西,使用人工智能,然后学习修改的技能。我个人,这更有趣,与人工智能一起编程。即使我删除了很多代码,它也更有趣。它不那么孤独。这更,这是我想象的结对编程,我从来没有做过。但它只是感觉,你得到的摩擦,当你盯着一个空的东西时,它不存在了,空函数,空类。这更有趣,不那么孤独。我确实认为很多更简单的类型的编码,它真的很有帮助,比如与 API 交互。嗯,我通常必须在 Stack Overflow 上查找的基本内容。它在这方面真的很快。举个例子,只是与 YouTube API 交互。YouTube API 文档不是很好,你可以把所有内容都加载进去,并要求它生成一组访问 API 的函数,执行各种读写操作,它会弄清楚这一切,然后你可以,好吧,你确实必须阅读,你必须检查一切,你开始发展理解它在哪里误解了任务的技能。所以你是什么,那是什么技能?我什至不知道。你必须有点同情人工智能,它的局限性是什么。很多时候,这与提示工程有关。你必须,同时,了解人工智能知道什么,就像你实际上给它提供了什么数据,以便能够生成代码?很多时候,我们没有意识到我们没有给它足够的信息。所以你必须,实际上,好吧,好吧,你必须,就像同情一样,好吧,这些是代码,它知道的文件,这是你问它的问题的细节,就像你必须想象你是一个什么都不知道的实习生,很多时候,我们希望人工智能弄清楚那些没有说出来的事情,但你,你不能知道那些事情,你必须指定那些事情。所以你实际上必须在指定的事情上更加深思熟虑和严格。所以我有这个,就像我保存的一堆提示,我正在构建这些不同的提示模板库,这是一团糟。我相信有很多开发人员都有这种类似的混乱。所以很多都与长期改进这一点的工具密切相关。一个系统将变得更加智能,你不需要细微差别。两个将会出现工具,让你能够指定这些东西,并正确地加载它,并提供系统需要的所有上下文,以便做出好的决定。也许系统会问你后续问题。等等,有些事情你没有说清楚。所有这些东西。很多都与界面有关,与工具的实际设计有关,就像我们说的 cursor。它会不断变得更好,更好,更好。所以我的感觉是,开发人员一般来说应该学习这个,看看,不要被甩在后面,看看他们如何被使用。作为一个超级大国,以提高他们的生产力,他们的效率,他们的编程乐趣,而不是被视为他们的竞争对手或类似的东西。但是,你知道,对我来说,它已经是一个很大的生产力提升。就像实际的,如果你衡量你完成一件事的速度有多快。嗯,这是一个很大的,而且不是以分钟和小时来衡量,而是以天来衡量。有时,有一些我必须做但不是那么重要的事情,我会因为拖延而推迟。人工智能帮助我真正完成它。就像实际上,因为,那个东西,空白页,就像我之前提到的,它帮助我写东西,完成它,测试它,发布它。也许只是因为它不那么孤独,与人工智能一起工作。我不知道,我不知道这些是否有意义。

Prim: 这完全有道理。我真的很喜欢这句话,它让它不那么孤独。我认为这其中有一些东西很有趣,有一些互动,不仅仅是像 LSP 自动完成。是的。

Prim: 你就像:“哦,哇,这是一种不同的方法,我会采取。嘿,这有点酷。我喜欢这些东西。”而且,我不是一个反人工智能的人。我可以看到为什么人们真的非常喜欢它。我只是还没有,就像我每次,我从 Nat 给我访问权限开始一直使用 Copilot,直到大约 6 个月前。这就是我使用它的时间,相当长的一段时间。我真的,我真的很喜欢我从中使用的东西。它只是没有,它有点像对我做了相反的事情。我觉得我更多的是在审查,而不是在写作。我觉得我更多的是在放任事情,或者我只是没有真正考虑过事情,我没有那么投入。所以我想,好吧,这里有些不对劲。这只是我个人的事情。所以我认识到这不是人们应该处理这些事情的方式。这不是一个好的理由,你为什么应该或不应该使用人工智能。就像我只是不认为这是正确的,因为我可能会纠正这一点,并找出一种更好的方法来做到这一点。我一直想再来一轮人工智能。所以我在想,也许我只需要在 cursor 中花两周时间,就像完全接受成为这样的人意味着什么。天哪,我能用这些新力量做什么?它们是否已经改进到实际上很好的程度?我的意思是,对我来说,因为我做的很多决定,我写的很多小函数,并不是因为我试图写这个函数来解决这个问题,而是因为我正在写这些函数或这个集合,不仅仅是为了解决这个问题,而是因为我知道在大约 2,000 行代码构建所有这些其他东西之后,我将需要开始做下一个活动。所以就像,我试图,真的很想像下棋一样把自己移动到随着事情进展得更快,我有点在那步棋上失败的精确位置。同样,这是我的技能问题。我的意思是,在最真实的意义上,我正在提出批评,因为我没有充分使用它。

Lex: 你越擅长编程,我不知道这是否是一个普遍的规则,这是我的轶事数据。你越擅长编程,你就越不想使用人工智能,它就越碍事。就像优秀的程序员一样。

Prim: 公平地说。

Lex: 就我所知。所以就像,越是初级的程序员,越是乐于使用人工智能,你知道,当我使用人工智能时,它是用于基本的,就像,我不知道是否有更好的术语。这不是样板,但它就像相当容易的编程。那种编程要容易得多。就像那种 10 倍,不是要用这个模因,那种生产力超高、才华横溢的程序员,他们只是,他们讨厌人工智能。他们会说:“这还差得远呢。”所以这其中有一些道理。我仍然认为他们应该使用人工智能,只是为了学习。

Prim: 是的。

Lex: 因为它会变得更聪明。它会变得更好。这就像当你超级优化 Neoim 或超级优化 Emacs 时,你可能不会发现流水线中的新事物。所以,不断地进行那种训练总是好的。让我问你一个问题,只是为了我的理解。你谈到了这个想法,你有所有这些 LLM 提示,所有这些,这些大的、混乱的 LLM 提示的积压,你有这些模板,你可以做各种动作。你可能有这些策略,让它自我解释,然后做正确的事情,对吧?就像你,据我所知,这是很多人都在做的。好吧,然后你说这句话,但到某个时候,界面会变得更好,也许它可以做很多这些事情,更好,我不需要那个。然后我的问题是,那么有没有人因为不使用人工智能而落后呢?因为如果界面将发生如此巨大的变化,以至于你所有的习惯都需要从根本上改变,并且它将能够澄清和使所有这些陈述,我真的落后了吗,还是下一个 G,就像,实际上与当前的不同,这有点像,是的,你在那里做的是穿孔卡片人工智能。我要在编译器时间加入人工智能。如此不同,以至于,什么是穿孔卡片?

Prim: 嗯,显然是一个开放的问题。这是一个令人着迷的问题。我个人认为是的,如果你不玩它,你就会落后。因为我用提示做的事情是,你正在学习,你正在建立,就像,对人工智能如何工作的直觉。你正在了解,就像,它的优点和缺点是什么?甚至不是当前版本,而是下一个版本,等等。让一个人工智能系统了解世界意味着什么?它需要什么样的信息才能做出有效的决策?我认为这确实会转移到更智能的模型上。随着时间的推移,你将需要做出不太严格和具体和详细的指示,但你仍然必须有那种东西。

Prim: 是的,我认为这是一种与人工智能系统产生共鸣的技能,因为它不知道,你知道它缺少什么。它缺少常识。它缺少长期记忆。很多事情,当我们与其他人类交谈时,他们对现实有基本的常识,就像,而人工智能系统通常缺乏那种常识,他们也不记得事情。所以你必须,就像意识到有一个持续的空白状态发生。所以这几乎就像与人工智能系统交谈的技能,我正在训练。通过不得不写下所有这些提示,并来回交流以了解什么样的提示效果更好,你建立了这种直觉。而且仅仅是阅读别人代码的原始技能。也许对于那些在大型团队中工作的人来说,这是一种已经发展的技能。对我来说,不是这样。所以学习如何修改别人写的代码是一种真正的技能。还有你提到的另一件事,考虑对一段代码的另一种观点真的很好,但这是一种技能,理解,好的,这就是你所做的。有一种技能,可以提出一个关于已经生成的代码的问题,这样你就可以就所采取的方法进行对话。我认为在合作努力编写代码的过程中涉及很多微妙的小技能。有点像你和 Tee 在你们制作 28s 一个键盘的视频时,对吧?人们应该去看看那个视频,在那里,就像你们显然在这方面很糟糕。

Lex: 是的。

Prim: 共同使用。你们所做的非常酷,那就是从两个不同的键盘控制一个新界面。

Lex: 是的。

Prim: 然后我们每个人都有一定的字符或动作的配额,我们可以执行。

Lex: 是的。所以你们两个都必须,就像,沟通。这是一种真正的技能。我相信你可以通过这种方式变得超级高效。但这需要,这需要时间来学习那种东西。所以,是的,我认为这有一定的价值。但我认为有一个学习曲线。

Prim: 所以我,我,我确实想说清楚一件事,我实际上经常使用人工智能,我只是不把它用于编程。所以,我一直试图做到的一件事是,能够进行一次长时间的采访,或者理解 Twitch 聊天在说什么,并成为 Twitch 聊天,并能够像它一样说话。尝试学习如何以不同的方式提示它。所以我觉得这些事情对我来说真的很有趣。我试图让它学习如何玩塔防。我在 Zig 中制作了一款塔防游戏,然后让它玩塔防,然后让 Claude 3.5 与 Open AI 对战。Claude 3.5 在白天会做得更好,而 Open AI 在晚上会做得更好。我不知道为什么。我不知道发生了什么,但只是一个会开始获胜,另一个会开始失败。这非常奇怪。所以这只是,你知道,我正在学习很好地提示,但我正在学习在一个非常不同的轴上提示。我只是还没有发现它在编程中非常有用。编程和我应该也说,我在,是的,在生活的各个方面,在每一个环境中,我都使用同样的探索提示等等。我正在使用和学习。我认为这本身就是一个完整的领域,提示工程,以及如何与人工智能系统交互。我认为这是值得投资的。

Lex: 你能实际谈谈这一点吗,因为你,我看到了,你基本上是从 Twitch 聊天中提取聊天,并让人工智能说话。我没有意识到,我以为你是,所以你不是在阅读确切的聊天消息?

Prim: 是的。

Lex: 你在做某种总结?

Prim: 是的。所以我会尝试,就像我最终会向 OpenAI 发出大约八个查询,就像,第一件事是,我让它有一个默认的个性,嘿,你是经理 Randall。你是一个软件工程经理。有点解释他们的立场,他们喜欢什么,他们不喜欢什么,然后说:“这些是你脑海中的想法列表,你需要和这个人交谈,并问他们一个问题,比如,给我 10 个你认为可能是你有的想法的回答,你想问。”你知道,就像让它给你一个列表,然后重新提示,就像:“嘿,你是 Randall。你就是这个,这个,这个,这个。”你有这 10 个问题在你面前,现在你需要选择其中一个,并以一种听起来更像你,工程经理的方式重新表述它,你知道。所以你就像,你知道,我不断地试图让它迭代自身,而不是仅仅一次性完成。我发现如果我迭代太多,它会变得,就像它失去了价值,就像它失去了它最初试图问的东西。如果我做得不够,它就太退化了,来自 Twitch 聊天。所以就像,我,我在这方面还有很多改进的空间。

Lex: 只是为了澄清,你正在输入 Twitch 聊天。

Prim: 这些是你的想法,你是一个经理,这些是你脑海中的想法。挑选出一些最深刻的想法,实际上,这取决于我想做什么。我正在努力开发一个更好的系统。所以就像,我如何给 Twitch 聊天发声?我能不能让它,这样我就可以创造出与 Twitch 聊天对抗的角色,或者为 Twitch 聊天创建?我能不能整合 YouTube?所有这些东西。以及,你如何向 LLM 描述角色扮演到它的位置?所以,你知道,只是思考这些事情,你知道,所以也许我有一些提示技能,但你知道,它只是还没有进入编程世界。

Lex: 当然。

Prim: 总有一天,总有一天我会到达那里。我看到你正在尝试不同的声音。有一个性感的,那开始是一种法语声音,然后结果发现 11 Labs 就是不能做一个法国女士。当你做多语种的法国女士时,她开始,是的,说话。

Lex: 我收听了你的一个直播,那里只有这个女士,就像。

Prim: 以一种性化的方式。

Lex: 这变得太有趣了。所以我们称她为不是法国的 Stormmy Daniels。

Prim: 哦,很好。是的。但我想回到人工智能和,和,和一些方面。所以就像,我对人工智能的不满与它的能力无关。它完全有能力,因为它应该是这样,因为那是人们编程它的方式。我真正不喜欢的是,有一群人就像,末日即将来临,人工智能就在这里。你只需要停止编程。就像,我看不出,我无法告诉你,即使是在,你提到了 Peter Levels,他发了一条推文,其中一个人的回应是,是的,在 2025 年或任何时候,任何人都 不应该获得硬技能。你应该在所有事情上依赖人工智能。就像,这些对年轻人来说是非常有害的建议。年轻人被告知,你永远不应该成为任何方面的专家。你应该总是卸载。问题是,任何有价值的人都会告诉你,人工智能虽然可以生成代码,但会在很多情况下出错。随着代码变得更大或更复杂或输入更多,它将开始在错误之间来回摇摆。所以,如果你没有那些硬技能,并且你最终不是驾驶员,那么你将会遇到一些困难,你的进步能力将直接取决于 LLM 的好坏。所以如果你相信 LLM 将在明年大大优于人类,也许这是一个很好的赌注。但如果不是,那么你的技能上限将取决于它们。甚至除此之外,还有一种整个,有一种信息问题,就像,事物实际上可以导航更大的,就像我们甚至有足够的计算能力来在实际规模上解决问题吗?即使我们有,如果每个人现在都开始使用它,我们甚至有足够的计算能力让每个人都使用它吗?有很多限制性的问题。还有隐私问题,我只是不希望人们做出立即的或看起来显而易见的选择,你不需要硬技能,你不需要这些东西,我们的生活已经,我们只需要创造性地思考。就像,不,我不这么认为。我认为这些硬技能将在相当长的一段时间内存在,即使人工智能有了巨大的改进,你仍然需要定期介入,在相当长的一段时间内,据我所知。

Prim: 但我也认为,除此之外,仅仅是获得硬技能,或者,无论这意味着从头开始编程,例如在编程的背景下,这将使你更擅长引导人工智能。不仅仅是纠正人工智能,而是引导人工智能。我认为有某种,如果你知道计算机是如何工作的,你就可以更好地编程 Python。这可能违反直觉,但你可以,如果你知道低级抽象,就像对它有一些直觉,你可以更好地引导高级抽象。是的,这似乎就是这样。当然,除非人工智能变得真正超级智能,比人类高出许多个等级,但在短期内这是非常不可能的,从长远来看,随着它变得越来越好,能够引导,驾驭改进的浪潮仍然是好的。

Prim: 是的,我非常支持这一点。所以很多人给我写信,我认为很多开发人员,程序员真的担心他们在人工智能系统快速改进的背景下,他们的职业的未来。所以你认为人工智能最终会取代程序员吗?

Prim: 这个短语的困难部分是你使用了“最终”这个词。是的。意思是,我认为在 5 年、10 年、100 年内?那是什么,那个术语实际上是什么意思?我认为在某个时候,如果我们能够扩展,如果一切都以目前的速度继续改进,确实会有一个点,编程作为一项硬技能变得不必要,对吧?在未来的某个时候,是的。我不知道那个点是什么样子的。我不知道它什么时候会发生。我甚至不试图对它做出预测,但仍然有一些,就像飞跃和界限,我们需要做的,仅仅是,我的意思是,即使只是社会上,有很多公司甚至不允许你使用人工智能,对吧?我的意思是,只是存在一些实际问题。所以这是一个我尽量不直接回答的问题。如果人类继续存在,并且一切都朝着好的、积极的方向继续发展,那么总有一天,由于庞大的计算系统,很多技能都会消失。所以,是的,我会给你这一点。但这就像,如果,我不认为这与近期有任何关系。到目前为止,没有任何计算机的改进没有导致更多的就业机会。

Prim: 是的,绝对。我们应该说,我认为这取决于你如何定义编程,因为,你知道,当社区从汇编转向 C,从 C 转向,我不知道,Python 和 JavaScript,这是一种进化,对于很多习惯于用低级语言编程的人来说,这真的很痛苦。所以将会有一个持续的进化,也许这意味着有了人工智能,将会越来越多地向自然语言进化,作为工具链的一部分,就像能够学习如何编写适当的提示。是的,那可能,你知道,因为自然语言仍然是一种语言,从长远来看,有可能很大一部分编程是自然语言。可能仍然会有一些百分比,只是不是,那将是非常结构化的语言。现在,我不认为我们已经接近自然语言成为可能,因为它是模糊的。我认为我们最终会看到的是,当人们非常努力地推动这一点时,你会看到某种伪语言,这将是人工智能的语言,你用它来提示,这将不那么模糊。人们不断地朝着更不模糊的状态努力。在那个时候,你只是在编程。你只是在编程,又一次进化成一种更高阶的语言。也许这是一个未来,人们将拥有一种更简洁的语言。我只是不确定它还能变得多简洁。嗯,是的,我的意思是,我所看到的是,如果你说自然语言可以用于流水线,你只是让更多的人可以成为程序员,这意味着将会有更多的软件被创建,这意味着将会有更多的软件需要维护,这只是变成了一个真正的滚雪球效应。但是,你知道,有些人,只是程序员,他们担心自己的工作。

Lex: 不是完全取代,但也许是程序员意味着什么的快速演变。就像你提到的,如果自然语言成为一种你可以交流的方式,你可以编程,这意味着可以从事编程工作的人群会迅速变化。所以他们真的很担心,在某种程度上,对吧?因为无论我们多么想说人工智能有多好,总会有一个点,存在一个错误,存在一个大型软件,为了描述变化,需要大量的描述,以至于对于某人来说,直接写出来要快得多或容易得多。肯定存在一种平衡。这不像一个完美的权衡。所以我不,我认为人们需要停止担心,并思考如何整合它,并尝试,向自己证明。他们真的让自己变得无关紧要了吗?如果你真的让自己变得无关紧要,我会挑战你,你只是在做一些稍微复杂一点的事情,无法自动化。就像,如果你只是从后端到前端编写简单的 CRUD 应用程序,以及简单的表格显示,是的,也许我们只是不能完全自动化这一点。现在我们有了一些东西可以做得更好一点。所以现在这被自动化了。但那不是真正的编程。在那一点上,这几乎就像建造乐高积木,设计已经确定了。你只需要把零件从袋子里放到正确的位置。

Lex: 是的。你有没有什么建议,一个开发人员、程序员如何才能避免人工智能可以自动化他们的情况?

Prim: 我认为你能管理的越大项目,你能构建的越大,你对堆栈的上下理解越多,你就越有价值。因为如果你了解如何在前端构建一些东西,好吧,现在你启动一些 LLM 任务,它将去对前端进行更改。好吧,当它这样做的时候,你可以去启动 CLI 工具中的一些东西。你可以去,你可以去启动其他地方的东西。当这些东西带着结果回来时,你可以审查结果,确保它是你想要的,更改它,提交它,然后去下一个。你只会变得更,你知道,正如你所说的,最终会更有效率,如果我们达到了它真正能够做到这一点的状态。我认为有一种技能,与人工智能合作。这就是为什么我有点兴奋地看着你继续尝试这样做。是的。就像我们不知道它到底适合在哪里,但感觉人工智能应该是生产力的助推器。我绝对认为它是编程乐趣的助推器。我认为有很多人,是的,这是一份工作,但它也是意义的来源,快乐的来源。就像编程很有趣。你正在创造一些很酷的东西,而且可能有很多人在使用。有一件事真的让我很沮丧。这有点进入了 Devon 类别,我想要一个关心的实习生。是的。你不能从 LLM 中得到这一点。它不关心。这意味着我不希望它只是为我制作一个显示这些图标的 UI,就像我要求的那样。我希望它关心。我希望它思考它。我希望它向我展示,然后我会说:“哦,是的,是的,这很棒。”然后我做出改变,然后过了一会儿,它会说:“实际上,你知道吗,真的重新考虑了这一点,实际上如果我们改变,你知道,它实际上会更好,它不会真正关心工艺,你知道,但当你和一个实习生或其他什么人一起工作时,他们关心。当他们分解一些东西时,他们实际上会过去说,啊,是的,这实际上有点糟糕。我会回去看看。”他们完成了这个,他们回到这里,他们让这个变得更好,对吧?他们实际上关心这件事本身。这是一种完全不同的体验,我只是希望有一些东西也能关心,想要把事情做得更好,而不仅仅是完成任务。我知道我要求太多了,这不是,你知道,现在我们进入了《银翼杀手》级别的人工智能。我只是想要一些,只是感觉我错过了这一点,就像,它会完成任务,达到它理解我提示的程度,但它只是没有,它实际上并不关心它。

Lex: 我的意思是,关心有很多方面,但其中一个微不足道的版本是一种不安分,你想不断改进。我认为人工智能非常擅长这一点。是的,我们不断地问自己,我能让这个更好吗?如果它不断这样做,它可能会把它带到一些荒谬的地方。所以实际上,知道什么时候停止也很重要。我认为开发一种你可以称之为品味的东西,就是努力工作,不断改进,直到它感觉正确。这就是了。我认为这是人工智能不擅长的。就像,是的,这就是它。我已经迭代了三次,三次就是,就是这样。我们现在到了。我认为最终,这就是人类擅长的,就像知道什么时候某件事是正确的。就像,这就是它。这是,特别是当你理解,当你在特定的行业、特定的背景、应用程序中培养出品味时,知道,这就是它。

Prim: 是的。

Lex: 这个按钮上的圆角。这正是,这很漂亮。所以只是一种美感,一种功能感和效率等等。

Prim: 是的。但那,你知道,人类可以像人工智能系统的监督一样做。

Prim: 是的,是的。你,你对 Devon 进行了抨击,充满了愤怒。

Prim: 我的意思是,首先,运营 Devon 的人非常好。我希望这一点得到理解。我对他们没有任何不满或任何类似的事情。其次,Devon 只是,它就像完整的,它就像编程的完整包。所以它会,你要给它一个任务和一个仓库,它会经历它,它会尝试理解仓库和任务,通过探索它来对仓库进行更改,然后实际上向 GitHub 提交并解释它做了什么,这样你就可以拥有,你知道,所以希望你有这个完整的离线的东西,这是人工智能部分的另一部分,我实际上非常喜欢,就像去修复这个东西,然后我可以去,不间断地修复这个东西,然后回来,然后说,好的,足够好了,合并,砰,你知道,我想要那种运行,能够完成事情。我认为理想的解决方案是,你可以开始给它一些小错误,它会去修复这些错误,你可以回到这些积压的、没人做的票据,它实际上开始处理这些积压的票据,这实际上是一种非常棒的体验。所以我喜欢这个想法,对吧?我想我们都可以同意这听起来很棒,但每次我这样做的时候,我都,我要求它做很多事情,我试着缩小问题的范围。问题越窄,它就越有可能成功。所以如果我说,只是添加一个单一的图标,当它被点击时,我希望你这样做,只是控制台点击我,就像至少给我创建一个 SVG 并放置它,所以它很好地放置。任务越窄,它就越有可能成功。有一种指定水平,你指定得太多,它就做不到。如果你指定的太少,它就会做一些奇怪的事情。所以这有点像这种非常有趣的、独特的方式,你必须玩平衡游戏。到目前为止,每次我做这些事情,我总是最终会想,天哪,你知道吗,我应该更擅长 Tailwind,然后自己写。因为我总是回去,我只是重写它。然后就像,该死的,到底是什么,我到底节省了什么?我觉得我还什么都没有节省。你知道,就像,我非常想要它。我实际上希望人工智能变得伟大,因为那样我就可以真正快速前进。我的意思是,我可以以惊人的速度前进,但我总是想,天哪,我应该自己学习 Tailwind,达到 n 度,然后快速前进。

Lex: 是的。我们还应该提到,调试,这可能很直观或违反直觉,人工智能非常糟糕。

Prim: 是的。

Lex: 就像这是最难的事情之一。它实际上让你意识到人类是多么特别,以及调试任务是多么困难。显然,对于琐碎的调试,也许你可以找到,是的,错误,但就像那是真正的编程艺术,是找到错误。

Prim: 是的。

Lex: 逻辑错误,就像,极其复杂、罕见的错误,边缘情况。人工智能可以协助,但人类,困难的错误真的需要大量的上下文,大量的经验,大量的直觉,再次,在充满不确定性的迷雾中操作,这很难。当然,人工智能也许可以创建日志并进行跟踪,并做一些加载大量数据的事情,人类无法做到这一点。但最终,这只是意味着它可以成为调试中更好的助手,而不是实际的首席调试员。

Prim: 是的,我的意思是,如果他们能做到这一点,那就太好了。我的意思是,它能做的越多越好,对吧?因为据我所知,我的意思是,纠正我在这方面错了,目前的调试状态。它真的,它查看代码,它查看错误问题。它只是试图通过文本预测来预测它最可能准确的位置,然后尝试修复那个位置。就像,它可能在这个位置。你说管理面板,它稍微偏离了,这个,这个,这个,可能是这个位置,这实际上可能是一种非常好的搜索方式,对吧?让我进行语义搜索。向我指出这是在哪里,因为也许这是一种非常棒的导航大型代码库的方式,智能搜索,而不是试图让它做这件事。要求它帮助你做这件事,就像确定问题一样。我,我知道我,我希望看到更多这样的东西,因为对我来说,这是令人兴奋的部分。有一个非常棒的文章,作者是 curl 的创建者或维护者。它是 LLM 中的 I 代表智能,他编写和维护 curl。Curl 一直被安全问题淹没,所有这些。这一切都来自 LLM,就像:“哦,我发现了一个安全漏洞。这是安全漏洞。”详细说明了代码中的内容。他就像:“好吧,你是如何重现的?给我看看。”因为如果你看看这里的代码,这实际上是一个不可能的情况,你说的。就像,在这几个圈子里,现在安全正被这些 LLM 提交的回复所淹没,因为它们实际上无法分析代码,除了基本的文本预测。哦,这是一个 stir copy。Stir copy 通常被称为,你知道,等等等等,砰,给你。这就是错误。就像,不,这实际上是不可能的,因为之前的 if 语句会在字符串太长时离开函数。所以我们甚至不会遇到这种情况。你所说的是不可能的。所以调试非常有趣。

Lex: 是的。我的意思是,对我来说,这将是巨大的,如果它能解决这个问题,不是解决这个问题,而是改进这一点,那将是巨大的,无论是代理还是只是集成到 IDE 中的 LLM。

Prim: 我认为有一个完整的想法,我称之为拒绝关注。我认为有一个完整的攻击向量将会发生,使用 LLM 来生成虚假的错误报告,虚假的这些东西,实际上是为了,有效地,让开源维护者士气低落和受到伤害。Polykill 是第一个遇到这种经历的错误,这是一种拒绝关注,一个活跃的恶意维护者只是不断地骚扰所有者,然后一个白骑士出现并提出购买,你知道,从他们那里购买一些东西,当他们购买它时,他们实际上用一段恶意的代码替换了它,然后使用它。所以有一个完整的安全世界正在围绕着以非常激进的形式使用这些东西而发展。

Lex: 我的意思是,这是一个我们正在进入的迷人世界,但我确实同意你的观点,人类开发人员将成为这个世界的重要组成部分,这不是工作可能会演变,但它会存在。

Prim: 如果我可以,我没有真正看过这个页面,我想和你一起看看。这又是 Stack Overflow,我最喜欢的 Stack Overflow 开发者调查,谈论他们对人工智能系统的看法和使用情况。

Prim: 61% 的人说,是的,他们使用它,25% 的人说,不,不打算使用。所以大多数人使用它,大多数人对它有有利的看法。有利或非常有利或无所谓。这看起来超过了 90%。

Prim: 令人惊讶的是,有那么多人根本没有计划研究人工智能。就像我不喜欢用它来编码一样,我希望有一天我能更多地使用它。对吧?所以就像,对我来说,我总是在寻找下一个事物。我很惊讶人们如此,我想是顽固。显然,第二个,人工智能工具的情绪,肯定只有那些对第一个的上面两个回答“是”的用户才会回答,考虑到受访者的数量。我想知道“不”和“不打算”是否是那些尝试过并迅速建立起直觉的人,就像这真的很糟糕。

Prim: 是的。所以我们,你知道,我们可能是经验丰富的程序员。他们会说:“不,这并没有让我更有效率。”81% 的人同意,提高生产力是开发人员为人工智能确定的最大好处。好的。所以这是,好处是什么?提高生产力,加快学习速度,提高效率,提高编码的准确性,使工作量更易于管理,改善合作。乐趣在哪里?

Prim: 增加了乐趣。我会说这是我的第一位。也许学习速度是乐趣的一个子类别,对吧?如果你能够学到更多,并且能够变得更好,对我来说,这听起来不错。

Prim: 我不知道。这是不同的,因为就像生产力也是乐趣的一部分。我,我的时间使用副驾驶 c,肯定有一段时间会有惊奇感,就像这太神奇了,它能做到这一点。是的。

Prim: 我对它能做的事情印象深刻,即使我不使用它。就像,我们有这样的东西,甚至可以接近这一点,这对我来说是惊人的。就人工智能工具的准确性而言,只有 2.7% 的人高度信任。

Lex: 我会说,你必须非常缺乏经验才会认为你应该高度信任人工智能的输出。你应该非常怀疑。

Prim: 我不知道我站在哪里。可能有点不信任。高度不信任似乎有点激进。

Prim: 它确实看起来有点,你肯定应该处于有点,就像你应该始终假设有些东西是错误的,然后从那里你可以去挑战它,然后,关于人工智能是否可以处理复杂任务的估计,大多数人不认为它可以处理复杂的任务。

Prim: 我的意思是,人们似乎对它能处理什么和不能处理什么有一个很好的认识。我会争辩说,人们对编程中的复杂性没有很好的把握。

Lex: 是的。

Prim: 如果你说给我写一个快速排序,有些人认为快速排序非常复杂。嗯。但我会争辩说,这实际上可能是你可以要求人工智能做的最简单的事情,对吧?那些有很好的文档记录的东西。它会做得很好。

Lex: 是的,可能,高层设计决策,人们现在甚至不使用人工智能来做这些,我想代理应该做那种事情。这可能是最困难的事情,或者说最有影响力的事情。

Prim: 最困难的事情是发现错误。

Lex: 是的。人工智能工具明年。编写代码等等。现在,这个,道德部分。我实际上非常好奇你的看法。

Prim: 是的。

Lex: 在道德方面。我们会看到欧洲制定一些新的法规吗?

Prim: 天哪。

Lex: 艺术家呢?那些真的,因为编码和艺术家之间的区别非常非常简单。如果你给我一张纸,我可以给你画一只螃蟹。嗯。你会说,那是一只螃蟹。但你不能用编码做这件事。就像,它是对的,或者它是错的。对于什么是螃蟹,没有不同的解释。就像,不,那个语句只是,你不能做出那个语句,你知道。它所能表达的东西非常有限。我可以看到为什么艺术家,就像,这是一个非常令人沮丧的观点。然后谁为所有这些获得奖励?你知道,显然。然后还有整个关于编码和许可证的问题。你认为他们抓取并用作训练数据的有多少是 GPL 许可证?GPL 强制开源。

Lex: 是的。

Prim: 你要怎么处理这个问题?这意味着你的模型可能需要开源。就像 open AI 可能不得不被迫开放。

Lex: 是的。

Prim: 他们以前的所有东西,如果有任何 GPL 的暗示。

Lex: 是的。

Prim: 那是一个奇怪的。那是一个非常奇怪的,因为我认为大多数这些模型都在训练他们实际上没有权利训练的数据上。

Prim: 是的,有很多问题。这是一个没有说出口的,这是一个真正的狂野西部,因为就像你可以想象,如果,你知道,我总是用欧洲,因为他们往往有最保护消费者的法律。你可以想象,如果一项法律规定,如果你使用了一个产生了 GPL 潜在代码的模型,你必须开源,会发生什么。有多少公司会说:“哦,天哪。”对吧?就像你有一年的时间来删除所有由模型生成的、可能是 GPL 来源的代码。就像,你可以想象将会发生的恐慌。这将是一场代码大甩卖。

Lex: 所以,鉴于所有这些,你能给年轻的程序员什么建议,就像,这是 Reddit 上的另一个问题,Reddit 的无限智慧。

Prim: 一个 20 岁出头的人应该做什么才能在科技行业取得进步?这是一个有趣的问题的补充,通过这样做,这是否会走在别人的道路上?

Prim: 我将尝试尽我所能回答这个问题,我认为如果你正在进入科技世界,我花了很长时间才学到的最难的建议之一是,我变得迷恋和上瘾,显然我们谈到了这一点,编程时间太长了,忘记了花时间陪伴我的妻子,我的朋友,所有这些。就像完全把自己包裹在一项活动中。我认为,尽管它造就了我,但这可能是一种不健康的活动,可能不是一个明智的活动。所以我能给出的最好的建议是,你必须培养对它的热爱、技能、渴望,无论这只是使用人工智能代理、自己编程、使用 Zig 还是编程 JavaScript,无论你知道,那种味道会让你每天都回来,在健身房进行练习,如果你愿意的话,对于编程来说,但也要知道如何重视有价值的东西,不要迷失在酱汁中,你只是如此执着于制造下一个最伟大的创业公司,以至于你牺牲了自己的健康,你牺牲了你的关系,或者更糟糕的是,你牺牲了自己的道德,采取某些你可能不应该采取的捷径,在生活中,为了能够实现这些事情,因为你知道,我相信有数百个恐怖故事,你可以听到人们肯定为了金钱上的成功而抄近路。

Lex: 是的,金手铐,舒适可以摧毁灵魂,在某种意义上。

Prim: 是的。所以这,记住这一点非常重要。但你会,你知道,有年轻人正在考虑,我是否还想成为一名程序员?看起来人工智能在编程方面越来越好。

Prim: 如果他们试图做出这个决定,你仍然会说:“是的,如果这是让你充满快乐的东西。”我仍然希望我的孩子们学习如何编程。如果我可以回答这个问题,如果这足以回答这个问题,因为我的孩子们比试图学习如何编程的年轻人小十岁。所以如果我想要,你知道,我希望我的孩子能够在 Roblox 中运行和构建他想要的任何东西。我向他展示了 Chad Jippity,然后说:“好吧,让我们问问题。我们如何做到这一点?”对他来说,做所有这些事情仍然非常困惑。所以就像,“让我们这样做。我希望他学习并变得有效。”也许有一天他必须扔掉所有这些技能,在 20 年后。但我敢打赌,无论他扔掉了什么技能,或者他必须扔掉的任何硬技能,一个我们都没有想到的全新领域,就像如果你在 70 年代问某人关于社交网络的问题,他们会说:“你在说什么?”未来将会存在一些非常不同、疯狂和令人兴奋的事情。也许是在虚拟现实中。也许我们所有人最终都只会制作电子游戏。只是为了所有人的娱乐。《美丽新世界》 我们的世界。

Lex: 好吧,我认为,我认为娱乐是对电子游戏可能是什么的一种微不足道的看法。嗯。这就像,人生的目的是什么?我的意思是,它可能是一个非常充实的电子游戏。它不一定是多巴胺的刺激。它可以是教育性的。它可以是可怕的。它可以是具有挑战性的,迫使一种进化。冒险的飞跃,它构成了一个充实的生活。那可能是电子游戏。谁知道呢?特别是在虚拟现实中。我倾向于,这是另一件事,我玩很多电子游戏。我认为,我认为有很多空间可以让电子游戏变得非常充实。有很多空间可以做到这一点。

Prim: 我不知道你玩很多电子游戏,因为当我专门问你,我应该玩《魔兽世界》还是做 Advent of Code 时,你说 Advent of Code。

Prim: 哦,好吧,那可能意味着我从未玩过《魔兽世界》,因为有些游戏我避免,顺便说一句,我认为《堡垒之夜》就是其中之一,因为我担心会变得太上瘾了。

Lex: 是的。是的。所以有些游戏我知道我不会超级上瘾。例如,我害怕《文明》。我从未玩过 Siv 游戏,因为我担心,我担心,我内心的黑暗面,因为有些游戏真的会让你着迷。我更擅长,这就是为什么我玩《天际》,我可以适度地玩这些游戏,它们可以成为终生的伴侣,而不是成瘾,就像日出时分,你不知道发生了什么。我发现自己赤身裸体地躺在垃圾箱后面,不知道发生了什么。嗯,是的,这就是我选择电子游戏的方式。

Prim: 你不是第一个专门指出《文明》的人。是的,我有多个人,也在科技领域身居高位,他们说:“《文明》是我的垮台。如果我靠近那个游戏,我就完了。”是的。所以我甚至从未玩过这款游戏。现在这让我觉得:“伙计,我必须试试这个。这听起来很疯狂。”

Lex: 是的,新的一款实际上应该非常非常好。

Prim: 我们在说什么?

Lex: 是的。对于那个年轻的开发者来说,有没有你可以给出建议的工作轨迹?所以你从 Schedulicity 开始。

Prim: 是的,那是我的第一份全职工作,之前我有政府合同,那不是全职的。它是用 C 编写的,很有趣,然后构建我自己的创业公司相当长的时间。所以如果你把其中任何一个算作全职,那么那些就是全职。但 schedule list 是正式的。

Lex: 所以在不同的公司之间跳槽,试图找出什么能给你带来快乐,这有什么价值吗?

Prim: 我认为这其中有很多,因为,不是你得到的每一份工作都会很棒。现在你的第一份工作可能会让你认为你讨厌编程。这发生过。我在一家地方实习过。我知道我一直在用更多的事情让你惊讶,我过去做过的事情。在一家叫做 total information management system 的地方实习。还记得我几个小时前谈到的关于医疗保健和工业运输以及所有这些的事情吗?那是一家 C# 商店。这太糟糕了,以至于在那之后,我转专业到机械工程,在大学里读了一个学期。我想,好的,实际上我喜欢计算机科学,我讨厌编程。所以,你知道,仅仅因为你有一份工作,并不意味着它会是,会是那个。事情是这样的,这是最好的部分。如果你找到一份工作,你喜欢它,你想做它,而且它很令人兴奋,你不需要改变,对吧?我认为很多人都像:“哦,我必须找到下一件事。我在这里已经两年了。”就像有一种你必须四处走动的思维定势。我不认为你必须四处走动。我认为这不会损害你的职业生涯,因为如果有什么的话,你会获得更多的责任,你将能够更有权威地说话,下次你面试时,你会更有,就像,哦,是的,我必须得到这些人和这些人的帮助才能做所有这些事情。就像,如果你在一个地方待得更久,你可以更有权威地说话。这在我看来只有好处。只有当你因为害怕或不想,你知道,你已经有了一些适合你的东西,你只是永远不想改变,你只是想,我可以进去,完全不用动脑筋,我认为如果你几年不用动脑筋,你会发现自己,这就像唯一的真正危险。你最终一无所有。

Lex: 是的。特别是当你年轻的时候,这就是重点。冒险,跳到下一个事物,下一个事物。不是为了钱,而是为了个人的,快乐。

Prim: 快乐。

Lex: 是的。金钱可以在最后出现。这是最好的部分,当你不是为了金钱而奋斗时, 金钱有时就会出现。是的,其中一些让生活值得过的,是你一起工作的人。就像一个好的团队。其中一些,不是要泛泛而谈,但是你知道,文化很重要。是什么让你快乐。例如,我刚刚,不会点名,但是你知道,有些公司,每个人都是朝九晚五的,即使工作很令人兴奋,他们也没有那么努力工作。我会说,我是那些喜欢全力以赴的人之一,喜欢被那些超级热情的人包围。公平地说,他们中的许多人没有家庭,或者没有,这是一个迷人的选择。我真的不想贬低任何选择,比如工作生活平衡与否。但我认为两者都是美丽的道路,如果你真的从你的工作中获得了很多价值,快乐,至少在你生命中的某个阶段全力以赴,是一件美好的事情。只是全力以赴,充满激情,牺牲很多社交生活,所有这些。我不知道,这也可能很美。其中会有一些非常非常令人兴奋的东西,在某种意义上,特别是如果你正在构建自己的东西。我可以想象那将是非常令人兴奋的。就像,如果我是亚马逊的杰夫·贝佐斯,正在构建亚马逊,可以想象那些早年可能非常艰难,他投入的时间可能非常非常多。但我会说,在我们的文化中有一种独特的方面,我们把它作为家庭或工作之间的平等权衡。就像,哦,你不,你做或你不必生孩子。我唯一真正对此有异议的是,你永远不会知道你爱的能力,直到你有了孩子。就像你,你就是不知道。有些人会说:“哦,是的,但我喜欢我的狗。”就像,我也爱我的狗。然后我有了孩子,现在我的狗,它们还不错。就像我喜欢它们。是的,我可以回家,抚摸 Indie,然后我就像,Indie。然后我就像:“好吧,再见,Indie。”对吧?就像,我甚至无法描述两者之间的区别。

Lex: 是的。

Prim: 因为它们不是,它们甚至不一样。所以这非常,你所做的权衡是,没有人能告诉你那是什么感觉,因为现在有一个现实,我相信这与我的妻子也是一样的,如果现在我们得到消息说,你有一个医疗程序,如果我们这样做,你会死,但你的孩子会活下来。我的灵魂中没有一个问题,我不会这样做,对吧?如果我能看到未来,如果我现在必须死,知道我的孩子会过上更好的生活,他们会更快乐,他们会更满足,所有这些,我保证你,无论是我的妻子还是我,每次都会选择这样做。就像,你永远无法对大多数事情说这样的话。人们会开玩笑地说,直到它真正发生。但是,就像,有了孩子,你就有这种凶猛,我可以因为想到有人虚构地推倒我的孩子而大汗淋漓,就像,你知道,真正的肾上腺素反应在我的身体中流动。所以就像,这是一个如此不同的世界,这很难解释。你永远无法说服我,当我年轻的时候,这会是这么大的事情。

Lex: 是的,是的,是的。

Prim: 我以为我知道。我不知道。

Lex: 但最重要的是,我认识的一些最成功的人,我认识的一些最高效的人都有孩子。所以,就像,我不知道这甚至是不是一种权衡,就像你感觉到的那种爱,它似乎是一种催化剂,确保你拥有更少的时间,但你会更好地利用这段时间来提高效率。

Prim: 我会争辩说,这绝对改变了我的很多生活,以及我处理问题的方式,以及一切,以一种非常不同的方式。


Reddit 问题 (5:03:03)

Lex: 让我问一些来自 Reddit 的随机问题。在 1 到 10 的范围内,你有多讨厌微软创造过的每一个产品?为什么是 10?

Prim: 好的,我认为我们已经讨论过了。

Lex: 我们还没有正式讨论过。

Prim: 在那里,你可以开始了。

Lex: 好吧,继续。继续。

Prim: 好的。我唯一要说的是,我不喜欢微软假装自己是好人。当他们真正想要的是让你沉迷于他们的产品,让你尽可能多地使用他们的产品,这样他们就可以从你那里榨取尽可能多的钱。

Lex: 好吧,在这个世界上,真的有好人吗?

Prim: 这是一个很好的观点。我会争辩说 Neovim 是一个好人。他们没有办法赚钱。Justin Keys 是仁慈的独裁者,他深入思考产品,并试图让它变得最好。而像微软这样的东西,他们制作 VS Code 作为亏本产品,Copilot 可能正在亏本运营。这些东西都在让你陷入 GitHub 远程工作区、CI、cop,你已经成为这个被困住的永久的人。如果价格上涨,转换成本太高,在某个时候,你将永远无法转换。这就是我唯一的恐惧,微软曾经被指控 eee,感觉他们又在 eee 了。

Lex: 我担心批评一件好事,因为你可以看到做那件好事的动机,就像谷歌创建所有这些不赚钱的服务,比如 Gmail,例如。你可以有点,有点愤世嫉俗地说,他们这样做只是为了把你绑在一个生态系统中,这样他们就可以,基本上,让你终身受用。但他们创造了 Gmail 也很棒。

Prim: 是的。

Lex: 他们创造了一个令人难以置信的产品,对吧?所以我可以在这一点上支持你。这是一个很好的产品。VS Code 是一个很好的产品。

Prim: 是的。

Lex: 不要这样说。

Prim: 但是很好。你知道,他们做得很好。

Lex: 所以,你知道,其中一些公司背后会有经济动机。顺便说一句,我为微软辩护,不是辩护,而是说积极的事情,只是为了我可以和 Prime 说话。

Prim: 我喜欢那样,顺便说一句。

Lex: Linux 是我的初恋和最后的爱。它绝对,Linux 和开源的精神是一件美好的事情。所以,我确实认为,当你有这些大型公司时,即使他们试图做好事,通常利润的需要就会占上风,他们可以,他们可以腐蚀自己。微软有很长的这样做的历史。

Prim: 是的。

Lex: 也就是说,他们已经做了,你知道,你可以说出于愤世嫉俗的原因,因为他们想在开发者中看起来像好人,但他们做了很多来支持开源。就像 Meta 一样。Meta 做了,Meta 做了很多令人难以置信的事情。

Prim: 是的。

Lex: 为了支持开源。你可以说,实际上对于那个,我甚至,我不知道我是否能提出一个财务或愤世嫉俗的理由,为什么 Meta 正在开源 Llama 和这些。

Prim: 是的,那个令人困惑。

Lex: 这似乎很好,也许是为了招聘,但,不,我认为这是合法的,只是一个道德上非常强大的决定。有时这些公司,因为他们有很多现金,可以做出正确的,做正确的事情。

Prim: 是的。这是一种非常积极的看待它的方式,我认为这非常好。但我们应该始终保持怀疑。

Lex: 是的。

Prim: 我的意思是,因为归根结底,公司,它们不好也不坏,对吧?它们在道德上是中立的。

Lex: 好吧,是经营它们的人,那些人做出的决定才是真正的好坏所在。

Prim: 另一个问题,问他是否知道如何给奶牛挤奶。我已经问过了。答案是,哦,不。你不知道?

Prim: 我从未给奶牛挤过奶。

Lex: 从未给奶牛挤过奶。

Prim: 差点被牛杀死,但从未给奶牛挤过奶。

Lex: 你骑过公牛吗?

Prim: 没有。

Lex: 好吧。为什么是男模特?

Prim: 好的。所以我可以解释一下。嗯。我会说一些像“我真的不喜欢紫色,因为紫色让我心烦意乱”这样的话。我不知道,只是一些非常温和的东西。但紧接着就会有人说:“但你为什么不喜欢紫色?”就像德里克·祖兰德一样。就像,我做了五分钟的演讲,然后下一个问题是:“但说真的,为什么呢?”就像,为什么是男模特?

Lex: 是的。所以这是 Zoolander 的参考,当有一个很长的解释时,为什么是男模特?他同意了,然后忘记了。嗯,有人写道,请感谢他,你,因为他永恒的积极性,并代表我给他一个大大的拥抱。所以,我不会在镜头前给你一个大大的拥抱,因为我担心我会勃起,那将是非常不幸的。

Prim: 嘿,我们不要再把 dicks 带进来了。

Lex: 好的。这是我最喜欢的数据结构。就像我说的,我喜欢 dicks。

Prim: 各种各样的 dicks。

Lex: 有序的 dicks。无序的,我知道该怎么做。

Prim: 我不歧视。

Lex: 嗯,那实际上是一个有趣的玩笑。但所以,在 Stack Overflow 上,你可以问任何你想问的问题。我决定有一天在 Stack Overflow 上精心设计一个问题,上面写着如何测量你的 dicts。然后我继续大干一场,解释所有不同的事情,比如,好吧,字符串和引用的成本呢?你知道,当你真正双手握住你的 dict 并真正去追求它时,就像,很难,真的加入了一些影射。Stack Overflow 团队删除了这个问题,然后有人手写了一封电子邮件给我,解释了他们为什么删除这个问题,并称赞我的问题是多么彻底和周到,只是为了穿插影射,整个团队都印象深刻,但这是不合适的,必须删除,不要再这样做了,否则我们会封禁你的账户。所以这是一个非常有趣的时刻。所以我想:“哦,这很有趣。”你知道,这发生了。那是大约六年前。去年我在一个会议上,有一个人戴着 Stack Overflow 的名牌。我就像:“哦,你在 Stack Overflow 工作。”他说:“哦,是的,我做。”我说:“我有一个故事要告诉你。”他说:“不,等等,你是那个 dict 家伙吗?”就像,这是他唯一的问题。我就像:“我们走吧。”我甚至没有说任何关于我的事情,他已经立刻知道我是那个 dict 家伙。

Lex: 我应该说,严肃地说,我认为我进行过很多对话,有点像在 Python 世界里,我不得不提到这个数据结构的名称,每次都让我感到不舒服。你知道,这是一个非常不幸的单词缩写,dict。就像当我去五金店要求可乐时,总有一个好心的老太太,我问她去哪里找,这非常不舒服。我尽量把它的发音说得尽可能硬。

Prim: 真的把那个 L 发出来,就像呼叫一样。

Lex: 为了清楚起见,并尽量避免眼神交流。

Prim: 你说上帝是你生活的重要组成部分。你能多谈谈这一点吗?上帝是谁?他在你的生活中扮演了什么角色?

Prim: 所以我,你知道,我确实谈到了那个重要的夜晚,由于某种原因,我获得了我的良知,那一刻。所以显然对我来说,我从小就过着一种生活,我可能会认为自己是一个功能性无神论者。我去过几次教堂,我不记得作为一个家庭以任何形式去教堂。所以没有那种超级强烈的联系或任何类似的东西。就像几乎任何一个在 90 年代在美国长大的人一样,你在生活中的某个时刻都会与教堂有一些影响或交叉。那只是一种非常正常的事情,我会说。所以当那件事发生时,对我来说是一个相当大的惊喜。我没有,你知道,我并不一定朝着那个方向前进,或者决定做任何那些事情。所以对我来说,这显然是我整个人生的转折点。我会有,我不能说如果没有那件事,我会成为什么样的人。我只能告诉你,我不会有动力,我可能不会完成大学学业,我不会找到我的妻子或生孩子,我不知道如何重视人们,我不认为没有整个那件事,我对人们的价值会非常非常小,因为我会继续以我当时的方式物化。然后可能最重要的事情是,有一节经文,我甚至不知道它在哪里,它实际上说,我们爱是因为他先爱了我们。所以对我来说,就像,我不认为我会过上幸福的生活,没有这个。我甚至不知道这对我来说是一个选择。我从来没有真正,你知道,这对我来说是一个非常艰难的几年。我非常非常悲伤,只是总是不断地寻找一些东西来满足我。所以就像,我没有信心,我没有快乐,我是,我感到非常悲伤。所以那就像那一刻,我第一次,我突然觉得我不必达到一个标准。就像,我的标准已经支付了。就像一切都已经,这就是免费的礼物,这就是交换。所以就像,我第一次不必成为那个酷的人。我不必拥有所有正确的话。我不必感到,你知道,我不必进行性征服来找到验证。我不必做任何这些事情。这是非常解放的。

Prim: 所以上帝是谁?这更像是一个教义问答问题。人是什么?上帝是谁?对吧?这些都是更难的问题。我相信,每当你试图深入描述上帝是谁时,你通常会陷入基督教的异端。

Lex: 嗯。

Prim: 但对你来说,他给了你一个快乐的机会。

Prim: 是的,他给了我一个机会,不仅仅是快乐,而且还让我在某种意义上第一次感到被原谅,并且能够原谅伤害我的人。很长一段时间以来,我,我带着这种重量,来自高中时代我讨厌的事情和所有这些东西。通过那次经历,我只是写下了每个人的名字,并实际上把它们和我一起保存了很长时间。这是我原谅的人的名单。我读了几遍,因为就像我不能让自己生气或被那种东西吞噬,因为就像仇恨是如此粘稠,对吧?它会持续一生。真的只有一种治疗仇恨的方法,那就是宽恕。就像我只是不认为没有它你可以摆脱它。所以我只是选择原谅这些人,然后继续前进。这真的让我解脱了。如果我没有先亲身经历过,我永远不会想到宽恕是实现这种改变的一种手段。

Lex: 爱在人类状况中的作用是什么?转向哲学,爱在你的生活中扮演了什么角色?

Prim: 很明显,每个人都想要或渴望爱。我的妻子最近说服我和她一起看《爱是盲目的》一次,你看这个节目,如果你不熟悉它,它只是感觉像一场灾难性的实验,只是为了引起疯狂的拍摄。但不管怎样,这个想法是,如果你只是看不到某人,你就可以爱上某人,并想在 10 天或很短的时间后与他们结婚。你最终看到的真的是所有这些只是渴望真爱的人。总有一部分,我总是告诉我妻子,这就像爱角斗士。我们正在观看人们为戏剧而战,他们真正想要的是爱,就像他们在为爱而战至死。这几乎是一种悲伤的观看方式。所以,我认为这很难说,就像,它在人类体验中的作用是什么,因为我不认为,我认为这只是我们所有人都自然而然地不仅想要而且需要的东西。我不认为你真的可以进步,当我说“爱”这个词时,我想稍微缩小一下范围。我不是指希腊语中的 eros,性爱。我认为父母之爱和友谊之爱非常重要。我认为 agape,像上帝的爱,也非常重要。Agape 爱是优于它们所有的一种,但显然不同,而且你知道,与父母之爱和所有这些是共同的。所以你需要这种混合。每一种都不同,出于不同的原因,以及它被应用在哪里。所以我不认为,我只是看不到一个没有它作为非常基础的组成部分的世界,是好的。因为,你知道,再次,不是,你知道,我来这里不是为了引用任何类型的经文,但它说,不是钉子把他们挂在那里,而是爱。这就是这些事情发生的原因。所以,如果宽恕是偿还仇恨的必要条件,那么爱必须是宽恕的动机。

Lex: 是的,那是生活的悲惨方面。我认为我们都有,我们内心深处都有一种深深的孤独感,一种渴望,渴望成为这个更大事物的一部分。那种渴望是,是一种爱,它有很多名字。但,是的,爱的方面是生活的美丽方面。悲剧是孤独和不幸的痛苦,这是生活的基本组成部分,而美丽的方面是爱。

Prim: 是的。

Lex: 我认为这是一个很好的时机来提到更多的 Reddit。永恒的积极性和爱的地方。有人写道,请感谢他,你,因为你永恒的积极性,并代表我给他一个大大的拥抱。所以,我不会在镜头前给你一个大大的拥抱,因为我担心我会勃起,那将是非常不幸的。

Prim: 嘿,我们不要再把 dicks 带进来了。

Lex: 好吧。这是我最喜欢的数据结构。就像我说的,我喜欢 dicks。各种各样的 dicks。有序的 dicks。无序的。我知道该怎么做。我不歧视。嗯,但是,要说的是,非常感谢你。对我来说,就像我经常听你的,我真的很享受。我自己经历了很多事情,只是你的积极性,即使你正在构建最愚蠢的东西,它只是,积极性从你身上散发出来,你激励我成为一个好人。你激励我构建东西。所以谢谢你。我相信还有很多很多人出于同样的原因听你说话。所以,感谢你的积极性,感谢你成为许多人生活中的光明,感谢你今天与我交谈,兄弟。

Prim: 天哪,这非常非常友善。我真的很感激所有这些非常好的话,即使是来自 Reddit。这非常令人惊讶,但谢谢你。我的意思是,我知道,你知道,有很多人的生活,我相信你已经收到了信件,这些信件已经从你所说的和所做的事情中改变了。所以这是做这个副业的最好的部分之一,你有机会可能改善某人的生活。你知道,你可以采访很多人。有很多人听了 Chris Latner 的话,看到了他对 Swift 的兴奋,可能去学习了 Swift,然后得到了非常棒的工作,这都可以追溯到你和那次采访。所以,你知道,这些都是令人惊奇的事情。所以,同样,你也做了很多,很多好事。

Lex: 回敬你,兄弟。感谢你今天与我交谈。

Prim: 感谢收听这次与 Michael Pollson,又名 thePrimagen 的对话。为了支持这个播客,请查看我们在描述中的赞助商。现在,让我用保罗·科埃略的一些话来结束你们。当我们努力变得比我们更好时,我们周围的一切也会变得更好。感谢收听,希望下次再见。