Rob Pike 采访

Rob Pike 采访:“Go 的确已经成为云基础架构的语言”

简介

我们采访了 Go 编程语言的联合作者 Rob Pike。他讲述了自己四十年的职业生涯,Go 在过去十年中的发展历程,以及未来的展望。

采访

Evrone: 与现在的许多开发人员不同,你几十年前就在贝尔实验室开始了你的职业生涯。 从你不太寻常的视角来看,你能想到的我们软件开发方式的最大变化是什么?

Rob: 如今规模更大了。 不仅仅是计算机和网络,还有程序本身。 Unix 第 6 版(约 1975 年)的所有内容都可以轻松安装在单个 RK05 磁盘包上,它的存储空间只有 2MB 多一点,还能剩很多空间来安装用户软件。 那是一个很好的计算环境,至少在当时看来是这样的。 当然,尽管我可以解释其中的大部分增长,但这种增长仍然十分惊人,而且也许并非所有增长都合乎情理。

 

Evrone: 考虑到“抗拒改变”和“承诺兼容”的思想,你对未来 10 年的 Go 编程语言及其生态系统有什么看法? 你为自己的技术设想的最理想的未来是什么样的?

Rob: 虽然还远远不能确定,但经过十多年的努力,看起来一种参数多态性的设计会在未来一两年内出现,这就是平时说的但有误导性的泛型。 要找到一种能够在现有语言中使用并让人觉得它是属于该语言的设计,是一个非常困难的问题,但 Ian Taylor 在这个问题上投入了巨大的精力,现在看来答案就在眼前了。

它对图书馆、生态系统和社区的影响值得关注。

 

Evrone: 随着“动态类型”语言中引入“渐进类型”,“静态类型”语言中引入“类型推断”,两者之间的界限现在已经变得模糊。 你对现代编程语言的类型系统有什么看法?

Rob: 我非常喜欢静态类型,因为它能带来稳定性和安全性。

我也非常喜欢动态类型,因为它能带来乐趣和轻巧的感觉。 (顺便提一下,对集成单元测试的大力推动可以归功于 Python 之类的语言,它们推动了测试来证明类型系统无法提供的正确性。)

我不喜欢类型驱动的编程,不喜欢类型层次、类以及继承。 虽然许多非常成功的项目都是以这种方式构建的,但我觉得这种方式将重要决策过早地推到了设计阶段,此时,经验还无法对决策作出影响。 换句话说,我更喜欢组合而不是继承。

但是,我想对那些习惯使用继承结构来构造程序的人说:不用理会我说的,请继续使用你们自己擅长的东西。

 

Evrone: 有时候人们会以奇怪的方式使用技术。 例如,从高级的 Python 或 Ruby 代码中生成高效的 Go 代码(是的,我们见到过这种情况!)。 这些年来,你见过最奇怪、最有创意或最有趣的 Go 语言用法是什么? 最让你吃惊的是什么?

Rob: 最让我吃惊的是当我们得知 Go 被用来编写恶意软件的时候。 你无法控制谁会使用你的作品,也无法控制他们会用它来做什么。

 

Evrone: 你创建了许多文本编辑器。 你对 Visual Studio Code 有什么看法? 随着 LSP 等技术的发展,现在“文本编辑器”和 IDE 之间的界限已经很模糊了。 你认为软件开发者是需要像 GoLand 这样的全功能 IDE,还是使用 VSCode 就可以了?

Rob: 我来自一个不同的时代,那时还没有 IDE,但在项目早期就有关于 Go 是否需要 IDE 才能成功的讨论。 不过团队中没有人具备合适的技能,所以我们当时没有尝试创建 IDE。 不过,我们确实创建了用于解析和打印 Go 代码的核心库,很快就为各种编辑器和 IDE 提供了高质量的插件,这是一个偶然的成功。

最近,我们一直在努力为 Go 开发一个名为 Gopls 的 LSP 服务器,任何支持此协议的编辑器或 IDE 都可以使用此服务器,来改善使用这门语言的体验。

