We're sunsetting PodQuest on 2025-07-28. Thank you for your support!
Export Podcast Subscriptions
cover of episode #433 Dev in the Arena

#433 Dev in the Arena

2025/5/26
logo of podcast Python Bytes

Python Bytes

AI Deep Dive AI Chapters Transcript
People
B
Brian Ocken
M
Michael Kennedy
Topics
Michael Kennedy: Git Flight Rules就像是宇航员在太空任务中遇到问题时的操作手册,现在程序员在使用Git时遇到问题也可以参考它。这个指南涵盖了各种常见Git操作,例如创建和克隆仓库、撤销更改、变基和合并等。它能帮助开发者在遇到Git问题时快速找到解决方案,避免不必要的麻烦。我个人觉得这个指南对于那些经常与Git打交道,但又不是Git专家的开发者来说,绝对是一个福音。

Deep Dive

Chapters
This chapter introduces the concept of "Git Flight Rules," a guide for programmers facing Git-related issues. It highlights the resource's practical approach to resolving common Git problems, offering step-by-step solutions for various scenarios.
  • Git Flight Rules is a guide for resolving Git issues.
  • It provides step-by-step solutions for common Git operations.
  • Covers scenarios like merge conflicts, pushing to different origins, and handling submodules.

Shownotes Transcript

您好,欢迎收听 Python Bytes,我们将直接为您带来 Python 新闻和头条新闻。这是第 433 集,录制于 2025 年 5 月 26 日。我是 Brian Ocken。我是 Michael Kennedy。本期节目由我们赞助。因此,请查看 TalkPythonTraining 和 PythonTest.com 上的课程,学习 PyTest 技巧。并且

还要感谢 Patreon 的支持者们。你们真棒。如果您想与我们联系,请查看节目说明中 Michael、我本人以及该节目的 Blue Sky 和 Mastodon(Fostodon)链接。

如果您想收听节目,感谢您收听。如果您想现场观看,请查看 pythonbytes.fm/live,通常是周一上午 10 点,即使我们忘记了今天是假日。但是,是的。

此外,如果您想收听本节目,并且您想查看我们正在讨论的一些内容,但您记不住链接,请在 pythonbytes.fm 上注册我们的时事通讯。在那里很容易找到链接。您每周都会收到一封电子邮件,其中包含我们讨论的所有链接和所有内容,以及其他帮助您快速上手的内容(如果您愿意的话)。所以,是的。

太棒了。Michael,我们从哪里开始?让我们从回顾开始,好吗?好的。那么,你看过电影《搏击俱乐部》吗?布拉德·皮特,爱德华·诺顿。是的。这是一部经典的邪典电影,对吧?这绝对是一部……搏击俱乐部的第一条规则。不要谈论搏击俱乐部。搏击俱乐部的第一条规则。不要谈论搏击俱乐部。搏击俱乐部的第二条规则。你不能谈论搏击俱乐部。好的。

那么我们在做什么?我们在谈论什么?我为什么要说话?因为接下来是 get free。

飞行规则。搏击规则。我想称它们为搏击规则。那么什么是飞行规则?它们是宇航员或使用 Git 的程序员的指南,现在他们在 Git 出错时会做的事情。所以它们来之不易。它们不是搏击俱乐部的规则。它们是在手册中记录的来之不易的知识体系,例如,如果这种情况发生,你会怎么做?如果你搅拌油箱并且发生爆炸,你就会受到打击。

并且大量的氧气从宇宙飞船中喷射出来,你会怎么做?等等。好的。好吧。所以这实际上非常酷。我认为这对很多人来说都非常有帮助。所以它

它讨论的是,当出现问题时,你如何处理 Git?基本上。我的意思是,源代码控制很棒,直到你像这样,“它说存在合并冲突,我不知道如何合并它”,或者“我不知道如何正确地执行此操作”,或者“我已经在这里创建了存储库,但是我想推送到那里的另一个来源”。我该如何操作?所以这就像,“哦,好的。”所以,

它按类别或其他内容进行分组,我猜。所以是存储库。我想启动一个本地存储库。我想克隆一个远程存储库。这些非常标准,对吧?但是当你向下看时,你会看到。我设置了错误的远程存储库。例如,例如……

我想推送到不同的来源,等等。有编辑规则,有暂存规则,它们非常有趣。例如,有丢弃更改。例如,嗯,我想丢弃特定未暂存的更改,或者我想丢弃所有未跟踪的文件,但不丢弃已跟踪的文件,等等。或者如果我正在暂存,嗯,

