图灵访谈之二十二:专访Brian W. Kernighan

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年不变的执着与活力。

enter image description here

图灵社区:非常感谢您授权我们翻译D is for Digital一书,并同意接受我们采访。您曾经说过,您在60年代进入计算机行业纯属意外,那时您在普林斯顿大学选择了新开的计算机科学专业。现在,快50年过去了,而您成为了普林斯顿大学计算机系的教授。如今的计算机系的学生跟你们这些前辈相比,都有哪些不同?您对计算机行业的认识有什么变化吗?

Kernighan:我在1964年进普林斯顿大学研究生院的时候,还没有一个单独的计算机科学系,只是在电气工程系有少数教授对计算机很感兴趣。所以,那个时候计算机是个全新的领域,大多数人包括教员对它都不很熟悉。这也使得工作很有意思,因为什么都是新的,做什么都有可能出点成就。而今,将近50年之后,要跟诸如物理学或机械工程去比,计算机科学仍然是门年轻的学科,但绝对是比以往更加趋近“成熟”了。这就意味着很难再做出很重大的发现,而要成为在这个领域有着良好修养的人,就得学习更为艰深的内容。我读研究生的时候,同学里以前学什么的都有,物理,数学,电气工程,等等。现在,计算机系的研究生多数人本科也是计算机专业的。而在读计算机的本科生里,相当多的人在高中甚至更早,就大量接触过计算机,当然不是所有人都这样。经验和专业化分工都越来越早地到来。

计算机行业当然也有了深刻的变化。我毕业的那会儿,基本上影响甚至说主宰计算机行业的都是些大公司,比如IBM,AT&T。我就在AT&T工作——贝尔实验室属于AT&T。这些大公司主要生产硬件,所有软件方面的工作都是附属的,目的是为了把硬件卖出去。今天,虽然说也还有类似影响力很大的公司,比如微软、谷歌、苹果,但是他们不像早期那些做硬件的公司业务范围那么全面,规模也没有那么大。AT&T在1970年员工数量就远不止100万,微软今天的人数还不到其十分之一。现在,硬件的成本稳步降低,因特网的发展持续走高,任何人只要有个好创意就可以白手起家去创业,而且(撞上运了)能够飞速成长。谷歌只有15年的历史,Facebook才8年,Instagram刚被Facebook用10亿美元收购,它才1岁半。显然这是一个计算机行业创业的黄金时代,我发现如今学生的一个很大不同是,许多人开公司的愿望非常强烈。50年前开家公司特别难,现在则易如反掌。当然,要想取得巨大的成功,难度可能没有变,只是进入的门槛降低了,于是更多的人都想试一把。

图灵社区:回顾您近50年的职业生涯,有什么宝贵经验甚至是失败教训可以与中国读者分享的吗?在中国,有几百万的学生和专业人士在计算机领域学习和工作。

Kernighan:学生们总要我提职业建议,通常我都是根据自己的经验或教训来给出回答。我认为自己没有什么特别深刻的见解,不过我觉得,最好是做你自己真正喜欢的事情。如果你觉得工作有乐趣,自然会闻鸡起舞,废寝忘食,因为这是你自己的兴趣所在。要尽可能多了解不同的领域,因为往往是前所未有的新领域应用会带来最有意思的计算机发展。路易•巴斯德曾经说过,“机会(也就是好运)眷顾有准备的人”。所以,你知道的越多,想过的越多,就越有可能发现冒出来的机会。学会清晰明白地说话和写作,特别是当面对不是你自己领域的专家人群时,这些基本技能会使你受益匪浅,无论你用自己的专门技术做什么都是如此。要跟最强的人一起工作,虚心向他们学习。

图灵社区:您一定教过不少中国学生,也跟中国的IT专业人士一起工作过。您认为那些以前没有美国教育背景或者没有美国工作经验的中国学生有什么共同特质?他们需要改进哪些方面?

