Go 语言之父:四十年软件开发巨变与 Go 的过去和未来

译者 | 无明

策划 | 小智

与现今的很多开发人员不一样,你几十年前就在贝尔实验室开始了自己的职业生涯。从你角度来看,你认为软件开发方式最大的变化是什么?

现今的规模要大得多,不仅仅是计算机和 络,还有程序本身。所有的 Unix V6(大约发布于 1975 年)都可以轻而易举地装在一个 RK05 磁盘(只有差不多 2MB 的存储空间)中,还留出了大量的用户空间。这是一个很好的计算环境,至少在当时看起来是这样的。

基于“抵制改变”和“承诺兼容”这样的思想,你如何看待 Go 语言和它的生态系统在未来 10 年的发展?你设想的最好的未来是怎样的?

这将给库、生态系统和 区带来怎样的影响?我们拭目以待。

随着“渐进式类型”被引入到“动态类型”语言中,以及“类型推断”被引入到“静态类型”中,二者之间的界线现在变得越来越模糊了。你对现代编程语言的类型系统有什么看法?

我非常喜欢静态类型,因为它的稳定性和安全性。

我非常喜欢动态类型,因为它给我带来了乐趣。

我不喜欢类型驱动编程、类型层次、类和继承。尽管有很多非常成功的项目都是通过这种方式构建的,但我觉得这种方法将重要的决策过早地放在了设计阶段。换句话说,我更喜欢组合,而不是继承。

不过我要对那些喜欢使用继承的人说:不要在意我所说的,请继续使用你认为有效的方式。

有时候人们应用技术的方式很奇怪,例如通过 Python 或 Ruby 来生成 Go 代码(我们的确看到过这种做法)。这些年来,你都见过哪些奇怪、有创意或有趣的 Go 语言用法?令你感到最惊讶的是什么?

最大的意外是我们得知 Go 语言被用来编写恶意软件。你无法控制谁会使用你的东西或者他们会用它做些什么。

软件开发人员喜欢给事物贴标签,比如 Dart 是“前端语言”,C 语言是“系统底层语言”,等等。从 Go 语言的特性和用法来看,你会给它贴什么样的标签?

Go 语言是一种通用的编程语言。你可以用它开发你想要的东西,而不用担心语言会被固定在一个问题领域。

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

开发 Go 语言的经历让我明白了人们喜欢对编程语言发表意见。我自己也确实这样,但我已经厌倦了这种消极的结果,所以现在我尽量避免去评判它们。

在过去的 10 年里,语言设计领域出现了真正的复兴,而在此之前,很少有新编程语言出现并获得成功。我很高兴看到这些以及它们所带来的创新。

在谷歌工作给 Go 语言的开发带来了哪些帮助?在 Twitter 上发布类似“告诉我们你是如何使用我们的语言的”这样的问题,并得到来自世界各地大公司的回应,这对你来说有多重要?它只是一个补充还是语言发展的一个重要组成部分?谷歌给你带来了哪些帮助?

谷歌对 Go 语言项目的支持是非常慷慨的,我非常感谢它。当然,Go 语言的出现是因为我们认为谷歌需要它,云计算需要一种支持并发和易于部署的编程语言。不过,谷歌并没有太过直接插手这个项目,它支持我们,让我们做我们认为是对的事情。

对于其他公司和用户来说, 区输入是了解项目进展(语言、编译器、工具、运行时、库、环境)的关键组成部分。

经过 10 年的开发和观察,你能说出 Go 语言在设计上最大的成功和失败是什么吗?它的强项和弱项分别是什么?

我想说两件事,一个是技术上的,一个是政治上的。

从技术方面说,Go 语言支持并发计算。Go 语言只有十年左右的历史,但在它诞生之初,“线程”和并发并没有在编程 区得到广泛的重视。事实上,开发 Go 语言的一个主要原因是当时在 C++ 中执行并发计算比较困难。在项目启动后不久,对并发性的支持成了一个明显的优势,弥补了其他方面的不足。人们看到并发性的优势之后,他们就开始探索语言的其他方面,然后进一步了解到更多的东西。所以,对并发的支持是一道很重要的关口。

正如 Cloudflare 的 John Graham-Cumming 所言,“我是为了并发而来,为了组合而留”。

Go 语言改变了多核计算编程。

从政治方面说,我们兑现了对 Go 1.0 兼容性的承诺。在使用了几年 Go 语言之后,我们有一长串需要修复的东西,而且都是重大的变更。我们开发了一个更新程序,用“go fix”命令来推动 区,然后我们就停了下来。这种稳定性——2012 年编写的 Go 程序到今天仍然可以完美地编译和运行——是 Go 语言发展的一股巨大的推动力。其他公司可以非常自信地使用 Go 语言,相信我们不会对他们的程序造成破坏。在 1.0 和兼容性承诺兑现之后,使用率得到显著的提高。

你是如何平衡工作和生活的?现在很多人都在谈论“职业倦怠”,而疫情对解决这一问题毫无帮助。你的 40 年职业生涯可以给新一代开发人员带来哪些启示?

避免倦怠的最好方法是在一个可以为你提供支持的环境中做你真正喜欢做的事情。在我的整个职业生涯中,我非常幸运,但并不是每个人都像我一样幸运。如果你感到工作压力很大,你应该放松一下,或者改变一下方向,尤其是当下这种情况。

事后看来,很多技术的流行要归功于所谓的“杀手级应用”。你能说出一个 Go 语言的“杀手级应用”吗?你对“杀手级应用”持什么样的看法?

几年前,Danny Berkholz 说 Go 语言是“云基础设施的新兴语言”,这并非偶然。Go 语言是谷歌员工设计的,目的是让谷歌相关程序的开发变得更容易,尤其是部署在联 服务器上的程序,也就是我们今天所说的“云”。

因此,看到一些使用 Go 语言开发的云计算组件(Docker、Kubernetes 等),我们感到欣慰,但并不会很惊讶。Go 语言确实已经成为云基础设施事实上的编程语言。

你认为目前 Go 语言在哪些领域存在竞争?你对 Rust 的“无垃圾回收”和编译时保证有什么看法?

Rust 是一种有趣的编程语言,我饶有兴趣地关注着它的发展。除此之外,我没有其他意见,就像我上面说的那样。

Go 语言在 GitHub 上的星数刚刚达到 7 万!你认为 GitHub、Reddit、Twitter、离线和在线会议、 络研讨会等不同的活动对 Go 语言有怎样的影响?它们对编程语言取得成功是否很重要?还是说它们仅仅是对语言的一种反映?

我们在各种会议和 交媒体上遇到的人是 Go 语言发展的关键组成部分。很多贡献者以积极的方式影响着语言的发展,包括最初移植到 Windows 和非 x86 架构、工具和库的开发、对技术建议的深入讨论,等等。

当 Go 开发团队参与到 区,参与讨论、提出问题、寻求帮助和指导,就走向了另一个方向。

有一件事我认为很重要,那就是让 区的声音保持统一,让 区成为一个团队,而不只是个体。一致的信息更容易理解。

假如你有机会回到过去,给年轻时的自己一个建议,也就是在你开始设计 Go 语言规范的时候,你会给自己和同事什么样的建议呢?

我们将永远感谢这个充满激情的 区。

参考阅读:

https://evrone.com/rob-pike-interview

点个在看少个 bug??

声明:本站部分文章及图片源自用户投稿,如本站任何资料有侵权请您尽早请联系jinwei@zod.com.cn进行处理,非常感谢!

上一篇 2020年6月3日
下一篇 2020年6月3日

相关推荐