Go语言之父:发明过航天望远镜,想用Go语言解放程序员!

Posted 脚本之家

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了Go语言之父:发明过航天望远镜,想用Go语言解放程序员!相关的知识,希望对你有一定的参考价值。


  脚本之家

你与百万开发者在一起

Go语言之父:发明过航天望远镜,想用Go语言解放程序员!
Go语言之父:发明过航天望远镜,想用Go语言解放程序员! 来源 | 异步 |文末赠书
Go语言之父:发明过航天望远镜,想用Go语言解放程序员!


Rob Pike, Unix的先驱,UTF-8的设计人。《Unix 编程环境》和《程序设计实践》的作者之一,除此之外,他还是Go语言的开创者,被誉为“Go语言之父”。

 

Go语言之父:发明过航天望远镜,想用Go语言解放程序员!

 贝尔实验室里的Rob

Rob Pike 于1956年出生于加拿大,Rob从小就对计算机编程十分着迷,和众多程序员一样,Rob有着自己的梦想——成为一个有所成就的编程者。因此带着梦想进入了多伦多大学,毕业后就进入了Ken所在的贝尔实验室。

贝尔实验室这个获得8个诺贝尔奖的实验室在90年代是全球计算机爱好者梦寐以求的地方(至今也是最受欢迎的实验室)。因此Rob也格外珍惜在此工作的机会。

Go语言之父:发明过航天望远镜,想用Go语言解放程序员!

在进入贝尔实验室一年多后,Rob因为打字速度快得到了Ken的欣赏,他们一起开发一个针对由 Gerard Holzmann 设计的很小的图形化交换语言的即时编译器上做结对编程。而这次和Ken一起奋斗的经历,也成为了他一生中最难忘的时刻之一。

Rob在多次采访中都提到:“在贝尔实验室时,Ken 教会了我一个极其重要的习惯: 纠错前先思考。是因为和Ken一起做编程时,每当程序出错,我都会本能的一头扎进问题,检查报错跟踪信息,或者是添加调试打印语句,启动调试器等等。但Ken完全相反,他就静静地站在那思考,不理会也不检查出问题的代码。但奇怪的是,他却总能比我先找到问题出在什么地方。”

这让Rob认识到这种编程思考模式非常的重要,也明白了 思考 —— 不看代码的思考,是最好的调试途径,因为它能让我们开发出更好的软件。这个收获也使得Rob编写出了第一个用于Unix系统的位图窗口系统,并且把它发展成了Bilt——一个可编程位图图形终端。

Go语言之父:发明过航天望远镜,想用Go语言解放程序员!
                            
"坚持"能让爱好也发光

Rob是一个全能型程序员,为了得到更好的锻炼,他在贝尔实验室从操作系统写到编译器,又从文本编辑器写到了UI界面。

Go语言之父:发明过航天望远镜,想用Go语言解放程序员!

Rob还被NASA另眼相看。没错!Rob是一位业余天文学家,并且发明了珈玛射线射电望远镜,这个望远镜还差点被NASA用在了航天飞机上。

Go语言之父:发明过航天望远镜,想用Go语言解放程序员!

很多人疑惑为什么Rob干什么都是拔尖的,其实是因为Rob一生在追求两个字—— 坚持。

在1990年,美国著名的脱口秀节目 “Late Night with David Letterman”的主持人大卫,发现了Rob这个奇特的程序员,认为这个能参加奥运还能设计望远镜的程序员能带来热点话题,便邀请Rob参加节目,而这个节目也让更多人认识了Rob。

Go语言之父:发明过航天望远镜,想用Go语言解放程序员!

在此之后,Rob 被人问道:“程序员千千万万,而能成为奥运的运动员或者进入NASA的天文家少之又少,你为什么要选择做编程而不是运动员或者天文学家呢?” Rob回应说:“我爱射箭,也爱天文,但我最爱编程。”

Rob希望自己能在编程上有更大的成就,也希望编程能得到大家的重视,但他发现市面上对于编程的教材太少了,程序员的知识水平参差不齐,于是Rob决定将自己所了解的知识分享给大家,便在1999年和贝尔实验室的Kernighan合作出版了《Unix 编程环境》和《程序设计实践》,而这两本书到了现在仍然十分受程序员们的喜爱。

Rob认为程序设计的处理方式才使系统有成效这也是应用计算机的一个基本原则。


