最有价值的编程忠告(来自贝尔实验室Plan 9操作系统的创始人Rob Pike)

Rob Pike

Rob Pike

Rob Pike,目前谷歌公司最著名的软件工程师之一,曾是贝尔实验室Unix开发团队成员,Plan9操作系统开发的主要领导人,Inferno操作系统开发的主要领导人。他是缔造Go语言和Limbo语言的核心人物。下面是他分享给大家他在贝尔实验室工作的一段经历,这段经历改变了他对bug调试的思想认识。

Job的主要工作经历:

我在贝尔实验室工作了很多年。我在计算机科学研究中心,你会很诧异,这是个很小的实验室,但这里却创造了Unix,我来到这里工作的时候Unix已经发布了第七版。从2002年起我来到谷歌工作,主要开发一些系统基础架构。

最主要的成就:

我最为人所知的应该是我和Brian Kernighan(Unix开发组的重要成员)合著的两本书:《The Unix Programming Environment》 和 《程序设计实践(The Practice of Programming)》 (30年后的今天仍在印刷出版!),影响范围最广的一件事应该是我和Ken Thompson共同开发完成了UTF-8编码格式。在其它方面,诸如计算机图形,操作系统,软件开发工具等上也做了大量的工作,最近在给谷歌开发Go编程语言。

使用最多的编程语言:

长久以来,C语言是我编程的选择,但在我的编程生涯里,我使用过很多种语言。而目前我开发d 东西基本上都是用Go语言,这是我见过的最高效的一种编程语言,它在我的工具箱里已经完全取代了C语言的位置。

忠告:

在我加入贝尔实验室一年多后,Gerard Holzmann设计了一个很小的交换式制图语言,我开始和Ken Thompson一起在开发针对这种语言的即时编译器上做结对编程。我打字比较快,所以我坐在电脑前,Ken站在我身后看我编程。我们开发的很快,但经常会遇到问题,而且可以看出来出错了——毕竟这是一个图形化的编程语言。当程序出错时,我本能的一头扎进问题,检查报错跟踪信息,添加调试打印语句,启动调试器,等等,但Ken只是站在那思考,完全不理会我也不查看我们写的出问题的代码。一段时间后我发现一个规律,Ken经常会比我先找到问题出在什么地方,而且会突然的喊一嗓子,“我知道什么地方的问题了。”每次他的判断都很准确。我认识到,Ken已经在脑海里构建了代码的模型,当有问题出现时,那是他脑子里的模型出了问题。在思考为什么会发生这些错误时,他能凭直觉找到模型中什么地方不对或发现写的代码跟这个模式什么地方有出入。

Ken教会了我一个极其重要的习惯:纠错前先思考。如果你一头扎进问题中,你可能只解决了当前出现问题的代码,但如果你先思考这个错误,这个bug是怎么引入的?你通常发现和纠正一个更高层次的问题,进而改进了系统设计,防止了更多bug的出现。

我认识到这种编程思考模式非常的重要。有些人痴迷于一行行的、使用各种工具来调试所有的东西。但我现在相信,思考——不看代码的思考——是最好的调试途径,因为它能让你开发出更好的软件。

[英文原文:"The Best Programming Advice I Ever Got" with Rob Pike ]
分享这篇文章:

17 Responses to 最有价值的编程忠告(来自贝尔实验室Plan 9操作系统的创始人Rob Pike)

  1. newmewo says:

    最近安装了个小程序,小到主要代码之在一个文件里。 并且文件只有四百行多一点点。 其他的调用也是久经考验的老代码。在新的运行环境中运行出了小差错。从数据库中读取的数据到展示出来的时候都是乱码。 我就犯了如文章中所说的错误。当瞒无头绪疲惫不堪停下来休息时候反思一个问题, 我的小程序或许是没有问题的,问题可能出在数据库。 按照新的思路。问题解决了。 倒入的数据库内容是错误的。不是因为倒入方法错误。而是平台提供了一个错误的 数据库管理平台。

  2. zile says:

    ‘在我加入贝尔实验室一年多后,我开始和Ken Thompson一起在开发一个针对由Gerard Holzmann设计的很小的图形化交换语言的即时编译器上做结对编程’
    这句话不太好懂. 原文是 ‘A year or two after I’d joined the Labs, I was pair programming with Ken Thompson on an on-the-fly compiler for a little interactive graphics language designed by Gerard Holzmann.’
    如果想要强调pair program的话, 我觉得可以翻成 ‘我那时加入bell lab一两年, 正和KT结对为GH设计的一个小型互动图形语言开发一个即时编译器.’

  3. xwsoul says:

    突然发现我也有这种能力 =.=

  4. bojoy says:

    这个网站真的是被折腾了好久啊….
    不管怎么说,颠倒左右并不是一个好办法.
    左边是目录树,中间是阅读板块,右边是广告订阅的模式已经被大家习惯了,这样一来有些不习惯啊.
    还是顶站长一个,辛苦了

  5. zz says:

    界面真的越来越难看了,难道就不能去掉或者弱化那些冗杂的元素。
    内容才是王道,提供一个舒适的阅读环境才是读者想要的。

  6. hello!program says:

    改版了吗?我以为浏览器出问题了呢

  7. newmewo says:

    界面没有上个幽雅。

  8. frank says:

    显然文章内容重要性降低太多。。。一眼看来就是广告。。虽然仔细看看广告面积不大。。
    也许可以试试偏全屏的布局,其实如果像http://www.36kr.com/这种布局,广告没少,但是感觉舒服点

  9. test says:

    这么网站怎么了???

  10. 菜谱网 says:

    大牛的教导,要好好看看

  11. DSWhale says:

    上次微微不舒服,这次把微微去掉吧~

  12. bluesen says:

    rob大叔的那本《编程实践》,是我的最爱。我还收藏了英文版

  13. leiking says:

    推销go来的吧…

  14. 初学者 says:

    我现在刚刚开始学c语言,我想问下各位程序界大哥们,学程序英语一定要很好吗?我英语不行啊!!还有谁有go语言的学习课件我想学习。谢谢各位。

发表评论

邮箱地址不会被公开。 必填项已用*标注

此站点使用Akismet来减少垃圾评论。了解我们如何处理您的评论数据