导读 两位创造者Rob Pike和Robert Griesemer一起探讨了Go成功的原因。

常言道,历史不会重演,但总会惊人的相似。

如果您想创建一种编程语言,多向那些有经验的人士学习,他们有很多可取之处。在《Go Time》第100期节目中,两位Go语言的创造者Rob Pike和Robert Griesemer一起探讨了他们的经历。

以下是他们认为取得成功的5大原因。

正式的语言规范

在讲述这个项目的起源时,Rob说:“我们经过六个多月的头脑风暴和思想成形之后,我们做的第一件重要的事情,就是花了几个星期写了一份正式的语言规范,我认为这是项目成功的关键部分。” 该规范引起了其他工程师的兴趣,比如Ian Lance Taylor。

还有最重要的事情之一是Ian Taylor看到了规范,并决定为它编写一个编译器。有一天他走进我们的办公室说:“顺便说一下,我为你们的语言做了一个编译器。” 这是一个多么神奇的时刻。当然,他后来成为了团队的一员,现在他还在为Go工作。

杀手锏App

Rob说当时并没有重点考虑为什么要引入Docker 的,大概是为了使Go语言对系统程序员有吸引力?

是的,Docker现在是我们的杀手锏App,因为它是用Go编写的,运行良好,它成为了现在所谓的云计算的核心……我们过去只称它为系统编程或服务器。事实上,只要有一项重要的技术是用Go语言写的,这就证明了它的用武之地。我认为Go确实是一种很好的语言。

后来又出现了Kubernetes。能够使用你的语言编写重要的软件,这是取得成功的一个重要部分。如果一门语言没有任何应用内容,那么它有多好就无关紧要了。

他们建立了一个开源社区

Rob相当坦率地谈到了他们在开放源码世界中所面临的挑战,这让人耳目一新。

我确实认为这个团队并没有真正准备好与开源社区进行交互。Ian是我们中唯一一个在开源世界中待了很长时间的人,他在社区中做的事情比他应得的要多。

我们花了很长时间才理解开源社区意味着什么,比如有一个项目,该项目是由公司支付,但有很多开源贡献者…我们早期有很多出色的开源开发。Windows的移植完全是由外部贡献者完成的,这非常棒……社区的输入也很关键。

有时人们认为社区受谷歌控制太多了,这是他们的观点,我不同意;我认为他们低估了团队听取开源社区的意见、处理所有问题的能力……

建立开源社区,这是一件很有挑战性的事情,因为有成千上万的人(现在全世界有数百万的Go程序员),他们都对这件事有自己的看法,也知道如何去做。每个人都想要不同的东西,但是这很棘手,很难平衡。

不会改变其他语言

这一点一开始有点违背常理。通常对于软件来说,要推崇其可塑性,而要避免僵化。然而,Rob很好地解释了这一点。

我们故意这样做,对于Go语言我们承诺不改变任何东西。这对语言的成功至关重要,因为它使企业相信我们所做的事情和依赖我们不会破坏他们的东西。我想很多人没有意识到这一原则。我们没有破坏人们的程序,即使这是一个有十年历史的项目。这多么令人难以置信,但正因为如此,我们才走到现在。

坚持自己的信仰

当面对社区的不良反馈以及团队如何做出改变的时候,Rob说:

Go的一些特点对它的成功至关重要,但人们并不喜欢,我们对此也直言不讳。我想您提到的,未使用变量的编译错误就是其中之一。这是令人非常恼火的,哪怕你忘记删除一个未使用的变量,你的程序将出现编译错误。但对我们来说,这是Go语言出彩的地方。虽然不能阻止你写“坏”代码,但我们试图告诉你…这样可以避免你的程序很慢,或者你的代码难以维护。

其实真正让人们抓狂的是,Go不允许导入你不使用的库。这对我们来说是至关重要的,因为程序构建和处理大量二进制文件会花费很多时间,我们确保您的程序的依赖项正是您所需要的。但对很多人来说,每次编辑并删除打印语句或其他内容时,编译器都会说“你没有使用这个库”,这简直是太烦人了。

后来,Brad编了一个基于gofmt的goimports,为你管理那些编译项,这基本上平息了那些抱怨。

以上就是Rob Pike的Go语言成功的5件事。整个对话都很精彩,值得一听。你还在等什么?

