我们采访了围棋编程语言(The Go Programming Language)的合著者罗布·派克(Rob Pike),谈到了他跨越40年的职业生涯,围棋在过去10年的演变,以及未来的发展。
Evrone:与今天的许多开发人员不同,您几十年前在贝尔实验室开始了您的职业生涯。考虑到你罕见的视角,我们开发软件的方式发生了什么最大的变化,你能想到的是什么?
罗伯:今天的规模要大得多。不仅仅是计算机和网络,还有程序本身。所有Unix版本6(大约1975年)都可以舒适地安装在单个RK05磁盘组上,该磁盘组有2MB多一点的存储空间,还有大量空间可供用户软件使用。这是一个很好的计算环境,或者至少在当时看起来是这样。当然,虽然我可以解释其中的大部分增长,但这是令人震惊的,可能并不是所有的增长都是合理的。
Evrone:考虑到对变革的抵制和对兼容的承诺,你如何看待围棋编程语言及其生态系统的未来10年?您为您的技术设想的最好的未来是什么?
罗伯:虽然还远不能确定,但经过十多年的研究,它看起来像是参数多态性的设计,俗称泛型,但有误导性,将在未来一两年内问世。这是一个非常困难的问题,要找到一个在现有语言中工作并感觉像是属于它的设计,但伊恩·泰勒(Ian Taylor)在这个问题上投入了惊人的精力,看起来答案现在已经触手可及。
这将对图书馆、生态系统和社区产生怎样的影响,这将是一个引人入胜的观察。
Evrone:随着";渐进式键入被引入";动态键入的语言中,并且";类型推理被引入";静态键入的";中,两者之间的界限现在变得模糊了。您对现代编程语言的类型系统有什么看法?
罗伯:我是静态类型的铁杆粉丝,因为它带来的稳定性和安全性。
我是动态打字的狂热粉丝,因为它带来的乐趣和轻量级的感觉。(顺便说一句,对集成单元测试的大力推动可以归功于诸如Python这样的语言,它们推动了测试,以证明键入系统无法提供的正确性。)。
我不喜欢类型驱动编程、类型层次结构、类和继承。虽然许多非常成功的项目都是这样建造的,但我觉得这种方法在经验影响之前,就把重要的决策推到了设计阶段的太早。换句话说,我更喜欢写作而不是继承。
不过,我要对那些喜欢使用继承来构建程序结构的人说:不要注意,请继续使用对您有效的方法。
埃夫龙:有时人们会以奇怪的方式使用技术。例如,要从高级Python或Ruby代码生成高效的Go代码(是的,我们看到了!)。这些年来,你见过的最奇怪、最有创意或最有趣的围棋用法是什么?你最惊讶的是什么?
罗伯:最大的惊喜是当我们得知Go被用来写恶意软件的时候。您无法控制谁将使用您的作品,或者他们将如何处理这些作品。
Evrone:您创建了许多文本编辑器。您觉得Visual Studio代码怎么样?有了像LSP这样的技术,文本编辑器和IDE之间的界限现在变得模糊了。你认为软件开发人员需要像Goland这样功能齐全的IDE吗?或者使用VSCode就可以了?
Rob:我来自一个不同的时代,在IDE之前,但在项目的早期就有关于Go是否需要IDE才能成功的讨论。然而,团队中没有人拥有合适的技能集,所以我们没有尝试创建一个。然而,我们确实创建了用于解析和打印GO代码的核心库,这很快就为各种编辑器和IDE提供了高质量的插件,这是一个偶然的成功。
最近,我们一直在努力开发名为gopls的围棋LSP服务器,任何支持该协议的编辑器或IDE都可以使用它来改善使用该语言的体验。
也许是因为我们习惯于使用更简单风格的编辑器,所以我们确保人们可以在围棋中舒适地工作,而不需要从编程环境中进行繁重的工作。不过,IDE当然可以提供帮助:我现在看到的大多数使用Go的人都使用IDE,或者至少使用支持自定义Go的编辑器,并且从中获得了很大的价值。
使用哪种编辑风格的问题是一个品味问题,受到你工作所用语言的文化的影响。
Evrone:软件开发人员倾向于给东西贴上标签,比如DART是前端语言,C是系统低级语言,等等。考虑到Go编程语言的功能集和用法,您现在如何称呼Go编程语言?
Rob:Go是一种通用编程语言。你想写什么就写什么,不用担心把语言或任何其他技术都归结于单一的问题领域。
罗伯:围棋体验