让我们看看。我暂存了过多的编辑,我想将它们分解成单独的提交。我该怎么做?我想取消暂存我的编辑并取消暂存我的已暂存编辑,对吧?所以所有这些事情都有某种,这是场景,变基合并。当我进行变基或其他操作时,我需要更新我的分支中的父提交。这里有很多。我甚至在节目说明中列出了一些。

我必须检查变基内容,因为这总是让我感到压力很大。我知道,我也是。一个是,我刚刚提交了什么?我想恢复已删除的文件。我想丢弃特定未暂存的更改。不是全部,只是一个。等等。这很酷吗?是的,这很棒。是的,谢谢你让我稍微扩展一下搏击规则,但我必须这样做。这很有趣。

但我认为这将非常有帮助。这有点像如何在 Git 出错时处理 Git。以及子模块,伙计。哦,天哪。那是一个完全不同的……那是一个完全不同的……不,这很好。所以。

好的,让我们稍微谈谈 T 字符串。我相信我们之前在节目中已经介绍过 T 字符串,我认为它们是随 PEP 750 一起推出的。但是它们,它们,它们,它们非常新。所以它们可以用来玩。我认为只有 3.14.0 beta 1 才有它们。我不知道之前是否有任何版本。

所以今天早上我一直在玩它们。但我真的很喜欢 Brett Cannon 的这篇文章,《解开 T 字符串的谜团》。我真正喜欢的是,因为我真的很想玩 T 字符串或更多地了解它们。但我不想实际需要,你知道的,如果你不必拥有最新的 3.14 beta 1 T 字符串,那就太好了。

所以这就是这篇文章的真正意义所在。所以即使 T 字符串是随 3.14 一起推出的,这篇文章也讨论了如何详细了解 T 字符串的工作原理,而无需实际使用 T 字符串。所以 Brett 从这个想法开始,例如,假设你有一个小的转换器,它可以转换一个名为 FYEA 的函数,该函数采用

采用 T 字符串,但这里它说的是 T 字符串,但这只是一个变量名。

嗯,获取某些内容,嗯,返回某些内容。从一开始,它就是一个标识。嗯,我们想要什么,以及他展示的是,例如,使用 F 字符串,嗯,F 字符串会做很多事情,例如它们可以替换变量。它们可以执行,嗯,那些格式化内容是什么?它们可以执行格式说明符,然后是转换。就像这是一个原始字符串转换内容。嗯,并且,嗯,

所以他用一个例子来解释这一点,你知道的,一旦你将 SF 字符串传递给函数,你会得到什么输出。但是然后他谈到,例如,基本上,它从简单开始,但然后他进入,好吧,如果我们想传递各个部分,所有不同的部分,对吧?

传递给我们的函数,然后他传递使用表示或转换和格式说明符来遍历这些内容,所以基本上我们已经遍历了到目前为止评估 python 表达式应用指定的转换,然后是格式说明符,然后进入到

例如,进一步深入研究,让我们跟踪所有这些内容。然后让我们,让我们,你知道的,让我们制作,我们有很多东西需要跟踪。所以让我们将一些像,所有转换内容之类的东西放在一个插值类中,并且,

我在这里有点迷茫,所以我实际上遍历了所有这些内容。实际运行代码、将其复制到那里并遍历它非常有帮助。然后是一个模板类,基本上遍历所有不同的部分。然后最后,他向你展示——说,基本上,我们刚刚构建了一些类似于 T 字符串的东西,即使我们还没有 T 字符串。

然后给出了一个例子,说明它在 3.14 中是什么样的。PEP 750 中的示例就在那里。你也可以运行它。都非常好。所以如果你真的想掌握,让你的大脑理解 T 字符串是什么,这是一篇很棒的文章。但我有点沮丧的是,所有这些都在,就像只是文件中一样。

所以我继续将他的所有示例重写为 PyTest 测试。因此,你只需要一个文件就可以运行所有这些示例。在最后也展示了 near,因为最后一个示例你实际上必须拥有

Python 版本,Python beta 1,3.14 beta 1。所以我会向人们展示如何使用 skip if 来跳过它,如果你没有安装该 Python 版本。是的,这很酷。我真的很喜欢遍历 Brett 的这篇文章。所以感谢 Brett 将其整理在一起。是的,非常酷。

