https://www.zhihu.com/tardis/zm/art/551945410?source_id=1005

今年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

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图形终端。在贝尔实验室期间,他还编写了许多文本编辑器,其中sam和acme最为著名,并且现在依然在开发和使用。而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演讲视频)

Rob Pike在谷歌

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

Go的诞生

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

当时Robert Griesemer、Rob Pike 和 Ken 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 more,Go更容易编写、更容易阅读、更容易理解、更稳定。

那年他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多年开发经验说:避免倦怠的最好方法是在支持你的环境中做你真正喜欢的事情。他认为自己是幸运的,在贝尔实验室和谷歌都是如此。

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

关于Go的必读好书

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

Go语言实战

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

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

 
 
 

Go语言实战(异步图书出品)
京东
¥46.80
去购买

 
 
 

Go语言定制指南

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

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

 
 
 

Go语言定制指南(异步图书出品)
京东
¥53.60
去购买

 
 
 

Go语言高级编程

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

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

 
 
 

Go语言高级编程(异步图书出品)
京东
¥59.70
去购买

 
 
 

Go Web编程

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

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

 
 
 

Go Web编程(异步图书出品)
京东
¥53.00
去购买

 
 
 

结语

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

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


推荐阅读

为什么要使用 Go 语言?Go 语言的优势在哪里?

========

赠人玫瑰,手留余香~

不要忘记点赞、收藏、关注 @人民邮电出版社三连哦!感恩有你~

[转帖]46岁加入谷歌,51岁发明Go,他的编程原则影响了一大批程序员!的更多相关文章

  1. 谷歌大牛 Rob Pike 的 5 个编程原则

    谷歌大牛 Rob Pike 的 5 个编程原则 简介: Rob Pike,目前谷歌公司最著名的软件工程师之一,曾是贝尔实验室Unix开发团队成员,Plan9操作系统开发的主要领导人,Inferno操作 ...

  2. 有感于三个50岁的美国程序员的生活状态与IT职业杂想

    前言 这篇杂记其实是去年也就是 2013年9月30日写的,还上过博客园十日推荐的首页,后来在整理博客分类时七弄八弄误删掉了好多文章,就包括这一篇.今天,2014年9月29日,恰好恰好一年的时候居然在好 ...

  3. 转载——有感于三个50岁的美国程序员的生活状态与IT职业杂想

    明天就是国庆节了,今天也不想干活干的太累了!写一篇以前去美国出差的杂想,对比于美国50多岁的程序员和大多数50多岁国内父母的生活状态有感而发. 前几年正好有一个项目的机会出差去了一次美国,地点是美国中 ...

  4. 程序人生 | 35岁以上的 iOS 程序员都到哪里去了?

    1.网上流传华为公司正在清理 34 岁以上的员工. " 中国区开始集中清理 34 + 的交付员工,...... 去向是跟海外服务部门交换今年新毕业的校招员工,也就是进新人,出旧人. 这些旧人 ...

  5. 祝雷(依乐祝):一份来自29岁.NET老程序员的自白

    潘老师的文笔果然了得,经过潘老师的妙笔生花后,文章的阅读体验果然好了很多!这里再次感谢潘老师的支持! 祝雷(合肥.NET 俱乐部发起人) [个人介绍] 博客园知名博主(依乐祝).6年以上.NET技术栈 ...

  6. [No000011B]为什么有些程序员悄无声息渡过35岁中年危机?

    今天分享是一些已经渡过中年危机的前辈们,看看从他们身上,是如何优雅的过渡的.如果想一直在程序这条路上走下去,建议读完.文章略长. 人物一:陈睿,前百度研发经理,携程定制旅游CTO 从程序员到架构师到管 ...

  7. 20岁的设计师vs30岁的设计师

    20岁的设计师vs30岁的设计师 如果你还是20来岁,要恭喜你,你还年轻, 一切才刚刚开始 还有时间去探索无尽的可能 还有时间去找到无限的前途 ​ 如果30岁的你还不够强大, 请记得时刻给予自己信心, ...

  8. 30岁程序员的焦虑 Anxiety of 30-year-old Programmers

    还有四个月,我就30周岁了.圈里都在传30岁程序员的焦虑,我也焦虑.身边的朋友,除了已经上岸的一部分,说不焦虑的,几乎找不到. 我们不妨认真地来聊一下这个话题:30岁,程序员,焦虑. 首先,什么是焦虑 ...

  9. 36岁IT老人再次随笔——程序员的门槛其实并不高,但却是一个易学难精的行当——IT的快车很快,我常看到不少人摔落下去,但又有不少身手敏捷的人跳了上来 good

    36岁的我,还在IT里面留恋着技术.我不是什么技术牛人,只是不愿离开.搞硬件的朋友对我说:“我以为你是搞硬件的,没想到你软件方面这么厉害?”,搞软件的朋友对我说:“我以为你只是搞软件的,没想到你硬件方 ...

  10. 转一篇100offer的采访~35岁程序员是一种什么状态

    随着互联网的高速发展变革,大龄恐惧症越来越多地在技术圈被人讨论.很多程序员在工作5-10年以后,都会开始思考5年.10年甚至更久以后的自己,会是怎样一种生活工作状态,以及是否会被时代抛弃. 特别是全民 ...