在《Unix 编程环境》设计中,Rob写道:“Unix之所以如此成功,不仅仅是因为它是由C语言编写的,还因为Unix中引入了很多创新的程序和技术。”


抓住“疑问”能创造奇迹

Rob在2002年前,一路顺风顺水,但2002年却遇到了职业生涯上最大的坎坷。在此之前,Rob一直在贝尔实验室捣鼓Plan9 操作系统,但遗憾的是Plan9并没有引起多少人的注意。

因此Rob一怒之下写出了振聋发聩的雄文 “Systems Software Research is Irrelevant”,痛斥了当时社会对于系统开发的不思进取,固步自封的弊病。

这篇文章活活的剥开了90年代系统开发的无奈: 开发周期越来越长,代价越来越大,用户被统一到少数几个系统上,结果越来越多的活动是测量和修补,而真正的革新越来越少。

就在Rob为此事愁眉苦脸时,这时谷歌三顾茅庐,邀请Rob加入谷歌,从此Rob就在谷歌常驻,为谷歌做C语言程序类工作。

在回忆起这件事时,Rob还笑着说自己年少轻狂,但他从不后悔自己的冲动。Rob认为 只有挫折才会让自己更快的成长!

一直到2007年9月的时候,Rob一次偶然听到了一个演讲,演讲中提到的一些特性比较精妙,但是很难理解的点,像右值引用;其它的很有C++的特色,例如variadic模板;还有一些只是一些相当疯狂的,一如用户定义文字。

这时候,Rob突然问了自己一个问题: C++委员会真的认为C++的特性还不够多?有没有什么办法可以简化这门语言?从此这个想法在他脑海中牢牢扎根。

后来在C++0x的演讲中,Rob讲诉了关于一个他在上世纪80年代开发的玩具性的并发性语言Newsqueak(Go的前身)。这次演讲让Rob记起了Newsqueak里的好想法—— 能简化服务器端代码编写,于是Rob尝试把这个想法加入C++,但并发操作和C++控制结构整合到一起太困难了,于是第一次简化语言失败了。

Go语言之父:发明过航天望远镜,想用Go语言解放程序员!

失败并没有使Rob放弃,他又发现C++内存模型使用了原子类型,这个发现让Rob很困扰,在和Robert沟通后,他们一致决定们不想再使用C++了。他们说服了Ken,决定一起做一些事情——希望能在写Google的代码时能用到并行性特性。
 

“我们做了大量的C++开发,厌烦了等待编译完成,尽管这是玩笑,但在很大程度上来说也是事实。"


Go语言之父:发明过航天望远镜,想用Go语言解放程序员!

在几番讨论后,他们决定借用C语言的部分内容,比如运算符、括号和几个相同的关键字,让Go简化C和C++的功能,同时也加入了一下C和C++里没有的东西,比如slice和map、复合文本、顶层文件表达式、映射(reflection)、垃圾回收以及并发性。但是Rob感觉还是缺少了类型层次结构,这使得他很生气。

在Go语言的首次启航中,Rob得到了一个“ 我不能在没有泛型的环境下工作”的反馈, 他认为是因为在C++里用惯了STL的原因。但Rob并没有在这个问题上花太长的时间,但他发现 只有类型是用来解决这样的问题的,既不是多态函数也不是语言原语或者其它类型的帮助,只有类型!这个细节让Rob的研究停顿了许久,这让他非常苦恼。

这时Alain Fournier告诉Rob:“学术工作最基本的要求就是分工。类型层次也只是一种分类法。你需要决定什么东西封装在什么里面,每个对象的父类型是什么?到底是A继承B还是B继承A?可排序数组究竟是用来排序的数组还是一个通过数组实现的排序器?如果你坚信类型决定设计那这个就是必须理清的问题!”

”我认为这是一个对于编程的荒谬的思考方式。真正重要的是这些类能为你做什么而不是它们之间是什么关系!”


打开思路后,Go语言的开发便一路顺畅,到2009年就正式问世!
 
随着Go语言的爆火,人们对于Rob就越发好奇,令人惊讶的是,Rob和我们映像中熬夜敲代码的程序员不一样,他还格外热爱冒险,在2003年因为和朋友一起骑自行车,下坡的时候Rob不慎从自行车上摔了下来!摔断了三根肋骨、锁骨碎裂、肩胛骨纵向分裂。