也许是因为我们喜欢使用简单风格的编辑器,我们确保了人们可以舒适地使用 Go,而无需构建复杂的编程环境。 不过,IDE 当然可以提供帮助:今天我看到的大多数使用 Go 的人都会使用 IDE,或者至少使用具有自定义 Go 支持的编辑器,并从中获得了很多价值。

使用哪种风格的编辑器是个人品味问题,因你所使用的语言文化而异。

 

Evrone: 软件开发人员喜欢会给事物贴上标签,比如 Dart 是“前端语言”,C 是“系统底层语言”等等。 考虑到 Go 编程语言的功能和用法,你现在会如何称呼它?

Rob: Go 是一种通用的编程语言。 你可以用它编写任何你想编写的内容,而不用担心将语言或任何其他技术固定在一个单一的问题领域。

 

Evrone: 你个人还喜欢哪些现代编程语言?

Rob: Go 的经验告诉我,人们喜欢对语言发表意见,这可能比我们领域的任何其他元素都要多。 我自己当然也这样做过。 但我已经对由此产生的负面结果感到厌倦,所以现在我会尽量避免评判别人的东西。

在过去差不多 10 年的时间里,在经历了一个很少有新语言出现并取得成功的时期后,语言设计出现了真正的复兴。 很高兴看到这种现象和它带来的创新。

 

Evrone: 加入 Google 对于你开发和指导 Go 语言有什么帮助? 在 Twitter 上提出“请告诉我们您如何使用我们的语言”的问题,并得到全球最大公司的回应,这有多重要? 它只是一个很好的补充,还是语言发展的一个重要组成部分? Google 为你提供了哪些帮助?

Rob: Google 非常支持 Go 项目,对此我非常感谢。 当然,创建这门语言是因为我们认为 Google 需要它;所谓的“云计算”需要一门对并发性提供良好支持且易于部署的语言。 但 Google 并没有对这个项目进行过多干预。 它为我们提供支持,让我们做自己认为最好的事情。

对于其他公司和其他用户,来自社区的意见是了解项目进展的重要部分,我指的是语言、编译器、工具、运行时、库、环境,所有这些内容。

 

Evrone: 经过 10 年的 Go 开发以及对它的使用情况的观察,你能说说这门语言设计最成功和最失败的地方吗? 能不能分别谈谈它最明显的优点和缺点?

Rob: 我想说两点,一个是技术问题,一个是政策问题。

技术上是对并发计算的一流支持。 Go 虽然只有十几年的历史,但在开发的时候,“线程”和并发在编程界并没有得到广泛的重视。 实际上,创建 Go 的一个主要原因是当时很难用 C++ 进行并发计算。 在推出后不久,并发支持就成为了一个主要的吸引力,弥补了某些人认为的该语言其他部分的缺点。 并发触动了人们的神经。 当人们用过并发功能后,就开始探索这门语言的其他功能,然后发现还有比他们最初想象的还要多的内容。 对并发的支持只是通往这门语言的门户。

正如 Cloudflare 的 John Graham-Cumming 所说,“我来,是因为并发简便,我留下,却是因为组合简便”。.

Go 改变了围绕如何为多核计算机编程的讨论。

政策上的成功是对兼容 Go 第 1 版做出了坚定的承诺。 当我们和社区使用几年 Go 以后,我们就有了许多想要修复的问题,但改变是破坏性的。 因此我们精心制定了更新方案,使用“go fix”命令来推动社区,完成后,我们不但停止了更新,还保证不再更新。 2012 年编写的 Go 程序至今仍能完美地编译和运行,这种稳定性是成长的巨大推动力。 各个公司可以放心地使用这种语言,因为它们知道我们不会破坏他们的软件。 在推出第 1 版和兼容性承诺后,采用率急剧上升。 虽然后来我们还发现了许多我们想改变的东西,但我们不能破坏现有的程序,这一点我们可以接受。

 

Evrone: 你是如何平衡工作和生活的? 现在有很多关于“倦怠”的讨论,这种症状的蔓延完全没有帮助。 以你 40 年的职业经历,会给新一代开发人员怎样的提示?

