Satansk's Paradise

软硬件接口

图灵访谈之二十二——Brian W. Kernighan与CS的半个世纪 (翻译)

K&R C和AWK中的K都代表“Kernighan”。他和Dennis Ritchie合著了C Programming Language,他发明了AWK和AMPL编程语言。C Programming Language是世界上第一本被广泛认可的C语言教程,平实、优雅、简洁,已成为编程语言教程中的绝佳典范。作为贝尔实验室的计算机科学家,Kernighan曾与Unix系统的创造者Ken Thompson和Dennis Ritchie一起工作,在这个影响深远的系统中留下自己的印记。

在贝尔实验室工作30多年后,Kernighan开始在普林斯顿大学教学,他的新书D is for Digital 解释了计算和通信领域的运作方式,并讨论了新技术带来的社会、政治和法律问题。他认为,今天每个人都应该知道这些。这本书简洁不简单,即使阅读的人没什么技术背景,也不妨碍他们理解书中的世界。

图灵社区有幸邀得Brian W. Kernighan接受访谈,畅谈他与CS的半个世纪。访谈中,除了意料之中的睿智外,更令我们感动的是大师对CS的那种50年不变的执着与活力。

 

iTuring:非常感谢您授权我们翻译您的《D is for Digital》并且接受我们的采访。

        您曾经提到,您是在1960 年代偶然进入计算机世界的,然后就把当时还处于发展初期的计算机科学作为了自己在普林斯顿的专业。如今五十年过去了,您已经成为了普林斯顿大学计算机学院的教授。您认为当今计算机科学的学生和老一辈的学生有什么不同吗?您对计算机业界的观点(viewpoint)有过变化吗?


Brian W.Kernighan:当我在1964 年进入普林斯顿研究生院的时候,那里并没有独立的计算机科学系,只有计算机工程系有一小部分对计算机感兴趣的教授。所以那时计算机是一个崭新的领域,很多人,甚至包括教员,都只有很少的经验。这让计算机充满了乐趣,因为所有领域都是新的,而且每个领域都有可能做出贡献。到差不多五十年后的今天,和物理学、机械工程等相比,计算机科学依然是一个年轻的领域,但是它确实很接近成熟了。这意味着做出基础性的发现将更加困难,而且在一个人具备良好的计算机专业素养之前需要学习更多的专业资料。当我读研究生的时候,计算机专业的学生拥有各种各样的背景,像物理、数学或者是电子工程等;如今,从根本上讲,所有的计算机硕士都需要有计算机本科的学位。从本科的角度看,有相当一部分的新生在高中甚至更早已经学习过不少的计算机知识了,尽管并非每人都是如此。经验和专业知识越来越呈现低龄化。(Experience and specialization come earlier and earlier.)

        当然计算机工业界也发生了巨大的变化。在我毕业的时候,计算机领域几乎完全被类似IBM 和我所工作的 AT&T 的大公司影响,或者说统治着。这些公司大部分是做硬件的,他们所作的任何软件方面的工作都是偶然的,都是为了卖出他们的硬件产品。今天,虽然仍有想微软、谷歌和苹果之类极具影响力的公司,但是他们并不像早期的硬件公司那样涉及那么多领域,并且他们也没有那么庞大。AT&T 在1970 年有超过100 万名雇员,而今天的微软连AT&T 当初的十分之一都不到。但是迅速下降的硬件成本和 Internet 的发展让任何拥有不错的想法的人轻易创建一家公司而不需要其他的什么东西,并且(如果幸运的话)能够以惊人的速度发展。谷歌创建了仅仅15 年; Facebook 只有8年,被Facebook 以10亿美元收购的Instagram 只有一年半。很明显,现在是计算机领域创业的绝佳时期。在我看来,学生的一个比较大的变化是许多学生对于开创自己的公司非常感兴趣。50年前,创建公司可能会很困难,但是现在很简单。当然要想做出杰出的成功还是一样的困难,但是计算机创业的门槛变低了,所以许多人能够尝试一下。

 

iTuring:回首您近50 年的职业生涯,您有什么宝贵的经验甚至失败想要与中国读者交流吗?在中国我们有几百万的学生、教授在计算机领域学习、研究。

