46岁加入谷歌,51岁发明Go,他的编程原则影响了一大批程序员

今年3月,万众瞩目的Go 1.18版本发布,Go终于开始支持泛型了!该版本不仅有里程碑式的语法特性变化(支持泛型),还改善了性能、实现了工具链,对运行时和库也做了更改。

“Go语言之父”Rob Pike在5月的《ACM通讯》文章The Go Programming Language and Environment中表示:Go成功的原因在于大多数语言的设计都集中在语法、语义或类型的创新上,但而Go 专注于软件开发过程本身

这是Go成功的原因,同时也是Rob Pike成功的诀窍。

Rob Pike(2010年)

可爱的Go gopher

01

Rob Pike在贝尔实验室

1956年出生的Rob Pike,在高中学习编程的时候,用的还是那种“古老的”打孔卡。在多伦多大学的时候,他学习计算机使用的也还是IBM 360那种大家伙。

当时的打孔卡(来源于Rob Pike演讲视频)

刚大学毕业时的Rob Pike(来源于Rob Pike演讲视频)

1980年进入贝尔实验室的时候,他才第一次看到UNIX计算机,在那之前他甚至不知道UNIX是什么。

走进这间屋子,Rob Pike才第一次看到运行UNIX的机器(来源于Rob Pike演讲视频)

在接触使用UNIX之后,他很快展现了自己在编程上的优秀能力,加入了实验室的UNIX团队,开始参与各种系统与编程语言的开发工作。当时贝尔实验室正在开发Inferno操作系统和用于分布式系统的Limbo编程语言,他作为主要开发人员负责这些项目。

1981年,他为UNIX编写了第一个窗口系统。并在一年后,与Bart Locanthi Jr.共同设计开发了用于UNIX的Blit图形终端。在贝尔实验室期间,他还编写了许多文本编辑器,其中samacme最为著名,并且现在依然在开发和使用。而UNIX机器上的鼠标出现,也有他极大的贡献。

最初UNIX的窗口系统(来源于Rob Pike演讲视频)

1982年用于演示用鼠标控制白色球运动的视频截图(来源于Rob Pike演讲视频)

在贝尔实验室工作期间,他遇到了比自己小七岁的Renée French,两人很快相爱。Renée French从小在新泽西长大,是一名著名的画家和作家,绘画作品规格都很小,大多是一些模糊的动物或者其他形象。

Renée French的绘画作品

在1980s中期的时候,Rob Pik开始参与贝尔实验室Plan 9项目,该项目的吉祥物Glenda,就是他妻子绘制的。Renée French也为贝尔实验室其他项目和程序员们,绘制了各种可爱的动物形象。

Plan 9吉祥物Glenda

似乎每个贝尔实验室的程序员都不仅仅是程序员,还担任着其他的角色——甚至有些奇怪。他1989年与著名搞笑魔术表演组合Penn & Teller相识,并参加了他们的Friday movie nights节目。1990年更是作为技术助手,一起上过全美知名的Late Night with David Letterman节目表演“大切活人”。

Rob Pike在节目上操作机器

(这个机器假装能够控制演员动作)

1992年,Ken Thompson接触到UTF字节串编码系统,和Rob Pik讨论了设计要点并很快实现应用到Plan 9项目中——这就是后来成为互联网最主要编码形式的UTF-8

在贝尔实验室做系统开发,让他在代码复杂度上有独到的理解,曾总结过5条编程原则,在当时影响了一大批程序员。因其直达编程的核心问题,虽已过去三十多年,对现在的软件开发工作仍具有极大的指导意义:

  1. 你没有办法预测每个程序的运行时间,瓶颈会出现在出乎意料的地方,所以在分析瓶颈原因之前,先不要盲目猜测。
  2. 测试(measure)。在测试之前不要优化程序,即使在测试之后也要慎重,除非一部分代码占据绝对比重的运行时间。
  3. 花哨的算法在 n 比较小时效率通常比较糟糕,而 n 通常是比较小的,并且这些算法有一个很大的常数。除非你确定 n 在变大,否则不要用花哨的算法。即便 n 不变大,也要先遵循第 2 个原则。
  4. 相对于朴素的算法来说,花哨的算法更容易出现Bug,更难调试。尽量使用朴素的算法和数据结构。
  5. 数据占主导地位(Data dominates)。如果你选择了正确的数据结构,并且已经把事情组织好,那么算法的效率显而易见。编程的核心是数据结构,不是算法。

这些大多是与Dennis Ritchie、Ken Thompson等人共事对C语言的感悟,后来Ken Thompson还把第3条和第4条原则改写为“当遇到麻烦时,试试最简单粗暴的办法”。同时这也是KISS(keep it Simple,Stupid)原则的具体体现,简单也成了他最重要的编程思想。

左侧站着的是C语言之父Dennis Ritchie

Rob Pike坐着(2001年,来源于Rob Pike演讲视频)

02

Rob Pike在谷歌

2002年他离开贝尔实验室加入谷歌,主要从事分布式系统、数据挖掘、编程语言和软件开发工具方面的工作。

Go的诞生

在2007年的时候,谷歌开发工作的规模与正在部署的生产系统规模暴增,需要有个好的解决方案应对这些挑战。

