标签 代码英雄 下的文章

代码英雄讲述了开发人员、程序员、黑客、极客和开源反叛者如何彻底改变技术前景的真实史诗。

什么是《代码英雄》

代码英雄 Command Line Heroes 是世界领先的企业开源软件解决方案供应商红帽(Red Hat)精心制作的原创音频播客,讲述开发人员、程序员、黑客、极客和开源反叛者如何彻底改变技术前景的真实史诗。该音频博客邀请到了谷歌、NASA 等重量级企业的众多技术大牛共同讲述开源、操作系统、容器、DevOps、混合云等发展过程中的动人故事。

本文是《代码英雄》系列播客第二季(7):无服务器音频脚本。

导语: 无服务器Serverless到底意味着什么?当然,总得有服务器存在 —— 构建网络的基本架构不会改变。不过在将服务器交给一小部分人运维之后,开发者们会发生什么变化呢?

无服务器编程让初学者们可以更加轻松简单地部署自己的应用程序,让工作更有效率,这是它的优点。Andrea Passwater 跟我们分享了抽象底层架构会给我们带来多大的便利。不过凡事必有代价,无服务器化也有很多问题。Rodric Rabbah 解释了无服务器意味着你将部署和回应问题的能力拱手献出 —— 这就是为什么他帮助创建了 Apache OpenWhisk,这是一个开源的无服务环境框架,同时 Himanshu Pant 也来分享了他对于何时应该使用无服务器服务的观点。

无服务器编程应该是为开发者们 赋能授权 empowerment 的。我们也应该对于全局场景保持关注 —— 尽管我们精简了我们的工具箱。

00:00:03 - Al Gore 档案

现如今,当然了,在全美乃至全世界,互联网正在彻头彻尾地改变着我们的生活。

00:00:13 - Saron Yitbarek

那是 1998 年。 Google 才刚刚雇佣了它的第一名员工,副总统 Al Gore 在接受媒体采访。

00:00:22 - Al Gore 档案

这项技术还处于起步阶段。当我和 比尔·克林顿 Bill Clinton 总统入主白宫时,只有 50 个网站。现在看看,我在生日那天收到了一束虚拟鲜花。

00:00:37 - Saron Yitbarek

好的。我已经感觉到你的眉毛皱起了。为什么我要向你展现某些 20 年前的互联网史?这是因为我想要提醒你,互联网的基础仍然是相同的。

00:00:51

当然,现在有不止 50 个站点了,我知道。但是,我们仍然在发送虚拟鲜花。从开发人员的角度来看,如果你将我们所有的惊人进步剥离开来,你得到的仍然是相同的“ 客户端 - 服务器 client-server ”(C/S)模型,这就是一切的开始。一个提供了分布式网络的客户端 - 服务器模型。

00:01:16

如今,开发人员谈论了很多有关 无服务器 Serverless 的问题,这听起来像是 Al Gore 谈到的客户端 - 服务器模型被废弃了。而且,如果我们不小心,我们能够抽象出太多的基础架构,以至于忘记了仍然有服务器在那里做着它们的工作。

00:01:37

但是,无服务器真的意味着没有服务器吗?真的吗?还是开发人员与服务器之间的关系正在变化?在这一集中,我们将与来自世界各地的人们交谈,以探索这种被称为“ 无服务器 serverless ”的东西。

00:01:54

我是 Saron Yitbarek,这里是《代码英雄》,一档来自红帽的原创播客节目。

00:02:03 - Andrea Passwater

你知道无线网络在某些地方还有线缆吗?

00:02:06 - Saron Yitbarek

Andrea Passwater 在一家名为 …… 嗯…… “无服务器” 的公司工作。他们创建了一款流行的开源框架来开发无服务器应用程序。Andrea 注意到了各个组织是多么渴望抽象化基础架构的方法,而这正是神奇的“无服务器”一词始终给予人希望的地方。

00:02:28 - Andrea Passwater

我认为这一术语主要是为了传达这样一个事实,即如果你是从事无服务器应用方面工作的开发人员,你不必考虑那些服务器。你只需要写代码并将代码部署到云提供商即可,而不必担心管理。这就是无服务器的真正含义。

00:02:49 - Saron Yitbarek

对于 Andrea 来说,无服务器的吸引力很明显。

00:02:53 - Andrea Passwater

倘若你以无服务器的方式开发应用程序,则可以不必去考虑部署和维护该应用程序的日常工作。这意味着你可以专注于它的商业价值,你可以专注于发挥创造力。

00:03:12 - Saron Yitbarek

而无服务器的另一大好处是,你不太可能发现自己在重复造轮子。

00:03:18 - Andrea Passwater

当有像 Auth0 这样可以直接使用的服务存在时,为什么要创建自己的身份验证方法呢?归根结底,无服务器就是为开发人员提供机会,使得他们能够更加轻松快速地构建起能把他们脑子里的所有的主意带到世界上的程序。

00:03:41 - Saron Yitbarek

我明白了!

00:02:27

想象一下,你拿了满手的东西,正跌跌撞撞地走向一扇门。这扇门滑开了,以简单、友好……

00:03:50

(让我来说)

00:03:51

……的方式。这就是无服务器。它为你打开了大门,使得开发工作不再那么繁琐。事实上,随着各个组织趋向于混合云环境,以及无服务器运动的发展,开发的障碍正在消失。

00:04:09

Andrea 听说过很多有关非开发人员进行开发的话题。

00:04:15 - Andrea Passwater

这是传统上认为自己写不了代码,而现如今由于无服务器而得以投身于软件工程的人的故事,并且能够开发这些使得他们自己的工作流程和类似的东西自动化的工具。这与你你做什么工作都没关系。

00:04:31

你在工作中要做的一些事情是如此的呆板无聊,比如你每天都在做的例行事情,和那些你会想“难道计算机不能为我做这件事吗?”的事情。我开始有了这种感觉的时候,我碰巧在一家名为“无服务器”的公司工作,他们像这样:“你意识到我们制作的产品可以为你提供帮助,对吗?”

00:04:50 - Saron Yitbarek

Andrea 认为,不久之后,许多从未将自己视为开发人员的人将意识到他们能够自己构建简单的应用程序,基本上免费。

00:05:02 - Andrea Passwater

借助 Lambda,我从不需要为自己制作的任何小型应用程序付费。我可以让这些机器人为我做一部分工作,是的,我可以提高工作效率。但是,我也不必再做这些无聊的工作了。我可以做些更有趣的事情。

00:05:17 - Saron Yitbarek

即使是对于专业开发人员来说,这种自动门效果在满手杂物的世界里也是很诱人的。

00:05:25 - Andrea Passwater

我认为人们对于能够让一两个人的团队,在短时间内就让原型工作起来很感兴趣。在几天时间内,他们就可以启动并运行原型。我认为这使得人们开始意识到,他们可以专注于驱动他们的应用、产品和公司中的商业价值的部分。这非常让人兴奋,他们可以专注于商业价值。

00:05:54 - Saron Yitbarek

我要再抛出一个术语给你。准备好了吗? 功能即服务 Functions-as-a-service (FaaS)。就像是 AWS Lambda 或 Apache OpenWhisk 之类的无服务器产品。“功能即服务”意味着,只有在被触发时程序才会执行某个功能,这效率更高。

00:06:15

此外,这让我对计算能力和运行时间的担心少了很多。最终,无服务器可能会成为一个相当不错的基础配置。事实上,有些人甚至开始怀疑,我们是否要完全使用无服务器?它可以替代容器吗?

00:06:34 - Michael Hausenblas

我理解这这种想法。

00:06:35 - Saron Yitbarek

Michael Hausenblas 是 Red Hat OpenShift 团队的开发倡导者。

00:06:41 - Michael Hausenblas

如果你看一下我们现在拥有的这些东西,包括 OpenShift 和 Cloud Foundry 和一些其他东西,你实质上就拥有了抽象化。基本上,Heroku 或多或少地倾向于向这个想法。对吗?这是非常简单的方式,无需担心程序会如何运行,无需担心它是什么样的。只需要给我们代码,我们来处理剩下的工作。

00:07:03 - Saron Yitbarek

是的。听起来相当不错。这听起来有点儿像是梦想中的“ 无运维 no-ops ”环境,一切都自动化并且抽象化了,就像是开发者版本的极简主义室内设计。很棒、很干净的界面。

00:07:21

但是, Michael 想要让你了解你一些现实情况。

00:07:25 - Michael Hausenblas

没有运维!是吗?你知道,它只是神奇地以某种方式消失。你可以在 HackerNews 和 Twitter 以及其他任何地方看到这些笑话。无服务器?当然有服务器!我知道,当然有。而且也肯定有运维。

00:07:39

总得有人去做这些,总得有人去架设服务器、给操作系统打补丁、去创建容器镜像,因为,你猜猜这些功能会在哪里执行?当然是在某种计算机上。

00:07:54 - Saron Yitbarek

这不是零和博弈。功能即服务无法直接取代容器,而是在工具箱中增加了一个工具。我还有更多的事情要告诉你。通过使用这种新工具,转变成无服务器并不只是意味着运维就是其他人的事情,你仍然需要自己考虑自己的运维。

00:08:14 - Michael Hausenblas

你会看到在基础架构侧有一点运维工作。但是,也有一点是开发人员的事情。如果你处在一个极端情况之下,比如说使用 Lambda,那么你是没有任何任何类型的管理员权限的,对吧?

00:08:29

你不能简单地致电或是短信给一名基础架构管理员。显然,你组织之中的某一个人就必须得做这件事。但是,我担心许多组织只看到了它是如此简单而便宜。我们无需动这个,还有这个、这个,然后忘记了谁在待命,谁是真正地在待命?你对此有什么策略吗?

00:08:52

如果没有的话,那么你可能会想要在进行之前,先制定一个策略。

00:09:00 - Saron Yitbarek

需要有人处于待命状态。即使选择了“无服务器”,你仍然需要在头脑中萦绕更大的场景,你仍然需要让你的运维有序进行。

00:09:24

在我早先时候抛出那个“功能即服务”术语时,你是不是有过些许畏缩?过去,基于云的开发为我们带来了大量的 “xx 即服务”的术语。我们有基础架构即服务(IaaS)、平台即服务(PaaS)、软件即服务(SaaS)、数据即服务(DaaS)、数据库即服务(DBaaS) …… 等等。

00:09:48

如果你难以理解它们的不同,那你并不孤单。这就是我们找来了 Himanshu Pant 的原因。他是位于印度德里的苏格兰皇家银行的技术主管。他花了多年时间来分析其中的差异。

00:10:04 - Himanshu Pant

这些其他的计算范例在名称上和无服务器听起来是如此的相似,以至于人们往往会忘记,或者困惑于为什么没有将它们称之为无服务器,或者为什么这个被称为无服务器。

00:10:20 - Saron Yitbarek

因此,无服务器与容器不同,无服务器也不是平台即服务。但是 Himanshu 希望将其明确一下。功能即服务能够提供什么?又不能提供什么?

00:10:35

他与我们分享了两件轶事,有两次他弄清楚了什么时候该使用无服务器,什么时候应该放弃。第一次来自一个 24 小时黑客马拉松。 Himanshu 当时正试图开发一个聊天机器人。

00:10:49 - Himanshu Pant

有各种各样的指标会影响它的选择。例如逻辑覆盖率、可能产生的成本以及可伸缩性。而我选择在无服务器环境下完成这项工作。

00:11:04

当我在开发它的时候,我意识到成本是一个层面,而这确实是我所青睐的技能。因此,即使其他所有的参与者都有更好的……我想说的是,覆盖率,或者说是逻辑覆盖率。这里讲的是 NLP 语境或其场景。

00:11:19

但是,就成本和可伸缩性而言,我是手操胜券的,因为借助无服务器,这完全取决于人们在该聊天机器人上所进行调用的次数,并相应的触发该功能。这是一个我十分乐意采用无服务器的用例,因为成本 —— 没有成本。以及更快的开发时间,而且老实说,当时还并不完全是生产规模级别的工作负载。

00:11:45

我可以使用平台上的某些新兴工具。这对我而言是一次胜利。

00:11:52 - Saron Yitbarek

很好。那时无服务器才有了意义。但是,在 Himanshu 目前供职的银行里,人们正在将他们的系统从旧版迁移到云端。而这提出了不同的目标。

00:12:07 - Himanshu Pant

我们正在尝试查看哪些工作负载适用于哪些范例。比如 IaaS、BaaS、FaaS,这显然是属于企业领域的。你要看到这些方面,比如说第一,可靠的供应商难以寻找,以及第二,该技术应该得到广泛的验证。这对于像是银行业这样的规避风险的行业而言更是如此。

00:12:30

这就是平台即服务(PaaS),但是仍然需要更好的证明、更好的功能,以及它们比传统工具更优越的地方。

00:12:40 - Saron Yitbarek

Himanshu 正在研究自己的需求以及他自己的舒适区,并且研究哪些工作负载在哪种云计算规范中是有意义的。

00:12:49 - Himanshu Pant

假设某个听众在一家贸易商店工作,他想构建某种东西,比如说一个入口。对于他或者她来说,无服务器可能并不是真正合适的选择,因为在那种在特定机器的应用程序中,延迟可能是不该出现的。

00:13:05 - Saron Yitbarek

归根结底,这是一种有节制的做法,而不是将所有东西都丢进一个桶里。当我们思索哪一种基于云的架构是真正我们所想要做的工作时,还有一件事情需要考虑。所有这些抽象的东西,所有解放你双手的东西,最终如何改变的不仅仅是我们的工作方式,还改变了完成工作本身。

00:13:31

抽象掉一部分工作负载可能意味着更少的自定义选项。想象一下你购买的一辆车。它能工作,它能开。但是接着想象一下你自己组装的一辆车,这辆车会按照你决定的方式工作。

00:13:48 - Rania Khalaf

这是有代价的。

00:13:50 - Saron Yitbarek

Rania Khalaf 是 IBM 研究部门的 AI 工程总监。

00:13:56 - Rania Khalaf

在使用这些无服务器应用程序的过程中,你可能无法完全控制所有正在发生的事情。你无法控制全盘计划,或是程序何时何地运行。

00:14:06 - Saron Yitbarek

这是一种权衡,对吗?当你使用无服务器时,细粒度控制可能会失误。

00:14:13 - Rania Khalaf

它对于终端用户而言,抽象化了如此之多的东西,以至于你想要拥有更多的控制权、不同的规划、更多的检查与平衡、功能可以运行多长时间的不同值,等等等等。那么,如果你真的希望能够进入系统并修补,也许你可以创建你自己的部署环境。

00:14:32 - Saron Yitbarek

不过,这将需要一些新东西,一类新的无服务器环境,开源社区已经在为自己打造了它。Rania 和她的 IBM 团队参与了该运动。

00:14:44 - Rania Khalaf

我们首先研究是一种语言……它基本上是 JavaScript 的扩展,可以让你创建这些多线程交互服务的组合,以此作为起点,为你提供一种更加轻量级服务的方式。大约在同一时间,云和微服务以及平台即服务开始真正兴起。

00:15:08

仅仅是将这两种趋势结合起来,就可以用可能来自于你,也可能来自其他人的许多小部件,构建更加高阶的功能。

00:15:18 - Saron Yitbarek

Rania 和她的团队正在构建 Apache OpenWhisk,一款开源的功能平台。

00:15:23 - Rania Khalaf

对于 OpenWhisk,我们从一开始就开源了。其中很大的原因是,为了让社区和我们一起参与进来。但是同时也是为了揭掉外包装,将控制权交给想要运行自己的无服务器计算环境的人们,以便他们能够根据自己的需求对其进行自定义,也许将它们置身于自己的控制之中,看看它实际上是如何运行的,以对其进行更好的控制。

00:15:54

而且,我们还可以提供更加精细的控制,如果仅仅是普通服务,人们就不会有这种控制。

00:16:03 - Saron Yitbarek

将控制权交还给想要运行自己的无服务器运行环境的人。这是下一阶段的无服务器。加入 OpenWhisk,你将获得像是 Fission 和 Gestalt 之类的其它开源平台。我们开始看到无服务器领域正在演变得比原先更具适应性,而且功能更为强大。

00:16:31

为了真正了解为什么开源版的无服务器很重要,我与 OpenWhisk 的创始人之一进行了谈话。

00:16:39

嗨,Rodric。最近好吗?

00:16:40 - Rodric Rabbah

很好。你好吗?谢谢你邀请我参与节目。

00:16:42 - Saron Yitbarek

Rodric Rabbah 是构思并创立 OpenWhisk 的三位开发者之一。以下是我们的谈话。

00:16:54 - Rodric Rabbah

别人可能会很困惑,也可能会窃笑,因为人们可能会想:“倘若没有服务器,你要怎么做计算呢?”

00:17:02 - Saron Yitbarek

是的。服务器就在某处,只是我不必去费心考虑它。

00:17:05 - Rodric Rabbah

完全正确。这就是这个模式的真正美妙之处。当你开始以无服务器的方式进行开发时,你就再也不想回到过去了。你知道的,如今我已经置身其中接近 4 年了,并且已经开发了一些达到生产质量的应用程序。

00:17:19

这是我如今惟一的开发方式。如果你告诉我必须要配置一台计算机并且安装操作系统,这对我而言完完全全是陌生的。我甚至都不确定我是不是还知道该怎么做。

00:17:29 - Saron Yitbarek

是的。当你这样说的时候,听起来像是减轻了很大的负担。你知道吗?当最初听说无服务器时,至少我会想:“伙计,我必须要去学习的事又多了一件。”

00:17:38

但是,当你这样说的时候,听起来不错。

00:17:41 - Rodric Rabbah

这确实听起来很棒。然而,你应该已经意识到你必须要从这幻想的气泡中抽出一点儿空气。它不是万能药。

00:17:50 - Saron Yitbarek

有哪些令人惊讶的风险或问题是人们在起步时可能没有看到或意识到的呢?

00:17:58 - Rodric Rabbah

我认为缺乏透明度可能是最大的问题。这有点儿让我想起了新语言问世时出现的,那些提高了计算机抽象水平的技术。在当今的无服务器环境中,这是一种类似的令人震惊的效果。

00:18:16

在这个过程中,你通常会写一个功能,然后只需部署这个功能即可。它可以立即运行,比如在 web 上作为 APIN 点。它可以大规模伸缩。我的意思是你无需自己做任何工作即可运行数千个实例。

00:18:32

但是,倘若哪里出了问题,那应该如何调试呢?或者我实际上是想要检查我的功能失败的上下文环境。通常,这些功能在进程内运行,与你隔离 —— 你甚至无法登录计算机查看你的代码在何处运行。它们可能在封闭的容器环境之中运行,你不知道里面有什么。

00:18:53

获得一点儿透明度对你而言变得很困难。这是工具最终将提供帮助的地方。但是,工具的缺乏某种程度上会让人们陷入一个相当大的陷阱。

