本文经AI新媒体量子比特(公众号ID:QbitAI)授权转载,转载请联系出处。今天,《Linux三剑客》中一个很老的工具突然出现在今天的GitHub热榜上:——这是因为80岁的原作者更新了。是的,你没听错,有些人到了80岁还在改密码!这位大神就是加拿大计算机科学家BrianKernighan。他与Java之父、Python之父等比尔·盖茨齐名,他创造的“HelloWorld”范式让每一个学编程的学子都喘不过气来:不管学什么语言,第一个程序只要学会导出它。printf("你好,世界!\n");cout<<"HelloWorld!\n";print"HelloWorld!"...另外,第一本C语言编程书籍的作者之一有他;他也是AWK(Linux和Unix中的文本数据处理工具)的早期开发人员和共同创建者之一。如今老人头发花白,依然活跃在“前线”——今年5月,在AWK的GitHub仓库中,老人提交了新的pullrequest,为AWK添加了从未有过的Unicode支持可能的。对此,网友们的态度是:是什么让这个大佬常年保持编程热情?不参加考试就进入贝尔实验室的事情还得从科林汉的大学时代说起。科林汉1942年出生于加拿大,在多伦多大学学习工程物理。他形容这个专业对于那些不知道自己想学什么的人来说是一个“大杂烩”专业,但幸运的是,他大一就对编程产生了兴趣,并学习了Fortran。那时,计算机的发展还处于起步阶段。直到大三时,他才看到学校里唯一的晶体管计算机:IBM7094。学生们没有机会接触它,因为它太贵了(当时300万美元)。可见当时工具匮乏,所以正在学习编程的科林厄姆只是读了丹尼尔·麦克拉肯的名著,获得了“很多”理论知识,但实际上并没有亲手写过一行代码。大一暑假,不知道他是怎么找到一家石油公司实习的。任务是使用COBOL语言为炼油厂开发优化软件。由于对这门语言不熟悉,也没有编程经验,所以最终没有写出像样的程序。虽然受了一点挫折,但他对编程的热情没有退却,回到学校继续研究。大四毕业后,科林汉决定继续深造,先后拿到了麻省理工学院和普林斯顿大学的offer。由于在麻省理工完成博士学位需要7年,每周30小时的研究助理工作,而普林斯顿只需要3年,并提供全额奖学金。再加上科林汉的好朋友在普林斯顿,所以他也没有犹豫。选择了后者。在普林斯顿大学,ColinHan主修电气工程,因为当时没有专门的计算机系。这根本没有阻止他。在攻读博士学位期间,他首先获得了麻省理工学院的实习机会,并有幸在后来的图灵奖获得者FernandoCorbató手下工作,为一个名为Multics的分时操作系统项目编写代码。第二年夏天,他又在贝尔实验室实习,在那里他编写了汇编语言。为了方便Fortran程序中的列表处理,他还写了一套函数库,他形容“非常享受”。一转眼,科林汉博士毕业后,直接被留校任教,在没有面试和研究成果展示的情况下,成为了贝尔实验室的正式成员,足以说明他的卓越。而他与Unix的渊源也由此开始。Unix命名人我们现在的大部分服务器、手机系统、物联网系统基本上都是基于Unix的。Linux是三大系统之一,也是类Unix系统。可以说,Unix是现代操作系统的源头之一。如此重要的操作系统的第一个版本,竟然由后来的图灵奖得主肯·汤普森仅用了3周时间就完成了,说来令人惊讶。当时Unix还叫UNICS(UniplexedInformationandComputingSystem),后来被ColinHan改成了现在的名字。Unix中有一个核心工具叫做AWK,Collingham是它的发明者之一(名字中的“K”代表他)。作为一种文本处理语言,AWK只是对文本行进行过滤和转换,但它已成为Unix/Linux平台上可用的最强大的数据处理引擎之一。在Linux系统中,它与grep、sed命令并称为“三剑客”,并居“老大”一席。掌握之后,它可以处理6到10的日常操作。时至今日,AWK已经分为三个版本,依然深受人们的喜爱。诞生45年后仍未“退役”。除了AWK,Collinghan还发明了AMPL,一种用于描述和解决大规模复杂数学问题的建模语言,支持世界上大多数求解器。还有编译器Ratfor、文档预处理器Pic、Grap、数学排版语言Eqn等重要研究成果。除了写代码,Collinghan还酷爱写书,出过很多经典之作。比如你想了解Unix的历史,你可以阅读《Unix传奇》。作为参与者和见证者之一,他写的这本书让没有足够专业技术背景的人也能领略到Unix的思想。△《Unix传奇》文章开头提到的“HelloWorld”范式来自于他与C语言之父DennisRitchie合写的开创性著作《C程序设计语言》。又如科林汉姆的第一本书《The Elements of Programming Style》(《编程格调》),其中留下了一条以他的名字命名的定律——科林汉姆定律,即:调试一段代码的难度是编写它的两倍。根据这个定义,如果您的代码编写巧妙,您可能没有足够的技能来调试它。(简单的代码胜过复杂的代码,因为调试复杂的代码,任何问题都很难解决,甚至无法解决。)拖延解决问题?那么,科林厄姆本人到底是一个怎样的人物呢?2021年他接受《程序员》采访时,被问到这样一个问题:Ken用3周时间创造了Unix,Doug几天就想出了“pipe”的idea,你有什么工作的窍门吗有效率的?(以上两位是他在贝尔实验室的同事)对此,ColinHan连连挥手:他们是“别人的程序员”,我从来没有这么高效过!老人说,遇到新问题,他的解决办法通常是简单粗暴,就是尽量拖延,祈祷问题消失,或者祈祷问题自己解决。这种形而上学的方法本身并不能解决问题,但这样做,科林厄姆就有了足够的时间来消化问题,进而想出对策。而且,他居然会选择直接解决问题。今年1月1日,科林汉刚刚度过了自己的80岁生日。上个月,YouTube频道Computerphile采访了他,大家都知道老头子还在改代码!Collingham说,没有一种计算机语言或工具是万能的,AWK也不例外。以前,AWK只适用于ASCII或8位输入,无法处理Unicode(统一码)。△图源Youtube频道Computerphile视频几个月前,柯令汉花了一些时间折腾了AWK——他称之为“一个非常古老的程序”——现在AWK可以处理UTF-8的输入和输出。现在,用户已经可以使用正则表达式来提取日文字符等等。Collinghan在视频中还提到,他修补了一些“快速而肮脏”的东西,以允许AWK处理CSV文件。△图源Youtube频道Computerphile视频在整个采访过程中,老人依然健谈,精神面貌还不错。话虽如此,意气风发的他,也没有理由修改几十年的“古老程序”?科林汉的回答是这样的:今天的计算环境与三十、四十年前的计算环境大不相同,内存量也得到了极大的扩展。“这将改变您对AWK的看法,尤其是AWK无法运行的部分。”。所以,老夫一直在后台偷偷把玩新版的AWK,目的就是尽可能地扩展,让AWK更容易练习和使用。这其实是科林汉一贯的行为准则。在此之前,他在播客CoRecursive中说:如果你做一些可以帮助自己并改善他人工作的事情,为什么不去做呢?有趣的是,世界上没有万能的工具,也没有万能的通才。老人自己也承认,他的毛病是没有完全理解如何使用Git。所以他只能通过电子邮件将更改发送给当前的维护者。△图源柯林涵邮件网友:黑客永远不会80岁退休还要修改几十年前写的代码。AWK从一开始就很流行。看到AWK在今天依然可以得到提升,变得更加强大,很多人对这位老爷子对coding的热情表示敬意。有网友对老人表示感谢。还有人觉得不断努力改善程序员写代码的环境是一件很鼓舞人心的事情。当然,也少不了耍花样的人。黑客永不退休!还有一件事最后,让我们回到“Hello,world”。“Everythingbegins”这句话最早出现在科林厄姆1974年写的《Programming in C: A Tutorial》中,后来被合写成那部经典。书中两位作者形成的编码风格也被称为K&R风格(K&R指的是Kernighan和Ritchie)。有趣的是,科林汉说他强迫丹尼斯写了这本书。至于为什么选择用“Hello,world”而不是其他的,Collingham自己也记不太清了。在接受《福布斯》杂志采访时,他依稀回忆道:也许是因为看了一部卡通片,里面有一个鸡蛋和一只小鸡,小鸡说:你好,世界!
