《程序员》于年创刊,其理念为技术改变世界,创新驱动中国。年,全新的《程序员》2.0重新起航,以专业的内容为立足点,以音视频、图文专栏等丰富的多媒体形式为载体,立足当下,放眼未来,为读者带来全方位的技术和产业解读。
在软件历史中,UNIX是一个传奇。自年在贝尔实验室的阁楼中诞生以来,UNIX的发展远远超出了创造者们的想象。它带动了许多创新软件的开发,影响了无数程序员,如果没有它,Linux、macOS和Android系统可能不会存在,人们依赖的导航软件、智能家电、智能手机、物联网也会缺失。
近日,《程序员》采访了UNIX的研发者与命名者布莱恩·克尼汉(BrianW.Kernighan)教授,他也是AMPL(数学编程语言)与AWK(文本处理工具)的共同创造者之一,曾和C语言之父丹尼斯·里奇(DennisMacAlistairRitchie)共同写作了C语言的第一本著作《C程序设计语言(TheCProgrammingLanguage)》。我们和布莱恩·克尼汉教授聊了聊UNIX的成功之道,以及操作系统的未来走向。在访谈中,我们惊讶于这位大师的真实和坦诚,也为这跨越半个世纪的史诗般的程序人生所深深感动。
重点速览:
谈贝尔实验室的吸引点:贝尔实验室研究环境的独特之处在于没有“繁重的工作量”,大家都在做自己认为有趣或重要的事情,没有要求、没有产品,也没有可交付的成果,所以一切进度压力都是员工自己给自己的。
谈程序员该培养何种技能:一是学习如何写,二是学习如何说。专业的程序员应该可以熟练掌握几门语言,并且熟悉5-10种其他的语言。
谈独行侠与多人协作:如今的系统规模和环境都庞大且复杂,因此独行侠式的天才能发挥的作用是十分有限的。但许多大型系统在开始时的规模都非常小,核心贡献者也非常少。大多数编程语言都是由两三个人创建的。
谈C语言中的指针设计:空指针可以说是一个“错误”,但我认为,更应该说这是一个在当时很合理的设计选择,这种设计选择的代价极其高昂。
谈面向对象编程:面向对象编程在许多语言中得到了很好的支持,在有的语言中则完全没有支持,它仅仅是一种编程技术,适合解决某些类型的问题,但或许不是解决其他问题的正确方法。
谈现代操作系统:现代操作系统需要服务一个更加复杂的世界,所以它们相应地也会更加复杂。
谈人工智能:利用AI自动生成代码在某些情况下会有帮助,当我们对某些特定的计算任务理解得足够透彻,以至于可以自动化生成代码时,我们就已经取得了很大的进步。
谈开源:开源使我们可以在他人的工作基础上进行构建,实现共同进步,我希望开源可以继续成为世界的重要组成部分。
50年程序人生
《程序员》:你曾说是理查德·汉明(RichardHamming)启发你写了《UNIX传奇:历史与回忆》(UNIX:AHistoryandaMemoir)这本书。那么,在你的职业生涯中,哪个人对你的影响最大呢?
Brian:我主要想提三个人。首先是迪克·汉明(DickHamming,汉明码发明者,“迪克”是“理查德”的非正式称呼),是他激发了我写这本书的灵感,并给我提供了各种各样的好建议,他是我的人生挚友。
其次是道格·麦克罗伊(DouglasMcIlroy,著名数学家,UNIX开发者),他是我见过的最聪明的人之一(我见过非常多的聪明人)。年,我在贝尔实验室第一次实习时就是在他的手下,他曾对我的博士论文的内容和写作提出了很好的优化建议,我们一起共事了近30年,他在任何领域都是我的“智多星”——编程、写作、科学、技术、数学等等。
第三个人是林申(ShenLin)。年,我在贝尔实验室第二次实习期间,和林申一起研究了“图划分问题”(GraphPartitioningProblem),这后来也成为了我博士论文的基础。年,当我以正式员工的身份回到贝尔实验室时,我又和林申一起研究了“旅行商问题”(TravellingSalesmanProblem)、以及其他组合优化的问题,甚至还一起完成了一些网络设计工具。他具备一种惊人的能力,在上手一些小例子之后,就能总结出普适的方法论。如果没有他,我是无法顺利完成论文的。
《程序员》:从实习到退休,你在贝尔实验室工作了30年,那里最吸引你的是什么?如今在技术领域,跳槽已然成为一件十分普遍的事情,你对此有什么看法呢?
Brian:在贝尔实验室的时候,我先是实习,然后转为全职。那是个神奇的地方,在那里,有数以千计的一流科学家和工程师在研究多个领域中有趣又有关联的各类问题。公司(ATT,贝尔实验室的母公司)具备开放、合作的环境和长远的眼光,所以我们可以用很长的时间(甚至数年)去完成自己想要完成的任何事。因此,大家自然而然地就会在那里一直工作下去,没有理由要离开。
如今,这种环境已经不存在了,但同时工作机会却很多,尤其是对于程序员来说,所以人们在短时间内频繁地更换工作就不足为奇了。虽然这并不是我个人的工作风格,但似乎对很多人而言都是理所应当的。我倒是觉得,尽管这种工作流动性在短期内有一定的好处,但可能也会带来一些长期的负面影响,比如许多公司内部都缺乏连续性,丧失了一以贯之的企业文化和传承。
贝尔实验室给当今企业的启示
《程序员》:谈到企业文化(OrganizationCulture),这也是UNIX成功的一个重要原因。在这方面,你认为其他企业和实验室可以从贝尔实验室中学到什么?假设现在你带领的团队工作量很大,并且员工都分散在不同的时区,你将如何确保代码质量?
Brian:贝尔实验室研究环境的独特之处在于没有“繁重的工作量”,大家都在做自己认为有趣或重要的事情,没有要求、没有产品,也没有可交付的成果,所以一切进度压力都是员工自己给自己的。因为所有人都生活在同一个地区,因此不存在时区问题。当然,有些人习惯于传统的白天工作,而有些人则习惯在夜间工作,还有一些人的工作时间很长(比如KenThompson),所以他们有时会和白天的人同步,有时会和夜间的人同步。因为所有的程序员都很优秀,所以代码本身的质量也很高,而且所有的代码都在文件系统中,任何人都可以读取并修改;但唯一的要求是,如果你修改了一个程序的代码,那么你就要对这个程序负责,从而提醒大家要谨慎。
《程序员》:你曾说,贝尔实验室创造的所有伟大发明都得益于其开放的氛围和充足的资金支持,但如今的公司往往只注重短期效益。这是否意味着将越来越难以见证UNIX这样伟大发明的诞生?目前,公司在研发方面还有其他可行的方式吗?
Brian:我确实认为,过多地聚焦在短期目标和钱上是现金企业的一个问题。当然,企业必须要完成特定的工作并交付相应的产品,这样才能有收入维持企业的运转。但是,如果一切都以短期目标来衡量的话,就没有办法去充分地仔细考虑其他选择,或者寻找更好的行事方式以及为未来投资。然而,和很多事情一样,这是一个权衡利弊的过程,我们不难发现,许多优秀甚至伟大的产品都来自研发风格截然不同的公司。
《程序员》:你在书中提到,伟大的项目往往是由个人建立起来的,然而现在的公司往往都更强调合作和头脑风暴。你认为两者之间是否存在“矛盾”?还是说前者是只适用于“天才”的行事方式?
Brian:在UNIX的早期阶段,程序规模要小得多,所以对团队的