00:19:05 - Saron Yitbarek

这真的很好。那么让我们回到 OpenWhisk。请给我说说关于它的事情。

00:19:11 - Rodric Rabbah

该项目在 Amazon Lambda 宣布推出产品的那一刻就开始了,这实际上是无服务器开始成为术语,并且开始在该领域获得关注的时刻。当我们看到 Lambda 时,我们开始思索:“这里有许多技术需要开发。不仅仅是在新的云计算的基础层上,而且在置于其上的编程模型之上,这实际上都使得它更易于被程序员访问。”你知道,由于出自 IBM 研究所,我们拥有相当强大的技术,不只是编程语言设计、编译器专业知识以及运行时的专业知识的技能。

00:19:54

我们的一个小团队,基本上三个人……

00:19:57 - Saron Yitbarek

哇。

00:19:57 - Rodric Rabbah

……聚集在一起,做了最初的开发和原型,最终成为 OpenWhisk,带有命令行工具,这是现如今无服务器实际上的编程接口。编程模型概念,然后是它必须支持的实际架构,本质上,是服务器模型的这个功能,提供了无服务器所支持的所有好处。

00:20:22

请注意,真正的起源是 Amazon Lambda 的出现,并可以说这是一种新的计算模型。

00:20:28 - Saron Yitbarek

那么花了多长时间?或者说是第一个版本什么时候出现的。

00:20:30 - Rodric Rabbah

实际上很快。事实上,当 IBM 宣布……好吧,那时还是 IBM OpenWhisk。从我们第一次提交到现在才一年。

00:20:39 - Saron Yitbarek

哇。我的天哪。

00:20:41 - Rodric Rabbah

这着实令人激动。

00:20:43 - Saron Yitbarek

这确实很令人印象深刻。事实上,当它第一次启动时,它不叫 OpenWhisk,而是 Whisk。对吗?

00:20:49 - Rodric Rabbah

Whisk 是内部名称,没错。我取的这个名字。这个名字背后的意思是迅速而又灵活地行动。

00:21:00 - Saron Yitbarek

很好。

00:21:01 - Rodric Rabbah

你“搅拌”了一个功能,就可以了。你可以将其放入烤箱中烘焙。

00:21:07 - Saron Yitbarek

太好了,因为当我看到它,我肯定想的是鸡蛋。我在想,让我们“ 搅拌 whisk ”一些鸡蛋。

00:21:12 - Rodric Rabbah

对。我们对该名称进行了一些正面和负面的评价。当我们开源一项技术,并将其放到 GitHub 上时,我们会在上面加上 open 前缀,以强调该技术与开源一样开放,可以自由使用、自由下载、自由贡献。

00:21:32 - Saron Yitbarek

是的。

00:21:33 - Rodric Rabbah

我们将其开源的目的,实际上是一定程度上提升可以在当今无服务器平台上执行标准。对我们来说,重要的是要建立一个平台,不仅可以用于生产环境,还可以与全世界共享,而且还可用于学术研究或一般性研究。也许因为出自 IBM 的研究机构,我们有点儿在意这个。

00:22:00

但是,这是有所回报的,我知道一些大学 —— 从 Princeton 到 Cornell —— 在他们的研究中使用 OpenWhisk。我去过 Brown、 Williams College、 MIT、 CMU 等几所大学,并且进行了一些讲座,目的是鼓励学生真正地去研究围绕无服务器以及服务器功能的问题、工具、编程模型,并且使他们对技术感兴趣。

00:22:26

向他们显示,如果他们真的为开源项目做出了贡献,那么有一条路可以让 IBM 的云功能接受它并在生产环境中运行,通常在一周之内。

00:22:34 - Saron Yitbarek

哇。这么快。

00:22:36 - Rodric Rabbah

这让一些人感到惊讶。

00:22:38 - Saron Yitbarek

这是一个非常高效的过程。

00:22:41 - Rodric Rabbah

这确实证明了我们是如何在开源环境下开发许许多多技术的。这不是一个开放核心模式,有些组件有所保留。实际上在 IBM 云之中所运行的就是 Apache OpenWhisk 项目。

00:22:56 - Saron Yitbarek

当你思索无服务器的未来,以及我们所选择的前进道路时,你觉得它们将是不可避免地奔向开源吗?

00:23:08

我认为最近对于开源的价值存在一场激烈的争议,尤其是在云计算领域。

00:23:13 - Saron Yitbarek

是的,没错。

00:23:15 - Rodric Rabbah

如果你在思考为什么人们会转向云计算,或者为什么他们可能会厌恶投身于云计算领域,这就是供应商锁定的问题……丧失透明度。开源在一定程度上缓解这些问题,发挥了重要的作用。然后再看看类似 Kubernetes 的服务,它只是在容器和系统管理方面吞噬了云,就那么的成功!

00:23:41 - Rodric Rabbah

如果你正在做的事情接触到了容器,鉴于它的主导地位,保持闭源与否还值得讨论吗?我倾向于认为开放性是有帮助的,从开发人员的角度来看,这很有吸引力。

00:23:57 - Saron Yitbarek

当你考虑未来的无服务器生态及其工具、项目以及服务时,你看到了什么呢?对你来说,无服务器的未来是什么样的?

00:24:08 - Rodric Rabbah

我认为,你会开始越来越少思考底层技术,而变得越来越多地考虑编程体验以及围绕它的工具:用于调试的、用于部署管理的、用于性能分析的、用于安全性。

00:24:26

我认为,所有这些都非常重要。你如何运行你的功能的底层机制 —— 无论它们是在容器中还是在一些未来的技术下运行,也无论你是将它们运行在一个云上或是多个云上 —— 我认为,它们都不重要。有点儿像是 Kubernetes 在容器以及容器管理方面所做的事情。

00:24:46

类似的还有一层要放在上面,就是服务分层的功能,可以实现那种无服务器概念。然后,它实际上的表现取决于你在其中安放的中间件。你如何赋能授权给开发者,让他们真正利用这款新的云端计算机,以及你要在它周围投入的辛劳,让他们的体验愉快。

00:25:07 - Saron Yitbarek

是的。这种赋能授权看起来怎么样?

00:25:13 - Rodric Rabbah

一言以蔽之,就是高效。这是一种能力,可以只专注于对于我,作为一名开发人员而言有价值的东西,或者如果我在公司工作的话,对于我公司的价值。这样能够更快地规避问题,因为你释放了你的脑细胞,而不用去考虑基础设施和如何伸缩,以及在硬件层面如何保障事物的安全性。

00:25:38

现在,你可以真正地创新,将脑力重新投入到更快的创新中去,从而为你的终端用户带来更多的价值。我想把这一切都归结于更高的效率。

00:25:55 - Saron Yitbarek

Rodric Rabbah 是 OpenWhisk 的一位创始人。还记得我在这一期节目开始的时候所说的吗?互联网所基于的那种老旧的客户端 - 服务器模型并不会消失。改变的是,我是说彻底改变的是我们对服务器的思考方式。

00:26:19

在所谓的无服务器世界之中,希望我们专注于代码本身,而不用担心基础架构。但是,我们所选择的抽象等级,以及如何保持对于未被抽象的工作的控制,才是使得无服务器世界变得真正有趣的地方。

00:26:40

无服务器最终应当是为开发人员赋能授权的。免于打补丁、进行扩展和管理基础设施。但是,与此同时,即使我们抽象化了一些任务,依然必须对整体如何工作保持关注。我们会问,我要放弃的是哪些控制权,而我要收回的又是哪些控制权?

00:27:07

下一集是我们史诗般的第二季的大结局,《代码英雄》将要前往火星。我们将会了解 NASA 的火星探测器如何开始自己的开源革命。并且我们将与 NASA 喷气推进实验室的 CTO 进行交流,了解开源是如何塑造太空探索的未来的。

00:27:39 - Saron Yitbarek

与此同时,如果你想要更加深入地研究无服务器开发的问题,或是在这一季里我们所探索过的任何主题,请访问 redhat.com/commandlineheroes,查看免费资源。当你在那里时,你甚至可以为我们自己的代码英雄游戏作出贡献。

00:28:00 - Saron Yitbarek

我是 Saron Yitbarek。感谢收听,编程不已。

什么是 LCTT SIG 和 LCTT LCRH SIG

LCTT SIG 是 LCTT 特别兴趣小组 Special Interest Group ,LCTT SIG 是针对特定领域、特定内容的翻译小组,翻译组成员将遵循 LCTT 流程和规范,参与翻译,并获得相应的奖励。LCRH SIG 是 LCTT 联合红帽(Red Hat)发起的 SIG,当前专注任务是《代码英雄》系列播客的脚本汉化,已有数十位贡献者加入。敬请每周三、周五期待经过我们精心翻译、校对和发布的译文。

欢迎加入 LCRH SIG 一同参与贡献,并领取红帽(Red Hat)和我们联合颁发的专属贡献者证书。


via: https://www.redhat.com/en/command-line-heroes/season-2/at-your-serverless

作者:Red Hat 选题:bestony 译者:JonnieWayy 校对:acyanbird, wxy

本文由 LCRH 原创编译,Linux中国 荣誉推出

代码英雄讲述了开发人员、程序员、黑客、极客和开源反叛者如何彻底改变技术前景的真实史诗。

什么是《代码英雄》

代码英雄 Command Line Heroes 是世界领先的企业开源软件解决方案供应商红帽(Red Hat)精心制作的原创音频播客,讲述开发人员、程序员、黑客、极客和开源反叛者如何彻底改变技术前景的真实史诗。该音频博客邀请到了谷歌、NASA 等重量级企业的众多技术大牛共同讲述开源、操作系统、容器、DevOps、混合云等发展过程中的动人故事。

本文是《代码英雄》系列播客第二季(6):数据大爆炸音频脚本。

导语:大数据将有助于解决大问题:我们如何种植粮食、如何向需要的人运送物资、如何治疗疾病。但首先,我们需要弄清楚如何处理它。

现代生活充满了相互联系的组件。我们现在一天产生的数据比几千年来的数据还要多。 Kenneth Cukier 解释了数据是如何发生变化的,以及它是如何开始改变我们的。Ellen Grant 博士告诉我们波士顿儿童医院是如何使用开源软件将堆积如山的数据转化为个性化治疗方法。Sage Weil 则分享了 Ceph 的可扩展和弹性云存储如何帮助我们管理数据洪流。

收集信息是了解我们周围世界的关键。大数据正在帮助我们拓展永不停歇的探索使命。

00:00:03 - Saron Yitbarek

如果你把从人类历史早期到 2003 年创建的所有数据计算在内,你将得到大约 500 万 GB 的数据。我们昨天创建了多少 GB 数据?

00:00:15 - 问卷调查答案 1

哦,天哪,10 万。

00:00:21 - 问卷调查答案 2

可能是 500 万 GB 数据。

00:00:23 - 问卷调查答案 3

我们在昨天一天之内创建了多少 GB 的数据?1000 万 GB 数据?

00:00:31 - 问卷调查答案 4

我不太知道,可能是 200 万 GB 数据?

00:00:36 - 问卷调查答案 5

也许一天就有 100 万 GB 数据?

00:00:40 - Saron Yitbarek

答案是?超过 25 亿 GB 数据!

00:00:44 - 问卷调查答案 1

哇哦。

00:00:44 - 问卷调查答案 2

25 亿?

00:00:45 - 问卷调查答案 3

所以,我们已经打破了世界纪录。

00:00:45 - 问卷调查答案 4

那可真是很多个 G 啊。

00:00:45 - 问卷调查答案 5

我都不敢相信那有这么多的数据。

00:00:52 - Saron Yitbarek

在 2016 年,我们的年度在线数据流量首次超过了 1ZB。一个 ZB 是 1000^7 字节。好,记住这个数字了吗?现在把它乘以 3,因为那是我们将在 2021 年拥有的数据量大小。

00:01:10

我知道,大脑不是以 ZB 为单位进行思考的,但请你至少暂时记住这个数。 我们的 IP 流量将在五年内翻三番。 这是数据的洪流,而我们正处于其中。

00:01:24

在刚过去的一分钟里,人们发出了 1600 万条短信;与此同时,在我说出这句话的时间里,谷歌处理了 20 万条搜索。

00:01:37

如果我们能在数据洪流来临时做好准备、站稳脚跟,那么隐藏在其中的模式、答案和秘密可以极大地改善我们的生活。

00:01:50

我是 Saron Yitbarek,这里是《代码英雄》,一款红帽公司原创的播客节目。浪潮近在眼前。这里是第二季第六集,数据大爆炸。

00:02:17

我们如何处理如此大量的数据? 采集到这些数据后,我们如何利用它们? 大数据将为我们解决一些最复杂的问题:

00:02:29

如何管理交通、如何种植粮食、如何向需要的人提供物资,但这一切的前提是,我们必须弄清楚该怎么使用这些数据、以及该怎么在短得不能再短的时间内完成对它们的处理。

00:02:43 - Kenneth Cukier

通过获取更多的数据,我们可以深入到这些子群体、这些细节,而这是我们以前从来没有过的方式。

00:02:53 - Saron Yitbarek

Kenneth Cukier 是《 经济学人 The Economist 》的高级编辑,他也和我都在科技播客《Babbage》里。

00:03:01 - Kenneth Cukier

这并不是说我们以前无法收集数据。我们可以,但这真的、真的很昂贵。真正的革命性突破是,我们使数据搜集变得十分容易。

00:03:10

现在收集数据的成本极低,而且处理起来也超级简单,因为都是由电脑完成的。这已经成为我们这个时代的巨大革命,它可能是现代生活最显著的特征,在未来几十年甚至下个世纪都会如此。这也是大数据如此重要的原因。

00:03:33 - Saron Yitbarek

历史可以提醒我们这种变化是翻天覆地的。想想看,4000 年前,我们把所有的数据都刻在了干泥板上。

00:03:46 - Kenneth Cukier

这些黏土盘很重。黏土盘被烤干后,刻在其中的数据就无法更改。从古至今,信息处理、存储、传输、创建的方式都发生了变化,对吗?

00:04:04 - Saron Yitbarek

时代巨变。大约在 1450 年,印刷机的发明带来了第一次信息革命。今天,我们也迎来了一场革命。

00:04:16 - Kenneth Cukier

现在的存储介质很轻巧。信息的修改变得极度简单,借助现有的处理器,我们只需要使用删除键就能修改我们所拥有的信息实例,无论那是储存在磁带上还是晶体管里。我们可以以光速传输数据,不用携带什么黏土盘。

00:04:37 - Saron Yitbarek

在 15 世纪,借助印刷机,大量的数据得以传播。这些知识提升了人们对事物的认识,并促成了启蒙运动。

00:04:45

今天,大数据可以再次提升我们的知识水平,但我们必须要想办法充分利用这些数据。唯有修好大坝、备好轮机,才能让浪潮为人所用。

00:05:00 - Kenneth Cukier

当下,人们远没有做到对数据的充分利用。这一点非常重要,因为我们已经看到,数据中存在这种潜在的价值,而收集、存储和处理数据的成本在近百年来,乃至于近十年来,已经显著地降低了。

00:05:22 - Kenneth Cukier

这很振奋人心。但问题是,我们在文化上、在我们的组织流程上,甚至我们的 CFO 和 CIO 们拨给相关方面的预算中,并不重视这种价值,

00:05:35 - Saron Yitbarek

想着这种事肯定让人极度沮丧。启蒙运动在敲门,却无人应答。然而,我们不回答的部分原因是:门后到底是谁?这些数据能带来什么?

00:05:51

Kenneth 认为,某些公司不采用大数据,乃是因为它太过于新奇。

00:05:56 - Kenneth Cukier

一旦你收集了大量数据后,你能拿它干什么?我就直说吧,只有傻子才会以为自己知道。你绝对无法设想你今天收集到的数据明天能拿来做什么用。

00:06:12

最重要的是要有数据,并以开放的思想对待所有可以使用的方式。

00:06:18 - Saron Yitbarek

如果我们按照 Kenneth 说的那样以正确的方式对待大数据,我们将会发现一切的全新可能性。这将是一个人人 —— 而不只是数据科学家 —— 都能洞察趋势、分析细节的世界。

00:06:33 - Kenneth Cukier

如果我们能意识到,这个世界是可以通过收集经验证据来理解、改变和改善的,并且可以用一种自动化的方式进行改善,我们将会得到看待它的全新角度。我个人认为,现如今,在世界各地,上至政策制定者、下至星巴克咖啡师,都在经历这种引人深思的文化上或心理上的变化。

00:07:00

各行各业的人都有点数据基因,就像是被感染了似的。现在,无论他们专注于什么方面,他们都以大数据的方式思考。

00:07:15 - Saron Yitbarek

Kenneth Cukier 给我们讲了一个简短的故事来展现这种新数据思维方式的力量。微软的一些研究人员开始着手研究胰腺癌问题。

00:07:27

人们发现胰腺癌往往为时已晚,早期发现可以挽救生命。因此,研究人员开始询问这些患者,在开始搜索有关胰腺癌的信息之前几个月,他们搜索了什么? 而早在发现前数年,他们又搜索了什么?

00:07:46

研究人员开始寻找埋藏在所有搜索数据中的线索和模式。

00:07:54 - Kenneth Cukier

他们有了重大发现。通过分析患者在最终开始搜索“胰腺癌”之前的这段时间中所搜索的关键词,他们识别出了一套规律,可以非常准确地预测搜索者是否患有胰腺癌。

00:08:09

在这里,我们能学到一点:想象力与数据中潜在规律的结合,是可以挽救生命的。他们现在所要做的就是找到一种方法,通过方法来解释这一发现,这样当人们在搜索这些术语时,他们可以以一种微妙的方式干预,说,“你可能要去诊所检查一下。”

00:08:29

像这样使用数据,就能救人于水火之中。

00:08:37 - Saron Yitbarek

研究人员偶然发现的是一种新的癌症筛查方式,通过这种方法,患者可以提前一个月得知自己可能患癌。利用数据不仅仅是一个利润或效率最大化的问题。

00:08:52

它的意义远不止于此。对于人类而言,这些数据中确确实实存在着大量的潜在利好。抗拒使用大数据可能只是自欺欺人。接下来,我们要关注的是,这场将数据投入工作的持久战。

00:09:18

哈佛医学院的波士顿儿童医院去年完成了 26000 多台手术,进行约 25 万人次的儿童放射检查。

00:09:31

医护人员的表现令人称道,但有一个巨大的障碍挡在他们面前。

00:09:37 - Ellen Grant

在医院的环境中,尤其是作为医生,我们经常会遇到难以获取数据的问题。

00:09:45 - Saron Yitbarek

这位是 Ellen Grant 医生,她是波士顿儿童医院的儿科神经放射科医生,她在诊疗时依靠访问数据和分析医学图像。

00:09:56 - Ellen Grant