Kernighan:我认识很多极为出色的中国朋友和同事,我读研究生的时候甚至更早就认识一些,现在我上的课也有中国研究生做助教。他们真的很棒!我认为很多来美国的中国学生的主要问题是如何对付快速的英语口语会话。要想流利地使用外语,需要大量的时间和精力,自然是越早开始学就越容易。很重要的一点是,要有意识地培养自己的语言能力,把自己放到一个必须使用外语的环境去,比如去参加无人懂你的母语的聚会。

图灵社区:众所周知,您写过或与人合著过好些经典的计算机图书。这些书深受中国读者欢迎。有些好奇的人想知道您是否接受过技术写作的专门训练。您能否讲讲您一般是怎么写作的?

Kernighan:有些作者说自己写作时一气呵成,从来不用修改,我不是这样的。我会先花很多时间考虑我要说什么,再花很多时间考虑书这种大项目的组织结构和基本内容。一旦基本想法明确了,我就动笔写作。我会尽快形成文字,得到还算可以的一份初稿。然后我就花大量时间去改,初稿会经过反复修改,不但要做到内容连贯,而且我还要字斟句酌。最终到了不再反复的时候,或者没有时间再改的时候,就算定稿了。但我的基本写作方式是反复修改。

图灵社区:许多中国人读过您合著的K&R C语言书。不少人甚至以为您也是C语言开发者。您认为是什么原因使得C语言历经40多年还如此广受欢迎?

Kernighan:编程语言要权衡效率、表达性和大小,我认为这个方面C仍然比任何其他语言做得要好。其他语言生成的代码跑得没有它快,在整个编程过程中生成的程序也没有它紧凑。C也能非常贴近硬件,而又不必降低到汇编语言的层面。因此,当编程效率很重要,或者代码规模很重要的时候,C就仍然会是个很好的选择。如果我要写个操作文本内容的程序,我很可能会选择Python那样的语言;但如果我要写操作系统或者设备驱动程序之类的系统,这时要关注运行效率,而且要完全掌控硬件,我就会选择C。

图灵社区:丹尼斯•里奇去年去世的时候,我们社区上翻译和写作了不少文章来纪念他。作为他的合著者和好朋友,您可否回忆关于他印象最深的一些事儿?

Kernighan:丹尼斯毫无疑问是个极其聪明的人,一个伟大的程序员,但我最看重的是他是个非常友善和大方的人,而且极具幽默感。举个例子说明他大方,我和Bill Plauger写作Software Tools那本书的时候,觉得应该写一个简单的宏处理器作例证,来为书增色。我着手尝试写一写,结果糟了,没写出来。丹尼斯就来帮我们写了一个,他把这个宏处理器叫做m4,这正是我们想要的东西。我们在书里使用了这个宏处理器,现在的Unix和Linux系统里还在使用它。丹尼斯从来不要求我们在书中致谢他,他就是这么无私地帮助他的同事。当然,在Unix第6版的源代码里那句有名的注释:

/* You are not expected to understand this. */ (我们不指望你能理解它。)

恰恰最好地印证了他那故作一本正经的幽默感。

图灵社区:您一直密切关注着编程语言的发展。您在贝尔实验室的同事参与开发了Go语言,您是怎么看这门 C + Python 式的语言的?

Kernighan:我只是粗略了解了一下Go语言,所以还不足以去预测它将如何改变编程世界。现实地说,要开创一门新语言十分困难,因为现存的那么多编程语言的惯性很大。新语言要想让大家花费工夫学习和采用,必须用起来很容易,而且在某个新领域效果很强。我十分敬重Ken Thompson和Rob Pike,他们创造了Go,而且Go有些非常好的特性,但我觉得要想让Go像Python那样成功,成为一门主流的编程语言,依旧任重而道远。

图灵社区:我们注意到您跟许多人合作过写书和做软件开发,而且总能得出很好的成果。您的确是一位优秀的团队合作者。可否分享一些团队合作的技巧,介绍几位您印象深刻的合作者呢?