实时后续。这不是我期望讨论的内容,但我刚刚与 Paul Everett、Jim Baker 和 Dave Peck 在 TalkPython 上进行了交谈,谈论 T 字符串。所以,如果你想与一些参与该项目的人一起深入了解内部细节,请继续收听。是的,这不是我的下一个主题。我的下一个主题就像 HTOP 的黑客版本、网络空间版本,NeoHTOP,HTOP 的矩阵版本?不,NeoHTOP。我

一个用于监控桌面系统的极速系统,我认为这非常酷。而且我非常确定它是跨平台的,一个基于……无论什么都不重要……但 Rust 在某个地方。

所以我们来看看它的功能,它具有实时进程监控、CPU 和内存使用情况跟踪。顺便说一下,这是一个 GUI。具有深色和浅色主题的现代 UI。酷炫的过滤功能,你可以固定进程,你可以终止进程。非常好。所以我实际上正在运行它。让我在这里调出来。你可以看到我现在在我的电脑上发生的事情。显然,猜猜是什么?StreamYard 的 Vivaldi 助手……

正在磨损,使用 50% 的 CPU。但是有很多很酷的东西。你可以点击这些小信息内容。不,那是固定。点击信息内容,它实际上会向你显示该进程使用了多少 CPU 和内存,它的 ID 是什么,但它的父 ID 是什么,具有内存图表,以及用于启动它的命令。我认为这非常酷。哦,这很整洁。所以如果你看到,哦,这里有一个,这里有这个,

为什么这个进程正在运行?你知道的,它是一个子进程,但它在做什么?它实际上会向你展示。然后如果你转到父进程,我认为这可能更酷。你转到,例如,在这种情况下是 Vivaldi,它会显示 Vivaldi 创建的所有不同子进程以及它们各自使用了多少 CPU、使用了多少内存以及它们的 ID 是什么。这很酷吗?是的,实际上,我认为很多这些对于,例如,

服务器很有用,但我认为我会从桌面上开始使用它。是的,完全正确。我认为这对于桌面来说非常好,因为 Windows 有 Sysinternal 内容。它是什么?我认为是 Sysmon,它非常好。它比这个好得多,但它仅限于 Windows,对吧?是的。

而且我们在 Mac 上有 system 和 iStats 菜单,它们非常好,但它不像这样让你深入了解进程内部。你还可以获得有关网络、存储、内存等方面的内容。所以我认为这很酷。当然,看起来你可以从这里终止进程。是的,你绝对可以终止它们。你可以很恶意。

无论如何,这是我的项目。如果你想要一些不错的跨平台 GUI 桌面监控工具,请查看这个 NeoHtop 内容。这很酷。停止。好吧,我们现在在哪里?移除。

好的。接下来,我认为我们只是——我们上周或最近刚刚谈论过 TY 或感谢或 TY 或其他什么内容吗?是的,我们谈论过了。是的。所以这是——TY 是星体类型检查器。所以本周,为什么不尝试另一个呢?所以 Pyrefly 是一个新的类型检查器。

它来自 Facebook Meta。所以有一篇文章,一个新的类型检查器,是的,介绍 Pyrefly。我认为其中一件有趣的事情是,所以它谈到,我玩了一点。这也是基于 Rust 的,所以它非常快。他们构建它的原因之一是,显然,其背后的原则是性能,当然,但也是 IDE 优先。所以我想

这完全说得通,但我认为很多东西都是构建的,你知道的,没有立即考虑 IDE,也许吧。但这正在考虑确保它与 IDE 集成得非常好,并且还具有良好的命令行界面体验。所以 IDE 优先性能推断,使这与尚未键入的 Python 程序配合良好,至少没有添加注释,

但它们可能仍然与类型一致。所以它推断类型,当然也是开源的。所以这不是一个,即使它来自 Facebook 工程团队,它也不是,它不是闭源的,而是开源的。所以这很好。

有一些关于他们将来会做什么的讨论,但网站看起来非常漂亮,当然还有 VS Code 扩展。但我犯了一个错误。所以我下载了这个,我想,是的,我只是想在我的一个项目上运行它,看看效果如何。我选择的项目是 PyTest Check 插件。

它爆炸了。它没有爆炸。它运行良好。它只是告诉我很多错误的东西,实际上并没有错。

所以我可能不应该选择我工作的一个项目,该项目完全滥用了 Python 的动态特性。有一个 check 对象。所以我经常从 pytest check import check。这个 check 对象既是系统的接口,也是上下文管理器,它重载了很多东西。所以是的,那是……