如果没有专门设置的环境,想要从 packs 里存储的图像进行额外的数据分析绝非易事。当你在一个只提供了普通的医院电脑的读片室里时,要做到这一点并不容易。

00:10:14

获取数据实际上是有障碍的。

00:10:17 - Saron Yitbarek

其实许多医院都会大量抛弃数据,因为存储它们的成本实在过于高昂。这部分数据就像这样丢失了。像 Grant 这样的放射科医生可能是第一批因为数据实在太多而感到沮丧的医务人员。

00:10:33

当医院走向数字化后,他们开始创造大量的数据,很快,这个量就大到无法处理了。

00:10:41 - Ellen Grant

我,作为一名临床医生,在读片室里的时候希望能将所有复杂的分析工作在研究环境中做完。但我无法随便就从 packs 中拿出来图像,拿到一些可以进行分析的地方,再拿回到我手里。

00:10:59 - Saron Yitbarek

顺便说一句,packs 就是医院存储其图像的数据仓库。Grant 医生知道有一些工具可以让这些图像 packs 发挥更大的功能,但成本太高。

00:11:12 - Ellen Grant

随着机器学习和 AI 时代的到来,数据的生产量将会日渐加大,我们会需要更多计算资源来进行这类大规模的数据库分析。

00:11:27 - Saron Yitbarek

数据已经堆积如山了,但处理能力却没有相称的增长。在这一前提下,对数据的彻底处理将变得遥不可及。而复杂、昂贵的超级计算机并不是医院的选择。

00:11:41

Grant 医生深感沮丧。

00:11:44 - Ellen Grant

我们能不能想出一个更好的办法,让我把数据拿到这里来,分析一下,然后放回去,这样我就可以在会诊的时候,一边解释临床图像,一边把分析做完,因为我希望可以在会诊上展示数据,在此同时进行快速分析。

00:11:56

我可不想在不同的电脑和存储器之间把这些数据挪来挪去,这不是我的工作。我的工作是理解非常复杂的医学疾病,并把相关的事实真相记在脑子里。

00:12:10

我想专注于我的技术领域,在此同时利用计算机领域的新兴技术;而不必这方面过于深入钻研。

00:12:21 - Saron Yitbarek

Grant 和世界各地的放射科医生们需要的是一种方法,只要点击图像就能运行详细分析,并让这一切都发生在云端,这样医院就不必建立自己的服务器场地,也不必把医务人员变成程序员。

00:12:40

他们需要一种方法来使他们的数据尽可能地拯救生命。这正是 Grant 医生和几位代码英雄决定去做的事。

00:12:55

Grant 在波士顿儿童医院的团队正在与红帽和马萨诸塞州开放云(MOC)合作。关于 MOC 的更多内容稍后再说。首先,我们需要请出 Rudolph Pienaar,他是医院的一名生物化学工程师,来描述一下他们的解决方案。它是一个开源的、基于容器的成像平台。

00:13:15 - Saron Yitbarek

它完全是在云端运行的,所以你不受医院本身计算能力的限制。他们称这一作品为 ChRIS。

00:13:24 - Rudolph Pienaar

ChRIS 有一个后台数据库,其实就是一个 Django Python 机器。它可以跟踪用户,并跟踪这些用户使用过的数据以及分析结果。

00:13:35

围绕这个数据库,有大量的服务群,这些服务都是作为自己的实例存在于容器中。它们处理与医院资源的通信,比如与医院数据库的通信。这些服务从资源中提取复杂的数据,将其推送给云端的、或者另一个实验室的、或者别的什么地方的其他服务处理。在计算数据的地方,有 Kubernetes 之类的编排服务,以及你需要使用的分析程序。数据处理结束之后,结果就会被发送回来。

00:14:11 - Saron Yitbarek

对于 Grant 医生来说,ChRIS 成像平台是一种让数据活起来的方法。更重要的是,这种数据处理方式能让她成为更好的医生。

00:14:21 - Ellen Grant

优秀的医生之所以优秀,是因为他们在一生中积累了丰富的从业经验。如果我们能把这一点融入到数据分析中,以此来获得更多的信息,我们就能知道得更多,并更有效地整合这些经验。

00:14:39

例如,我对特定病患的特定受伤方式的认识,取决于我的从医经验和对这些经验的整体理解。

00:14:52

现在,我可以根据真实数据创建受伤症状分布的概率图,并将其公之于众;我也可以寻找有相似模式的患者,并告诉他们在接受治疗时,什么对他们最有效,以便更接近精准医疗。

00:15:10

整合大量的数据,尝试探索我们过去的知识,并尽你所能,点明治疗病人的最佳方式。

00:15:21 - Saron Yitbarek

这对被送到医院的孩子意味着什么?Grant 医生说,ChRIS 平台能提供更有针对性的诊断和更个性化的护理。

00:15:31 - Ellen Grant

如果我们拥有更复杂的数据库,我们就能更好地理解信息之间繁杂的相互作用,因此就能更好地指导每个患者。我认为 ChRIS 就像是我进入超级大脑的接口,它能让我比平时更聪明,因为我不能一次把所有数据保存在我的大脑中。

00:15:53 - Saron Yitbarek

当赌注如此沉重时,我们要突破人类大脑的极限。这位是 Máirín Duffy。她是红帽团队中的设计师,她让 ChRIS 成为现实,而根据个人经验,她知道这件事其中的风险。

00:16:15 - Máirín Duffy

我父亲中风了,所以我一直作为病人家属等待医疗技术诊断,因为当一个人中风并被送到医院之后,医务人员必须弄清楚是哪种类型的中风。根据中风类型,有不同的治疗方法。

00:16:31

如果使用了错误的治疗方案,就可能发生极其糟糕的事。所以,在这种情况下,你能越快地把病人送来做核磁共振,就能越快地得到治疗方案。速度越快就有可能挽救他们的生命。

00:16:43

想想看,仅仅是把图像处理从云端推送出来,并行化处理,就能让它快很多。这样就能将这个过程从几小时、几天,缩短到几分钟。

00:16:55 - Saron Yitbarek

医学可能正迎来一个新的拐点。一个不是由药理学驱动,而是由计算机科学驱动的拐点。另外,想想像 ChRIS 这种东西的拓展性。

00:17:08

发展中国家的医生也可以受益于波士顿儿童医院的专业知识和数据集。任何有手机服务的人都可以通过网络访问能够拯救生命的数据和计算结果。

00:17:24

除了医学,很多其他领域也可能出现类似的拐点。但前提是,人们得知道如何从自己的数据中找到隐藏信息。为了做到这一点,他们需要探索一个全新的计算领域。

00:17:46

世界各地的人们都在学习如何利用数据。就像在波士顿儿童医院一样,将数据洪流导向目标。

00:17:56

换句话说,我们在处理这些数据。但我们之所以能做到这一点,是因为新一代的云计算使之成为可能。

00:18:11

对于像 ChRIS 这样的平台来说,一个关键因素是基于云计算的新型存储方式。请记住,很多医院都会把收集到的数据扔掉,因为他们根本无法容纳所有数据。

00:18:25

这就是我想重点讨论的数据泛滥的最后一块拼图:存储解决方案。对于 ChRIS 来说,存储解决方案是一个叫 Ceph 的开源项目。它使用的马萨诸塞州开放云,就基于 Ceph。

00:18:45

我和 Ceph 的创建者 Sage Weil 聊了聊,想了解更多关于像波士顿儿童医院这样的地方是如何在闪电般的时间内处理海量数据的。以下是我与 Sage 的对话。我认为,第一个重要问题是,什么是 Ceph,它能做什么?

00:19:05 - Sage Weil

当然,Ceph 是一个由软件定义的存储系统,它允许你提供可靠的存储服务,并在不可靠的硬件上提供各种协议。

00:19:14

它的设计从开始就是满足可扩展性,所以你可以拥有非常非常大的存储系统、非常大的数据集。于此同时,系统对硬件故障和网络故障有优秀的容忍性,所以即使出现了一些这类问题,存储中的数据仍然不会变得难于访问。

00:19:29 - Saron Yitbarek

现在,数据太多了。

00:19:31 - Sage Weil

是的。

00:19:33 - Saron Yitbarek

如此大的工作量。要处理的东西实在是太多了。你认为这个解决方案出现得是时候吗?

00:19:39 - Sage Weil

是的,肯定是这样。在当时,行业中这方面的严重不足是显而易见的。没有开源的解决方案可以解决可扩展的存储问题。所以,我们显然得造个轮子。

00:19:53 - Saron Yitbarek

考虑到我们每天要处理的数据量,以及它将来只会越来越多、越来越难管理的事实,你认为当今该怎么做才能解决这种日益增长的需求?

00:20:09 - Sage Weil

我认为有几方面。一方面,有令人难以置信的数据量正在产生,所以你需要可扩展的系统。它不仅可以在硬件和数据规模上进行扩展,而且,它的管理成本应该是一定的,至少应该基本固定。

00:20:25 - Saron Yitbarek

嗯。

00:20:26 - Sage Weil

你不会想就为每多 10PB 存储空间或类似的东西就多雇一个员工吧?我认为这套系统在运维上也必须可扩展。

00:20:33 - Saron Yitbarek

是的。

00:20:35 - Sage Weil

这是其中的一部分。我认为,人们利用存储空间的方式也在改变。一开始,都是文件存储,然后我们有了虚拟机的块存储,我觉得对象存储在某种程度上是行业的重要趋势。

00:20:51

我认为,下一个阶段的目标并不局限于提供一个对象存储端点,并将数据存储在集群中;我们需要将解决方案进一步升级,好让它能管理集群的集群,抑或是对分布于不同地理位置的云空间及私有数据中心储存空间中的数据进行管理。

00:21:13

例如说,你现在将数据写入一个位置,随着时间的推移,你可能会想将数据分层到到其他位置,因为它更便宜、或者服务器离你更近;或者,一旦数据太老、不会频繁使用了,你就需要将其移动到性能更低、容量更大的层次上,以保证存储的成本较低。

00:21:27

你可能也会为了遵循地方法规而移动数据。在欧洲的一些地区接收数据时,数据来源必须保持在特定的政治边界内。

00:21:39

在某些行业,像 HIPAA 这样的东西限制了数据的移动方式。我认为,随着现代 IT 组织越来越多地分布在不同的数据中心、公有和私有云中,统一地、自动化地管理它们的能力正变得越加重要。

00:21:58 - Saron Yitbarek

当你想到未来我们要如何管理和存储数据,以及如何处理数据的时候,开源在其中扮演了怎样的角色?你曾提到,你之所以要创建一个开源的解决方案,是因为你个人的理念和你对自由和开源软件的强烈感情。

00:22:16

你如何看待开源对未来其他解决方案的影响?

00:22:21 - Sage Weil

我认为,特别是在基础设施领域,解决方案正在向开源靠拢。我认为原因是基础设施领域的成本压力很大,特别是对于构建软件即服务(SaaS)或云服务的人来说,低成本的基础设施很重要,从他们的角度来看,开源显然是一个非常好的方法。

00:22:48

第二个原因更多地是社会因素,在这个快速发展的领域里有如此多新的工具、新的框架、新的协议、新的数据思维方式,这个领域中有这么多创新和变化,有这么多不同的产品和项目在相互作用,所以很难以传统方式做到这一点,比如说,让不同的公司互相签订合作协议,共同开发。

00:23:20

开源可以消除此事上的所有阻力。

00:23:28 - Saron Yitbarek

Sage Weil 是红帽公司的高级咨询工程师,也是 Ceph 项目的负责人。我要绕回到《经济学人》的 Kenneth Cukier,以从一个更整体的视角上进行讨论,因为我希望,我们能够记住他关于人与数据之间关系的看法,以及我们从泥板,到印刷机,再到像 Sage 打造的云端奇迹的进步历程。

00:23:55 - Kenneth Cukier

这关乎人类的进步,关乎我们如何更好地理解世界,如何从现实中总结经验,以及如何改善世界。这进步也是人类一直以来的使命。

00:24:08 - Saron Yitbarek

使命永无止境。但是,与此同时,学会处理我们收集到的数据并将其投入使用,是整整一代人的开源任务。我们将在田纳西州的 橡树岭国家实验室 Oak Ridge National Laboratory 短暂停留,结束我们的数据之旅。它是世界上最快的超级计算机 Summit 的所在地,至少在 2018 年是最快的超级计算机。

00:24:43

这台机器每秒能处理 20 万亿次计算。换个计量单位,就是 200 petaflops。这样的处理速度,对于医院、银行或者今天所有受益于高性能计算的成千上万的组织来说并不现实。

00:25:04

像 Summit 这样的超级计算机更多的是留给强子对撞机的领域。不过话说回来,我们曾经在泥板上记录的只是 100 字节的信息。

00:25:16

在数据存储和数据处理的领域中,非凡的壮举不断成为新的常态。有一天,我们或许能将 Summit 级别的超级计算机装进口袋。想一想,到时候我们能够搜索到的答案。

00:25:42

下一集,我们聊聊无服务器。第 7 集将会讲述我们与基于云的开发之间不断发展的关系。我们将会探究,在我们的工作中有多少可以抽象化的部分,以及在这个过程可能会失去的东西。

00:25:58 - Saron Yitbarek

同时,如果你想深入了 ChRIS 的故事,请访问 redhat.com/chris ,了解它是如何构建的,以及如何为项目本身做出贡献。

00:26:12 - Saron Yitbarek

《代码英雄》是一款红帽公司原创的播客。你可以在 Apple Podcast、Google Podcast 或任何你想做的事情上免费收听。

00:26:24 - Saron Yitbarek

我是 Saron Yitbarek。坚持编程,下期再见。

什么是 LCTT SIG 和 LCTT LCRH SIG

LCTT SIG 是 LCTT 特别兴趣小组 Special Interest Group ,LCTT SIG 是针对特定领域、特定内容的翻译小组,翻译组成员将遵循 LCTT 流程和规范,参与翻译,并获得相应的奖励。LCRH SIG 是 LCTT 联合红帽(Red Hat)发起的 SIG,当前专注任务是《代码英雄》系列播客的脚本汉化,已有数十位贡献者加入。敬请每周三、周五期待经过我们精心翻译、校对和发布的译文。

欢迎加入 LCRH SIG 一同参与贡献,并领取红帽(Red Hat)和我们联合颁发的专属贡献者证书。


via: https://www.redhat.com/en/command-line-heroes/season-2/the-data-explosion

作者:Red Hat 选题:bestony 译者:TimeBear 校对:Northurland, wxy

本文由 LCRH 原创编译,Linux中国 荣誉推出

代码英雄讲述了开发人员、程序员、黑客、极客和开源反叛者如何彻底改变技术前景的真实史诗。

什么是《代码英雄》

代码英雄 Command Line Heroes 是世界领先的企业开源软件解决方案供应商红帽(Red Hat)精心制作的原创音频播客,讲述开发人员、程序员、黑客、极客和开源反叛者如何彻底改变技术前景的真实史诗。该音频博客邀请到了谷歌、NASA 等重量级企业的众多技术大牛共同讲述开源、操作系统、容器、DevOps、混合云等发展过程中的动人故事。

本文是《代码英雄》系列播客第二季(5):关于 DevSecOps 的故事音频脚本。

导语:不良的安全和可靠性实践会导致影响数百万人的中断。现在是时候让安全加入 DevOps 运动了。并且,在 DevSecOps 的世界中,我们可以创造性的提升安全性。

每月发现一个漏洞曾经是常态。而现在,由于敏捷流程和 DevOps 团队,软件开发的进展迅速。Vincent Danen 告诉我们,这如何导致被认为是漏洞的东西急剧增加。前亚马逊灾难主管 Jesse Robbins 介绍了公司如何为灾难性故障和漏洞做好准备。而 Elastic 的产品安全主管 Josh Bressers 则展望了科技领域安全的未来。

我们不应该把安全团队当成脾气暴躁的妖怪。听听 DevSecOps 团队如何将英雄们聚集在一起,以实现更好的安全。

00:00:01 - 众议院小组委员会代表

1991 年 6 月 26 日,在华盛顿特区,马里兰州和西弗吉尼亚州的大部分地区,以及我的家乡的大部分地区都因公共电话网络的大规模故障而瘫痪了。然而,随着技术变得越来越复杂,网络系统越来越相互依存,反复发生故障的可能性也会增加。似乎并没有警告说会发生这种情况。

00:00:23 - Saron Yitbarek

在 20 世纪 90 年代初,有 1200 万美国人遭受了大规模的电话网络故障。人们不能给医院打电话,企业不能给客户打电话,父母不能打电话给托儿所。对于一个基础设施严重依赖于万物互联的计算机系统的国家来说,这是一场混乱也是一记警钟。这些计算机网络变得越来越大,然后当它们出现故障时,故障时间就会很长。

00:01:01

电脑故障会导致电话系统崩溃。在今天代码中的一行小错误的后果比以往时候都要严重。

00:01:15

我是 Saron Yitbarek,这里是是红帽公司的原创播客节目《代码英雄》。

00:01:24

因此,软件安全性和可靠性比以往任何时候都重要。传统的瀑布式开发方法,安全性只是一个附加流程而已,已经不再适用。我们生活在一个 DevOps 的世界里,一切都变得更快、更敏捷、扩展性更强,这在电话网络崩溃时是他们无法想象的。这意味着我们的安全和可靠性标准必须不断改进,以应对这些挑战。

00:01:55

在本集中,我们将研究如何将安全性集成到 DevOps 中,我们还将探索在运营中构建可靠性和弹性的新方法。即使在介绍了所有这些之后,我们知道还有很多东西可以讨论,因为在 DevSecOps 的世界里,对于开发人员和运营人员来说,事情都在快速变化。这些变化意味着不同的事情,这取决于你的立场,但这是我们的看法。我们也很想听到你们的消息——所以如果你认为我们错过了什么,不要害羞——在网上联系我们。

00:02:34

好了,让我们开始探索这个全新的领域吧。

00:02:43

事情就是这样,让安全性和可靠性跟上时代的步伐,并为 DevOps 世界做好准备,这意味着我们必须对工作方式进行一些关键的调整。第一,我们必须拥抱自动化。我的意思是,想想双因子认证的逻辑。想想那些难以想象的艰巨任务吧。很显然,你不能仅仅通过增加员工来解决问题,所以第一点就是拥抱自动化。

00:03:15

然后,第二点,这个可能不是那么明显,那就是它真的改变了文化,使安全不再是一个祸害。稍后我将解释我所说的改变文化的含义。但是让我们一个一个的解释这两点。首先,拥抱自动化。

00:03:42