有趣的是,事后Rob竟然还饶有兴趣地将自己骨头的 X 射线底片放到了个人博客上和粉丝们一起仔细研究观赏。

Go语言之父:发明过航天望远镜,想用Go语言解放程序员!

Go问世以来虽然好评连连,但Rob并没有因此停止不前,他不断的完善与升级,使得Go从2009年的版本升级到如今的Go1.13,并且已经Go2提上了行程!

2018年,已经62岁的Rob亲自飞往悉尼参加悉尼戈朗会议-Rob Pike-Go 2规范草案,并在会议上分享他对于Go 2的观点。

Go语言之父:发明过航天望远镜,想用Go语言解放程序员!

到现在2020年,Rob已经64岁啦,强调务实的他并没有金盆洗手,依然坚守在编程的岗位上,想为大家带来更好的编程技术!

书单



Go语言之父:发明过航天望远镜,想用Go语言解放程序员!
Go语言趣学指南
作者: [加]  Nathan Youngman、 Roger Peppé
译者: 黄健宏

Go语言之父:发明过航天望远镜,想用Go语言解放程序员!

内容简介:本书循序渐进地介绍了使用Go语言所必需的知识,展示了非常多生动有趣的例子,并通过提供大量练习来加深读者对书中所述内容的理解。

本书共分8个单元,分别介绍变量、常量、分支和循环等基础语句,整数、浮点数和字符串等常用类型,类型、函数和方法,数组、切片和映射,结构和接口,指针、nil和错误处理方法,并发和状态保护,并且每个单元都包含相应的章节和单元测试。 

适合人群:本书适合对初学Go语言有不同需求的程序员阅读。无论是刚开始学习Go语言的新手,还是想要回顾Go语言基础知识的Go语言使用者,只要是想用Go做开发,无论是开发小型脚本还是大型程序,本书都会非常有帮助。

Go语言之父:发明过航天望远镜,想用Go语言解放程序员!
Go Web编程
作者: 【新加坡】郑兆雄(Sau Sheong Chang)
译者: 黄健宏

Go语言之父:发明过航天望远镜,想用Go语言解放程序员!

内容简介:这本书全面介绍使用Go语言开发Web应用所需的全部基本概念,并详细讲解如何运用现代设计原则使用Go语言构建Web应用。

书中围绕一个网络论坛的例子,讲解如何使用Go语言的核心组件构建一个Go Web应用,然后在这一应用的基础上,构建出相应的Web服务。

适合人群:阅读这本书的读者需要具备基本的Go语言编程技能。本书适合所有想用Go进行Web开发的读者阅读,无论是Web开发的初学者还是入行已久的开发者都会在阅读本书的过程中有所收获。

Go语言之父:发明过航天望远镜,想用Go语言解放程序员!
Go语言实战
作者: 【美】William Kennedy、Brian Ketelsen 、Erik St. Martin
译者: 李兆海

Go语言之父:发明过航天望远镜,想用Go语言解放程序员!

内容简介:Go语言结合了底层系统语言的能力以及现代语言的高级特性,旨在降低构建简单、可靠、高效软件的门槛。本书向读者提供一个专注且全面,符合语言习惯的视角。

本书同时关注语言的规范和实现,涉及的内容包括语法、类型系统、并发、管道、测试以及其他一些主题。

适合人群:本书是写给有其他编程语言基础且有一定开发经验的、 想学Go语言的中级开发者的。对于刚开始要学习Go语言和想要深入了解Go语言内部实现的人来说,本书都是最佳的选择。

Go语言之父:发明过航天望远镜,想用Go语言解放程序员!
Go语言高级编程
作者: 柴树杉 曹春晖
编辑: 杨海玲

Go语言之父:发明过航天望远镜,想用Go语言解放程序员!

内容简介:本书从实践出发讲解Go语言编程的进阶知识。本书共6章,第1章简单回顾Go语言的发展历史;第2章和第3章系统介绍CGO编程和Go汇编语言的用法;

第4章对RPC和Protobuf技术进行深入介绍,并讲述如何打造一个自己的RPC系统;第5章介绍工业级环境的Web系统的设计和相关技术;第6章介绍Go语言在分布式领域的一些编程技术。

适合人群:本书是写给有其他编程语言基础且有一定开发经验的、 想学Go语言的中级开发者的。对于刚开始要学习Go语言和想要深入了解Go语言内部实现的人来说,本书都是最佳的选择。

