2009 年,面对 C++ 在 Google 分布式编译平台上的编译过程太过漫长的问题,贝尔实验室的 Unix 团队成员 Rob Pike 联合 Ken Thompson 和 Robert Griesemer 着手发起了一个叫 Golang 的项目,Go 语言诞生。
作为一个为了取代 C/C++ 而生的语言,Go 语言的发展迅速,非常适合构建命令行实用程序和网络服务,尤其是云计算场景下高并发应用。如今流行的容器引擎 Docker、容器编排系统 Kubernetes 都是用 Go 编写的,Go 也因此被一些人称为“云计算语言”。
新的编程语言的出现往往都是为了解决新出现的需求场景。2020 年 7 月 5 日,为数据而生的开发语言 Go+ 正式发布,在兼容 Go 的基础上,兼顾了数据科学家的喜好,如简化数学公式的表达。不过,Go+ 的出现并不是奔着取代 Go 而去的,其创始人许式伟大学时曾被称为 C 语言狂人,工作后又被称为 Go 语言狂人。即便是现在,许式伟也非常喜欢讨论 Go,在他看来,Go+ 势必可以吞掉 Go 的一些市场,但依旧会有很多人仍喜欢 Go。
7 月 9 日至 10 日,许式伟将出席由开源中国社区联合 Linux 基金会发起的「GOTC 全球开源技术峰会 」,并作为“编程语言艺术”分论坛讲师,为我们带来有关 Go 与 Go+ 的主题演讲,敬请期待!在演讲正式开始前,我们也采访了许式伟老师,请他初步谈谈 Go + 的哲学。
Q:您很喜欢讨论编程语言的哲学,为什么?
许式伟:
我为什么只讲 Go 的哲学,主要是我对自己演讲做的定位。演讲其实有两种可能性,一种是传道,一种是教人学会某种技能。我更喜欢传道而不是培训的概念。也就是说,花一小时做演讲并不是想教会别人什么,而是尽可能去让人知道,或者是打开一扇门。这也是为什么我只讲 Go 的哲学,不去教别人怎么用 Go,这是不同的概念。
Q:Go+ 哲学中最终要的是什么?和 Go 的哲学有什么不同?
许式伟:
我还是非常喜欢 Go 的“少就是指数级的多”,这是它一个非常内在的哲学——语言的语法是最少的,或者说力求最少,这实际上也是 Go+ 希望的。
Go+ 不太一样,它面向的人群实际上有两类,除了程序员之外,还要兼顾分析师,或者说是数据科学家,所以它的目标比 Go 复杂一些,既希望软件工程师喜欢,也希望数据科学家喜欢,要同时兼顾两个群体的喜好。所以 Go+ 会在 Go 支持上增加很多数据科学家喜欢的东西,或者对他们来说更自然的一些表达方式,我都希望在 Go+ 上能有所体现。这实际上就是 Go+ 对内的一些出发点。
Go+ 和 Go 的区别,最简单的例子,就是数学公式,在 Go 里面表达一个数学公式肯定比较复杂,没有操作符重载。我们认为 Go+ 数学公式的表达更优雅,因为数据科学家成天在处理数据,如果数学公式表达起来都很累,看起来很繁琐,肯定影响工作效率。我们会在 Go+ 引入很多数学相关的能力,使得它能够更方便去表达一些数据科学需要用到的能力。
吞掉一些市场是必然的。因为 Go+ 追寻的目标使它会复杂一些,肯定要比 Go 略微复杂,所有有些程序员可能就喜欢做 Go,不喜欢和数据科学相关的东西。所以我觉得肯定有人从 Go 迁移到 Go+,但还是会有人继续喜欢 Go 的。
Q:据了解,您平常在家会教孩子编程,现在还在教吗?有没有把 Go 或者 Go+ 教给他?
许式伟:
一直在教,孩子今年初一,教 Go+ 已经快一年了,从六年级开始学,没有教 Go。
我认为 Go+ 的入门门槛必须比 Go 低,虽然 Go+ 完全兼容 Go,但是它的门槛比 Go 要低。有的人可能听起来觉得奇怪,明明比 Go 的语法要多,为什么入门门槛低呢?
因为 Go 有一些工程性的语法特征,初学者是不容易掌握的。Go+ 会把一些复杂性的东西在入门的时候隐藏起来,避免接触到工程相关的特别复杂的东西。像我现在教小孩子编程也不会太过涉及到如何编写大型程序相关的东西,基本上以基础语法、程序思维的锻炼这些东西为主,不会涉及到太多工程的东西。但 Go 基本上是强加了工程相关的东西给初学者,这对它来说蛮正常的,因为它本身就是面向工程化的语言。