是的,也许吧,但是所有这些警告可能暗示我应该重新设计它。我们会看到的。无论如何,Pyrefly,另一个更快的类型检查器。是的。整洁。有趣。是的,我想补充两点。这是一个不错的发现。我也在考虑涵盖这一点。Pyrefly 是……的替代品。

对于 Facebook 现有的 pyre P Y R E。好的。所以,或者来自 meta。所以他们之前已经有了这个,我想这就像重写或类似的东西。另一件事是将其与 TY(即来自 astral 的 red knot)进行比较。这看起来更像。

更像 mypy,这也是 ty 的目标之一,但 ty 我相信更宽容,所以它可能不会对你大喊大叫,对吧?它旨在处理键入较少的代码,我猜,但另一个主要区别是我没有深入研究,所以它可能在某个地方,但 ty 的一大优势是除了制作一个带有

LSP(语言服务器)的类型检查器之外。PyLance(内置于 VS Code 中的一个)面临的挑战之一是,当你处理非常大的代码库时,它基本上会崩溃,有时甚至无法跟上或使用它。因此,诸如自动完成或转到定义之类的功能应该开始关闭,因为语言服务器无法处理大量的文件。所以他们试图构建一个基于 Rust 的

语言服务器,即使在数百万行代码上也能快速运行。所以当你将 TY 与 Pyrefly 进行比较时,Pyrefly?

它,它们并不完全一样,就像,好吧,一个是来自 Facebook 的,一个是来自 Astral 的,对吧?它们,它们也略有不同。所以,你是否知道 Firefly 是否正在做一个,像一个替代语言服务器,或者他们是否正在使用,我不知道。他们确实将 LSP 作为他们的标签之一,但我没有看到比这更多的字眼。让我们看看。好的。好吧,

在他们的网站上,他们没有。你计划构建一个 LSP 吗?是的。查看路线图。哦,好的。路线图上关于 LSP 的内容是什么?

它没有出现在上面,所以你知道它可能关闭了 LSP,好的,是的,我无法判断,这是一个无限滚动的玩意儿,所以很难……很难到达那里,我的意思是,你需要一个 LSP 来理解它,你需要一些东西来解析成像抽象语法树这样的东西,然后你开始问关于它的基于类型的问题,对吧?很多这样的工作方式就是这样

但是,令人沮丧的一点是,有限的……我期待着一些基于 Rust 的语言服务器上线,因为我真正需要所有帮助的是大型项目。对于较小的项目,我不太需要……我的意思是,我已经能够理解它了,但是……

好吧,我只是会使用聊天来编写我的代码。我不在乎。开玩笑的,大家。坚持这种氛围。是的。说到在我的平台上运行的内容,Talk by them training。让我告诉你我们这里有一门新课程。面向高级用户的 Polars,改变你的数据分析游戏。

这是一门由 Christopher Trudeau 制作的非常有趣的课程。而且它,它非常有趣。如果你想学习 Polars,并且你了解一点 pandas 或其他工具,例如 Excel 等,它会引导你,嘿,你知道如何在其他工具中执行此操作,但这里有一些优势。这是不同的 API。是的。非常有趣。如果你想开始使用 Polars 或将其与

各种工具进行比较,就像我提到的那样。绝对值得一试。29 美元,你就可以开始了。我认为是三个小时。不会占用你太多时间,也不会占用你太多钱,但你最终会获得一组不错的技能。不错。让我们看看,我们这里还有什么?一些公告。Airflow,工作流程……

框架发布了其最大的版本,这是该项目历史上最重要的版本。他们将其描述为 Airflow 3.0 构建于添加新的面向服务的架构、基于 React 的现代 UI、增强的安全性以及许多长期请求的功能之上,例如 DAG 版本控制、有向无环图版本控制、改进的回填、事件调度和远程执行。在这种情况下,我认为这是一件好事。很多时候远程执行是不好的,但是当你请求它时,它就是好的。

无论如何,如果人们使用 Airflow,请查看一下。这很酷。那里有一个新的。我的最后一个,我认为是在昨天,我第一次看到它的时候。粘贴。Brian,你使用某种剪贴板管理器吗?是的。显然,除了剪贴板本身之外。哦,剪贴板管理器。不,我不使用。好的,所以一旦你开始使用这些东西中的一个,你将永远不想回到没有它的工作状态。你做过这个吗?你有没有做过……