以前,应用程序的部署在每个单独的发布之前都涉及到一个人为的安全审查,我不知道你是否注意到了,但是人为的审查可能会有点慢。这就是为什么自动化是在 DevOps 构建安全性的关键部分。以 Verizon 最近的数据泄露报告为例。他们发现,81% 的与黑客相关入侵涉及密码被盗或者弱密码。从表面上看,这是一个非常简单的问题,但是规模却很大。就像我之前所提及到的,你不能用工作人员去解决 3000 万个密码问题,对吧?问题在于解决大规模问题,而每次的答案都是一样的。那就是自动化,自动化。

00:04:36 - Vincent Danen

如果你等待人参与进来,那么规模就不会扩大。

00:04:41 - Saron Yitbarek

Vincent Danen 是红帽公司产品安全部门的主管,在过去的 20 年里,他见证了 DevOps 的快速发展。安全团队不得不竞相追赶。

00:04:56 - Vincent Danen

刚开始的时候,每个月都有漏洞,后来变成了每隔一周,然后是每周都有。现在,每天都能找到几百个漏洞。

00:05:08 - Saron Yitbarek

有趣的是,Vincent 说,随着安全团队的发展,实际上会出现更多的漏洞,而不是更少。

00:05:17 - Vincent Danen

我们永远不会说,哦,我们现在安全了,我们做完了,我们的工作结束了。安全审计会一直存在,就像呼吸一样,这是必须要有的。

00:05:27 - Saron Yitbarek

事实证明,对于安全性和可靠性团队来说,细节的问题变得越来越重要。

00:05:35 - Vincent Danen

当我们在寻找这些漏洞时,我们会发现更多的东西,而且这个趋势还将继续。因为你会发现新的漏洞类型和一些我们可能认为不太重要的东西,或者以前甚至不知道它们存在的东西。我们会发现这些东西发展的速度很快,而且数量更多,因此规模爆炸性增长。知识、软件的数量、消费者的数量都促进了该领域安全性以及漏洞的增加。

00:06:06 - Saron Yitbarek

一旦你将安全视为一个不断发展的问题,而不是随着时间的推移而 “得到解决” 的问题,那么自动化的理由就会变得更加充分。

00:06:18 - Vincent Danen

嗯,我认为有了自动化,你可以以一种非常快的方式将这些东西集成到你的开发流水线中,这是其一。其二,你不需要人类来做这些工作,对吧?计算机不需要睡觉,所以你可以在处理器允许的情况下以最快速度浏览代码,而不是等待人类通过一些可能相当乏味的命令行来查找漏洞。

00:06:44

然后通过模式匹配和启发式方法,甚至在开始编写代码的时候,你就可以知道代码中那些地方是易受攻击的。如果在你编写代码的时候,在你的 IDE 或者工具中有一个插件,它能告诉你。嘿,这看起来有点可疑,或者你刚刚引入了一个漏洞。在你提交代码之前你都可以纠正这些可疑点或者漏洞。

00:07:08 - Saron Yitbarek

安全在进步。这真是一笔巨大的奖励。

00:07:12 - Vincent Danen

每一天,甚至每一小时,都会有很多东西涌现出来。通过持续集成和持续部署,你写了代码,10 分钟后它就被部署了。因此,在代码被推送之前自动进行验证是非常关键的。

00:07:32 - Saron Yitbarek

我们可以使用各种各样的工具来完成这个任务,不管是静态代码分析,还是 IDE 的插件,或者是一大堆其他选项。我们将在 redhat.com/commandlineheroes 上分享一些我们最喜欢的片段。

00:07:53

一旦我们有了这些工具,它们将帮助我们把安全放在首位。结果就是,DevOps 被重新定义为 DevSecOps。安全被纳入到流程中。

00:08:08 - Vincent Danen

就像开发人员和运维人员结合的方式一样,你将这两个规则合成到了一个规则。现在,你有了 DevOps,并将安全这第三个组件与开发和运维集成到一起,我认为这非常重要。因为事后才考虑安全性,这会使安全性变得非常被动、昂贵以及可能会损害消费者。当你一开始就把安全代入其中,你就可以完成开发工作,从头到尾进行安全检查并开始运作。

00:08:44 - Saron Yitbarek

当然,就像我们在这一集的开头提到的,自动化只是一个大蛋糕的一半,而 Vincent 也明白这一点。

00:08:53 - Vincent Danen

并不仅仅是一部分。不能仅仅在你的 CI/CD 流水线中随便引入一个工具就期望一切都变好。为了达到我们希望看到的最终有益结果,需要使用各种技术和行为。

00:09:15 - Saron Yitbarek

自动化确实让我们做到了一半,但我们必须记住另一部分 —— 稍微模糊一点的那一部分。让我们一起来说,那就是文化部分,让开发者和运维人员都一起参与进来,这样这些问题就不再是可怕的问题。

00:09:33

我们必须改变一种文化,而有些人正在学习以一种最不痛苦的方式,通过游戏的方式来做到这一点。

00:09:44

现在让我们来看看事情的另一面。如今建立庞大的基础设施很容易,但这并不意味着我们应该做粗制滥造的工作。我们仍然应该努力改进我们的系统,确保可靠性,未雨绸缪。这就是 Jesse Robbins 正在努力实现的。

00:10:08

如今,Jesse 是 Orion Labs 的 CTO,但在此之前,他因在亚马逊被称为灾难大师而名声大噪。在那里,Jesse 特别是在让大家至少意识到这些问题这件事上几乎是个奇才。他通过一个叫做 “游戏日” 的活动来做到这一点。让其中可能涉及成千上万的员工进行故障演练,通过灾难演练来习惯系统被破坏并了解发生的原因和方式。

00:10:39

下面是 Jesse 和我在讨论,尤其是在运营方面如何建立可靠性和弹性。

00:10:47

大家都知道你做了很多非常酷的事情,其中之一就是你在亚马逊做的活动 —— “游戏日”。那是什么? 是什么游戏?

00:10:58 - Jesse Robbins

“游戏日” 是我创建的一个项目,通过大规模破坏来测试最脆弱系统的运行情况。如果你是 Netflix 的 “混乱猴子” 的粉丝,“游戏日” 则是我的一个可以实现类似的所有事情的东西。实际上,它非常专注于建立一种卓越的运营文化,建立大规模测试系统的能力,当系统崩溃时能了解它们是如何崩溃的以改进它们。然后还要建立一种文化,能够对事件做出反应并能恢复。它是按照事故指挥系统建模的,这是世界各地的消防部门用来处理任何规模事故的系统。

00:11:56

它的诞生源于...

00:11:58 - Saron Yitbarek

旁白,Jesse 早在 2005 年就经过训练成为一名消防员。在那儿,他了解了这个事故指挥系统,最终激发了 “游戏日” 的灵感。因此,所有做这些故障演练的开发人员,都要感谢 Jesse 对消防和应急管理的激情。好了,回到我们的谈话。

00:12:22 - Jesse Robbins

弹性是一个系统的能力,这包括人和这些人建立的适应变化、应对失败和干扰的能力。而建立这种文化最好的方法之一 —— 建立一种文化,能够对这种类型的环境做出反应,并真正理解这些环境是如何工作的 —— 就是提供人员培训演习。这些演习可以很简单,比如重启服务器,也可以很复杂,比如关闭整个数据中心造成大规模故障等等。所以,“游戏日” 首先是一个过程。在这个过程中,你通过让整个组织聚集在一起,讨论系统如何发生故障,并思考人类对故障发生的预期。而这个演习本身就是 “游戏日” 开始时最有价值的部分之一。

00:13:24

但是,当你实际对系统做了一个或大或小的破坏后。当你这样做的时候,你就可以看到每个人是如何反应的。你看到系统崩溃了,可能是之前安全的东西崩溃了,一个很容易理解的组件或者是某个东西暴露了一个潜在的缺陷。这些问题隐藏在软件、技术或者大规模的系统中,只有当你遇到极端或者意外事件时,我们才能发现。“游戏日” 的目的是为了训练员工并且建立系统让你了解他们如何在压力下工作。

00:14:12 - Saron Yitbarek

所以当我听到 “游戏日” 的时候,我就会想,“这是对某个特定事件的回应吗? 它是从哪儿来的?”

00:14:20 - Jesse Robbins

因此,“游戏日” 刚开始的一段时间内,因为我知道自己的角色以及作为消防员和应急管理人员的背景,因此将文化方法从注重预防失败的观念转变为拥抱失败非常重要,接受失败发生。激发我这样做的部分原因是我自己的经历,你知道,了解系统,比如建筑是如何倒塌的,市政基础设施是如何倒塌的,以及灾难是如何发生的,以及灾难给人们的压力。所以说,如果环顾我所在工作场所所具有的复杂性和运营规模就会知道,想要真的构建成一个高可靠性、持续在线环境的唯一办法就是拥抱消防服务的方法。我们知道失败会发生,这不是如果的问题,而是什么时候的问题。就像我之前的消防队长说的,不是你选择时机,而是时机选择你。你只需要在它发生的时候准备好即可。

00:15:28 - Saron Yitbarek

哦,这个不错。所以当你第一次开始做 “游戏日” 并思考如何为灾难场景做准备时,每个人都同意了吗?你得到任何反对意见了吗?

00:15:40 - Jesse Robbins

每个人都认为我疯了。因此,肯定有人反对。有趣的是,有一种非常简单的方法可以克服这种抵制,那就是首先创造出我称之为 “冠军” 的东西。你要教一小群人,如何以非常安全的方式工作,然后你能够使用一些信服的指标。你能够说,看,让我们只需衡量发生了多少分钟的中断,我的团队经过了这种培训并以这种方式进行操作的停机时间有多少分钟。相反,你的团队没有这个,并且似乎认为进行这种类型的培训和练习没有价值或者不重要。

00:16:25 - Jesse Robbins

你一旦完成了这种事情,基本上就会有我所说的引人注目的事件。因此,经常会有断电或其他事情让组织突然意识到:哦,我的天哪,我们不能再像以前那样继续做事了。这就是你用来说服怀疑论者的方法。你一方面使用数据和性能数据,再结合指标,然后讲故事,然后等待一个大的故障或者可怕的事情发生。然后,你就可以说,如果我们要在 web 规模或者互联网规模上运维,整个组织都需要这种应变能力。

00:17:06 - Saron Yitbarek

嗯嗯。所以我喜欢它的原因是它不只是停留在亚马逊内部。相反,它在传播。很多其他公司也在这么做。很多人最终接受了要为故障做好准备这个知识和过程。那下一步是要做什么?我们如何将从 “游戏日” 中学到的知识继续运用到未来的项目和公司中?

00:17:31 - Jesse Robbins

我喜欢把它称为趋同进化。每个在 web 上运行的大型组织现在都采用了我提倡的事件管理基础的一个版本,并创建了他们自己的 “游戏日” 测试。比如,Netflix 将其称为 “混乱猴子”。谷歌有他们的 Dirt 计划。

00:17:57 - Saron Yitbarek

那么你对未来的 “游戏日” 有什么寄望呢?

00:18:00 - Jesse Robbins

首先让我感到兴奋的是,我们可以看到人们从闭门造车思维的转变。系统从根本上是相互联系,相互依赖的,而且由世界各地试图有所成就的聪明人构建和运行的。

00:18:22

几年前,当我刚参加工作时,对运维工作毫不关心,我觉得那非常无趣。然后突然的,我们发现自己能够传播这样一种理念:开发人员和运营人员一起工作是在互联世界中构建和运行有意义的技术的唯一途径。

00:18:44

所以我对未来的希望是,第一,我们看到越来越多的人接受这些想法并学习它。明白了当你建造了人们依赖的东西时,你有义务确保它是可信赖的、可用的、可靠的,它是人们可以作为日常生活的一部分来使用的东西。

00:19:05

而且我们也看到了一种新的学科的诞生。“游戏日” 的这种思维模式正在被研究,也有博士正基于这个撰写博士学位论文。它正在不断建立中。

00:19:16 - Saron Yitbarek

这真的是太棒了。

00:19:16 - Jesse Robbins

也有写这方面的书,但是包含这些新资源的没有。只有少数人在会议上谈论他们认为世界应该怎么运转。所以我的那种鼓舞人心的希望是,你要明白如果你正在构建软件和技术,那么你真的成为了社会基础设施的一部分。所以作为一名消防员,我所努力贡献的一系列技能和正在出现的技术,这些技术将使它走得更远,它们是建造人们日常生活所依赖的东西的基础的一部分。

00:19:53 - Saron Yitbarek

很好。这是一个很好的结束方式。Jesse,谢谢你抽出时间来。

00:19:56 - Jesse Robbins

是的,谢谢。

00:11:59 - Saku Panditharatne

我认为所有这些因素都不利于采用最佳软件。

00:20:02 - Saron Yitbarek

在 Jesse 看来,像 “游戏日” 或者 “混乱猴子” 这样的演习是我们不断发展的科技文化的重要组成部分,但它们对于整个社会也至关重要。我很喜欢他很重视这个,因为他是对的。我们的世界取决于我们所做的工作。早在 90 年代,当电话网络开始崩溃时,这一点就很明显了。

00:20:26 - 众议院小组委员会代表

我们所知道的现代生活几乎陷于停顿。

00:20:31 - Saron Yitbarek

这是一种伴随的责任。我们有责任关心安全和可靠性,关心我们所建造东西的弹性。当然,当谈到在 DevOps 中的构建安全性时,我们才刚刚开始。

00:20:53 - Saron Yitbarek

这是 Josh Bressers。他是数据搜索软件公司 Elastic 的产品安全主管。对 Josh 来说,尽管计算机行业已经成熟了半个世纪左右,但我们在这里讨论的安全问题却让人觉得它是刚刚才出现的。

00:21:11 - Josh Bressers

实际上,就像我想说也行作为一个专业,安全仍然是非常新的东西,有很多事情我们还不是很了解。

00:21:19 - Saron Yitbarek

但我们确实明白,在 DevSecOps 的世界中,有一些非常好的机会可以创造性的思考安全能达到什么成就。

00:21:29 - Josh Bressers

我最近和一些人讨论了一个概念,他们利用用户行为来决定用户是否应该能够访问系统。每个人都有特定的行为,比如他们来自哪里,他们访问系统的时间,他们打字的方式,他们移动鼠标的方式。所以我认为,如果我们做得好,他们的这些行为,可以产生一些非常强大结果,如果我们能做到这一点,我们可以注意到有人在做什么。然后假设我表现的很奇怪,因为我刚刚扭伤了手臂。但你知道,另一端并不知道。

00:22:05 - Josh Bressers

因此,它可能会说,这种行为就有些奇怪,我们就会希望你使用双因子认证登录,并且还会向您发送条短信或其他内容,对吧?这就从用户名和密码变成了更有趣的东西。所以我认为用新的和独特的方式来看待这些问题将是关键。在很多情况下,我们只是还没到那一步。

00:22:27 - Saron Yitbarek

实现这一目标需要我们所描述的两大步骤。第一步,就是自动化,这很重要,因为……

00:22:35 - Josh Bressers

人类很不擅长重复地做同一件事。

00:22:38 - Saron Yitbarek

很公平。然后,我们有了第二步,就是文化,无论我们的职称是什么,我们所有人都有不安全感和责任感。

00:22:49 - Josh Bressers

当大多数人想到安全团队时,他们不会认为那是一群快乐的好好先生,对吧? 一般来说,这些人都很可怕,脾气暴躁,令人讨厌,如果他们出现了,就会毁了你的一天。没有人想要这样,对吧?

00:23:10 - Saron Yitbarek

但我认为我们可以克服这种偏见,因为我们必须这样想——每天都有更多的安全威胁发生,而且 IT 基础设施每天都在变得更大、更强。把这两个事实放在一起,你最好可以生活在一个被安全环绕的世界里。一个非常 DevSecOps 的世界,在这个世界里,开发人员和运营人员都在提升他们的安全,提高他们的可靠性。我所谈论的是一个自动化被整合到每个阶段的未来,每个人对这些问题的态度变得更加全面。这就是我们保护未来系统安全的方法。这是我们保持电话响,灯开,所有现代生活健康强壮的方法。如果你查一下《福布斯》全球 2000 家公司的名单,也就是前 2000 家上市公司,你会发现其中整整四分之一的公司都采用了 DevOps。集成的敏捷工作场所正在成为规则。并且在几年之内,关于 DevSecOps 的思考可能会成为第二天性。我们希望尽可能快,但是当团队中的每个成员都齐心协力时,长距离比赛实际上会更快。

00:24:40 - Saron Yitbarek

下一集,我们将面临数据的大爆炸。人类已经进入了 泽字节 Zettabyte 时代。到 2020 年,我们将在服务器上存储大约 40 泽字节的数据,而这些信息大部分甚至现在还不存在。但是我们该如何让这些数据有用呢?我们如何使用高性能计算和开源项目让我们的数据为我们所用呢?我们会在 Command Line Heroes 第 6 集中找到答案。

00:25:13 - Saron Yitbarek

提醒一下,我们整季都在致力于《代码英雄游戏》的开发。这是我们自己的开源项目,我们很喜欢看着它的诞生,但是我们需要你来帮助我们完成。如果你点击 redhat.com/commandlineheroes,你可以发现如何贡献。你也可以深入了解我们在这节课中讨论过的任何内容。

00:25:39 - Saron Yitbarek

《代码英雄》是红帽原创播客。你可以在 Apple Podcast、Google Podcast 或任何你想做的事情上免费收听。我是 Saron Yitbarek。坚持编程,下期再见。

什么是 LCTT SIG 和 LCTT LCRH SIG

LCTT SIG 是 LCTT 特别兴趣小组 Special Interest Group ,LCTT SIG 是针对特定领域、特定内容的翻译小组,翻译组成员将遵循 LCTT 流程和规范,参与翻译,并获得相应的奖励。LCRH SIG 是 LCTT 联合红帽(Red Hat)发起的 SIG,当前专注任务是《代码英雄》系列播客的脚本汉化,已有数十位贡献者加入。敬请每周三、周五期待经过我们精心翻译、校对和发布的译文。

欢迎加入 LCRH SIG 一同参与贡献,并领取红帽(Red Hat)和我们联合颁发的专属贡献者证书。


via: https://www.redhat.com/en/command-line-heroes/season-2/the-one-about-devsecops

作者:Red Hat 选题:bestony 译者:mrpingan 校对:bestony, wxy

本文由 LCRH 原创编译,Linux 中国 荣誉推出

代码英雄讲述了开发人员、程序员、黑客、极客和开源反叛者如何彻底改变技术前景的真实史诗。

什么是《代码英雄》

代码英雄 Command Line Heroes 是世界领先的企业开源软件解决方案供应商红帽(Red Hat)精心制作的原创音频播客,讲述开发人员、程序员、黑客、极客和开源反叛者如何彻底改变技术前景的真实史诗。该音频博客邀请到了谷歌、NASA 等重量级企业的众多技术大牛共同讲述开源、操作系统、容器、DevOps、混合云等发展过程中的动人故事。

本文是《代码英雄》系列播客第二季(3):准备提交音频脚本。