Kernighan:我一直以来都非常幸运,能和杰出的人士共事。贝尔实验室真是个工作的好地方,有那么多伟大的人才,而且工作氛围鼓励相互合作。因此,与其他人合作只是我们惯常的工作方式。从我个人观点出发,我认为最好是和比你优秀的人合作,这样你就可以从他那里学到很多,这在贝尔实验室自然不是个难事儿,因为我们有那么多杰出的人才,想要不与更优秀的人合作都难。我认为重要的另一点是,不要去考虑这项工作该归功于谁。最好是只考虑做事,不去想分清究竟谁做了哪个部分,这是合作而不是竞争。众人拾柴火焰高,总比一个人单打独斗强。写书自然更是如此,有两三个人合著总比一个人写要好。

图灵社区D is for Digital是您独自创作的最新著作。您是怎么想到要写这么一本书?独自创作和与人合著有哪些不一样?顺便问一下,您为什么起这个书名?这个名字让我想到C语言的那本书。

Kernighan:我在普林斯顿给非理工科学生开一门介绍计算机和通信的课程,讲了有十二三年了。学生们都很聪明,就是兴趣不在计算机上。所以,要把这个技术内容讲得让他们喜欢上,还真是个很有意思的难题。我找不到一本好的教材,就想着干脆自己写一本,就以课堂上讲的内容为基础。这其实是我独自创作的第一本书,结果我立即意识到以前我是多么依赖丹尼斯•里奇和Rob Pike那些天才的合著者啊。自己单独写书要难得多,没人和你互审把关,检查内容是否合乎逻辑、准确无误。所幸有不少朋友仔细阅读了我写的初稿,给了我很大的帮助。书名源自我2003年在普林斯顿的一次讲座,也想过其他一些名字,但都没它好。能让你联想到The C Programming Language,真是个让人高兴的巧合。

图灵社区:这本书跟你以前写的书的不同点在于,它是给非技术背景的人写的。在您看来,在非技术背景人士的生活和工作中,计算机应该扮演什么样的角色?这些人该怎样去学习计算机科学?

Kernighan:我认为非技术背景的人不必学习计算机科学,但是任何受过教育和知识全面的人,都应该对于今日核心的新技术有一些基本的了解。计算机在我们今天的世界中已是无孔不入,我们有必要了解计算机在做什么,是怎么做的,对我们的生活又有多大的影响。否则的话,我们就不能控制计算机的使用方式。比如说,如果你知道因特网是怎么回事儿,就有能力防范欺诈,保护自己的隐私;如果你知道手机是怎么回事儿,就更能够知道它的局限,知道随意下载应用会有什么样的危害。

图灵社区:在我们联系D is for Digital的过程中,您提到您最关心的是中文版的质量。您的书以前遇到过被翻译得一团糟的问题吗?

Kernighan:哦,我当然不担心中文版的质量了!多年以前,欧洲曾出现过质量很差的译本,显然是因为译者不理解技术内容,使用了错误的术语,或者搞错了原文的意思。我很幸运有来自五湖四海的朋友和同事,他们精通各种语言,能帮我准确地评估翻译作品的质量。

图灵社区:除了教学和写作,您还在做哪些计算机相关的工作?有什么有趣的想法可以和中国读者分享的吗?

Kernighan:教学占据了我的全部工作时间,暑假期间我经常会在谷歌的纽约公司工作,做些与Google Docs相关的工作,感觉很棒。我一直以来对文档处理软件感兴趣,所以这个工作跟我很匹配。到了寒假期间,我会尝试不同的编程语言和工具,为下一年的教学做准备。计算机技术发展太快了,应用领域也在不断扩展,想要迎头赶上也十分不易。我相信中国读者也有这样的体会。

图灵社区:谢谢您抽出时间接受我们的采访。


更多精彩,加入图灵访谈微信!