哦,我需要复制这个。然后你过去不小心复制了其他东西。或者我不知道你怎么样,但我使用 Bitwarden 来处理我的 2FA 内容。默认情况下,它除了粘贴 2FA 代码外,还会复制它,因为有时粘贴会失败。但是如果我没有这个剪贴板内容,并且我喜欢复制一些重要的内容,然后过去我想将其粘贴到某个地方。哦,我必须登录。我点击我的 Bitwarden 内容,我想,不,它不见了。它去哪里了?你回去找到它。

这个名为 Paste 的 Mac 软件。我知道其他平台也有类似的东西,但我在这个额外内容中的建议是 Paste。

所以非常,非常好的东西。他们刚刚发布了 Fivo,这就像一个很大的改进。所以它会跟踪三个月、一年、一个月,无论什么剪贴板历史记录。所以你可以复制三四个东西,返回,点击一个按钮,返回,找到它们。你会得到它们的缩略图,或者你甚至可以搜索。你就像,只是,我想看看我复制了什么?你可以键入 Firefox,它会向你展示你在过去一个月中从 Firefox 复制的所有内容。你可以从中复制或重用它,或者其他什么。是的。

它会在 Mac 和你的 iPhone 等设备之间同步。所以非常酷的东西。无论如何,他们刚刚发布了一个大版本。它运行得更好。如果你不使用这样的东西。我认为我只需要五分钟,但是你知道的。是的,你可以花五分钟。我的意思是,你可以随意更改,但我认为你会感到惊讶。你就像,“哦,是的,我知道我昨天复制了那个。”或者每当我创建一个新的 Python Bytes 文件时,我都会有相同的描述。

我有相同的描述,但是软件不会记住相同的描述,所以我必须复制它或重新键入一段话,对吧?就像,不。所以我只需点击热键调出它,然后键入加入我们。然后,砰,这就是加入我们成为节目的一部分并来到现场直播。我只是粘贴它。所以从上周开始,我只需三个按键就可以将其取回。哦,不错。精彩。所以,

如果你使用的是 Mac OS,请查看这个 pace。他们有一个,他们有一个新版本。非常棒。如果你使用的是其他系统,也许可以向我们推荐。我们会,我们会向他们喊话或其他什么。好吧,这些都是我的额外内容。你呢?我还有几个。让我们看看。我们现在在哪里?所以 Python,这部纪录片,我有点期待这部纪录片。有一个,有一个 Python 纪录片的官方预告片。它只是一个,

几分钟。但看起来是这样的。这看起来很棒,Brian。这看起来真的很好。我知道他们做了关于 Guido 回来和《帝国反击战》之类的玩笑,等等。但是如果你点击 Cult Repo,这个用户名就在那里,然后转到他们的视频并查看它,例如,如果你查看他们所做的一切,你可以看到,顺便说一下,我谈到的那个视频,但是他们有一个

从 Node.js 到 Deno。他们有 Angular 的官方纪录片,等等。他们有很多很酷的、深入的、制作精良的 Ruby on Rails 纪录片,等等。很多基于编程的、基于框架的纪录片,非常好的故事讲述。所以我认为这就是 Python 纪录片即将推出的内容。我必须查看 Bjorn Stroustrup 的生活建议。是的。

指针。在你的生活中总是使用指针。永远不要重复。是的。有趣。是的,那里有一些好东西。好的。所以一个是纪录片。纪录片?另外,快速更正。我提到当我谈论 T 字符串时,我提到了原始转换。这不是原始的。Henry 纠正了我。这是 repper 转换。谢谢你,Henry。

所以下一步,所以,好的,所以新的 Python。哦,Tim Hopper,我们已经介绍过这个了,Python 开发人员工具手册。我的评论之一是,测试在哪里?无论如何,他添加了一个测试接口

介绍,还设置了使用 PyTest 和 UV 进行测试。实际上将两者结合起来很有趣,可以展示如何将 PyTest 与 UV 一起添加到你的开发环境中。非常有趣的例子,一个简单的计算器之类的东西,加、减、乘。

测试,所以……不要脸的宣传,如果你觉得这个 PyTest 介绍还不够,那么……我建议你访问 courses.pythontest.com,在那里你可以选择任何你想要的 PyTest 课程,所以

还有其他几个,我想,最后一件事情是我得到了,我一直在使用 pocket 来跟踪事情。我想阅读 pocket 即将消失。它即将关闭。我认为大约在 7 月 1 日左右。无论如何,我不知道它何时关闭,但是,但是它即将关闭。所以如果你正在使用 pocket,不要再使用 pocket 了。是的。