Brian W.Kernighan:我的学生常常向我请教关于职业生涯的建议。我的回答是基于什么对我有用和什么对我没用的基础上的。我不认为自己有任何特别的远见,但是对于我来说做自己喜欢的事情似乎是最好的。如果你有一份有趣的工作,在早上你非常渴望开始做,并且在傍晚的时候你又不愿停下来,那这就是你想要的。尽可能的学习各个领域的知识,因为通常最有趣的计算会在当计算机应用在它从未涉及的地方时出现。Louis Pasteur 曾经说过,“机遇偏爱有准备的头脑。”所以如果你懂的越多,思考的越多,在机会出现时你会更有可能抓住它。学好演讲和写作,尤其当你的听众、读者不是相关领域的专家时,因为无论你的专业技术活动带你到哪里去,这些技巧都会对你的发展非常有利。和你能找的最好的人共事,从他们身上学习。

 

ITuring:您肯定教过很多中国学生,和一些中国IT 专家共事过。那么您认为那些没有美国教育背景或者工作经验的中国学生的共同特点是什么?他们需要在哪些方面提高自己?

 

Brian W.Kernighan:我有许多非常棒的中国朋友和同事,直到今天,他们之中没有硕士学历的人会回到研究生院攻读硕士学位,在学校里我的一些课程的部分助教就是中国研究生。一共有这么多人啊!我认为到美国来的很多中国学生主要问题是要面对快速的英语口语。说一口流利的外语需要花大量的时间和练习,当然开始越早越容易。有意识的提高语言技巧是很重要的,把自己放在一个自己真正需要面对的情景之中,比如一大群不会说你的语言的人之间。

iTuring:众所周知,您以作者或者合作者的身份出版了多本经典的计算机著作。这些作品非常受中国读者的欢迎。许多好奇的读者想知道您是否接受过一些写作技巧的特殊训练,您愿意描述一下您通常的写作流程吗?

 

Brian W.Kernighan:许多作者声称自己一次把书写完,而且从来不修改他们,但这不是我工作的方式。我会对我要说的内容思考很长时间,并且花很多时间来思考一个大项目(比如一本书)的组织和基本内容。但是一旦基本的想法正确之后,我会立刻开始写作。我努力尽可能快的把心中的想法写下来,这样一来我就可的得到一份不错的第一手稿。然后我花费大量的时间来修改润色。在我试图使材料翔实可靠,细节的句子和单独的一些单词听上去朗朗上口的过程中,第一份手稿会经历许多不同版本。当然,最后中会到达修改的越来越少,或者我用完了时间,这时作品就完成了。但是最基本的方法就是做大量的修改。

 

ITuring:许多中国人读过您的 K&C ,许多人甚至猜测您是一位C 语言开发者。您认为是什么因素使 C 语言在过去的40 多年里保持着流行呢?

 

Brian W.Kernighan:我认为在所有编程语言中C 仍然是在效率、表达能力、体积上最为平衡的一种。没有任何一种其他的语言能够产生像C一样运行快速的代码,也没有任何一种语言能够在编程的整个过程中产生如此紧凑的程序。所以在关心效率和代码体积的场合C 仍然是一个不错的选择。假若我要写一个程序来操作大量的文本数据时我会使用像Python 之类的语言,但是倘若我要写一个操作系统、设备驱动或者类似的重视效率和完全控制硬件的系统时,我会使用C。

 

iTuring:当 Dennis Ritchie 在去年去世时,不少公告在我们的网站上展示以纪念他。作为Dennis Ritchie 的合作者和朋友,您和回忆一些关于他的难忘的事情吗?

 

Brian W.Kernighan:无可否认,Dennis 是一个极其聪明的人,是一个伟大的程序员。但是我最欣赏他的友好和慷慨,以及他出色的幽默感。举一个他慷慨无私的一个例子,当 Bill Plauger 和我写Software Tools(译注:是一本UNIX 的书)的时候,我们认为如果包含一个简单的宏处理器作为例子将会很有用。我尝试写了一个,但是很糟糕而且不能运行,为了帮助我们,Dennis 写出了他称之为M4 的宏处理器,这正是我们需要的。我们在书中使用了它,而且这个工具依然在UNIX 和Linux 系统中应用着。Dennis 没有为此获得任何赞赏;在Dennis来这只是他帮助同事的一种方式。当然在UNIX 第六版的源代码中的著名注释

/* You are not expected to understand this. */

是Dennis 的冷幽默的不错例子。

 

ITuring:您一直对编程语言的发展极为关注。您在Bell Lab 的一些同事也参与了Go 语言的设计。您怎么看待这种“C+Python “语言呢?

 

Brian W.Kernighan:我只是偶尔才关注下Go 语言,所以我还不够了解它,不能预测它将如何影响这个世界。说句实在话,创建一门新语言是十分困难的,因为人们对于现有的语言有很大的惰性。一些语言必须十分易于使用,或者不得不在它值得努力使用之前在一些领域中表现特别好才行。我非常尊敬创建GO 语言的Ken Thompson 和Rob Pike 。在这门语言中也有一些非常不错的特性,但是我认为让Go 语言像Python 那样成功地成为一种主流语言之前还有艰难的工作要做。

 

