最有价值的编程忠告 (来自 Plan 9 的创始人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语言的位置。

忠告:

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

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

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

[本文英文原文链接:"The Best Programming Advice I Ever Got" with Rob Pike ]