随机推荐

  1. Python——第一章:if语法规则

    if语句的语法规则: ======第一种======        if 条件:            代码        如果条件成立就执行代码        如果不成立, 就不执行 案例1: mo ...

  2. Hystrix:Spring Cloud服务熔断与降级组件

    Hystrix:Spring Cloud服务熔断与降级组件 问题总结 熔断器? Spring Cloud Hystrix? Hystrix服务降级? 全局降级方法? 解耦降级逻辑? Hystrix服务 ...

  3. Kubernetes常见错误总结

    1.屏幕持续打印Pod日志报error: unexpected EOF错误 Kubernetes: requesting flag for "kubectl logs" to av ...

  4. CodeForces 1009E Intercity Travelling 概率DP

    原题链接 题意 给我们一个长为n的序列,要求我们从头开始向右走n个节点,每个位置都有1 / 2的概率将我们传送回1号点之前,不过我们只需要完成走n步的任务就可以了.求我们走过的元素和 乘以 2的n - ...

  5. 26、Flutter中命名路由

    Flutter 中的命名路由 main.dart中配置路由 void main() { runApp(MaterialApp( theme: ThemeData( appBarTheme: const ...

  6. GaussDB(DWS)性能调优:Sort+Groupagg聚集引起的性能瓶颈案例

    本文分享自华为云社区<GaussDB(DWS)性能调优:Sort+Groupagg聚集引起的性能瓶颈案例>,作者: O泡果奶~ . 本文针对SQL语句长时间执行不出来,且verbose执行 ...

  7. 看这里!带你快速体验MindSpore V1.0(For ubuntu 18.04)

    摘要: 本文介绍了如何在Ubuntu 18.04上安装CPU版本的MindSpore V1.0.并使用安装好的MindSpore进行了LeNet的模型训练. Part One:引言 在HC2020大会 ...

  8. CoralCache:一个提高微服务可用性的中间件

    摘要:当数据库出问题时能降级从本地缓存的数据中查询数据,CoralCache就是这样一个提高微服务可用性的中间件. 背景 有些场景下,微服务依赖数据库中一些配置项或者数量很少的数据,但当数据库本身有问 ...

  9. 提升80%上云集成效率, TA是如何做到的

    摘要:基于华为云开天aPaaS,提升80%上云集成效率,降低50%集成成本 没有充足资金,没有足够的项目规划和过渡时间,也没有经验丰富的IT团队支持,中小企业的上云路可谓是困难重重.如何帮助企业高效上 ...

  10. VUE3/TS/TSX入门手册指北

    VUE3入门手册 vue3入门 首先 查看 官方文档:https://cn.vuejs.org/guide/quick-start.html 如果有vue2基础,速成课程:https://www.zh ...