Python之禅作者Tim Peters去世,Timsort算法仍在运行
程浅 发自 凹非寺 量子位 | 公众号QbitAI 学过Python的朋友知道,当你输入import this时,会看到这样一首19行诗。 「优美胜于丑陋,显式胜于隐式....
学过Python的人都知道,敲下import this,屏幕上会出现一首19行的诗。
「优美胜于丑陋,显式胜于隐式,简单胜于复杂……」这19句箴言把编程之美说透了,后来被人称作《Python之禅》。
Python之父Guido van Rossum刚刚宣布,这首诗的作者Tim Peters已经离世。
Guido van Rossum说:「在《Python之禅》之前,他就已经是我的导师,也是这门语言的共同设计者。」
Tim发明的算法,此刻仍在无数设备上运行
默哀!
有人说过:「Tim是继Guido之后Python的第二个真正意义上的用户。」
这话不假。早在《Python之禅》问世之前,Tim就已经是Python最早期的核心开发者之一,包括Guido在内的很多人都受到他的影响。他离世的消息传开后,Python社区的核心开发者们纷纷悼念。
Python Web框架Pyramid的主要作者Chris McDonough写了一篇长文追忆Tim。
Chris McDonough写道,Guido非常依赖Tim……当他不再担任日常核心开发人员之后,Python的复杂性急剧上升绝非偶然。
在Chris McDonough笔下,Tim的文字幽默、友善、积极得恰到好处,还带着一点狡黠的黑色幽默。
核心开发者Chris Angelico回忆,自己跟Tim讨论过数不清的技术问题:「他从不把你当傻瓜,也不会随便否定你的疑问,总是认真回答、耐心解释。」
核心开发者Neil Schemenauer感慨,Tim花掉了数以千计的小时去帮助别的开发者,既不图钱,也不图个人荣誉。
Neil Schemenauer还引用《马太福音》里的一句话来形容Tim。
凭着他们的果子,就可以认出他们来。
这句话再准确不过。Tim走了,他的果子已经结满全世界,「任何在1995年至2010年间启动的Python项目都带有Tim的文化印记。」
这些成果里最出名的是Timsort排序算法。
没错,Timsort里的Tim,指的就是Tim Peters本人。
2002年,Tim为Python设计出这套排序算法。它能利用数据中已有的顺序高效完成排序,处理现实世界里那些部分有序的数据尤其拿手。
再后来,这套算法走出Python,被Java、Android等平台采用。
Tim留下的好东西还有很多。比如doctest,把文档里的代码示例直接拿来跑测试,检查示例写得对不对。
还有difflib,用来比较两段文本的差异,找出哪些内容被增加、删除或修改。
除此之外,Python底层的内存管理、垃圾回收、字典实现等机制里,都能看到Tim的印记。Guido回忆,Tim接触Python没多久,就说服自己支持整数(int)与浮点数(float)的混合运算。
此后多少年,Tim一直在深深影响着他。
Tim Peters已经离开,但他写下的那19句箴言和那些算法,还留在无数开发者的日常里。
Tim与Python的结缘往事
1952年,Tim Peters在美国威斯康星州出生。在成为Python社区传奇之前,他做过超级计算机的编译器开发,也参与过Dragon Systems的语音识别软件研发。
△图源openbookproject
1991年,朋友给Tim发来一封邮件,介绍了一门刚问世不久的编程语言——Python。
他很快来了兴趣,与发明者Guido通起信来,一边试用,一边讨论这门语言该怎么设计。
那时候,Python还停留在0.9.1版本。
此后,他一头扎进了Python的开发工作。
在当时的开发者社区里,Tim的名气越来越大,逐渐成了传奇人物。
原因是,不管别人提的问题多复杂、多小白,他都能回上一封长篇、耐心又细致的邮件。
回答得又多又快又好,他因此得了个外号:Timbot,意思是Tim牌机器人。
△图源pycon博客
1998年,Python核心开发者Barry Warsaw甚至在“Tim大阴谋论起源”的讨论里专门写了一封邮件,标题就叫《关于Tim的真相》。
那封邮件写道,众人所知的Tim Peters压根没有这个人。「那个Tim,说到底不过是一套年头很久的AI程序,专门用来自动翻查邮件列表、回复开发者提问。」
△《关于Tim的真相》邮件翻译
邮件接着写道:不然的话你们自己想想,你们之中有谁真的见过他吗?当然了,Guido肯定说自己见过,但我没看见任何证据。
△《关于Tim的真相》邮件翻译
正是在这样的社区氛围中,《Python之禅》慢慢酝酿成型。
1999年6月,Python社区又吵起来了。
有开发者抱怨,大家整天忙着争论Python该怎么改,却很少讨论怎么把这门语言用好。
于是有人提议,不如请Guido和Tim一起写份《The Python Way》,用十几条简短规则,把Python的设计哲学总结出来。
这次Tim又是光速回应。他表示,「这种事情当然应该交给Guido来做啦,不过嘛,如果是Guido,他大概会从下面这个提纲开始。」
优美胜于丑陋。
显式胜于隐式。
简单胜于复杂。
……
19条箴言,Tim一口气写完了。
数目为什么不凑个整数?按Tim的说法,最后一条得留给Guido亲自落笔。
所以直到今天,也没人知道Tim原本设想的第20条会是什么样。有人猜是“留白很重要”(Significant whitespace),也有人猜:第20条原则就是“没有第20条原则”。
△1999年6月4日《The Python Way》原始邮件
△中文翻译供参考
2020年,Barry Warsaw问起这首诗是怎么写出来的。Tim的回答很随意:当时电视里正播职业摔跤,他趁着广告时间,啃着火腿三明治就把诗写下了。
后来Barry Warsaw把这首诗谱成了歌,吉他自己弹,贝斯、键盘也一并包办,还亲自上阵唱了一遍。
前几年有个刚学Python的人提问:「给线程传参数时,括号里明明只有一个变量,后面为什么非加一个逗号?」
Tim本人出来回复,讲了单元素元组的语法。讲完还不算完,他又向Python官方提了文档改进请求,想让这个问题以后能被说清楚。
提问的人连声道谢。
Tim反过来宽慰对方:单元素元组这种写法,本来就是Python里最怪的语法之一,不必担心天天碰上这种古怪东西。
大家喜欢Tim,不是没来由的。
另有一回,同事找Tim帮忙,说有个错误每运行六次才冒出来一次。
Tim笑着反问:「那你有在源代码里搜索过6吗?」
三十多年里,Tim一直活跃在社区,大大小小的疑难杂症他都帮着处理。
到2024年,情况变了。Python软件基金会修改章程,加上社区治理上的分歧,他与当时的管理者爆发了激烈争论。
再往后,Python指导委员会认定他在相关讨论中多次违反社区行为准则,核心开发者资格被暂停三个月,论坛账号也受到限制。
这事在社区里炸开了锅。
Tim不认可处罚依据和处理程序,专门开了个公开博客,一条一条回应指控。博客页脚一直留着那句话:「Question everything. Love everyone.」
质疑一切,爱所有人。
三个月后,Tim回到Python社区,照旧参与技术讨论。
2026年7月8日,他在Python社区留下的最后一篇帖子,聊的仍是优先队列、数据结构和路径搜索算法。
那篇长长的技术分析收尾时,他感叹,「说了这么多,无非是想说,现实世界远比我们期待的那些简洁漂亮的抽象模型更加复杂。」
七天后,Tim Peters离开了这个世界。
△Tim的名片显示,“用户已不再活跃”。
One More Thing
Tim Peters离世后,不少程序员又把《Python之禅》翻了出来。Hacker News上有人说,自己早把它打印出来贴在办公室墙上,大家几乎每周都会引用一次。按他的说法,「最初只是个玩笑,后来却成了我们文化中相当重要的一部分。」
另一位网友回忆,刚学编程那会儿就读过《Python之禅》,当时没看懂。之后这些年里,隔一阵子重读一遍,总能发现自己又多理解了几句。
讨论没有停在怀念文章本身,很多人开始念叨当年那个Python。有网友直接吐槽:「应该有一种,最好只有一种,显而易见的解决方法」这句话放到今天的Python身上,已经不太适用了。
也有人怀念起那时的Python社区——开发者们靠邮件列表交流、争论、打趣。而Tim总是肯花大把时间,认真回答素不相识的程序员提的问题。
有网友说:
我很大程度上,是通过观察Tim,才学会了如何在互联网上与人相处。
现在Tim走了,但或许,他给这个世界的爱还在延续……