一起探讨Go 语言为什么能成功?的更多相关文章

  1. (转)如何学好C语言,一个成功人士的心得!

    zidier111发表于 2013-1-26 08:59:05   今 天,我能够自称是一个混IT的人,并能以此谋生,将来大家能一次谋生,都要感谢两个人:克劳德.香农和约翰.冯.诺依曼,是他们发现了所 ...

  2. 怎样学好C语言,一个成功人士的心得!

    今天,我能够自称是一个混IT的人,并能以此谋生,将来大家能一次谋生,都要感谢两个人:克劳德.香农和约翰.冯.诺依曼,是他们发现了全部的数字化信息,不论是一段程序,一封email,一部电影都是用一连串的 ...

  3. 【C语言学习笔记】C语言函数执行成功时,返回1和返回0,究竟哪个好?

    基本上,没有人会将大段的C语言代码全部塞入 main() 函数,更好的做法是按照复用率高,耦合性低的原则,尽可能的将代码拆分不同的功能模块,并封装成函数.C语言代码的组合千变万化,因此函数的功能可能会 ...

  4. [转]深入探讨C语言中局部变量与全局变量的作用域与存储类别

    C语言中局部变量和全局变量变量的作用域与存储类别(auto,static,extern,register) 1.局部变量和全局变量在讨论函数的形参变量时曾经提到,形参变量只在被调用期间才分配内存单元, ...

  5. 关于Quartus构建nios软核以及eclipse建立c语言工程以及成功下载到FPGA芯片过程遇到的各种问题以及解决方法详解

    这不是一篇构建nios的教程,而是遇到的各种问题以及解决方法.至于构建教程,网上一大把,我推荐正点原子的FPGA教程,比较新,比较详细,通俗易懂!!! 这里以一个点亮LED灯的Nios软核为例,很明显 ...

  6. eclipse建立c语言工程以及成功下载到FPGA芯片过程遇到的各种问题以及解决方法详解

    推荐大家预先建立好一个工程目录文件夹,确实挺好用,参考正点原子的pdf教程,如下图所示, 我们eclipse在software文件夹建立一个workspace即可 选择用helloworld模板建立工 ...

  7. Go语言核心36讲(Go语言实战与应用四)--学习笔记

    26 | sync.Mutex与sync.RWMutex 从本篇文章开始,我们将一起探讨 Go 语言自带标准库中一些比较核心的代码包.这会涉及这些代码包的标准用法.使用禁忌.背后原理以及周边的知识. ...

  8. go语言环境搭建+sublime text3(windows环境下)

    感觉有点坑,整了一下午~搞定 go语言环境搭建+sublime text3(windows环境下) 1.安装sublime text3 2.安装go语言程序包 3.测试go语言是否安装成功     键 ...

  9. dynamic2016 crm 安装语言包提示缺少组件报错

    当安装dynamic2016 CRM英文语言包安装成功后,在系统切换语言的时候提示如下报错为缺少CRM reporting extensions 插件导致,在CRM的解压安装包如下路径找到对应的执行文 ...

随机推荐

  1. LOJ#6713. 「EC Final 2019」狄利克雷 k 次根 加强版

    题目描述 定义两个函数 \(f, g: \{1, 2, \dots, n\} \rightarrow \mathbb Z\) 的狄利克雷卷积 \(f * g\) 为: \[ (f * g)(n) = ...

  2. 解决vim选中文字不能复制的问题

    转载自本人独立博客:https://liushiming.cn/2020/01/18/vim-copy-issue-in-iterm2/ 概述 最近发现在iterm2中打开vim,用鼠标选中文字,并用 ...

  3. JavaScript - 获取当前页面某个节点的个数

    document.getElementsByTagName(<tag_name>).length;

  4. json_encode转化索引数组之后依然还是数组的问题

    小坑问题:直接上图 解决方法:(json_encode加入第二个参数) JSON_FORCE_OBJECT

  5. Plastic Bottle Manufacturer Tips: Use Caution For Plastic Bottles

    Plastic bottles use polyester (PET), polyethylene (PE), polypropylene (PP) as raw materials, after a ...

  6. oracle 基础sql语句

    修改date日期时间: update T2_FOODS_STORAGE_IN set create_time =to_date('2020-01-15 12:30:20','yyyy-mm-dd hh ...

  7. 包、logging模块、hashlib模块、openpyxl模块、深浅拷贝

    包.logging模块.hashlib模块.openpyxl模块.深浅拷贝 一.包 1.模块与包 模块的三种来源: 1.内置的 2.第三方的 3.自定义的 模块的四种表现形式: 1.py文件 2.共享 ...

  8. 洛谷 P1843 奶牛晒衣服(二分答案)

    嗯... 题目链接:https://www.luogu.com.cn/problem/P1843 我们二分枚举时间,看看那些衣服在蒸发后还要用烘干机,则用cnt记录它的时间. 注意w数组在操作中不能变 ...

  9. 【笔记3-用户模块】从0开始 独立完成企业级Java电商网站开发(服务端)

    数据表结构设计 关系设计 为什么不用外键? 分库分表有外键会非常麻烦,清洗数据也很麻烦.数据库内置触发器也不适合采用. 查业务问题的后悔药--时间戳 create_time 数据创建时间 update ...

  10. PAT 1003 Emergency (25分)

    As an emergency rescue team leader of a city, you are given a special map of your country. The map s ...