导语:想进入开源领域但不知道从哪里开始?你是一个贡献者,想知道为什么只有一些 拉取请求 Pull Request 被接受?或者,你是一个感觉有点不知所措的维护者?
这一集将探讨投身于一个开源项目的意义。我们将跟随我们的英雄们,跟着他们在开源贡献者的角色中不断进步:从寻找项目并为其做出贡献,到建立和维护繁荣的社区。Shannon Crabill 在 2017 年的 Hacktoberfest 上分享了她是如何开始从事开源工作的,而 Corinne Warnshuis 则介绍了将来自各种背景的人纳入到创造优秀软件的过程中是多么重要。
为开源做出贡献的方式有很多。让我们一起来了解一下。

00:00:03 - Nolan Lawson

在我刚开始做软件开发的时候,我基本上只做些让自己开心的小项目,像小应用程序、命令行小工具之类的。

00:00:12 - Lindsey Tulloch

我只是真的不知道作出贡献那么容易。而且你不需要解决 P = MP 那样的难题,你的投入依然可以是很有价值的。

00:00:21 - Kanika Muraka

本地社区使我有了足够的信心去做出贡献。

00:00:28 - Saron Yitbarek

当我还完全是个编程新手的时候,我和我的朋友 Dan 一起发起了我的第一个开源 拉取请求 Pull Request (PR),这也是我的第一次开源贡献。

00:00:42

我听过很多为开源做贡献的故事,说它有多么神奇,有多么可怕。我很清楚,并非所有社区都和善,也不是所有维护者都很友好。

00:00:57

那个项目本身对新手来说相当不错。我们只是添加了一个 JavaScript 库,让人们可以在线预览网站。这是一个很好的适用范围很广、自成体系的项目。而且如果这玩意儿不起作用,我基本上确信它不会毁掉整个网站。

00:01:18

然而,我对这个 PR 非常紧张。我和 Dan 阅读了这个库的文档,埋头于写我们的代码。我仍记得当我们最终完成的时候,只是互相看着彼此,好像在说:“就这样吗?”我们发起了 PR。它被审查,然后合并,我想我至今还是对这一切感到惊讶,我还是不知道这些机制是怎么运行的。

00:01:43

这并不是什么只有他们才能做到的,也不是什么神秘或神奇的事情。我意识到我确实也可以对开源作出贡献。这是我们在这一集中想要传递的一点知识 —— 为开源做出贡献并不神奇,它也不一定可怕。我们将带你一起走过这个过程。

00:02:05 - Lindsey Tulloch

这是一个突破性的认识,这些项目实际上是完全开放的,我也可以做出贡献。

00:02:15 - Saron Yitbarek

在这一场的开场白中,你会听到像你一样的代码英雄在加入开源行列时,经历着同样的恐惧。他们分别是 Nolan Lawson、 Lindsey Tulloch、 Kanika Muraka,这些是今天来做客的代码英雄。

00:02:34

你正在收听的是红帽公司的原创播客节目《代码英雄》。我是主持人 Saron Yitbarek。

00:02:47

这是一个关于两个代码英雄的故事,他们只是想在广阔的开源世界中,做出更好的东西。他们其中一个人是贡献者,另一个人是维护者。他们都不是真实存在的人物,而是两个虚构人物,用来代表所有的贡献者和维护者,他们和我们分享了他们的故事。希望你也可以在他们的历程中看到一些你自己的影子。

00:03:16

首先来见一见我们的朋友 —— 贡献者。她是个新手,就像曾经的我们那样。她不确定基本的工作流是什么,但是她看到了一个需求,并且认为她可以添加一个功能来提供帮助。我们这个虚构的贡献者很想提交代码,但是该怎么做呢?

00:03:44 - Corinne Warnshuis

你一直在成长,学习新技能。而且你不一定必须在孩提时代拆过电脑,才有资格在成年后学写代码。

00:03:52 - Saron Yitbarek

这位是 Corinne Warnshuis,一个名叫“Girl Develop It” 的很棒的组织的执行董事。该组织的目的是帮助那些可能不太敢提问的,或在聚会中觉得自己不太受欢迎的女性。

00:04:07

Girl Develop It 意识到做出贡献的难度并不是对所有人而言都是一样的 —— 这是社会造成的问题。作为社区,我们的一部分职责,就是要让世界多一点同情心,以及包容健康多元文化。

00:04:22 - Corinne Warnshuis

在我们看来,加入开源的壁垒有很多,但我们喜欢称它们为“没有充分的理由”,有三个这样的壁垒将女性专门排斥在技术之外,它们是:刻板印象、可及性和环境。

00:04:40 - Saron Yitbarek

值得记住的是,促进多元化不仅具有良好的道德意义,同时也有商业意义。

00:04:48 - Corinne Warnshuis

作为一个行业,技术可能拥有着最大潜力,能给当今世界带来最大的变化。你确确实实希望,来自各行各业的人们都为塑造世界的工具、服务和其他事物做出贡献。我认为来自各种背景的人们一起开发软件,并为开源项目做出贡献真的非常重要。

00:05:13 - Saron Yitbarek

事实是,我们并非一开始就拥有同样的优势和经验。下一代的伟大开发者可能看上去并不像硅谷的程序员。

00:05:23 - Corinne Warnshuis

面对面指导对人们而言,历来是非常昂贵而又难以获取到的。再者,我认为从 2014 年至今,情况有所改善。我认为除了 Girl Develop It 之外的组织(比如 Outreachy 和 CodeNewbie ),正通过提供安全的网络或空间,来提出问题并获得更多的舒适感来做到这一点。

00:05:49

为这些想法和问题提供一个安全而友好的测试平台,是一个不错的起点。

00:06:02 - Saron Yitbarek

说到新手,回到我们正在追踪的那个贡献者。倘若你不是来自主流背景时,那么第一次提交可能会压力非常大。感觉就好像你必须得证明你自己。不过一旦我们将加入的壁垒降得足够低,我们在准备做出贡献时,实际需要考虑的是什么呢?

00:06:23 - Vincent Batts

对某些项目感到兴奋这事很酷,但你想要解决的用例是什么呢?

00:06:31 - Saron Yitbarek

Vincent Batts 在红帽主要从事容器架构方面的工作。他鼓励新的贡献者尝试并有针对性地开展工作。找到你和项目一起有意义的那个利基。

00:06:45 - Vincent Batts

我认为一个可让人持续贡献的项目通常来自于互惠关系。它满足了你的一个需求,而且在这个过程中你又发现了满足它的需求的方式。即使它是一个由人构成的社区,它也已经成为了一种共生体系。

00:07:01 - Saron Yitbarek

比方说:

00:07:02 - Vincent Batts

因为朋友的推荐,我最终弄了一台 Slackware Linux 机器。它非常适合我想做的事情,我帮着将其打包到了主流 Slackware Linux 社区,并最终成为了这个项目的贡献者和维护者。这并不是因为我想成为 Slackware Linux 社区的贡献者,而是因为这是最适合我的一个项目,它的用例正好是我一直致力于解决的事情。

00:07:33

我想很多人都会遇到这种情况,他们因自己量身定制的用例而编写一个数据库软件。他们发现用 Golang 编写很合适,因此他们写了这样一个高性能的数据库,所以他们能够对 Golang 做出修复或优化方面的贡献,以帮助他们的数据库运行得更快。

00:07:54 - Saron Yitbarek

你可以找到你自己的小众领域,并开始自然发展。关键在于,从某处开始去做。你不必等待有了学位或绝对的自信才开始。

00:08:08 - Vincent Batts

如果你需要直接编写代码或文档的经历,或是成为一个后端数据库、Web 服务器的系统管理员,那么好消息是,大部分社区都是基于志愿者构成的。你可以参与诸如 Debian、Fedora 或其他一些类似的项目,这些社区都建立起了文档页面。那些项目必须在某处的 Web 服务器上运行,一些人,甚至是一个没有薪酬的、正在积累经验的社区成员,负责去检查 Web 服务器是否停机或出了什么问题。

00:08:43 - Saron Yitbarek

Vincent 强调了开源的平等主义本质。无论你来自哪里,只要你愿意,都可以真正开始做出贡献。如果你想的话,你可以为自己扬名立万。

00:08:57 - Vincent Batts

一旦它被合并,你的名字就会附在某个项目上。你可以公开表示你在某个地方做出了改进,这是相当有意义的事情。

00:09:11

我曾与那些不是从事日常技术工作的电视修理工和教师共事过,他们很有代表性。他们也在社区上做出了很多贡献。另一方面,我也曾和一些开发者合作过,他们有的能有 30 年开发经验,但他们从来没有像那样公开贡献过代码。

00:09:40 - Saron Yitbarek

对了,我们的贡献者怎么样了?嗯,她找到了她的定位。她克服了她的恐惧,并最终发起了她的第一个 PR。现在她可以休息一下,并战战兢兢地等待维护者作出回复。

00:09:56 - Vincent Batts

向上游做贡献有点像第一次上台做才艺表演。你会感到紧张,走上舞台后手心冒汗。你做了一件事,然后它好像就变成了你的成就。你将被彻底改变,跟过去不再一样。

00:10:17 - Saron Yitbarek

彻底改变?或许吧。事实上,维护者有四种可能的回应:沉默 —— 这很有趣,也可能是完全拒绝,或是直接接受,或是柔和的中间立场 —— 要求修改。

00:10:37

提交 PR 的几天后,我们虚构的贡献者终于收到了来自维护者的回复。跪迎结果吧,是要求修改。作为一个新手,她将这视为一场小型灾难。她还不知道要求修改是个实际上是成功的一步。她甚至还对维护者的简略语气感到一点气愤,听上去就像维护者没空搭理她一样。

00:11:03

这里存在着一堵墙,新的贡献者不知道墙的另一边正在发生什么。

00:11:12

我们来认识一位维护者。他正在维护的项目并不是他的全职工作。这是一个周末项目,他时常熬到深夜,给工单排优先级,并且提醒人们发起 PR 时更新文档,然后你就明白了。他相当忙碌,有时甚至出现了一些维护倦怠。

00:11:38

一位现实生活中的维护者,Nolan Lawson 写了一篇很棒的有关倦怠的文章,最近引起了很多关注。

00:11:51 - Nolan Lawson

老实说,我认为那篇博文有一部分实在寻求帮助。这是我表达我自己偶然发现了这个开源的项目,起初我觉得它确实很有趣,但现在却感觉没那么有趣了。我不确定该如何恢复兴致。

00:12:05 - Saron Yitbarek

Nolan 有一份日常工作,但和大多数维护者一样,他在开源项目中投入了大量的休息时间,因为这家伙真的很在意这个项目。讽刺的是,他的部分痛苦来自于,他清楚贡献者也同样很在意这个项目。

00:12:23 - Nolan Lawson

真正使我精疲力竭的实际上只是如潮水般涌来的好心人。你真的想帮他们,真的真的很想。他们所做的只是问一个问题,他们所做的就是 —— 他们在你项目中发现了阻碍他们的 bug,或者他们所做的只是 —— 他们真的费心去下载代码并弄清楚它是如何构建的,并提供 bug 修复。他们只是希望你审查他们贡献的代码。

00:12:43 - Saron Yitbarek

像 Nolan 这样的维护者正不断地审查 PR 库,弄清每个提交将如何发挥作用。他们促使贡献者尽可能做到最好,遵守内部限制,为了能让项目达到更高的水准,用最有意义的方式做出贡献。

00:13:06

我的观点是,那些维护者有可能不是一个新贡献者所担心的混蛋。他们正努力地想去做到一切。他们甚至会花时间标注一些东西保留给新手(很多维护者都这样),以便新手有机会施展自己。

00:13:27

但到最后,PR 和提交总是非常的多。我们要如何确保这种情况不会发生呢?我们该如何为维护者创造合理的环境呢?

00:13:41

一种解决方案是 —— 像 Fedora 这样拥有强大社区的开源项目。Fedora 项目负责人 Mattew Miller 解释了项目吸引维护者和贡献者的地方。

00:13:55 - Matthew Miller

Fedora 项目中许多不光是开发,还有开发过程中所相关的一切。总体来说,IT、 CS(计算机科学)事实上都是如此。开源可能并没有足够的这类围绕开源的支持性的角色。

00:14:11 - Saron Yitbarek

那种支持实际上看起来是怎样的呢?

00:14:14 - Matthew Miller

我们拿来举例的带薪角色之一是 Fedora 项目经理,他帮着让计划按部就班进行,并且监管着人们来保证文书工作完成。让人有酬劳地来做这份工作事实上可以帮着减少官僚主义,因为他们可以把时间花在使项目成为人看懂的事情,而不只是一堆杂乱的文件。

00:14:34 - Matthew Miller

我认为,像这样的企业参与某些角色,可以赋予你无法用志愿者保证的稳定性。

00:14:43 - Saron Yitbarek

这有点让我想起了自由职业者使用的共享工作空间。那里有一个共享的接待区、共享的 WiFi 和共享的咖啡。有一个人在管理它,然后你就可以自由地做你自己的事情。

00:14:55

Matthew 告诉了我们另一个 Fedora 采取的策略。他们让你想在项目中途停下来休息一下时,可以很自然,而不是感觉一切都崩溃了。

00:15:04 - Matthew Miller

我们研究的一个问题是确保领袖角色的漂亮退场,所谓的职位并不一定是终身的委任。你可以重新申请担任角色,并且不会在一年任期后结束后,看起来像被踢出去似的。如果六个月后你想离开,你可以优雅地这样做,而不必觉得这会让人失望。我们已在努力确保人们可以没有障碍地退出。

00:15:27 - Saron Yitbarek

Matthew 认为,找到支持该开源社区的方法,而又不至于重蹈覆辙才是关键。

00:15:35 - Matthew Miller

社区几乎就像一个家庭,而不是工作场所之类的东西。在这里做出贡献很有意义,因为你不仅只在为自己或是某些薪酬或终端产品工作。而且由于共事的是你的朋友,你们一起工作能做出比单人作品更伟大的东西。

00:15:56 - Saron Yitbarek

无论是 Fedora 还是其他社区,它们都造就了一个开源贡献得以持续的世界,这个世界还值得努力让它继续变好。

00:16:10

同时,让我们回到办公桌旁,我们关注的那个贡献者刚完成了维护者要求的修改。她还没意识到,但她即将拥有第一个被接受的 PR。

00:16:24

当我们谈论诸如倦怠之类的长期工作的问题时,很容易忽视那些早期问题。每天都有很多新的贡献者加入进来。这实际上就是为什么我们需要构建可持续的社区,为所有这些开源魔术提供场地。

00:16:49

最终,我们的贡献者和维护者共同努力,推动事情向前发展。故事的最后一句话 —— 记住所有的交流都依赖于 GitHub 和 GitLab 之类的开发平台,这些平台使得我们可以聚集到一起。

00:17:09

我想深入探讨一下这些社区是如何使我们的工作成为可能的。我和 Shannon Crabill 谈过这个问题。Shannon 白天是个电子邮件开发者,但到了晚上,她正在学习前端开发。她也是一个对社区价值有第一手了解的人。

00:17:28

去年她参加了一个长达一个月的名为 Hacktoberfest 的开源活动,该活动旨在让更多的人为开源做出贡献。当时, Shannon 完全是一个开源新手。

00:17:44 - Shannon Crabill

回想起十月那时候,我感觉我没有太多工作要做,而且可能还有更多的新手,没找到需要做的东西。如果我提出一些相对容易的待办事项,他们就可以找到用于尝试和学习的突破口,并且开始习惯使用 Git 和 GitHub。

00:18:04

我认为最困难的部分,在于习惯工作流程并付诸实践。如何推送存储库?如何分享项目?如何处理 PR 和相关的东西?我帮助人们对开源做出了贡献,这事令人惊讶,感觉也确实很棒。

00:18:21 - Saron Yitbarek

真的很恐怖吗?我觉得如果你是个新手 —— 尽管你拥有存储库,也要走出自己的小世界,把自己放在社区里。现在,维护者所在的社区里出现了正在作出贡献的人,你必须和他们交谈,审查他们的代码并发表意见。这听上去是有点吓人。

00:18:42 - Shannon Crabill

我认为最初的反应是,“哦,我的天哪,这太酷了”,还有,“天哪,我让自己陷入了什么境地?”我意识到我只合并过自己的代码,合并过自己的 PR 并将其推送到自己的站点上,以及其他所有只关于自己的事情,我从没处理过别人的东西。我认为我之前尚未完成过真正意味上的合并 PR,所以我不得不把这弄清楚。总的来说,将复杂的东西简单地合并起来,仍然是我要努力熟练解决的问题。

00:19:09

这是旋风一样的感觉,“这很酷,但我不知道该怎么做。”每个人都很友好,并且我也努力保持非常友好和真诚,即使只是,“嘿,我有点不知所措。我看到了每个人提交的 PR。虽然今晚我不会找他们,但我明天会的。”人们对这种情况似乎反应良好。

00:19:26 - Saron Yitbarek

是的。当你维护一个项目时(尤其是作为一个新的开发者时),我一直想知道的是,是不是这意味着你必须是整个存储库贡献者中最聪明的人?你实际上在评估、评判并审查其他人的代码。你是否遇到过,自己懂的东西不如提交 PR 的人那么多的情况?你是如何处理的?

00:19:55 - Shannon Crabill

好问题。我认为,“噢,我需要成为有史以来最聪明最好的开发者”,这样的想法会成为障碍。我觉得自己很幸运,当我进入这个领域的时候,我没有这样想,所以我能像这样说,“让我们先开始,并且期待未来会发生什么吧。”

00:20:12

你无需成为一个有 20 年经验的高级开发人员。你只需要有一个好点子,知道如何使用相应软件,然后愿意去学习自己不知道的东西。

00:20:22

肯定有一两个 PR 为我的项目添加了一些很酷的功能,说实话,如果它们崩溃了,我真不知道该如何修复。我可能会看着代码然后想道,“是的,它崩溃了。”我不知道该怎么做才能从头构建它们。

00:20:34

我认为这就是它酷的地方。如果只有我一个人在做贡献,我可能就做了一些基本的工作,但没法像其他拥有丰富经验的人所作出的贡献一样,将项目变得那么酷。

00:20:45 - Saron Yitbarek

作为一个维护者,在使项目更易于访问,更加友好,更加易于贡献的过程中,你学到了些什么呢?

00:20:55 - Shannon Crabill

哦,确实有件我认为很有帮助,并且我希望我一开始就做的事,那就是尽可能的建立模板,以及文档、文档、文档。

00:21:07

我的确在我的 README 文件里加了很多东西,并且我认为在项目开始时有一个 README 文件确实是很重要的一步。这件事情意味着你对其他人大声说,“嘿,请查看我们的贡献指南。”我认为我制作了一个 PR 模板、一个议题模板,“单击这里查看当前议题”,这样人们才不会多次提交同样的内容。

00:21:31

