作者:Chris Siebenmann、郝林
编辑:张晓楠
“Go 是谷歌的编程语言,而不是社区的?”对于这样的观点,你是赞同还是反对?今天,让我们就此问题展开一次大讨论……
前几天,InfoQ 在官网上发布了一篇国外博主(该博主是 Go 语言贡献者)对 Go 语言的评论文章,观点有些“消极”,他认为:Go 是谷歌的编程语言,而不是社区的。在这位博主看来,虽然 Go 语言拥有一个贡献者社区,但是它并不是社区的项目,只是谷歌的一个项目。所以只要是谷歌反对的东西,没有人可以把这个东西加到 Go 语言中。
这篇文章在发布之后引发了网友的激烈讨论,持反对意见的人不在少数,当然也有人非常赞同这位博主的观点。
对于这篇文章引发的讨论,InfoQ 记者也第一时间联系了《Go 并发编程实战》作者、前轻松筹大数据负责人郝林,他的观点是:Go 语言是大家的,只有伪爱好者才会谈舍弃。在郝林看来,Go 语言官方团队在谷歌内部实属一个很小的团队,但其成员几乎个个都是技术大神。所以即使谷歌是独裁的,我们也有理由相信他们会把 Go 语言做得更好。
对于由“Go 究竟属于谷歌还是属于社区”而引发的讨论,我们决定把这位国外博主和郝林的文章都呈现在一起,你是怎么看这件事儿的呢?可以点击文末阅读原文参与讨论,或者在评论区留言。
Go 语言是谷歌的,而非社区的
本文作者:Chris Siebenmann
我在 Twitter 上面看到这样的一个问题:有很多人讨论 Go 的泛型,为什么我们不能有一个类似于 Java OpenJDK 那样的东西,比如叫作 OpenGo,社区成员可以自己实现泛型,而不是一直等待官方推出泛型?
对于这个问题,有很多人作了回答,但有一个真实的声音没有被直接表达出来,那就是:Go 是谷歌的编程语言,而不是社区的。
当然,很多社区成员为 Go 语言贡献了很多重要并且有价值的东西,这些从贡献者和提交者的多样性就可以看出来。但谷歌作为整个 Go 社区的守门人,它独自决定什么东西可以被 Go 语言接受,什么不能被接受。
即使社区有一套流程来决定什么东西可以被加入到 Go 语言中,但不要忘了房间里还有一头八百磅重的大猩猩。只要是谷歌反对的东西,没有人可以让它们加入到 Go 语言中。同样的,如果谷歌决定要把什么东西加入到 Go 语言中,那是势在必行的。
最为明显的一个例子就是在 Go 语言模块系统上发生的一件事情,谷歌 Go 语言核心团队的一名成员放弃了由外部 Go 社区开发的一个模块系统,因为它使用了另一种不同的模型。可以通过这里查看相关的历史。
简单来说,Go 语言拥有一个贡献者社区,但是它并不是一个社区项目,而是谷歌的一个项目。无论你认为这是好事还是坏事,它都是一个不争的事实,我们需要接受这个事实。如果你认为有一些重要的东西可以加入到 Go 语言中,那么说服 Go 语言核心团队比努力在社区中达成共识来得更有效。
贡献者将大量的时间和精力投入到社区当中,但如果 Go 语言核心团队不买账,就是在浪费时间。最好的结果也不过是让 Go 语言核心团队对这些问题了解得更深入。
一般来说,社区的声音对于 Go 语言的发展来说并不是十分重要,而我们这些谷歌墙外人,只要接受这样的事实就对了。如果足够幸运的话,我们想要的东西正好与谷歌想要的东西契合,谷歌和 Go 语言核心开发团队就会更加关注这些东西,并及时进行相关的工作。好在谷歌和 Go 语言核心团队也比较关心 Go 语言在业界成功与否,所以他们愿意付出代价解决痛点。
不管怎样,Go 语言表现得挺好,它有一个不大的核心团队,这个团队对于这门编程语言有着良好的品味和愿景,但他们听不进外界的声音,缓慢前行,不太愿意拥抱变化。
我喜欢 Go 语言已经有一段时间了,对 Go 语言的演变和 Go 语言核心团队的管理能力基本上感到满意。我认为慢一点推出泛型功能并不是件坏事,但 Go 语言模块系统事件却给我留下了不好的印象,我似乎有点后悔成为 Go 语言贡献者的一员,哪怕只是一些小的改动我也并不乐意(换句话说,我不想成为“二等公民”)。如果发现 bug,我会继续提交 bug 报告,但也仅限于此。
Go 语言的团队声称他们比较关心整个社区,并且希望更多的人参与进来,这种论调让我感觉很可笑。我不否认他们关心社区,但只关心某些特定的方面。我觉得 Go 语言团队与其暗中做小动作,不如坦诚布公地面对这种状况。
谷歌和 Go 语言核心团队:
你可能会问,Go 语言到底是谷歌的还是 Go 语言核心团队的?虽然说 Go 语言的一些方向是由核心团队设定的,但核心团队的大部分或者全部成员都是谷歌的员工,所以在实际当中不可能分得很清楚。如果 Go 语言核心团队都离开了谷歌,并积极确立 Go 语言未来的发展方向,那我们或许可以说清楚 Go 语言到底属于谁。如果这件事情真的发生了的话,特别是大多数人不再为谷歌工作,那么 Go 语言就有可能属于这个团队。就像 Python 一样,不论 Guido van Rossum 为谁工作,Python 一直都是他的编程语言。
在实际当中,不能否认的是,谷歌为 Go 语言提供了大量的基础设施和资源,例如域名 golang.org 等,而且 Go 语言的商标同样也在谷歌的商标列表里面。
英文原文:
https://utcc.utoronto.ca/~cks/space/blog/programming/GoIsGooglesLanguage
Go 语言是大家的,只有伪爱好者才会谈舍弃
本文作者:郝林
1、Go 语言是开源的
对于绝大多数爱好者和开发者而言,这就足够了。只有那些有过真实贡献的人才能真正体会到一个编程语言的背后是“君主制”,还是“民主制”,又或是“联盟制”。但无论如何,这些编程语言都是开源的,并且官方也会在一定程度上尊重其附带的技术社区。
当前的现实情况是,就算是“君主制”,开源编程语言的创造者也会对社区有足够的重视。就像 Go 语言和 Python 语言那样。另外,Java 语言的社区其实是“联盟制”的,是由一些科技公司实际掌控的。而 Rust 语言的社区才算是“民主制”的。
2、Go 语言越来越重视社区了
Go 语言官方团队在 Google 内部实属一个很小的团队。但其成员几乎个个都是技术大神。即使他们是独裁的,我们也有理由相信他们会把 Go 语言做得更好。更何况,在 Go 语言团队历经数个版本、陆续解决了一些关键的功能和性能问题之后,他们也开始更加关注社区了。
当然了,分歧在所难免,因为 Go 语言有着它自己的使命、愿景和价值观。况且 Go 语言团队的精力也是有限的。我目前看到的是,Go 语言团队已经开始积极地去解决社区最关心的一些问题了,比如:错误处理和泛型。
3、只有伪爱好者才会谈舍弃
如果换个角度,那么我们就会发现:只有伪爱好者才会谈舍弃。打个比方,我们可以把看球赛的人分为 4 类,即:真球迷、伪球迷、研究者和旁观者。真球迷会义无反顾地支持自己热爱的球队。即使这支球队时常在联赛内垫底,他们也会如此。而伪球迷只是在假装热爱。他们通常只会支持他们认为的那些优秀的球队以及那些优秀的球员。
只有伪球迷才会频繁变换他所支持的球队。对于研究者来说,他们看的不是比赛,而是比赛背后的战术、战略和趋势。所以对于他们来说,谈不上热爱哪支球队。而旁观者只是把看球赛当做消遣,至于看的是篮球赛还是足球赛就没有那么重要了。他们想体验的是另外的东西。
只有真球迷和伪球迷才会抱怨某某球队不尽如人意。但不同的是,真球迷在抱怨之后会继续热爱和支持,而伪球迷很可能会就此离去。
对于编程爱好者来说也是类似的。如果你是某门编程语言的伪爱好者,那么你抱怨的就很可能是这门语言没有某某特性或者没有朝着你想象的方向发展。并且,在抱怨几次之后,你很可能就会转到其他的编程语言阵营。虽然真、伪爱好者之间没有好坏之分,但这也能在一定程度上影响你在一个技术社区中的地位。伪爱好者常常只能游走在社区的边缘。频繁跳槽者的职业发展通常都不会太好,不是吗?
另外,如果你想通吃多门编程语言,那么请把自己培养成研究者,而不是伪爱好者。
4、过程比结果更重要
在开源社区中,我们应该注重参与的过程而不是参与的结果。我们关注的应该是:通过积极的参与,我们增强了哪些能力,以及得到了哪些机会。如果我们只关注结果,那么就很可能失望而归,甚至什么也得不到。因为每个社区都有每个社区的制度。而这些制度在某些人的眼里可能是理所应当的,而在另外一些人眼里可能就是不可理喻的。这很正常,每个人看问题的角度几乎都不相同,尤其是在某些情绪的控制下。
所以,死盯着一个点不放只会让自己更加纠结,就比如“希望 Go 语言能够增加对自定义泛型的支持”。虽然现在 Go 语言团队已经开始设计泛型了,但是想当年我看到不少人因此变得怨天尤人,天天不停地叨念,有的还愤然离去。这完全是没有必要的,不是吗?
总之,虽然 Go 语言是 Google 的,但更重要的是,它是一门开源的编程语言。与 Java、Python、Rust、Julia 等语言一样,它们都是广大开发者的。起码我们都可以免费的使用并有机会参与和贡献。它们只是在社区制度和协作方式上有所不同罢了。
如果能够站在更高的层次上观察,我们会发现我们和他们的愿望是一致的,那就是:希望它发展得更好并向着更高的山峰挺近。而作为非核心人员的我们,要做的就是:积极的参与,并借此增强自己的能力。