iTuring:我们注意到您曾经和很多人一起合作著书或者开发软件,而且您常常做出杰出的工作成果。您是一个真正的很好的团队参与者。您介意和我们分享一些团队工作的技巧,谈论一些您印象深刻的前同事吗?

 

Brian W.Kernighan:我非常幸运能够拥有一些杰出的同事;贝尔实验室是一个非常好的工作环境,因为有许多伟大的人在这个鼓励团队合作的环境中。所以和他人一起工作只是公司运转的一种正常模式而已。从个人观点来看,我认为和比你优秀的人一起工作会更好,因为你可以从他们身上学到很多东西;当然,在贝尔实验室中这并不困难:因为这里有相当多的杰出的人,在这里,想要避免和更优秀的同事一起工作是很困难的。另一个我认为很重要的事情是不要担心谁因为工作得到赞扬。埋头苦干而不去想每个人应该做什么,这样通常会更好,合作而非竞争,大家一起努力贡献通常要比单个人独自工作的结果要好。在写书时这尤其正确,两三个作者要远远好于一个作者。

 

iTuring:D is for Digital 是您最新独立写作的书,您是如何构想它的呢?独自写书和与他人合著有哪些不同?顺便问下,您为什么要取这个名字?它让我想起了白皮书。

 

Brian W.Kernighan:我在普林斯顿教授一门关于计算机和通信的课程已经有十二三个年头了,面对的都是一些极度非技术的读者。客商的学生都非常聪明,但是他们的兴趣都在计算之外的其他领域。所以努力把技术资料以一种他们乐于接受的方式呈现出来是个不错的挑战。我没找到一本好的教科书,所以我决定自己写一本,直接基于课堂上使用的材料。这是我第一本没有合著者的书,我立刻发现了我有多么依赖像Dennis Ritchie 和Bob Pike 那样有才华的人。独立写书要困难得多,没有准确性检查,没有人来确认材料都有意义并且准确。幸运的是,有一群朋友非常仔细的读了我的草稿,这带来了很大的帮助。书名来自于2003 年我在普林斯顿发表的一篇演讲;这名字似乎比其他的所有候选者都要好,当然,与 K&R 类似就是一个美丽的巧合了。

 

iTuring:让D is for Digital 不同于您以前的作品的一点是这本书是为非技术读者准备的。在您看来在非技术人员的生活工作中计算机应该扮演什么样的角色呢?他们应该怎样开始学习计算机科学?

 

Brian W.Kernighan:我认为非技术人员并不需要学习计算机科学,但是对于一些受过教育的人和消息灵通的人士来说,了解一些在现代生活中的核心技术的基础是很重要的。计算机在我们的世界中无处不在,有必要了解一下计算机能做什么、怎么做,计算机如何影响我们的生活。换句话说,我们无法掌控如何应用计算机。如果你了解一点Internet 的工作原理,你可能就有能力在一些骗局面前保护自己,也能够保护自己的隐私。如果你懂手机的工作原理,你可能就会理解手机的局限性,和随便下载软件的局限性。

 

iTuring:在我们关于D is for Digital 的通信中,您提到过您非常关心中文版的质量问题。您有过自己的书被翻译的很烂的经历吗?

 

Brian W.Kernighan:其实我一点也不担心中译版的质量!在很远的过去,有些很差的欧洲语言的版本,这是因为那些译者不够精通相关技术,所以在他们的语言中用了错误的术语,或者直接把技术本身搞错了。重申一下,我非常幸运的拥有一些精通多种语言的朋友和同事,他们能够对翻译质量给出准确的评价。

 

iTuring:出了教学和写作,您还有其他的计算机相关的工作吗?您有写新颖的或者有趣的想法想和中国读者分享吗?

 

Brian W.Kernighan:在上课的时候,教学占用了我相当多的时间,在夏天的时候,我常常在纽约的Google 工作,这是一段非常好的经历。我在谷歌主要做 Google Docs 相关的工作。在很长时间里我对文件准备软件很感兴趣,所以工作很匹配。在学校上课的时候,我尝试多种语言和工具,以便于更好的教学。但是计算机领域复杂多变,不断扩展,要跟上发展也绝非易事,,我相信中国读者也会经历这些的!

 

iTuring:谢谢您接受我们的采访。

 

译注:这篇报道是我偶然在图灵社区看到了,感觉挺有意思的,所以就翻译了一下,纯属娱乐。由于是在午休时翻译的,所以估计有不少错误,欢迎大家批评指正!