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

2020年5月28日 348点热度 0人点赞 0条评论
点击上方蓝色“Go语言中文网”关注我们,领全套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又不止是一个单纯的程序员。Rob十分喜爱射箭,并且参加了1980年奥运会射箭项目,还摘取了银牌。上了奥运的程序员,怕也只有Rob这一人了吧!
图片
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年就正式问世!
 
随着Go语言的爆火,人们对于Rob就越发好奇,令人惊讶的是,Rob和我们映像中熬夜敲代码的程序员不一样,他还格外热爱冒险,在2003年因为和朋友一起骑自行车,下坡的时候Rob不慎从自行车上摔了下来!摔断了三根肋骨、锁骨碎裂、肩胛骨纵向分裂。
有趣的是,事后Rob竟然还饶有兴趣地将自己骨头的 X 射线底片放到了个人博客上和粉丝们一起仔细研究观赏。
图片
Go问世以来虽然好评连连,但Rob并没有因此停止不前,他不断的完善与升级,使得Go从2009年的版本升级到如今的Go1.13,并且已经Go2提上了行程!
2018年,已经62岁的Rob亲自飞往悉尼参加悉尼戈朗会议-Rob Pike-Go 2规范草案,并在会议上分享他对于Go 2的观点。
图片
到现在2020年,Rob已经64岁啦,强调务实的他并没有金盆洗手,依然坚守在编程的岗位上,想为大家带来更好的编程技术!

参考文献:

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语言中文网

图片

Go语言中文网启用微信学习交流群,欢迎加微信:274768166,投稿亦欢迎

4250Go语言之父:拿过奥运银牌,发明过航天望远镜,想用Go语言解放程序员!

root

这个人很懒,什么都没留下

文章评论