你应该改用什么。显然,你可以检查任何内容,尝试你自己的东西。我尝试了一些东西,最后选择了 Raindrop。到目前为止,我一直很喜欢 Raindrop。有人在社交媒体上发布了这个。有人说,好吧,代码是什么样的?因为有时这些书签之类的应用程序在代码突出显示方面并不是那么好。我会给你看一个例子。这是 Brett 的。

Brett 的 T 字符串文章。还不错。它没有。所以 web 视图有这个是普通视图有。哦,它没有显示突出显示这个。我之前拥有的另一个版本在 Brett 的网站上具有语法突出显示,但它没有显示语法突出显示。它只是代码块。所以还不错。无论如何,到目前为止我一直很喜欢 Raindrop。这就是我的所有额外内容。

太棒了。是的,我开始使用 Raindrop,并且我爱它。我移动了我所有的……我开始了一段旅程,Brian。我不仅开始使用 Raindrop,我还开始……

我说,我要去我多年来使用过的所有各种浏览器,Firefox、Vivaldi 等。我要清理所有书签,因为会有很多垃圾。你知道我的意思吗?来自大约 10 年前的某些内容,不,不,不,不,不,不,不,不。保留这 100 个或其他什么。然后我将所有这些导入到 Raindrop 中。

现在我已经在我的所有浏览器中都安装了这个扩展程序。所以在任何电脑、任何浏览器上,我都有相同的历史记录。这真的很好。所以我绝对赞同你的观点。你真是个高手。我刚开始的时候是全新的,到目前为止只添加了三样东西。我不仅迁移了数据,还进行了清理。

另一个选择是,如果你是一个喜欢自托管的人,这对我很有吸引力,但我没有这样做,因为我现在不想再管理更多的东西了。但是这个以前叫做Hoarder,现在叫做KaraKeep的东西看起来非常酷。它就像一个自托管的稍后阅读书签服务,这很酷。它会用人工智能等自动标记你的书签,等等。它看起来很酷。是的,但我没有使用它。

你准备好听一个不同类型的笑话了吗?是的。好吧。你见过这个吗?没有。好吧。那么,我们开始吧。我当时坐在那里思考……

我不知道我为什么会看到这个,但我心想,如果我们有一些众所周知的历史名言,但它们是为程序员重新诠释的呢?对。所以我决定把它作为节目的笑话。然后我想,你知道吗?为什么我不把它发表出来呢?然后我们仍然可以把它作为节目的笑话。所以,你知道,罗斯福的“竞技场中的人”的演讲。我喜欢这个演讲。我会念出来。它有点长,但不是很长。我会念给人们听,它说……

重要的不是批评家,也不是指出强者如何跌倒或行动者本可以做得更好的人。批评家,荣誉属于那些真正身处竞技场的人,他们的脸上沾满了灰尘、汗水和鲜血,他们英勇奋斗,他们犯错,他们一次又一次地失败,因为没有努力……

没有错误和缺点,但他们确实努力去做事,他们知道伟大的热情,伟大的奉献,并且他们为了一个有价值的事业而奋斗,他们最终至少知道取得成功的喜悦,而如果他们失败了,至少他们在伟大中失败了,所以他们的位置永远不会与那些冷漠胆怯的灵魂在一起,他们既不知道胜利,也不知道失败。对吧?

好了。这就是著名的名言。如果西奥多是针对程序员说的呢?所以我写了几个版本。我认为这些更有趣。好吧。这不是……我给他们起了几个标题。这是第一个,“遗留代码战士”。第一个说,重要的不是评论线程中的键盘侠,而是深夜ID仍然发光的工程师,他们的思想被堆栈跟踪图形灼伤,

并且他们的决心在一次又一次的构建失败中持续存在。荣誉属于那些涉足遗留代码的人,他们深陷技术债务的泥潭中,带着更清晰的架构灰头土脸地出现,或者如果失败了,则带着为优雅而战的骄傲伤疤。

然后,我将最后读一下最后一个。这很好。这写给开源维护者。没有荣耀属于旁观者,他们计算着别人的构建失败。它属于那些拉取请求被审查弄得伤痕累累的开源贡献者,他们的变更日志讲述了他们所经历的失败,而他们的合并代码成为了未来发现的无形引擎。就是这样。给人们一些鼓舞人心的话。

你睡不着觉吗?实际上是的,但这并不是证据。好吧。不,我喜欢。是的,谢谢。好吧。好吧,这就是我为你准备的,布莱恩。这就是我所拥有的。好吧。那就这样结束吧。确实。好吧。回头见。