Go 语言之父:四十年来软件开发之巨变与 Go 的过去和未来
云栖号资讯:【点击查看更多行业资讯】
在这里您可以找到不同行业的第一手的上云资讯,还在等什么,快来!
Rob Pike 是 Go 语言核心作者之一。本文是针对 Rob 的一次专访,话题涉及 Rob 四十年的职业生涯、Go 语言过去十年的发展及其未来。
与现今的很多开发人员不一样,你几十年前就在贝尔实验室开始了自己的职业生涯。从你角度来看,你认为软件开发方式最大的变化是什么?
现今的规模要大得多,不仅仅是计算机和网络,还有程序本身。所有的 Unix V6(大约发布于 1975 年)都可以轻而易举地装在一个 RK05 磁盘(只有差不多 2MB 的存储空间)中,还留出了大量的用户空间。这是一个很好的计算环境,至少在当时看起来是这样的。
基于“抵制改变”和“承诺兼容”这样的思想,你如何看待 Go 语言和它的生态系统在未来 10 年的发展?你设想的最好的未来是怎样的?
尽管还不是很确定,但在经过十多年的发展之后,参数多态设计——也就是通常认为的泛型,将在未来一两年出现。为已有的语言找到一种合适的设计是个大难题,不过 Ian Lance Taylor(Go 语言另一位核心作者)在这个问题上投入了惊人的精力,现在看来答案已经触手可及了。
这将给库、生态系统和社区带来怎样的影响?我们拭目以待。
随着“渐进式类型”被引入到“动态类型”语言中,以及“类型推断”被引入到“静态类型”中,二者之间的界限现在变得越来越模糊了。你对现代编程语言的类型系统有什么看法?
我非常喜欢静态类型,因为它的稳定性和安全性。
我非常喜欢动态类型,因为它给我带来了乐趣。
我不喜欢类型驱动编程、类型层次、类和继承。尽管有很多非常成功的项目都是通过这种方式构建的,但我觉得这种方法将重要的决策过早地放在了设计阶段。换句话说,我更喜欢组合,而不是继承。
不过我要对那些喜欢使用继承的人说:不要在意我所说的,请继续使用你认为有效的方式。
有时候人们应用技术的方式很奇怪,例如通过 Python 或 Ruby 来生成 Go 代码(我们的确看到过这种做法)。这些年来,你都见过哪些奇怪、有创意或有趣的 Go 语言用法?令你感到最惊讶的是什么?
最大的意外是我们得知 Go 语言被用来编写恶意软件。你无法控制谁会使用你的东西或者他们会用它做些什么。
你开发了很多文本编辑器。你觉得 Visual Studio Code 怎么样?有了 LSP 这样的技术,“文本编辑器”和 IDE 之间的界限现在变得越来越模糊了。你认为软件开发人员需要像 GoLand 那样的全功能 IDE 吗?或者使用 VS Code 就可以了?
我来自一个早于 IDE 出现的时代。在 Go 语言项目的早期,我们讨论过 Go 语言是否需要借助 IDE 才能获得成功。但当时团队中没有人具备开发 IDE 的技能,所以我们没有尝试去开发一个 IDE。不过,我们确实开发了可用来解析和打印 Go 语言代码的库,并很快成为各种编辑器和 IDE 插件的基础,这是一个意外的成功。
最近,我们一直在努力开发一个叫作 gopls 的 Go LSP 服务器,任何支持该协议的编辑器或 IDE 都可以用它来改善 Go 语言编程体验。
或许是因为我们习惯使用简单的编辑器样式,所以我们确信 Go 语言开发人员在编程环境方面也不需要做很多繁重的工作。不过,IDE 确实可以提供一些帮助:我看到的大多数 Go 语言开发人员都使用了 IDE,或者至少是支持 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 开发团队参与到社区,参与讨论、提出问题、寻求帮助和指导,就走向了另一个方向。
有一件事我认为很重要,那就是让社区的声音保持统一,让社区成为一个团队,而不只是个体。一致的信息更容易理解。
作为一种流行编程语言的作者,这给你的生活带来了哪些改变?
需要说明的是,我是一个联合作者。Ken Thompson 和 Robert Griesemer 和我一起启动了这个项目,还有其他很多人也为项目做了巨大贡献,所以请不要把我当成“作者”。
Go 语言确实提高了我的公众形象,让我被一个新的充满活力的社区所认识。但除此之外,并没有太大的影响。在漫长的职业生涯中,我有过很多成功的经历(也有无数次的失败)。
假如你有机会回到过去,给年轻时的自己一个建议,也就是在你开始设计 Go 语言规范的时候,你会给自己和同事什么样的建议呢?
很简单,忽略那些讨厌你的人。只需要倾听那些理解你的目标的声音,他们才是你需要关心的人。不是每个人都认同你所做的,不过这没关系,那些参与推进你正在尝试做的事情的人是一个极好的想法、能量和灵感的来源。
我们将永远感谢这个充满激情的社区。
【云栖号在线课堂】每天都有产品技术专家分享!
课程地址:https://yqh.aliyun.com/live立即加入社群,与专家面对面,及时了解课程最新动态!
【云栖号在线课堂 社群】https://c.tb.cn/F3.Z8gvnK
低调大师中文资讯倾力打造互联网数据资讯、行业资源、电子商务、移动互联网、网络营销平台。
持续更新报道IT业界、互联网、市场资讯、驱动更新,是最及时权威的产业资讯及硬件资讯报道平台。
转载内容版权归作者及来源网站所有,本站原创内容转载请注明来源。
- 上一篇
41次申请,一半石沉大海18次被拒,我如何找到第一份数据科学工作?
云栖号资讯:【点击查看更多行业资讯】在这里您可以找到不同行业的第一手的上云资讯,还在等什么,快来! 回顾过去的半年,这是我人生中最变幻莫测的时期,从布里斯班来到悉尼,放弃了3年的微生物学博士后合同决心转行,却又被新冠疫情耽误。 经过近半年的准备和努力,我终于拿到了两个数据科学领域的工作机会。 我总共申请过41次数据科学相关工作,为了每份工作申请准备了专门的简历和求职信。在这些申请中,有21份没有回复,18份被拒,2份面试邀请也是到了4月底才收到。这并不是一段鼓舞人心的经历。但终究,我还是走出了这段黑暗的时期。 我想和大家分享一下我是如何完成从博士后研究员到数据分析师的转变,以及我一路走来的经验教训。虽然情况会因人而异,但希望我的经验能为那些正在考虑转行、但仍不确定从何入手的早期职业研究员,尤其是自然科学领域的研究人员提供一条新的转行之路。 我为什么离开学术圈 说实话,我其实挺喜欢做研究,或者说喜欢 “解决问题”。在整个学术生涯中,我系统地学习了如何阅读文献、剖析问题、设计实验、检验假设、分析数据、撰写文章。 然而,4年博士加3年博士后,我发现自己的研究领域越来越局限,这并不是我所期望的...
- 下一篇
你还在使用 try-catch-finally 关闭资源?
云栖号资讯:【点击查看更多行业资讯】在这里您可以找到不同行业的第一手的上云资讯,还在等什么,快来! 代码一定得写的优雅一点!你还在使用try-catch-finally关闭资源吗,如果是,那么就有点out了。皮皮甜手把手教你使用JDK7引用的try-with-resourceJDK7之前资源的关闭姿势: /** * jdk7以前关闭流的方式 * * @author hetiantian * */ public class CloseResourceBefore7 { private static final String FileName = "file.txt"; public static void main(String[] args) throws IOException { FileInputStream inputStream = null; try { inputStream = new FileInputStream(FileName); char c1 = (char) inputStream.read(); System.out.println("c1=" + c1...
相关文章
文章评论
共有0条评论来说两句吧...
文章二维码
点击排行
推荐阅读
最新文章
- CentOS7设置SWAP分区,小内存服务器的救世主
- CentOS7安装Docker,走上虚拟化容器引擎之路
- SpringBoot2编写第一个Controller,响应你的http请求并返回结果
- CentOS8安装Docker,最新的服务器搭配容器使用
- SpringBoot2整合Redis,开启缓存,提高访问速度
- SpringBoot2配置默认Tomcat设置,开启更多高级功能
- Docker安装Oracle12C,快速搭建Oracle学习环境
- Docker使用Oracle官方镜像安装(12C,18C,19C)
- Springboot2将连接池hikari替换为druid,体验最强大的数据库连接池
- CentOS8,CentOS7,CentOS6编译安装Redis5.0.7