当时Robert GriesemerRob PikeKen Thompson都是用的C++,编译一个分布式集群大概要花费45分钟,这个过程让三个人都很难以忍受。2007年9月20日星期四下午,在等待编译的时候Rob Pike把Robert Griesemer和Ken Thompson喊到一起决定要做些什么——他们不想永远使用C++,并且想要很好处理并发的问题。希望创造一个能够摒弃其他语言的缺点的新语言,保持静态类型和运行时效率、具有可读性和可用性、具备高性能网络和并发处理。

从左到右分别是

Robert Griesemer、Rob Pike 、Ken Thompson(2012年,Google I/O大会)

Go这个名字也是他取的,认为它很短、易于输入,非常合适这一新语言的特性

最初的一周内,他们就讨论出来了很多Go语言的风格和特性,并着手开发。

他将“大道至简”的理念融合到Go设计中去,形成了独特的Go哲学——Less is exponentially moreGo更容易编写、更容易阅读、更容易理解、更稳定

那年他51岁。

Go的图标什么来头

Go立项的时候,他的妻子Renee French就帮他们画了一个标志,然后这个图标就出现在Google Code网站和第一件Go T恤上。

Go的标志

2009年11月10日Go准备开源发布的之前,他妻子又建议将以前画的一只地鼠形象改编成为Go的吉祥物——那只地鼠是她在1999年左右为新泽西州WFMU广播电台年度筹款活动设计的,作为宣传的形象。

它没有名字,就叫Go gopher

之后,他妻子又绘制了更多的Go gopher形象,代表着Go项目和各地的Go程序员。这些可爱的形象成为Go世界中最受欢迎的事物之一,被世界各地的Go程序员广泛使用。

各种Go gopher形象

Go的影响力远超预期

Go早期吸引用户主要是因为少见地支持了垃圾收集、静态编译对并发和并行的原生支持也在当时流行的多核机器上发挥了优势。

2017年前后Go随着云技术的高速发展而变得特别流行,成为“云基础设施的语言”,并催生了Docker。Go的影响力越来越大,世界各地的Go程序员也越来越多,完全超过了他们最初的预期。在TIOBE编程语言排行中它曾从50名开外蹿升至第10名,现在保持在第12名。

TIOBE指数中的Go语言发展曲线

Go初期不支持泛型一直是被人诟病的点,虽然多年来总有各种方案被提出来,但最终都证明不合适。直到Go核心开发者Ian Lance Taylor投入大量精力设计了一个全新的方案,才让Go成功在1.18版本支持泛型。

Go官方对于1.18版本的介绍

来自Go语言之父的忠告

Rob Pike今年已经66岁了,大部分时候在澳大利亚生活,现在居住在悉尼新南威尔士州。在最近的一次采访中,他总结了自己40多年开发经验说:避免倦怠的最好方法是在支持你的环境中做你真正喜欢的事情。他认为自己是幸运的,在贝尔实验室和谷歌都是如此。

同时他也提醒我们:如果对工作感到压力,应该随时休息或者改变方向

03

关于Go的必读好书

想要改变方向的话,Go是一个非常不错的选择,它简单、高效、适用性广,也是做云基础开发必备的一门语言。这几本书从概念到实战,从基础技能到高级编程全覆盖,能够帮助大家完全进入Go的世界。

Go语言实战

这是世界上第一个全球Go语言大会的组织者们撰写的、简洁而全面的Go指导手册。作为首批做Go推广的开发者,他们更懂得如何让初学者从零开始,更轻松地踏入Go世界。

这本耗时18个月的书,能够帮助读者进入一个专注且全面、符合语言习惯的视角。同时学会语法、类型系统、并发、管道、测试等内容,掌握Go的规范和实现。

Go语言定制指南

本书作者柴树杉是国内第一批Go语言实践者和Go代码贡献者,拥有丰富而扎实的实战经验。

本书从Go语言语法树出发,通过对go/ast、go/ssa等包的分析,逐步深入阐述Go语言的核心技术。最后介绍LLVM,同时结合一个现成的定制语言,教会读者创造一个与Go类似的语言。

Go语言高级编程

本书同样是柴树杉所作,质量有着非常大的保障。

本书从实践出发讲解Go语言编程的进阶知识,在简单回顾Go语言发展史之后系统性地介绍CGO编程和Go汇编语言的用法;然后对RPC和Protobuf技术深入介绍;之后介绍工业级环境的Web系统的设计和相关技术;最后介绍Go语言在分布式领域的一些编程技术。

Go Web编程

本书作者是Go社区的活跃贡献者,在GoWeb编程方面积累了丰富的经验。

本书是完整地介绍使用Go语言开发Web应用所学的全部基本概念,并全在标准库下完成。所以本书要求读者会基本的Go语法,如果读者还未学习Go基本语法,可以搭配前面的《Go语言实战》使用,效果更佳

04

结语

Rob Pike曾表示自己职业生涯中有无数个成功的项目,也有无数个失败的项目,Go只是其中一个而已。它被创造就是为了让人们的编程变得更简单,而现在它也做到了,并且成为一个相对流行的语言。

如果你现在觉得自己的职业生涯需要做些改变,那么Go的确是一个很好的选择。


发表评论
留言与评论(共有 0 条评论) “”
   
验证码:

相关文章

推荐文章