Rob Pike 是 Go 语言核心作者之一。本文是针对 Rob 的一次专访,话题涉及 Rob 四十年的职业生涯、Go 语言过去十年的发展及其未来。
现今的规模要大得多,不仅仅是计算机和网络,还有程序本身。所有的 Unix V6(大约发布于 1975 年)都可以轻而易举地装在一个 RK05 磁盘(只有差不多 2MB 的存储空间)中,还留出了大量的用户空间。这是一个很好的计算环境,至少在当时看起来是这样的。
尽管还不是很确定,但在经过十多年的发展之后,参数多态设计——也就是通常认为的泛型,将在未来一两年出现。为已有的语言找到一种合适的设计是个大难题,不过 Ian Lance Taylor(Go 语言另一位核心作者)在这个问题上投入了惊人的精力,现在看来答案已经触手可及了。
这将给库、生态系统和社区带来怎样的影响?我们拭目以待。
我非常喜欢静态类型,因为它的稳定性和安全性。
我非常喜欢动态类型,因为它给我带来了乐趣。
我不喜欢类型驱动编程、类型层次、类和继承。尽管有很多非常成功的项目都是通过这种方式构建的,但我觉得这种方法将重要的决策过早地放在了设计阶段。换句话说,我更喜欢组合,而不是继承。
不过我要对那些喜欢使用继承的人说:不要在意我所说的,请继续使用你认为有效的方式。
最大的意外是我们得知 Go 语言被用来编写恶意软件。你无法控制谁会使用你的东西或者他们会用它做些什么。
我来自一个早于 IDE 出现的时代。在 Go 语言项目的早期,我们讨论过 Go 语言是否需要借助 IDE 才能获得成功。但当时团队中没有人具备开发 IDE 的技能,所以我们没有尝试去开发一个 IDE。不过,我们确实开发了可用来解析和打印 Go 语言代码的库,并很快成为各种编辑器和 IDE 插件的基础,这是一个意外的成功。
最近,我们一直在努力开发一个叫作 gopls 的 Go LSP 服务器,任何支持该协议的编辑器或 IDE 都可以用它来改善 Go 语言编程体验。
或许是因为我们习惯使用简单的编辑器样式,所以我们确信 Go 语言开发人员在编程环境方面也不需要做很多繁重的工作。不过,IDE 确实可以提供一些帮助:我看到的大多数 Go 语言开发人员都使用了 IDE,或者至少是支持 Go 语言的编辑器,并从中获得了很多好处。
使用什么样的编辑器是一个个人偏好问题,取决于你使用的编程语言。
Go 语言是一种通用的编程语言。你可以用它开发你想要的东西,而不用担心语言会被固定在一个问题领域。
开发 Go 语言的经历让我明白了人们喜欢对编程语言发表意见。我自己也确实这样,但我已经厌倦了这种消极的结果,所以现在我尽量避免去评判它们。
在过去的 10 年里,语言设计领域出现了真正的复兴,而在此之前,很少有新编程语言出现并获得成功。我很高兴看到这些以及它们所带来的创新。
谷歌对 Go 语言项目的支持是非常慷慨的,我非常感谢它。当然,Go 语言的出现是因为我们认为谷歌需要它,云计算需要一种支持并发和易于部署的编程语言。不过,谷歌并没有太过直接插手这个项目,它支持我们,让我们做我们认为是对的事情。
对于其他公司和用户来说,社区输入是了解项目进展(语言、编译器、工具、运行时、库、环境)的关键组成部分。
我想说两件事,一个是技术上的,一个是政治上的。
从技术方面说,Go 语言支持并发计算。Go 语言只有十年左右的历史,但在它诞生之初,“线程”和并发并没有在编程社区得到广泛的重视。事实上,开发 Go 语言的一个主要原因是当时在 C++ 中执行并发计算比较困难。在项目启动后不久,对并发性的支持成了一个明显的优势,弥补了其他方面的不足。人们看到并发性的优势之后,他们就开始探索语言的其他方面,然后进一步了解到更多的东西。所以,对并发的支持是一道很重要的关口。
正如 Cloudflare 的 John Graham-Cumming 所言,“我是为了并发而来,为了组合而留”。
Go 语言改变了多核计算编程。
从政治方面说,我们兑现了对 Go 1.0 兼容性的承诺。在使用了几年 Go 语言之后,我们有一长串需要修复的东西,而且都是重大的变更。我们开发了一个更新程序,用“go fix”命令来推动社区,然后我们就停了下来。这种稳定性——2012 年编写的 Go 程序到今天仍然可以完美地编译和运行——是 Go 语言发展的一股巨大的推动力。其他公司可以非常自信地使用 Go 语言,相信我们不会对他们的程序造成破坏。在 1.0 和兼容性承诺兑现之后,使用率得到显著的提高。
避免倦怠的最好方法是在一个可以为你提供支持的环境中做你真正喜欢做的事情。在我的整个职业生涯中,我非常幸运,但并不是每个人都像我一样幸运。如果你感到工作压力很大,你应该放松一下,或者改变一下方向,尤其是当下这种情况。
几年前,Danny Berkholz 说 Go 语言是“云基础设施的新兴语言”,这并非偶然。Go 语言是谷歌员工设计的,目的是让谷歌相关程序的开发变得更容易,尤其是部署在联网服务器上的程序,也就是我们今天所说的“云”。
因此,看到一些使用 Go 语言开发的云计算组件(Docker、Kubernetes 等),我们感到欣慰,但并不会很惊讶。Go 语言确实已经成为云基础设施事实上的编程语言。
Rust 是一种有趣的编程语言,我饶有兴趣地关注着它的发展。除此之外,我没有其他意见,就像我上面说的那样。
我们在各种会议和社交媒体上遇到的人是 Go 语言发展的关键组成部分。很多贡献者以积极的方式影响着语言的发展,包括最初移植到 Windows 和非 x86 架构、工具和库的开发、对技术建议的深入讨论,等等。
当 Go 开发团队参与到社区,参与讨论、提出问题、寻求帮助和指导,就走向了另一个方向。
有一件事我认为很重要,那就是让社区的声音保持统一,让社区成为一个团队,而不只是个体。一致的信息更容易理解。
需要说明的是,我是一个联合作者。Ken Thompson 和 Robert Griesemer 和我一起启动了这个项目,还有其他很多人也为项目做了巨大贡献,所以请不要把我当成“作者”。
Go 语言确实提高了我的公众形象,让我被一个新的充满活力的社区所认识。但除此之外,并没有太大的影响。在漫长的职业生涯中,我有过很多成功的经历(也有无数次的失败)。
很简单,忽略那些讨厌你的人。只需要倾听那些理解你的目标的声音,他们才是你需要关心的人。不是每个人都认同你所做的,不过这没关系,那些参与推进你正在尝试做的事情的人是一个极好的想法、能量和灵感的来源。
我们将永远感谢这个充满激情的社区。
领取专属 10元无门槛券
私享最新 技术干货