我认为让项目尽可能简单,或尽可能对用户友好,这是你作为维护者需要迈出的一大步。

00:21:38 - Saron Yitbarek

绝对是这样,我经常看到 README 文件,经常听说他们有多么多么重要。我觉得在 README 文件里还可以做很多事情。归根结底,它就像是一个空白文档,告诉别人去阅读它。你应该在文档里写什么呢?你该如何构建它,来使得它真正与希望做出贡献的人产生关联呢?

00:22:00 - Shannon Crabill

我在我的 README 文件里放了很多 gif。

00:22:03 - Saron Yitbarek

很好。

00:22:05 - Shannon Crabill

我有 gif,也有链接。

00:22:07 - Saron Yitbarek

我一开始就知道 Shannon 已经认识到了合作关系的重要性。她早就知道,如果有人被邀请来协作,这项目就会变得耀眼,大家也会因此度过美好的时光。

00:22:20 - Shannon Crabill

有人用开源项目作出很棒的事情,我也认为这很有趣,而且有个有意思的项目,“嘿,我制作了这些很酷的蝙蝠,每次你单击页面的时候,它们都会随机生成。”

00:22:33 - Saron Yitbarek

我也喜欢人们做不同的事情。如果你真的很喜欢艺术性的东西,你可以做蝙蝠生成功能。如果你想让项目变得整洁,你也可以做。如果你想说,“我会坚持贡献文档,我将花时间为其他的贡献者们打造更干净,更舒适的环境”,那你也可以选择做这个。

00:22:56 - Shannon Crabill

是的。我已经说得很清楚了,无论你想贡献的是什么,都没有问题。如果你发现了一个拼写错误并且想要纠正它,很好。如果你发现某个链接损坏并且想要修复它,也很好。如果你只是想帮着注释这份代码,使得它更易于阅读和理解,那也将很有帮助。

00:23:12 - Saron Yitbarek

我认为,你在社区中获得了积极的反馈真的很棒,因为我听说过很多并不是这样美好的故事。人们在网络上并不十分友好,也不太热情善良,尤其是对我们这一些,可能会问出比他们想象中更简单问题的新手。

00:23:33

你认为,是什么使得你的社区,比起其他社区更加友好呢?

00:23:41 - Shannon Crabill

只是因为在我们社区,贡献是一件很随意的事。如果你想做出贡献,你可以,这很酷。如果你不想,那也很酷。我理解有人认为开源是一件令人恐惧的大事,你需要具备所有这些经验,并且了解所有这些复杂的语言,或是前后端以及其他的一切,才能够做出贡献。

00:24:03 - Saron Yitbarek

绝对是这样。做 Hacktoberfest,它是怎样改变了你现在对开源的想法?

00:24:11 - Shannon Crabill

它肯定对我造成了积极的影响。就像我说的,我有过很棒的经历,而且我希望每一个以某种方式参与我项目的人也能有很好的经历。这毫无疑问促使我想去尝试更多类似的事情,即使它们没有进一步的发展。现在这看起来这些项目更加平易近人了。

00:24:32 - Saron Yitbarek

真是个好消息。

00:24:34

这儿有个信息,来自数百家公司的数千人,以及一些根本没在公司工作的人,为 Linux 内核做出过贡献。这意味着基本上运行着互联网的 Linux 是由一群日常英雄在维护的。如果你渴望为开源作出第一次贡献,或许你会想了解有关 Fedora 社区的更多信息,我们有大量的资料正等着来帮助你。请查阅 redhat.com/commandlineheroes 以获得更多信息。

00:25:20 - Saron Yitbarek

快速提醒一下,这一季我们将构建我们自己的开源《代码英雄》游戏。欢迎你以对你来说合适的方式来做出贡献。快来了解如何成为其中一员吧。我们希望你可以通过 redhat.com/commandlineheroes 和我们一起开发这款游戏。

00:25:42 - Saron Yitbarek

下一集,我们将讨论残酷的达尔文式错误以及开源开发中失败的美丽之处 —— 它如何困扰我们,指导我们,并使我们变得更好。

00:25:57 - Saron Yitbarek

《代码英雄》是红帽的原创播客。你可以在 Apple Podcast、 Google Podcast 或是其他你喜欢的途径免费收听。我是 Saron Yitbarek,坚持编程,下期再见。

什么是 LCTT SIG 和 LCTT LCRH SIG

LCTT SIG 是 LCTT 特别兴趣小组 Special Interest Group ,LCTT SIG 是针对特定领域、特定内容的翻译小组,翻译组成员将遵循 LCTT 流程和规范,参与翻译,并获得相应的奖励。LCRH SIG 是 LCTT 联合红帽(Red Hat)发起的 SIG,当前专注任务是《代码英雄》系列播客的脚本汉化,已有数十位贡献者加入。敬请每周三、周五期待经过我们精心翻译、校对和发布的译文。

欢迎加入 LCRH SIG 一同参与贡献,并领取红帽(Red Hat)和我们联合颁发的专属贡献者证书。


via: https://www.redhat.com/en/command-line-heroes/season-2/ready-to-commit

作者:Red Hat 选题:bestony 译者:JonnieWayy 校对:acyanbird, wxy

本文由 LCRH 原创编译,Linux中国 荣誉推出

代码英雄讲述了开发人员、程序员、黑客、极客和开源反叛者如何彻底改变技术前景的真实史诗。

什么是《代码英雄》

代码英雄 Command Line Heroes 是世界领先的企业开源软件解决方案供应商红帽(Red Hat)精心制作的原创音频播客,讲述开发人员、程序员、黑客、极客和开源反叛者如何彻底改变技术前景的真实史诗。该音频博客邀请到了谷歌、NASA 等重量级企业的众多技术大牛共同讲述开源、操作系统、容器、DevOps、混合云等发展过程中的动人故事。

本文是《代码英雄》系列播客第二季(2):Hello, World音频脚本。

导语:每一种新的编程语言的诞生,都是为了做一些以前无法完成的事情。如今,有非常多编程语言可以选择,但哪些才是你真正需要了解的?

本集将深入探讨编程语言的历史。我们将会了解到被称为 “神奇葛丽丝” 的天才 —— 海军少将葛丽丝·哈伯。多亏了她,开发者不再需要数学博士的学历就能使用机器代码编写程序。参与录制的还有 Jupyter 项目的 Carol Willing,她是 Python 基金会的前理事;以及《 纽约时报杂志 New York Times Magazine 》和《 连线 Wired 》的撰稿人 Clive Thompson,他最近正在撰写一本关于程序员如何思考的书。

00:00:07 - 各种语言

“你好,世界。”

00:00:12 - Saron Yitbarek**:

你好,世界。现在我们发出的是信号还是噪音?我们日日夜夜无休止地写代码,做测试工作,我们追求的事情只有一个:我们是否传递了我们的信号?

00:00:29 - 各种语言

你好。

00:00:29 - Saron Yitbarek

或者我们的信号是不是丢失了?难道我们一直在制造无意义的杂音吗?

00:00:40

我是 Saron Yitbarek,这是代码英雄第二季,来自红帽原创播客。今天的话题将在“翻译”中挖掘。这关于编程语言的故事:它们是怎么来的,如何选择其中一个语言来学习。我们将深入研究如何与机器对话。探究这些语言是如何演化的,以及我们如何用它们来让我们的工作变得更好。

00:01:08 - Sari

Daisy,daisy,来告诉我你的正确回答。

00:01:11 - Saron Yitbarek

如果你像我一样是一个开发者,你可能也经受着去精通多种语言的压力。最起码你得会 Java,更好一些得懂 Python、Go、JavaScript、Node,甚至能够用 C++ 思考。也许为了增加可信度,可能你还要熟悉古典的 COBOL。甚至你还得学点新东西,比如 Dart。实在太累了。

00:01:36

奇怪的是,我们正在讨论的计算机只讲一种语言:机器语言,以二进制形式飘过的 1 和 0。说到底,我们学习的每个语言都是殊途同归。不管有多抽象,它都是用来简化我们工作的道具。

00:02:03

这就是我希望你们记住的,故事开始了,从那一刻,那一个经典辉煌的时刻,一个女人说:“你知道么?我是人类,我不想用二进制来讨论思考,我就想用英语去编程。”

00:02:22

在今天可能看来是一个简单的概念。但曾几何时,使用人类的方式与计算机对话这个主意 —— 说轻点是一个笑话,严重点就是亵渎。

00:02:37

代码英雄第二季,将讲述成就我们基础的螺丝钉展开。这一讲的英雄是一个女主人公,如果你想要进一步了解故事,你必须知道她的经历。在此给你们隆重介绍:软件界的第一夫人。

00:02:58 - 发言人

尊敬的先生们和女士们,我非常荣幸的给你们介绍 葛丽丝·玛丽·哈伯 Grace Mary Hopper 准将,谢谢。

00:03:02 - 葛丽丝·哈伯

我曾到加拿大的圭尔夫大学演讲,那时候我必须在多伦多的机场办理入境手续。我把护照递给移民官,他打量了护照和我说:“你是在哪里工作的?”

00:03:17

然后我说,“美国海军。”

00:03:20

她再次深深的打量我一下。然后他说:“你一定是海军里最老的。”

00:03:28 - Saron Yitbarek

她就是 1985 年担任海军少将的葛丽丝·哈伯。在麻省理工学院发表了著名的演讲时,她 79 岁。即使在那时,她也是一个传奇人物。她是独立编程语言之母,实现通过编译器,用人类语言替代数学符号编程这一伟大成就的女性。

00:03:51

她获得了国家技术奖章,她去世后(1992 年),被追授国家自由勋章。以上记录纯属真实,他们称她w为“神奇葛丽丝”。

00:04:03 - Claire Evans

如果有人能够被称为天生的程序员,那么这个人一定是葛丽丝。

00:04:06 - Saron Yitbarek

这是 Claire Evans,一个科技记者和《 宽带 Broad Band 》一书的作者,而这本书讲述了科技领域的女性先锋。Evans 描绘了早期的计算机世界,在 1940 年,当葛丽丝·哈伯还是一个年轻的女孩时,她加入了美军的海军预备役部队。当时的电脑有一个小房子那么大。

00:04:25 - Claire Evans

早期的那些程序员,他们就像一个圣职者。他们是一群擅长做枯燥乏味事情的人,因为那会儿没有编译器,没有编程语言,人们是确实是一个比特一个比特地对机器编程。

00:04:42

想要改变这种现实,你真的必须是一个特别的人,而葛丽丝真的就是那种人。

00:04:49 - Saron Yitbarek

现在,她意识到让人类使用机器语言的是一种多么疯狂的限制。就像走路的时候,去告诉你身体的每个原子该怎么做。这是可能的吗?是,效率呢?不高。

00:05:06

在程序员的意图和计算机的行为之间一定有一条捷径。自从有了算盘,人类一直在将数学思维机械化。一定有一种方法可以在计算机上再次实现这一点。

00:05:19 - Claire Evans

在过去,数学家必须做出所有的步骤。所有这些枯燥的,一步一步的工作都是为了得到一个真实而有趣的答案。然后有了计算机后,它尽可能地承担了这些机械的运算。所以解放了数学家去进行高层面的、更智慧的、面向系统的思考。

00:05:39

只不过,事实并没有如此发展。有了计算机,数学家就变成了程序员。他们又一次被这些枯燥无味的编程所束缚,做着这些一点一滴的繁琐的规则导向的小计算。

00:05:53

因此,我认为,葛丽丝的期望是,她希望计算机能够辅助数学家,然后数学家就可以去更进行宏大的思考,做更伟大的事情,而不至于让他们陷入细节之中。

00:06:12 - Saron Yitbarek

葛丽丝也加入了思想家的行列。我们都知道, 帕斯卡 Pascal 在 17 世纪发明了第一台计算器。 巴比奇 Babbage 在 19 世纪发明了分析机。这些伟大的杰作是发明家们解放人类的大脑的创作。这些发明让我们处理数据的能力空前绝后。这就是葛丽丝踏入的领域,发明了所有人都认为不可能的东西。

00:06:42 - Claire Evans

我觉得,葛丽丝的想法是,人们应该用人类语言与计算机沟通。这个语言必须独立于机器的,因此不同计算机可以交互操作,这在当时是革命性的。

00:06:59

早期她称这个为 “自动化编程”,在程序员和计算机人的群体中,被认为是像太空学员一样。

00:07:12

而那些迟迟不上岸的人们被看成了尼安德特人,这在当时是计算机界的一个巨大的分歧。

00:07:21 - Saron Yitbarek

葛丽丝要说服她的上级跨越这个分歧并不容易。但她认为这是她的责任,她必须尝试。

00:07:30 - 葛丽丝·哈伯

这里总是有一条线,那条线代表了你的老板在那个时候会相信什么。当然,如果你过线了是得不到预算的。所以你对那条线有双重责任:不要踩过它,但也要不断教育你的老板,让你把这条线移得更远,这样下次你就能走得更远。

00:07:52 - Saron Yitbarek

她推动的那个未来,就是我们的现在。几乎你我依赖的每一种语言都归功于她和她的第一个编译器。因此太空学员们活了下来,尼安德特人灭亡了。

00:08:07

写代码不用数字,而是用人类风格的语言是她的观点。你敲下“执行操作 8”,或“关闭 文件 C”的精简操作,才是符合人类习惯的编程。

00:08:21 - Claire Evans

葛丽丝独特地意识到,计算将成为改变世界的事情。但是如果没有人知道如何接触并使用计算机,那么它就不会成为改变世界的事情。因此她想确保它对尽可能多的人开放,尽可能多的人可以使用。

00:08:37 - Claire Evans

这就需要编程在可理解性和可读性上做一些妥协。因此最终创造一个编程语言的目标就是给机器提供更多切入点,让它脱离这个神职,让它的开发面向大众和未来新一代。

00:08:59 - Saron Yitbarek

我想在这里打断并强调下 Claire 的说法:现在我们所已知的编程语言,都来源于科技开放的愿望。这让计算机不再是数学博士们的专属玩具,让编程开发变得更容易。

00:09:14

编译器所有工作的本质,是让程序变得更好理解,更有人性。

00:09:21

Claire 有一个猜测,为什么葛丽丝是做出改变的那个人,这与她在二战期间的工作有关。

00:09:29 - Claire Evans

她的工作是解决扫雷问题、弹道问题和海洋学问题。她用很多不同的、交叉的学科来模拟战争里的所有的暴力、混乱和现实的灾难,并将他们转化成在 Mark I 计算机上运行的程序。

00:09:45

她知道如何在语言之间去做翻译转换。我的意思不是说计算机语言,是人类语言。她知道如何倾听一个提出复杂问题的人的意见,并尝试理解问题的背景,其信息和所涉及的专业规律,然后将这些转为计算机可以理解的程序。

00:10:06

从这个角度看她如同早期的编译器。就像一个人类版本的编译器,因为她知道你必须理解他们才能满足他们的需求。

00:10:17 - Saron Yitbarek

编译器干的事情就是一个解释和理解。我觉得我们应该在学习新语言,或想知道为什么有一些东西根本不能编译的时候牢记这个理念。编译器的工作就是满足你使用生活中说的语言来编程。

00:10:32

葛丽丝知道人类一旦可以学会讲编程语言,而编译器可以将我们的意图转换为机器语言,就像为洪水打开了大门一样。

00:10:43 - Claire Evans

她知道如果计算机太孤立和太具体,就不会发展为一个产业,从而成为改变世界的力量。也就是说计算机的从业者,可以让提出问题的人跟机器直接沟通。

00:11:00

因此她真的是一个善于人类语言翻译的专家,至少我是这么想的。这使她有独一无二的机会,去思考和创建编程语言。

00:11:15 - Saron Yitbarek

葛丽丝对英文式数据处理语言的研究最终演变成了 COBOL,它在某种意味上很不错。因为它不浮华,很适合商务用途,葛丽丝·哈伯也是这样的人。

00:11:28

从某种角度看,她给了我们一个很像她的语言。像葛丽丝一样,COBOL 语言也很长寿,它现在已经 60 多了。

00:11:50

葛丽丝的编译器就像一个 巴别鱼 babelfish ,在程序员和机器之间充当翻译,不过它们翻译的都是高度概括性的语言。

00:12:03

然后,几十年之后,另一个重要的思潮在语言界兴起。想象下画面:自由软件社区在 1980 年出现,但是 Unix 的替代品 GNU 被开发出来后,却没有任何自由开放的编译器随之出现。

00:12:22

为了让 GNU 给我们提供一个真正的开源 UNIX 替代品,为了让编程语言在开源世界蓬勃发展,社区需要找来一个格蕾丝·哈伯 —— 我们需要一个开源编译器。

00:12:38

这是 Langdon White,红帽的平台架构师,来讲讲他对这个事情的理解。

00:12:45 - Langdon White

在 80 年代,你要买一个编译器很轻松就要花上上万块钱。费用是最大的问题,我没有多余的钱去给自己买编译器。再一个事实是,我必须为所有我想要的目标平台买一个对应的编译器。那个时代大部分是 Unix 平台,但是细节和风格各不相同。

00:13:06

因此你就不能买一个,你需要为不同的架构,不同的供应商购买多个编译器。

00:13:14 - Saron Yitbarek

Langdon 指出这不仅仅是成本问题,在一些情况下,对编码工作也带来了问题。

00:13:21 - Langdon White

大家都没有意识到,你如何用很特殊的方式来组织你的代码是很重要的。做嵌套 for 循环或者做嵌套 while 循环之类的事情可能是可以的,这取决于编译器。

00:13:38

因此,大家都应该明白,如果你不知道编译是如何优化你的代码的,就很难知道如何写出最优的代码。

00:13:49 - Saron Yitbarek

必须要提的是,我们需要一个免费的、可获得的、可值得信赖的编译器。这就是 GNU C 语言编译器:GCC。它横空出世在 1987 年,它是格蕾丝·哈伯的编译器革命和自由软件运动的结合。

00:14:12

它是使编译更标准化,从而让所有人可以编译别人写的代码。我们编程语言的丰富性要归功于它。

00:14:22 - Carol Willing

GCC 是开放的,可以说将编程语言推向一个更高的层次。

00:14:29 - Saron Yitbarek

这是 Jupiter 项目成员 Carol Willing,她是 Python 软件基金会的前理事。

00:14:35 - Carol Willing

人们开始意识到,专有的语言会在特定时间内被服务于一个目的,但并不能得到开发者社区的认可和热爱。因为如果你是一个开发者,你希望学习最常用的,以及未来最流行的东西。

00:14:59

我没必要去发展一种将我锁定在一种技术上的技能。我想 Python 成功的一个原因是因为它是开源的,它有非常简洁的语法。

00:15:11

它的特点就是允许人们用常见的方法,快速高效地解决问题,也允许大家合作解决问题。我想这就是好的程序和代码库的标志:如果你可以用最小的工作量完成你的工作,并且与他人分享,这是确实很棒的事情。