Go语言之父:发明过航天望远镜,想用Go语言解放程序员!
Go语言入门经典
作者: [英] George Ornbo
译者: 张海燕

Go语言之父:发明过航天望远镜,想用Go语言解放程序员!

内容简介:本书既是一本实用的Go语言教程,又是一本权威的Go语言参考手册。书中从如何获取和安装Go语言环境,以及如何建立和运行Go程序开始,逐步介绍了Go语言的语法、特性以及一些标准库,内置数据类型、语句和控制结构.

其次还讲解了如何在Go语言中进行面向对象编程,Go语言的并发特性,如何导入和使用标准库包、自定义包及第三方软件包,提供了评价Go语言、以Go语言思考以及用Go语言编写高性能软件所需的所有知识。

适合人群:本书适合对Go语言感兴趣的各个层次的Go语言程序员阅读和参考。

Go语言之父:发明过航天望远镜,想用Go语言解放程序员!
分布式对象存储——原理、架构及Go语言实现
作者: 胡世杰
编辑: 陈冀康

Go语言之父:发明过航天望远镜,想用Go语言解放程序员!

内容简介: 本书首先从一个最简单的对象存储服务原型开始,讨论在原型中存在的问题并介绍对象存储服务中一些常见的概念以及设计理念,然后通过改变架构或添加功能的方式解决这些问题。这一迭代步骤将发生多次,最终我们会收获一个足够完善的对象存储服务。

适合人群:本书适合从事云存储方面工作的工程师或架构师,也适合想要学习和实现分布式对象存储的读者。

Go语言之父:发明过航天望远镜,想用Go语言解放程序员!
分布式缓存——原理、架构及Go语言实现
作者: 胡世杰
编辑: 武晓燕

Go语言之父:发明过航天望远镜,想用Go语言解放程序员!

内容简介:本书共分3个部分,每个部分都有3章。第1部分为基本功能的实现,主要介绍基于HTTP的in memory缓存服务、HTTP/REST协议、TCP等。

第2部分介绍性能相关的内容,我们将集中全力讲解从各方面提升缓存服务性能的方法,主要包括pipeline的原理、RocksDB批量写入等。最后一个部分则HE 分布式缓存服务集群有关,主要介绍分布式缓存集群、节点的再平衡功能等。

适合人群:本书适合从事缓存方面工作的工程师或架构师,也适合想要学习和实现分布式缓存的读者。

参考文献:

1.码农群英传连载(一)——Go 语言之父 Rob Pike

https://mp.weixin.qq.com/s/gMIHMQxK-ppgawdT897TKg

 2.Go语言之父谈Go:大道至简

https://blog.csdn.net/cscrazybing/article/details/79389368

 3.Rob Pike 百度百科

https://baike.baidu.com/item/%E7%BD%97%E5%B8%83%C2%B7%E6%B4%BE%E5%85%8B/10983505?fr=aladdin

4.Go 语言之父 Rob Pike

https://www.jianshu.com/p/c2a25299723d



小编为我们喜爱阅读的书迷们免费送书。

玩法再升级!!!




留言点赞送书活动规则


留言点赞:留言分享你在使用或者学习Go语言过程中的经验感想,或者其他一些学习经历。


>>> 活动参与
玩法1: 机会总是靠自己去争取来的!小编将对留言进行精选,被精选的评论将会显示在页面中(由于微信功能限制,最多只能显示100条)。活动截止时获得点赞数最多的 前2名 朋友获得以上书单中的任一本
玩法2: 小编会从留言中随机抽取1名小锦鲤 送 以上书单中的任一本,看看谁会这么幸运。

特别申明:

1、一位用户1个月内只能有1次获奖机会,让更多粉丝受益活动才更有意义

2、每一位用户只有1次留言机会,不允许重复留言~

请大家记住这三个1哦


活动截止时间:2020 年 04 月 26 日 16:00 整。


玩法3,赶快来参与吧

以上是关于Go语言之父:发明过航天望远镜,想用Go语言解放程序员!的主要内容,如果未能解决你的问题,请参考以下文章

我的Go+语言初体验——Go语言总结篇(语法+实际问题解决方案)

Go 之父:聊聊我眼中的 Go 语言和环境

Go语言之父:四十年来软件开发之巨变与Go的过去和未来

Go语言之父介绍泛型

GO语言学习——Go语言基础之流程控制二

2021-GO语言并发编程