Go语言之父:发明过航天望远镜,想用Go语言解放程序员!
脚本之家
你与百万开发者在一起
Rob Pike, Unix的先驱,UTF-8的设计人。《Unix 编程环境》和《程序设计实践》的作者之一,除此之外,他还是Go语言的开创者,被誉为“Go语言之父”。
贝尔实验室里的Rob
Rob Pike 于1956年出生于加拿大,Rob从小就对计算机编程十分着迷,和众多程序员一样,Rob有着自己的梦想——成为一个有所成就的编程者。因此带着梦想进入了多伦多大学,毕业后就进入了Ken所在的贝尔实验室。
贝尔实验室这个获得8个诺贝尔奖的实验室在90年代是全球计算机爱好者梦寐以求的地方(至今也是最受欢迎的实验室)。因此Rob也格外珍惜在此工作的机会。
在进入贝尔实验室一年多后,Rob因为打字速度快得到了Ken的欣赏,他们一起开发一个针对由 Gerard Holzmann 设计的很小的图形化交换语言的即时编译器上做结对编程。而这次和Ken一起奋斗的经历,也成为了他一生中最难忘的时刻之一。
Rob在多次采访中都提到:“在贝尔实验室时,Ken 教会了我一个极其重要的习惯:纠错前先思考。是因为和Ken一起做编程时,每当程序出错,我都会本能的一头扎进问题,检查报错跟踪信息,或者是添加调试打印语句,启动调试器等等。但Ken完全相反,他就静静地站在那思考,不理会也不检查出问题的代码。但奇怪的是,他却总能比我先找到问题出在什么地方。”
这让Rob认识到这种编程思考模式非常的重要,也明白了思考 —— 不看代码的思考,是最好的调试途径,因为它能让我们开发出更好的软件。这个收获也使得Rob编写出了第一个用于Unix系统的位图窗口系统,并且把它发展成了Bilt——一个可编程位图图形终端。
Rob是一个全能型程序员,为了得到更好的锻炼,他在贝尔实验室从操作系统写到编译器,又从文本编辑器写到了UI界面。
Rob还被NASA另眼相看。没错!Rob是一位业余天文学家,并且发明了珈玛射线射电望远镜,这个望远镜还差点被NASA用在了航天飞机上。
很多人疑惑为什么Rob干什么都是拔尖的,其实是因为Rob一生在追求两个字——坚持。
在1990年,美国著名的脱口秀节目 “Late Night with David Letterman”的主持人大卫,发现了Rob这个奇特的程序员,认为这个能参加奥运还能设计望远镜的程序员能带来热点话题,便邀请Rob参加节目,而这个节目也让更多人认识了Rob。
在此之后,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++控制结构整合到一起太困难了,于是第一次简化语言失败了。
失败并没有使Rob放弃,他又发现C++内存模型使用了原子类型,这个发现让Rob很困扰,在和Robert沟通后,他们一致决定们不想再使用C++了。他们说服了Ken,决定一起做一些事情——希望能在写Google的代码时能用到并行性特性。
“我们做了大量的C++开发,厌烦了等待编译完成,尽管这是玩笑,但在很大程度上来说也是事实。"
在几番讨论后,他们决定借用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年就正式问世!
有趣的是,事后Rob竟然还饶有兴趣地将自己骨头的 X 射线底片放到了个人博客上和粉丝们一起仔细研究观赏。
Go问世以来虽然好评连连,但Rob并没有因此停止不前,他不断的完善与升级,使得Go从2009年的版本升级到如今的Go1.13,并且已经Go2提上了行程!
2018年,已经62岁的Rob亲自飞往悉尼参加悉尼戈朗会议-Rob Pike-Go 2规范草案,并在会议上分享他对于Go 2的观点。
到现在2020年,Rob已经64岁啦,强调务实的他并没有金盆洗手,依然坚守在编程的岗位上,想为大家带来更好的编程技术!
书单
本书共分8个单元,分别介绍变量、常量、分支和循环等基础语句,整数、浮点数和字符串等常用类型,类型、函数和方法,数组、切片和映射,结构和接口,指针、nil和错误处理方法,并发和状态保护,并且每个单元都包含相应的章节和单元测试。
适合人群:本书适合对初学Go语言有不同需求的程序员阅读。无论是刚开始学习Go语言的新手,还是想要回顾Go语言基础知识的Go语言使用者,只要是想用Go做开发,无论是开发小型脚本还是大型程序,本书都会非常有帮助。
书中围绕一个网络论坛的例子,讲解如何使用Go语言的核心组件构建一个Go Web应用,然后在这一应用的基础上,构建出相应的Web服务。
本书同时关注语言的规范和实现,涉及的内容包括语法、类型系统、并发、管道、测试以及其他一些主题。
适合人群:本书是写给有其他编程语言基础且有一定开发经验的、 想学Go语言的中级开发者的。对于刚开始要学习Go语言和想要深入了解Go语言内部实现的人来说,本书都是最佳的选择。
第4章对RPC和Protobuf技术进行深入介绍,并讲述如何打造一个自己的RPC系统;第5章介绍工业级环境的Web系统的设计和相关技术;第6章介绍Go语言在分布式领域的一些编程技术。
其次还讲解了如何在Go语言中进行面向对象编程,Go语言的并发特性,如何导入和使用标准库包、自定义包及第三方软件包,提供了评价Go语言、以Go语言思考以及用Go语言编写高性能软件所需的所有知识。
适合人群:本书适合对Go语言感兴趣的各个层次的Go语言程序员阅读和参考。
适合人群:本书适合从事云存储方面工作的工程师或架构师,也适合想要学习和实现分布式对象存储的读者。
第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、一位用户1个月内只能有1次获奖机会,让更多粉丝受益活动才更有意义
2、每一位用户只有1次留言机会,不允许重复留言~
请大家记住这三个1哦
活动截止时间:2020 年 04 月 26 日 16:00 整。
玩法3,赶快来参与吧
👇🏻👇🏻👇🏻点击卡片进入小程序,坚持打卡
签到累计积分 兑换书籍好物
精选书单 点蓝字即可
更多好书请关注脚本之家官方书店