00:15:35 - Saron Yitbarek

这么多年过去了,GCC 逐渐的支持了 Java、C++、Ada 和 Fortran 语言,我还可以继续说说它的进步。

00:15:43 - Carol Willing

通过像 GCC 这样的通用底层接口,人们可以根据自己的特殊需求来定制语言。例如,在 Python 的世界里,有大量的库,甚至具体到科学 Python 世界里,我们有 numpy,还有 scikit-image、scikit-learn 这样的东西。

00:16:08

每个库都是为一个特定目的而工作。因此,我们也看到了生物信息学和自然语言处理之类的东西。而人们可以在一个共同的基础上,做出很多不同的事情。而且可以把它们放到编程语言或库里,使他们能够在他们特定的行业或领域中优化问题的解决。

00:16:42 - Saron Yitbarek

因此,这就是编译器技术一头撞进开源运动的结果吧?随着时间的推移,这种不同技术的碰撞,爆炸般地创造了一个新的、被社区支持的语言,大家都可以学习和完善它。

00:16:58

现在有成百上千的编程语言存活着。

00:17:03 - Carol Willing

随着开源软件越来越流行和被广泛接受,我们看到了编程语言的大量激增。现在有大量围绕着手机技术的编程语言,不同的编程语言也让游戏开发更加简单快速便捷。各种用途的语言,如 Python 和 Ruby,它们算是现代网页开发和交付网页应用和网站的基础。

00:17:34 - Saron Yitbarek

这个队伍还会继续壮大。是的,我们建造的这个巴别塔在未来会更加拥挤。但是你可以把它当作一个聚宝盆,一个语言的盛宴。下面我们将会帮你们梳理这个盛宴。

00:17:55

现在我们已经知道编程语言泛滥的原因了。但是这些对我们有什么具体的意义?我们如何选择对我们重要的语言呢?这是个大问题,因此我们找了一些人帮忙:Clive Thompson,是最好的作家之一,他能让科技世界变得更有意义。他是《连线》的专栏记者,《纽约时报》杂志的特约撰稿人,他现在正在写一本关于计算机程序员心理学的书。

00:18:24

当我们挑选我们想要学习的编程语言时,我们需要知道我们到底想要什么。

00:18:31

这是我和 Clive 反复讨论得出的结论。

00:18:35

当我作为一个开发新人第一次入手的时候,我就说:“让我选一个最好的编程语言,然后掌握并熟练运用它,不就完事了么。”

00:18:44

不过事情不会这样简单,否则为什么有那么多的编程语言呢?

00:18:49 - Clive Thompson

每个语言都有那么点它的特长。因此通常来说,有人创造一个新语言是因为现有的语言满足不了他们的需求。JavaScript 就是一个典型的例子。

00:19:03

网景公司 Netscape 曾经在 90 年代中开发了一款浏览器,所有的网站管理员想做一些更具交互性的事情。他们希望有一种方法,使其可以在网站上运行一些脚本。

00:19:16

当然这些需求都提给了网景。然后他们说:“好吧,现在我们没有可以做到这一点的办法,我们需要一个可以集成到我们浏览器的脚本语言。”

00:19:25

于是他们雇佣了 Brendan Eich,一个被认为很资深的家伙。他当时 32 岁,其他人 21 岁的样子。

00:19:32 - Saron Yitbarek

这在开发者圈里就很资深了

00:19:35 - Clive Thompson

他们给他 10 天时间开发 JavaScript。因此他真的就 10 天没有睡觉,然后疯狂地捣鼓出一个脚本语言。它看起来有点挫,有点糟,但是可以运行。它允许人们做一些简单的事情,它还有按钮,对话框,弹框和其他东西。

00:19:54

这就是造一个编程语言的例子,用来做在当时没有办法完成的事情。

00:20:01 - Saron Yitbarek

是不是很有意思。

00:20:03 - Clive Thompson

这就是为什么存在这么多编程语言,人们不断进取,去做别人做不到的事。

00:20:11 - Saron Yitbarek

这也是为什么我对开发者和编程语言之间的关系很感兴趣,我们对这些工具有很强的依赖性。为什么呢?

00:20:22 - Clive Thompson

有几个原因。一个是有时你学习你的第一个编程语言完全是一场意外,有点像你的初恋。

00:20:30

我觉得不同性格的人,也会匹配不同类型的编程语言。例如 Facebook 是用 PHP 设计的。PHP 是有点像毛球,它很不规则,它的成长断断续续,Facebook 也有点这种感觉。

00:20:49

与此相反,来自谷歌的伙计决定:“我们想要一个超高性能的语言,因为在谷歌我们的东西都高速运行着,维护着万亿级的用户吞吐。”

00:21:02

因此他们决定开发一个 Go 语言,Go 非常适合高性能计算。

00:21:08 - Saron Yitbarek

让我们深入一点。作为一个开发者,我有自己的个性,我是不是对一部分编程语言有天然的喜欢呢?或者我工作用的编程语言可能会影响我的个性?

00:21:25 - Clive Thompson

两者肯定都存在。但我确实认为当你遇到你喜欢的编程语言的时候,有一种强烈的共鸣感。你上计算机课程时学习了必修语言:他们都教 Java,有时会多教一门 JavaScript 或 Python。

00:21:46

问题是,你被强制要求,所以你学了它。但当你有选择余地时会怎么样呢?这就是你真正看到一个人的那种情感或心理风格是如何倾向于一门语言的地方,因为我和一个人谈过,他试着学了一堆 JavaScript。

00:22:03

这是个看起来有点丑的语言,它简直是花括号的噩梦。所以他试了又试,试了又试,失败了又失败。直到有一天他看到朋友在用 Python。在他看起来,这是多么的纯净和美妙的语言。因为他是个作家,而 Python 被认为是一个书写型的编程语言,缩进使一切都易于阅读。

00:22:28 - Clive Thompson

它和他一拍即合,主要在于 Python 的工作方式和外观,漂亮的排版打动了他。

00:22:39 - Saron Yitbarek

和 Clive 的交流让我意识到,有一些编程语言是硬塞给我们的。我说的是那些古老的编程语言,已经类似于拉丁语了。

00:22:53

其实我们也有很多选择,去选择适合我们个性的编程语言。如果你想知道最新的东西有哪些,你去问问开发者们周末在用什么就知道了。

00:23:05

下面是我们对话的更多内容:

00:23:08 - Clive Thompson

当我问人们:“你闲暇的时候做什么?”回答肯定是些稀奇古怪的东西。我想实际上其中一个好的,最值得称颂的开发者的特点,就是他们是富有好奇心。

00:23:22

我知道有人会说,“我要学习 Erlang了,就是为了好玩。”

00:23:26 - Saron Yitbarek

我尝试想象人们在周末开发这些项目,项目不是最重要的,他们在学习工具,编程语言才是重要的事情。这才是他们真的想要的状态。

00:23:41 - Clive Thompson

确切的说,你将看到为什么大家不停的重复迭代开发这些日历和待办事项,因为这是一个快速的学习方法。但需要指出的是,编程语言做了什么以及如何工作都与我们没关系,我只需要尽可能的构建我的东西。

00:23:56

他们想知道用那样的编程语言思考是什么感觉。是不是会感觉很轻松、刺激、游刃有余?我目前的使用的语言没这个感觉,是不是入门之后一切事情都变得简单了?

00:24:13 - Clive Thompson

很有可能你遇到一个新语言后会非常兴奋,想起来都很兴奋。

00:24:20 - Saron Yitbarek

我是一个 Ruby 从业者,作为 Ruby on Rails 开发者我非常自豪,我想大概是两年前,另一个非常著名的 Ruby 开发者,Justin Serrals 做了一个非常好的演讲,倡导编程语言从实用角度出发,没有必要那么性感。

00:24:41

他的观点是,Ruby 之所以是一个令人兴奋的编程语言的原因在于它很新,而且差不多几年前都已经得到印证了,它已经不需要更新什么了。它已经是一个稳定、成熟的编程语言了。不过因为它的成熟,开发者对它也就不那么兴奋,我们逐步把目光转移到新的花样来了。

00:25:05

从某个意义上说,很有可能我们的好奇心会扼杀了一个编程语言,或者让它变得庸俗,而这与编程语言本身的好坏没有关系。

00:25:18 - Clive Thompson

我认为这是完全正确的。事实上,你看到的开发者这个极度好奇心和自学欲望的特点,会让他们不断地寻找新鲜事物。并用这种语言去复制其他语言已经基本做得很好的东西。

00:25:37 - Saron Yitbarek

是的。

00:25:37 - Clive Thompson

就是这样,好奇心有好处,同时也是一个陷阱。

00:25:43 - Saron Yitbarek

是的,说的很好。

00:25:49

有时我们的好奇心可能是一个陷阱,但是它也是编程语言革命的动力。开发每个新编程语言的时候他们会说,“有没有别的可能?”它们出现的原因在于,开发人员想要做不一样的事情。

00:26:06

我们想要全新的表达方式。

00:26:08 - 葛丽丝·哈伯

我向你们承诺一些事情。

00:26:11 - Saron Yitbarek

我想葛丽丝·哈伯想在这儿最后讲两句。

00:26:15 - 葛丽丝·哈伯

在未来 12 个月里,你们谁要是说我们一直都是这么做的,我将会瞬间实质化在你的旁边,然后我 24 小时围绕着你。我倒是要看看我能不能引起你的注意。我们不能再相信那句话,这是很危险的。

00:26:34 - Saron Yitbarek

葛丽丝的故事和第一款编译器提醒我们,只要能可以找到表达方法,我们总有更好的办法做事情。

00:26:43

不管编程语言有多抽象,不管我们在机器的 1 和 0 高位还是低位浮动,我们都需要确保它是一个明智选择。我们选择一个语言,是让它帮助我们的想法更容易表达出来。

00:27:03

如果你想更深一步学习编程语言和和编译器,你不会很孤独,我们收集了一些很有用的文档帮你深入学习。敬请在我们节目下面留言。请查看 redhat.com/commandlineheroes

00:27:20

下一期节目,我们将关注开源贡献者的艰辛之路。那些维护者的真实奋斗生活是什么样的?我们如何提出第一个拉取请求?

00:27:32

我们将带你们简单认识开源贡献。

00:27:39

代码英雄是红帽的原创播客。你可以在苹果播客、谷歌播客以及其他可能的地方免费收听这个节目。

00:27:48

我是 Saron Yitbarek,坚持编程,下期再见。

什么是 LCTT SIG 和 LCTT LCRH SIG

LCTT SIG 是 LCTT 特别兴趣小组 Special Interest Group ,LCTT SIG 是针对特定领域、特定内容的翻译小组,翻译组成员将遵循 LCTT 流程和规范,参与翻译,并获得相应的奖励。LCRH SIG 是 LCTT 联合红帽(Red Hat)发起的 SIG,当前专注任务是《代码英雄》系列播客的脚本汉化,已有数十位贡献者加入。敬请每周三、周五期待经过我们精心翻译、校对和发布的译文。

欢迎加入 LCRH SIG 一同参与贡献,并领取红帽(Red Hat)和我们联合颁发的专属贡献者证书。


via: https://www.redhat.com/en/command-line-heroes/season-2/hello-world

作者:Red Hat 选题:bestony 译者:guevaraya 校对:acyanbirdwxy

本文由 LCRH 原创编译,Linux中国 荣誉推出

代码英雄讲述了开发人员、程序员、黑客、极客和开源反叛者如何彻底改变技术前景的真实史诗。

什么是《代码英雄》

代码英雄 Command Line Heroes 是世界领先的企业开源软件解决方案供应商红帽(Red Hat)精心制作的原创音频播客,讲述开发人员、程序员、黑客、极客和开源反叛者如何彻底改变技术前景的真实史诗。该音频博客邀请到了谷歌、NASA 等重量级企业的众多技术大牛共同讲述开源、操作系统、容器、DevOps、混合云等发展过程中的动人故事。

本文是《代码英雄》系列播客第二季(1):按下启动键音频脚本。

导语:在“开源”和“互联网”这两个词被发明出来之前,就有了游戏玩家。他们创建了早期的开源社区,在彼此的工作基础上分享和创造。对于许多程序员来说,游戏引领他们走向了职业生涯。
在本期节目中,我们将探索在 ARPANET 平台上的,早期游戏开发天马行空的创意。游戏开发汇集了大量的创意并聚集了编程人才。虽然创建视频游戏在最开始是一个开放的过程,但如今很多事情已经发生了变化。听听你该如何参与打造我们自己的《命令行英雄》游戏,以及本着游戏的精神,找找本集的复活节彩蛋

00:00:01 - Saron Yitbarek

一群朋友正在玩 《D&D》( 龙与地下城 Dungeons and Dragons )游戏。 他们靠在一起,听他们的 地下城城主 dungeon master (DM)说话。

00:00:09 - D20 菜鸟地下城城主

好的,你在念咒语,你拿起你的权杖,把自然的力量注入其中。你可以看到藤蔓从里面伸出来,和你结合在一起。它在你手中的重量明显不同了,你感觉到了更强大的力量。

00:00:26

所以我要施一个魔法……

00:00:27

好的,你做到了,你还有一次行动机会。你要做什么呢?

00:00:34 - Saron Yitbarek

好吧,我得承认:我小的时候,从来没有坐在地下室里玩过《D&D》游戏,我也从没有渴望过成为一名 DM,不管它是什么。我不会在真人角色扮演游戏中的树林里找我的第一个男朋友,也不会在游览动漫展的过道上和我的死党黏在一起。那不是我。

00:00:52

但我知道是,游戏把人们聚集到了一起并形成了社区。而且,对于众多的开发者而言,游戏是编程的入门良方。正是游戏让他们了解计算机,并第一次将他们带入一个,以极客为骄傲的空间。

00:01:12

正是对游戏的热爱让他们想自己开发一款游戏,然后去打造游戏,不停超越自身。这是我非常喜欢的东西。

00:01:23

在我们的第一季中,我们探讨了开源从何而来,以及它如何影响了开发者世界的每个部分。这一季我们就在代码里面讲述:在今天,成为一名开发人员意味着什么。

00:01:39

这一切都是从找到你的伙伴开始的。所以,开始游戏吧。

00:01:51

甚至在“ 开源 open source ”和“ 互联网 Internet ”这两个术语被创造之前,就已经有了游戏玩家。那些游戏玩家想要相互连接起来。因此,当世界开始联网时,他们走在了前列。他们要建立连接和共享所需的一切,并且 ——

00:02:09 - D20 菜鸟甲

哦,它上楼了。哦,天哪,要疯。

00:02:11 - D20 菜鸟乙

放心,这把武器可以打死它,伤害是 8 点呢。

00:02:16 - D20 菜鸟地下城城主

随便你,来吧!

00:02:17 - D20 菜鸟乙

所以,捅它!耶!

00:02:19 - D20 菜鸟丙

捅谁,德鲁伊吗?

00:02:19 - D20 菜鸟甲

我干掉它了!

00:02:27 - Saron Yitbarek

好吧,接着玩吧。我是 Saron Yitbarek,这里是红帽原创播客 代码英雄 Command Line Heroes 第二季。今天的节目,《按下启动键,游戏和开源社区》。

00:02:45 - 配音

你站在一条路的尽头,前面是一座砖砌的小型建筑。你周围是一片森林。一条小溪从建筑物里流出,顺着沟壑而下。

00:02:56 - Saron Yitbarek

你对这些话有印象吗?如果你还记得,可以给你的历史知识打 10 分。但是,如果你和我一样,对它们没有印象,那么这些都是 《巨洞探险》 Colossal Cave Adventure 的开场白。

00:03:09

什么是《巨洞探险》?我的朋友,一切的改变始于 1976 年。那条路,森林边的砖房,那条流入沟壑的小溪,当时没有人知道,但这款基于文本的游戏(是的,根本没有图形)将是一扇闪亮的红色大门,通向了新的社区和协作形式。

00:03:38 - Jon-Paul Dyson

《巨洞探险》是一种被称为文本冒险的游戏。你可以通过输入命令与计算机交互:向西走、拿上剑、爬山等等。

00:03:51 - Saron Yitbarek

这是 Jon-Paul Dyson。他是 斯特朗国家游乐博物馆 Strong National Museum of Play 的副馆长,也是其电子游戏历史中心的主任。是的,相当有趣的工作。

00:04:04 - Jon-Paul Dyson

《巨洞探险》是一种非常不同类型的游戏。它更像是一款流程自由的探险游戏,就像在此时问世的《龙与地下城》一样。

00:04:17

因此,它开启了想象力。这是一场真正革命性的游戏……

00:04:22 - Saron Yitbarek

在 70 年代中期出现了一种新型游戏,这绝非偶然。正在其时,互联网的鼻祖 —— 阿帕网 ARPANET 出现了。

00:04:32 - Jon-Paul Dyson

事情是这样的,一位在 ARPANET 上工作的人,他叫 Will Crowther,有了开发这个洞穴探险游戏的想法。他大致依据他曾探索过的,肯塔基州猛犸象洞穴的一部分为基础,创作了这款游戏。

00:04:50

这真是革命性的突破,因为它给了玩家一个探索环境的机会。不过更有趣的是,他去度假了。而另一个人,叫 Don Woods 的伙计,因为当时 ARPANET 的存在而发现了这个游戏,然后做了些调整。

00:05:09

因此,几乎从一开始,这个游戏的开发就是一个协作过程,因为它已在网络上被共享。这恰是一个很好的例子,说明了该游戏是如何被开发、修改、改进,然后广泛传播的,这一切都是因为这些计算机是连接在一起的。

00:05:28 - Saron Yitbarek

因此,在计算机联网后,我们可以立即开始使用这些网络来分享游戏。而这些游戏本身也在不断演变。

00:05:38

事情是这样的:不仅仅是网络改善了游戏,游戏也改善了网络。因为越多的人想要分享这些游戏,他们就越需要一个社区的论坛。

00:05:53

因此,有了游戏技术,以及热爱它们的社区,它们彼此在相互促进。这是一个正反馈回路。同样,游戏开发人员彼此启发,相互借鉴。

00:06:09

ARPANET 真是一片肥沃的土地。Jon-Paul Dyson 再次发言:

00:06:16 - Jon-Paul Dyson

所以像《 冒险 Adventure 》这样的文本冒险游戏就在这个空间里运转,这个空间被技术先锋们占据,他们知道如何无厘头、搞笑,知道如何才好玩。

00:06:28

早期的游戏确实为开发者社区该如何协同工作提供了一种模式。

00:06:36 - Saron Yitbarek

记住,我们这里谈论的不是 《我的世界》 Minecraft ,也不是 《英雄联盟》 League of Legends ,我们谈论的是黑色屏幕上一行行绿色的文字,读完游戏内置的故事,并让你做出决定。这是一种相当简单的游戏文化,但它给了我们巨大的回报。