Rob: 避免职业倦怠的最好方法是在一个支持你的环境中做自己真正喜欢的事情。 在我的整个职业生涯中,我在这方面是非常幸运的,但我知道并不是每个人都如此幸运。 如果你感到工作压力很大,就应该放松一下或者改变一下方向,尤其是在我们目前的情况下。

 

Evrone: 事后看来,许多技术的流行都要归功于所谓的“爆款应用”的流行。 你能说出这样一个 Go 编程语言的“爆款应用”吗?你在总体上对这种“爆款应用”思想有何看法?

Rob: 几年前,Danny Berkholz 将 Go 称为“新兴的云基础架构语言”,这绝非偶然。 Go 是由 Google 的工作人员设计的,目的是为了更容易地编写与 Google 相关的软件,特别是网络驻留服务器。 这就是我们今天所说的“云”。 (我在 2012 年的主题演讲“Go 在 Google:为软件工程服务的语言设计”中介绍了一些这个设计的动机。)

因此,尽管看到 Docker、Kubernetes 和许多其他用 Go 编写的云计算组件很令人欣慰也很重要,但也许并不意外。 Go 确实已经成为了云基础架构的语言。

 

Evrone: 你认为现在 Go 编程语言在哪些领域面临着哪些竞争? 你对 Rust 的“无垃圾回收”理念和编译时保证有什么看法?

Rob: Rust 是一门有趣的语言,我对它的发展很感兴趣。 除此之外,正如我上面所说,我不发表任何意见。

 

Evrone: Go 刚刚在 GitHub 上达到了 7 万颗星! 你如何看待 GitHub、Reddit、Twitter、线下和线上会议、网络研讨会等不同的社交活动对这门语言的影响? 它们对于语言的成功很重要,还是仅仅反映了语言的成功?

Rob: 我们通过会议和社交媒体结识的人们一直是 Go 及其所有元素发展的关键部分。 许许多多的贡献者都积极地影响了这门语言的开发,包括最初移植到 Windows 和一些非 x86 架构,工具和库的开发,对技术提案进行深入讨论,等等。

与此同时,Go 团队也会主动联系社区展开讨论,提出问题,并寻求帮助和指导。

我认为有一点很重要,那就是用统一口径与社区接触,作为团队而不是个人进行发声。 一致的信息更容易理解。

 

Evrone: 成为一门受欢迎的编程语言的作者,对你的生活有何影响?

Rob: 更正一下,我是联合作者,不是作者。 Ken Thompson 与 Robert Griesemer 和我一起启动了这个项目,还有许多其他人也做出了巨大贡献。 所以,请不要单独把我当成“作者”。

回答你的问题,Go 确实提升了我的公众形象,并把我带入了一个新的充满活力的社区,但除此之外,也没有太大的影响。 我的职业生涯很漫长,包括了其他的成功(以及无数次失败)。

 

Evrone: 请试想一下,如果你有机会回到过去,给刚开始设计 Go 语言规范的自己提一条建议。 你会给自己和同事们什么建议?

Rob: 这很简单,无视那些怀有敌意的人。 倾听那些理解并和你有相同目标的声音就好,他们才是你要关心的人。 不会每个人都同意你的所作所为,不过这没关系。 但那些参与并推动你所尝试的事情的人,可能会成为创意、能量和灵感的绝佳来源。

我们将永远感谢我们充满热情的社区。

 

在 Evrone,我们以使用最适合各项工作的工具为荣,无论是 Ruby on Rails、Python、Elixir,还是 Go。 我们努力保持处于各项技术的最前沿,以便能够提供最好和最合适的解决方案来满足客户的需求,我们也非常乐意尽自己所能帮助开发者社区团结在一起。

联系我们
已有项目构想?
我们一起来实现它吧
添加附件
文件必须小于 8 MB
允许的文件类型:jpg jpeg png txt rtf pdf doc docx ppt pptx
本网站受 reCAPTCHA 保护,并适用 Google 隐私政策服务条款