Rob Pike现在是Google的杰出工程师,曾是贝尔实验室(Bell Labs)Unix团队成员之一,此外他还参与开发了Plan 9Inferno两款分布式操作系统。他是创建Go及Limbo两款编程语言的中流砥柱。Rob分享了在贝尔实验室工作时的一段往事,从此改变了他的调试方法。

姓名:

Rob Pike

Rob Pike Avatar

工作经验:

我曾在贝尔实验室(Bell Labs)工作多年。我就职于计算科学研究中心,正是该(规模小得惊人的)实验室创建了Unix,不过直到Unix第7版发布(1979年)以后我都不在那里。自2002年以来,我一直在Google,从事与各种零散的基础设施、以及基础设施之基础设施相关的工作。

最显著的成就:

在我的著作中,或许最为人所知的就是与Brian Kernighan合著的《UNIX编程环境》(The Unix Programming Environment,于1983年11月01日出版,至今将近30年了仍在重印)、以及《程序设计实践》(The Practice of Programming)。我做过的应用最为广泛的成果就是与Ken Thompson一起研发的UTF-8编码。不过我在以下方面也完成了重要工作:计算机图形学、操作系统、软件工具,并在最近帮助研发了Go编程语言

最常用的编程语言:

由于使用了太久,在这里不得不承认C语言是我最常用的编程语言,不过在我的职业生涯中我曾使用过许多不同的语言。如今,几乎我所编写的一切都是用Go语言完成的;Go语言是我使用过的最具生产力的语言,而且它已经彻底取代了C语言在我工具箱中的位置。

建议:

那是在我加入该实验室一两年后,当时我正在与Ken Thompson结对编程开发一款即时编译器,该编译器用于一种由Gerard Holzmann设计的小的交互式图形语言。由于我打字速度更快,因此当我们编程时,由我执掌键盘,而Ken则站在我的背后。当我们紧张工作时,一旦哪里出了问题通常都是看得见的——毕竟那是一种图形语言。每当某些地方出错时,我会本能地开始探究那个问题,如检查堆栈跟踪、添加打印语句、调用调试器等等。不过Ken却只是站在那里思考,无视我以及我们刚刚写下的那些代码。经过一段时间,我注意到一种模式:Ken经常会先于我理解问题所在,还会突然宣布,“我知道是什么错了。”他一般都是正确的。我意识到,Ken为那些代码构建了心智模型,一旦哪里出了问题必定是该模型中出现了错误。通过思考怎样有可能发生那个问题,他会凭直觉知道此模型在哪里出了错,或是我们的代码在哪里必定没有满足此模型。

Ken Thompson Avatar

Ken Thompson

Ken教导我,调试前的思考十分重要(thinking before debugging is extremely important)。要是你一头钻进错误,你就会倾向于修复位于代码中的片面问题,但是如果你首先琢磨该错误,考虑该错误是怎么来的,你通常会发现并修正代码中更高层次的问题,那将会改善设计并防止进一步的错误发生。

我承认这很大程度上是风格问题。有些人坚持以逐行工具驱动的调试方法来处理一切错误。但是,现在我相信,思考——不看代码——是最好的调试工具,因为它会导致更好的软件。


查看英文原文:"The Best Programming Advice I Ever Got" with Rob Pike

来自更多程序员的建议参见“我收到的最佳编程建议”(The Best Programming Advice I Ever Got)系列文章

“我收到的最佳编程建议”系列译文

  1. 千万别碰其他人的代码!——Russ Olsen
  2. 在你让代码可重用之前,应该先让代码可用。——Bill Wagner
  3. 在着手对代码进行额外修改之前,应该花点儿时间去理解位于异常/堆栈跟踪顶部的错误消息。——Obie Fernandez
  4. 调试前的思考十分重要——Rob Pike
  5. 编写更少的代码。——Russ Olsen
  6. 阅读的资料一定要比你编写的内容多得多,而且要坚持阅读高质量的资料。——Danny Kalev
  7. 翻译中……