00:06:56 - Jon-Paul Dyson

有一种共同体的信念,认为分享有好处,即与生产专有产品相比,更多的协作可以产生更好的结果。因此,结果就是你开发的游戏都是从社区中涌现出来的,这些游戏本身对改变持开放态度,并鼓励人们改变游戏,可能是小的方面,也可能是大的方面。但有一种感觉是,如果游戏变得更好,那么一切都是好的。

00:07:31

所以我认为历史上的这种早期的理念,尤其是计算机游戏方面,在推动计算机社区的发展方面确实很重要。

00:07:45 - Saron Yitbarek

Dennis Jerz 教授特别研究了游戏的历史,尤其是《巨洞探险》。对他来说,这些原始开源社区对于所有创造力来说,都是一次自由的释放。

00:07:58 - Dennis Jerz

当时的文化是,人们在自己工作的基础上建立和分享自己的想法。而且很常见的是找到源代码后,第一件事就是在现有的源代码上再增加一个属于自己的空间。

00:08:22

这和同人小说的想法很像,就是人们创造自己的故事,这些故事穿插在《哈利·波特》的不同章节之间,或者是《 饥饿游戏 the Hunger Games 》中 Katniss 的世界里的小角色的故事。这种在主叙事的基础上进行补充、阐述和构建的文化。

00:08:44 - D20 菜鸟玩家甲

好吧,所以我现在急着要找 Van Tyler,看看她的伤口。哦,上面说武器的伤害变成了 d8。

00:08:56 - Saron Yitbarek

在基于图像或视频的游戏出现之前,这些基于想象力的游戏风格为大规模的在线社区铺平了道路。游戏社区和在线社区之间的是共生的,拥有强韧的联系。

00:09:11

但如果说有一件事是游戏玩家都知道,那就是强大的玩家可以将任务推动到一个新的方向。随着网络游戏的发展,它以社区为基础的根基开始被侵蚀。

00:09:24 - D20 菜鸟玩家甲

这次试着把它放在他的脖子后面。搞定!

00:09:33 - Saron Yitbarek

好的,让我们快进到如今。互联网已经成熟。有了它,在线游戏社区已经有了很大进步。如今,游戏每年的收入超过 1000 亿美元。预计在未来十年,这一数字将翻一番以上。

00:09:53 - Saron Yitbarek

但这些取得的成功也改变了游戏规则。这不是一群独立开发者在一个摇摇欲坠的论坛上分享他们的作品。今天尚存的游戏社区与《巨洞探险》早期的情况完全不同。

00:10:11 - Saku Panditharatne

大家好,我叫 Saku,我是一家名为 Asteroid 的初创公司的创始人,我公司为游戏开发者制作增强现实(AR)工具。

00:10:19 - Saron Yitbarek

Saku Panditharatne 觉得开放的互联网与游戏开发之间的关系最近已经扭曲。她说的很清楚,为什么游戏公司之间不共享部分代码,而有时候大型科技公司之间却能共享代码呢?

00:10:37 - Saku Panditharatne

如果你是唯一一个与所有人共享你的代码的游戏公司,那么你的竞争对手只会复制你的代码,他们会拿走你的所有秘密,并且他们会制作出比你更好的 3A 游戏。

00:10:47

这对大型科技公司来说也是个问题。但实际上,我认为是软件工程师的努力打破了这种平衡。因为如果没有人为一家闭源的公司工作,那么每个人都会被迫开源,然后所有的大科技公司都能尽可能地共享,这对软件整体来说是非常好的。

00:11:11

但这在游戏行业中从未发生过。

00:11:14 - Saron Yitbarek

Saku 的理论是,与其他领域相比,在游戏领域的传统上,开发者没有同样的决策控制权。那太糟糕了,因为这意味着我们都错过了开放。

00:11:26 - Saku Panditharatne

我们基本上知道具体如何将渲染、着色以及物理操作做到很高的标准。那不应该是每个游戏工作室都在复制的东西。但是,奇怪的是,游戏工作室通常仍会在内部构建引擎。不幸的是,他们陷入了这种……

00:11:46

我觉得游戏有点像电影,而不是像软件。你会使游戏开发陷入到地狱。你会遇到所有的问题,比如制作人的融资问题等等。

00:11:59

我认为所有这些因素都不利于软件变得更好。

00:12:05 - Saron Yitbarek

因此,游戏开发中的专有制度,导致了大量重复的工作,每个工作室都必须解决同样的问题。而且它们中的大多数都不是最佳解决方案。

00:12:18

同时,对于可能会提供新东西的独立开发人员来说,事情很快变得难以承受。游戏开发人员通常必须购买某个主流游戏引擎的许可证。或者,他们必须得购买一个脚本。

00:12:33

另一方面,Web 开发人员拥有更多可接受的选择。

00:12:37 - Saku Panditharatne

我觉得真正有趣的一个事实是,拍一部电影比做一架飞机更复杂。这只是因为你拥有的所有这些各种人都具有不同的技能,他们的工作时间表不同,他们受到的激励也不同。

00:12:51

所以,让他们一起工作就像一场组织挑战。而游戏引擎和其他游戏软件所做的事情之一:它是用来弥合这种鸿沟的,几乎成为最有效的工作软件。

00:13:06 - Saron Yitbarek

游戏开发的问题很像电影制作问题。你有艺术家、编剧、角色设计师,都在与程序员和系统管理员角力。如果不采取开源的态度,或者没有建立共享和同步的方式,那一群不同角色的人就会变得混乱。

00:13:27

这一切都归结为建设社区的挑战。那些最初的游戏,是由开发者利用自己的空闲,例如午休时间开发的。

00:13:38

另一方面,像《 魔兽世界 World of Warcraft 》这样的游戏,他们有大量的创意人员和程序员。社区已经达到了极限。例如,我认为没有任何论坛可以让开发人员向角色设计师提出“PR”以供审查。

00:13:54

但也许应该有 PR,Saku 知道我在说什么。

00:13:57 - Saku Panditharatne

我认为游戏的一个大问题是,它是一个跨学科的东西。跨学科做任何事情都是困难的,因为这几乎就像 C.P.Snow Essay 的文章 《 两种文化 The Two Cultures 》,你必须把用右脑的、富有创造性思维的人和用左脑的、富有逻辑思维的人聚集在一起,让他们共同努力做一些事情。

00:14:18 - Saron Yitbarek

我们能不能花点时间让全世界做点什么?如果 GitHub 上有人想找出一种开源游戏开发的方法,在开发者和艺术家之间进行转译,你就为世界做出了贡献。

00:14:32 - Saku Panditharatne

我有点觉得,游戏的限制一直都是把两群不怎么说话的人聚集在一起,然后努力创造一些东西。

00:14:42 - Saron Yitbarek

对我来说,简而言之就是开源的事。不过,特别值得一提的是,Saku 在想办法弥合两个社区之间的差距,从而形成一个更大的社区。

00:14:53 - Saku Panditharatne

是的,我认为这实际上可以真正改善整个行业。我认为那些大型的新兴创业公司很多都出现在 2007 年左右,都是因为他们可以使用大量的开源软件。

00:15:07

而且我认为,如果没有开发者把他们的东西免费放到网上,那股创业热潮就不会发生。

00:15:13

如果类似的事情发生在游戏行业中,我想我们会有比现在更多的独立游戏开发者。

00:15:21 - Saron Yitbarek

但有个好消息。游戏领域的开源革命,可能已经开始了。Jon-Paul Dyson 再次出现:

00:15:30 - Jon-Paul Dyson

在视频游戏的历史上,确实存在两个流派:一个是人们创造专有产品的地方,即封闭系统。它们通常经过精心打磨,出于商业目的而发布。想想像 任天堂 Nintendo 这样的公司。任天堂创造了令人赞叹的游戏,但你无法真正进行修改。

00:15:52

但在电子游戏和电脑游戏的历史上也出现了一种相反的趋势,这是一种更具协作性的方法。像《我的世界》这样的游戏就是一个现代的例子,人们正在参与对游戏的修改,那里有一个围绕游戏而生的社区。

00:16:14

你可以从互联网上的某个地方下载 MOD,然后在游戏中引入。因此,你拥有的是一种非常不同的,几乎是有机的开发游戏的方式,而不是一种更结构化的,可能是商业化的、工程化的方式。

00:16:35

在很多方面,《我的世界》都是诸如《太空大战》或《巨洞探险》等早期游戏的继承者,该游戏在社区中发展,对进行修改和改变的人们更开放。而且,其治理理念是,从某种意义上说,以长远角度来看,群体的工作将会比一个小团队或个人的工作更好。

00:17:04 - Saron Yitbarek

我认为我们现在要说的是,游戏行业并没有完成社区的建设,你也永远不能消灭这种开源精神。

00:17:14

这就是我们所知道的:游戏仍然激发了许多开发人员,这就是许多代码英雄最初进入该行业的原因。比如像 Josh Berkis 这样的代码英雄,

00:17:28 - Josh Berkus

嗯,我是从 Atari 800 开始的,因为它可以设计自己的游戏。

00:17:34 - Saron Yitbarek

以及 Ann Barcomb,

00:17:36 - Ann Barcomb

我写的大多是冒险游戏,那是可怕的意大利面代码。

00:17:42 - Saron Yitbarek

还有 Justin Flory。

00:17:43 - Justin Flory

在我意识到我在做开源之前,我就已经开源了。我从一台运行着《我的世界》的游戏服务器开始的,那时我 15 岁。

00:17:54 - Saron Yitbarek

当人们热爱某事时,那么对社区、对开源的态度就会蓬勃发展。Saku 对专有游戏元素的警告,实际上正是游戏在其旅程中必须克服的障碍。

00:18:09

一些游戏行业的领先者正开始实现这一飞跃。

00:18:17 - 在玩堡垒之夜的孩子们

我们实际上做得很好。

00:18:18

我当时正在疯狂射击,我干掉了 3 个,他们干掉了 1 个。

00:18:21

哦,Campbell 在背着我。

00:18:24 - Saron Yitbarek

如果你去年就快到 12 岁了,你很可能听说过一个叫《 堡垒之夜 Fortnite 》的小游戏。嗯,很小的游戏。在它发布的第一年,它就获得了超过 1.25 亿的玩家,所有玩家都在一场大逃杀中。

00:18:43 - 在玩堡垒之夜的孩子们

我得下线了,好吧,就一会,我得给我父母打个电话。

00:18:47 - Saron Yitbarek

是的,游戏在建立社区方面还是很不错的。实际上,《堡垒之夜》 是有史以来最大的免费主机游戏。它背后的工作室 Epic 还创建了《堡垒之夜》所使用的 虚幻游戏引擎 Unreal engine

00:19:02

很多其他的游戏也都使用虚幻引擎,因为 Epic 向世界免费发布了虚幻引擎。它不是直接开源的,但它的源代码是可访问的。这远超了大多数工作室。

00:19:16

有了虚幻引擎,任何人都可以获取到源代码。他们不仅提供了代码,还致力于建立一个答案中心、论坛、开发者支持。Epic 正在加倍努力建设一个尽可能大而广泛的社区。

00:19:32

而且他们并不孤单。你已经有了像 Godot 和 MonoGame 这样的完整的开源游戏引擎,它们正在催生自己的开发社区。红帽公司的软件工程师 Jared Sprague 是新一代的一员,他们可以使用所有这些工具和引擎来构建令人惊叹的游戏,如果没有这些社区,他们是永远不可能构建出来这种东西的。

00:19:55 - Jared Sprague

独立游戏行业最近发展很快。因此,你应该发现几年前,大多数游戏都是由大型工作室制作的。这些都还在市场上,对吧,任天堂之类的。

00:20:09

独立产业正在爆炸式增长。我认为这很大程度上是因为 Steam。

00:20:17 - Saron Yitbarek

他说的就是 Steam 平台,它让开发者可以将游戏内聊天功能、社交网络服务等所有好的东西整合在一起。他们在这方面已经做了 15 年了。

00:20:29 - Jared Sprague

Steam 使任何游戏开发者,都有可能发布一款游戏给数百万人。有很多大型游戏是从独立游戏开始的,也许只有一两个人在做,最后大放异彩。

00:20:48

《我的世界》就是一个很好的例子。刚开始,只有一个人,是独立开发者。现在这是有史以来最大的游戏之一。但这只是一个例子,说明独立游戏是如何真正成为游戏行业的主要力量。

00:21:06 - Saron Yitbarek

Jared 与他的红帽伙伴 Michael Clayton 合作制作了游戏 Jams,一群独立游戏开发人员聚集在一起,在很短的时间内开发出游戏。就像黑客马拉松一样,但用于游戏。

00:21:17

GitHub 上有一个叫做 Game Off 的版本,Jared 的版本叫做 Open Jam。如果你问他,他会说这是基于社区的游戏开发未来的一部分,而且会变得越来越大。

00:21:31 - Jared Sprague

例如,你可以使用 Linux,因为它是开源的,所有人都可以为它做贡献,添加工具、补丁等等,这就是它如此伟大的原因。比一个人独自完成的要好得多。

00:21:47

而且我认为开源的游戏或某种游戏系统或虚拟世界仍有潜力,成千上万的人可以做出比一个人可以做的更大的东西。

00:22:03 - Saron Yitbarek

游戏工作室已经开始转变了对开源态度。

00:22:10 - Jordan Weisman

我认为游戏能够让你的社区开启创造,它的这种力量是毋庸置疑的。

00:22:18 - Saron Yitbarek

Jordan Weisman 是 Harebrained Schemes 的联合创始人。 《 血色苍穹 Crimson Skies 》、 《 战斗机甲 Battle Tech 》、《 机械战士 Mech Warrior 》这些都是他的作品,他长期从事游戏开发。而他现在看到的是,随着工作室开始意识到好处,对开源的态度也在转变。

00:22:35 - Jordan Weisman

甚至像《战斗机甲》之类的游戏也有很多…… 我们已经尝试向玩家开放尽可能多的游戏数据。而且我们已经看到玩家为游戏提供了惊人的 MOD。看到他们的创意和成果,令我们兴奋,这与我们的原创内容相比,它以不同的方式吸引着玩家。

00:22:58

这只是关于你能做什么的一个小例子。随着游戏的发展,我们更加知晓了这一点,越来越开放,让玩家表达他们的创造力。

00:23:10 - Saron Yitbarek

Jordan 认为,不断变化的文化有助于他的游戏成为最好的。但是,你知道,就像我们在本期节目的《D&D》开场白中所暗示的那样,对社区的推动始终存在。

00:23:24 - Jordan Weisman

TRPG 来自于 GM 与玩家之间,互相用语言编织一场冒险的 RPG 游戏,人们围坐在一张桌子前合作讲故事并分享经验。在某段时间内,当我们开始分享某些电子游戏时,这两派非常分裂。

00:23:41

我认为,随着 MOD 工具和大家都能接触的引擎的诞生,以及工具更高的可访问性,和开发商转向开源。这在某种程度上,让我们重新回到了游戏的创建之初,这种非常社交化的。具有娱乐形式的协作。

00:23:58

所以我觉得这很令人兴奋。

00:24:01 - Saron Yitbarek

我也这样认为。至于 Jared Sprague,他将再次与 Michael Clayton 合作,开发一款全新的社区驱动的开源游戏。它被称为…… 代码英雄 Command Line Heroes

00:24:21

是的,我们正式成为一个多平台 IP。当然, 代码英雄 Command Line Heroes 游戏将成为一个开源项目。所以我们邀请社区(也就是你)与我们一起打造这款游戏。我们所要做的就是一个目标。

00:24:40

灵感来自 NASA,这将是一个火星之旅。它的细节?这取决于我们所有人的共同努力。这将是一个基于网络的游戏,我们将在整整这一季的播客节里致力于这项工作。GitHub 仓库将对任何想要贡献的人开放。

00:24:59

而且,再说一次,如果你正在收听此内容,则邀请你参与,与我们一起开发该游戏。设计一个角色,提一个拉取请求。或者只是玩测试版,然后将你的反馈发送给我们。

00:25:21

我们将利用我们在本期节目中谈到的所有开源魔法,共同构建一些东西。

00:25:22

趣事:还记得《巨洞探险》吗? 好吧,虽然这个游戏的代码一直可以访问的,但《巨洞探险》在 40 年后终于完全开源了。2017 年,官方版本在 BSD 许可证下发布了。

00:25:39

从最初的互动式文字游戏开始,游戏社区已经走过了很长一段路。

00:25:45 - 配音

你站在一条路的尽头……

00:25:50 - Saron Yitbarek

问题是,我们不是站在路的尽头。这条游戏之路绵延不绝。在此过程中,游戏正在帮助我们联合起来并建立整个宇宙。坦率地说,我们不知道我们的社区将如何安排自己沿着这条路走下去。

00:26:07

但我们知道游戏将会推动这一进程,因为我们从来没有停止过 —— 按启动键。

00:26:15

想了解更多关于早期开源社区和开源游戏起源的知识吗?在 代码英雄 Command Line Heroes 网站上有更多的内容等着你。你可以通过访问 redhat.com/comandlineheros 更深入地挖掘。在我们告别之前,我想让你知道我们在导语中有一项特殊礼物在等着你。这是 Warren Robinett 的故事,他创造了 Atari 游戏《 冒险 Adventure 》,这款游戏的灵感来自于《巨洞探险》。

00:26:48

他告诉我们,他与老板的争论是如何导致出现了第一个视频游戏的 复活节彩蛋 Easter egg 。这是一个很棒的故事,是我们发展史上很可爱的一部分,但我们想给它应有的空间。

00:27:03

所以请到 redhat.com/commandlineheroes 网站上听一听。

00:27:10

代码英雄 Command Line Heroes 是 Red Hat 的原创播客。在 Apple Podcast、Google Podcast 或任何你收听播客的地方免费收听它。

00:27:20 - Saron Yitbarek

我是 Saron Yitbarek,下次见,编程不止。

什么是 LCTT SIG 和 LCTT LCRH SIG

LCTT SIG 是 LCTT 特别兴趣小组 Special Interest Group ,LCTT SIG 是针对特定领域、特定内容的翻译小组,翻译组成员将遵循 LCTT 流程和规范,参与翻译,并获得相应的奖励。LCRH SIG 是 LCTT 联合红帽(Red Hat)发起的 SIG,当前专注任务是《代码英雄》系列播客的脚本汉化,已有数十位贡献者加入。敬请每周三、周五期待经过我们精心翻译、校对和发布的译文。

欢迎加入 LCRH SIG 一同参与贡献,并领取红帽(Red Hat)和我们联合颁发的专属贡献者证书。


via: https://www.redhat.com/en/command-line-heroes/season-2/press-start

作者:Red Hat 选题:bestony 译者:gxlct008 校对:Bestonywxyacyanbird

本文由 LCRH 原创编译,Linux中国 荣誉推出