工程哲学:Guido van Rossum,可读性至关重要

核心要点
- 代码被阅读的次数远多于被编写的次数,因此van Rossum为日后读到这行代码的人优化Python,而非为机器、也非为当下正在敲键盘的作者。
- 显式缩进让阅读变得诚实——你看到的缩进就是实际运行的代码块结构,所以一段Python程序的外观无法在它真正做什么这件事上撒谎。
- 「应当有一种显而易见的做法」意味着即便是陌生人写的代码,读起来也仿佛出自同一人之手——大家收敛到同一种惯用写法,是送给每一位未来读者的礼物。
- Python之禅出自Tim Peters,而非van Rossum——这是一个常见的张冠李戴。Peters只是提炼了早已内建于语言之中的价值观。
这条原则
「Guido的关键洞见之一,是代码被阅读的次数远多于被编写的次数。」——PEP 8,将这一洞见归功于Guido van Rossum1
在语言设计领域,这是最不张扬的一句革命性论断,而几乎所有人都点头称是,随后又把它抛诸脑后。请把这句话慢慢读一遍。代码被阅读的次数,远多于被编写的次数。你敲下一次的一行代码,会被读上数十遍——审核它的评审者、扩展它的同事、继承它的陌生人,而最常读它的,是六个月后努力回想自己当初意图的你。如果这是真的,那么源代码的受众就既不是机器,也不是落笔那一刻的作者,而是日后读它的人。一门语言,理应为它真正的受众而优化。
而几乎没有哪门语言做到了这一点。20世纪80年代的系统语言为编译器和机器而优化;脚本语言则为作者落笔那一刻的便利而优化,这正是它们中许多语言写完第二天就变得不可读的原因。Guido van Rossum的判断是:你可以转而为读者优化——让清晰成为默认,并由语法本身来强制执行,这种清晰会在整个社区中跨越数十年不断累积复利。他赌对了,赌赢的幅度几乎无人预料。Python之禅把同样的价值观浓缩成每个Python程序员都读过的三个字:「可读性至关重要。」2
这份信念,与「品味是一套技术系统」而非你随口宣称的某种感觉,底层是同一个论点。可读性不是事后用一份风格指南补上去的软性偏好。在Python中,它是结构性的——烤进了语法里,以至于语言本身不会让你像写出可读版本那样轻易地写出不可读的版本。van Rossum押的注是:只要你把清晰这件事变成阻力最小的那条路,整个生态系统就会在无人下令的情况下自发地向清晰漂移。
背景
Guido van Rossum于1956年1月31日出生在荷兰海牙,1982年在阿姆斯特丹大学取得数学与计算机科学硕士学位。3他随后进入荷兰国家数学与计算机科学研究所(Centrum Wiskunde & Informatica,CWI)工作,而他职业生涯中那段塑造性的经历正在前方等着他:ABC编程语言。
ABC由Leo Geurts、Lambert Meertens和Steven Pemberton在CWI设计,是一门以易学、易读为目标的教学语言,van Rossum在20世纪80年代中期花了数年时间参与它的实现。4ABC做出的两个选择,日后回响在他所做的一切之中:它用缩进来标记代码块结构——即所谓「越位规则」(off-side rule),没有花括号,没有begin/end——并把可读性当作首要的设计目标,程序篇幅通常只有等价Pascal或C代码的四分之一。4van Rossum爱上了缩进这个想法;他后来说,这个做法消解了关于花括号该放在哪里那场毫无意义的「宗教战争」。5但ABC也有致命缺陷——单体式的实现、封闭而难以扩展的设计、把它隔绝在真正的Unix程序员之外的那种学院式孤立。他用过这门可读的语言,也看清了这堂课的两面:哪些想法是真正的好东西,哪些是葬送了它的错误。
接着便是那个著名的起源故事,而它确实如传说所言那样发生了。「六年多以前,在1989年12月,」van Rossum写道,「我在找一个能让自己在圣诞节前后那一周有事可做的『业余』编程项目。」6他在CWI的办公室因假期而关闭。他着手打造一门脚本语言,保留ABC最好的那些想法——可读性、缩进——并修正它的错误,这一次瞄准的是ABC从未触及的Unix/C黑客群体。至于名字,「当时心情有点不太正经(而且我是Monty Python’s Flying Circus的铁杆粉丝)」,他选了Python。6不是那条蛇,而是那个喜剧团体。他在1991年公开发布了第一个版本。3

他的工作
可读性与显式缩进
van Rossum从ABC沿用下来、影响最为深远的那个设计决定,正是新手争论不休、老手却已视若无睹的那一个:缩进即语法。在大多数语言里,代码块结构由花括号或关键字标记,缩进只是装饰——人眼会用它,编译器却视而不见。这意味着两者可能互相矛盾。花括号可以说一件事,而缩进说另一件事,代码看上去做的是一回事,运行起来却是另一回事——这就是经典的「误导性缩进」缺陷,正是这一类错误酿成了Apple臭名昭著的goto failSSL漏洞:一行多出来的、缩进了的语句落在了某个if之外,而它在视觉上看起来明明属于这个if。
Python让这一类缺陷在结构上不可能发生。你看到的缩进就是实际运行的代码块结构。不存在第二个隐藏的真相供它去背离。van Rossum从ABC继承这一点,是因为它终结了花括号摆放之争,但更深层的回报恰恰正是他的那条原则:它让阅读变得诚实。读者的眼睛所感知到的程序形状,从定义上讲,就是解释器所执行的形状。45

诚实的结构也是Python在非程序员眼中呈现出那副模样的原因:像是恰好能运行的结构化伪代码。这正是初衷所在。van Rossum自称是个非常依赖视觉的人,他把表层设计得平易近人,把结构设计得清晰可见,于是「读代码」和「理解程序」之间的鸿沟,被压缩到了语法所能做到的最小。
Python之禅与「一种显而易见的做法」
1999年,资深核心开发者Tim Peters用二十句格言写下了贯穿Python始终的设计价值观。它们最终被奉为PEP 20,即Python之禅,并随语言本身一同分发:在Python提示符下输入import this,它们就会打印出来。这份归属很重要,却常被弄错:文本的作者是Tim Peters,而非van Rossum。2但这份禅是对Guido设计感觉的提炼——Peters所表达的,是早已存在于语言之中的价值观,正如一位优秀的评论家能把艺术家的意图阐述得比艺术家本人还要清楚。
有两句话承载着整套哲学。「可读性至关重要。」以及:「应当有一种——最好只有一种——显而易见的做法。」2后一句是对Perl那句广为传颂的格言「做一件事不止一种方法」(There’s more than one way to do it)的刻意反转。van Rossum的Python押注于相反的方向:一门只提供一种显而易见做法的语言,其代码无论出自谁手都长得一样,这意味着任何人都能读懂别人写的代码。收敛到同一种惯用写法,对作者而言不是约束;它是送给每一位未来读者的礼物。(就连这句格言本身的标点——把「最好只有一种」包起来的那对破折号——也是在打趣:这条规则在陈述它的同时,正轻微地被违反着。)
BDFL与治理:2018年的卸任
在Python生命中的大部分时间里,van Rossum对这门语言的设计握有最终决定权,头衔是1995年一次Python聚会上半开玩笑造出来、后由Barry Warsaw固定下来的:BDFL,Benevolent Dictator For Life(终身仁慈独裁者)。7这是一套真实运作的治理模式。语言的变更通过PEP流程——即Python Enhancement Proposals,一种公开、书面、存档的机制,任何变更都经由它被提出、辩论并裁定——但当共识无法达成时,由BDFL拍板。几十年来这套机制行之有效,因为社区所信任的,正是van Rossum的品味。
它终结于一个运算符。PEP 572引入了「海象」赋值表达式:=,而那场辩论异常激烈——van Rossum顶着响亮而持续的反对硬把它推了过去。2018年7月12日,在它被接纳几天后,他向python-committers邮件列表发了一封题为「Transfer of power」(权力交接)的邮件。「既然PEP 572已经尘埃落定,」他写道,「我再也不想为了一个PEP拼得这么辛苦,然后发现有那么多人鄙夷我的决定。」他给了自己「一个永久的BDFL休假」,而且——这是最关键的部分——干脆利落地拒绝指定继任者(「我不会任命继任者」),把发明自己政府的任务留给了社区。8社区做到了:一个由五名成员选举产生的指导委员会(Steering Council),经PEP 8016批准,如今治理着Python。这位仁慈的独裁者,亲手废除了独裁本身。
Python的影响力
这场关于可读性的押注,累积成了软件史上影响最大的成果之一。正因为Python是人们读得懂的语言,它便成了人们教得了的语言——它如今是全球大学里占主导地位的入门语言。正因为它既可读又可扩展,它成了科学计算的黏合剂:NumPy、SciPy、pandas,乃至整个数据科学技术栈。又因为数据科学栈本就建在Python之上,深度学习革命也随之建在了Python之上——PyTorch、TensorFlow、JAX,以及几乎每一个你听说过的模型,都由一门荷兰程序员在一个圣诞假期里、为了对人眼友好而设计出来的语言所驱动。van Rossum本人于2020年结束退休生活,加入Microsoft,投入Faster CPython项目——一项旨在让解释器大约提速一倍的努力——用他自己的话说,这是回到了他的根。9
他的方法
这套方法就是一个信念——为读者而优化——以非同寻常的一贯性坚持了三十五年。
为读代码的人而优化。不是为机器,也不是为落笔那一刻的作者。每一个表层决定——缩进、精简的关键字词汇表、对清晰的坚持——都服务于日后读到这行代码的人,因为那个人才是真正的受众,而且他们的人数要多得多。1
让结构可见,让阅读诚实。缩进就是代码块结构,所以眼睛所感知到的,就是解释器所运行的。这门语言拒绝让代码的外观与它的行为彼此背离。4
偏好一种显而易见的做法。抵制为同一件任务提供五种惯用写法的诱惑。收敛到同一种清晰的惯用写法,意味着陌生人写的代码读起来仍仿佛出自同一人之手。2
取其精华,纠其谬误。Python是ABC的可读性与缩进,减去ABC那单体式、封闭、不可扩展的设计。van Rossum并非凭空发明;他是一位对前人成果有所甄别的编辑。45
公开治理,并懂得何时放手。PEP流程让设计决策变得公开而有据可查。而当他作为最终权威开始成为社区的负担、而非对社区的服务时,他抽身退场——并拒绝钦点接班人,逼出一套能在他之后长久存续的制度。8
影响链
是谁塑造了他
ABC,以及CWI的Lambert Meertens、Leo Geurts和Steven Pemberton。ABC交给van Rossum两个决定性的想法——缩进即语法,可读性为首要目标——又以它的失败,教会了他那些反面教训:不要造单体,不要封闭设计,不要无视在一线干活的程序员。Python是被抢救下来的ABC那好的一半。(直接的、塑造性的影响)
Modula-3。它简洁的模块与异常设计影响了Python自身的相应设计,这提醒人们:van Rossum是有意从他所欣赏的语言中借鉴,而非把每一个轮子都重新发明一遍。(直接影响)
C语言与Unix文化。C给了Python它的实现语言(CPython用C写成),也给了它的目标受众——ABC从未触及的Unix/C黑客。Python从构想之初,就是要做凌驾于C之上的那一层可读脚本,可用C扩展,为一个C的世界充当黏合剂。(塑造性影响)
是谁被他塑造
地球上最大的编程社区。以多数指标衡量,Python如今是世界上使用最广泛的编程语言,也是教给初学者的默认第一语言。整整一代人,学会了用一种为阅读而设计的语法去思考程序。
数据科学、AI与科学计算。NumPy、pandas、PyTorch、TensorFlow——整个现代AI时代的工具链都坐落在Python之上,只因为Python是研究者们读得懂、也扩展得了的语言。那场关于可读性的押注,间接地为我所从事的这个领域承重。
开源治理。BDFL模式,以及它刻意地解体为一个选举产生的指导委员会,成为一个被反复研究的范本:一个由一个人的品味所引领的项目,如何能比那个人的权威存续得更久。
贯穿的主线
Yukihiro Matsumoto为程序员的幸福和「最小惊讶原则」设计了Ruby;van Rossum则为读者设计了Python。它们是两门伟大的「乐趣」语言,是同一种本能瞄准了略有不同的靶子——Matz为书写时的手感而优化,van Rossum为阅读时的体感而优化——这正是它们如此频繁地殊途同归、它们的社区彼此惺惺相惜的原因。Donald Knuth则从学院出发、凭文学化编程抵达了同一个目的地:那个激进的主张是——程序是一部为人类而写的文学作品,机器能运行它,几乎只是一个副产品。van Rossum把这份信念建进了一门语言的语法里,而不是建成一套方法论。而当Bjarne Stroustrup把零开销性能放在首位、任由C++长成一门需要数年才能流畅阅读的语言时,van Rossum把可读性放在首位,并接受解释器的迟缓作为代价——两位设计者,首要优先级截然相反,各自用对方拒绝花费的那种货币来付账。(系列承接)
我从中汲取的
我所记取的这一课是:可读性不是礼貌,它就是实际的产品。代码被阅读的次数远多于被编写的次数,所以读起来清晰的那个版本,就是价值更高的那个版本——而「我以后会清理的」,是我此刻正在悄悄背叛的、对某位读者许下的承诺。van Rossum的做法,是把清晰的版本变成默认,于是做正确的事成了阻力最小的那条路,而非一桩需要自律去完成的事。这与「质量是唯一的变量」是同一条标准:问题从来不是「这能跑吗?」,而是「下一个读到它的人,能否在他所需要的速度下读懂它?」
在我如今构建的世界里——智能体、工具循环、提示词,以及那些会被其他智能体和未来的我在凌晨两点读到的代理框架代码——诱惑恰恰是「可读性至关重要」的反面:炫技的单行写法、隐式的状态、把同一件事的五种做法散落在一个谁都无法在脑中完整把握的代码库里。van Rossum的做法,是挑出那一种显而易见的做法,并让结构变得诚实,于是你所读到的,就是实际运行的。这份信念——清晰一旦被做成结构性的、由系统的语法来强制执行,而非交托给意志力,便会在日后每一位读它的人身上累积复利——正是从1989年那个圣诞业余项目,一直贯穿到2026年某个智能体代理框架的那条主线。读者才是受众。为他们而构建。
常见问题
Guido van Rossum的工程哲学是什么?
van Rossum的核心信念是:代码被阅读的次数远多于被编写的次数,因此一门语言应当为正在读它的人而优化。1他把Python围绕可读性这一首要的、结构性的目标来构建——不是事后补上的风格准则,而是通过显式缩进、精简的关键字词汇表,以及「应当有一种显而易见的做法」这条原则,烤进了语法之中。2与此并行,他通过PEP流程公开治理这门语言,并在2018年刻意卸下了它最终权威的身份。8
Python为什么用缩进而不用花括号?
van Rossum从他20世纪80年代在CWI参与的ABC语言中采纳了基于缩进的代码块结构(即「越位规则」);他喜欢它终结了关于花括号该摆在哪里的无休止争论。45而它之所以历久不衰,更深层的原因在于它让阅读变得诚实:在花括号语言里,缩进是装饰性的,可能与花括号互相矛盾,于是代码可以看上去做的是一回事,运行起来却是另一回事(误导性缩进缺陷)。在Python里,你看到的缩进就是被执行的代码块结构——不存在第二个隐藏的真相供它去背离。
Python之禅是谁写的?
Tim Peters,一位长期参与Python的核心开发者,写下了Python之禅——那二十句被奉为PEP 20、并在你运行import this时打印出来的格言。它并非由Guido van Rossum所写,这是一个常见的张冠李戴。2这份禅所做的,是把van Rossum自己的设计价值观提炼成易记的形式——像「可读性至关重要」和「应当有一种——最好只有一种——显而易见的做法」这样的句子,所阐述的,正是早已内建于语言之中的那种感觉。
Guido van Rossum为什么卸任Python的BDFL?
van Rossum以BDFL——Benevolent Dictator For Life(终身仁慈独裁者)的身份领导了Python几十年,这个头衔是1995年一次Python聚会上半开玩笑造出来的。7他在2018年7月12日辞职,就在充满争议的PEP 572(海象运算符:=)被接纳几天之后——那个PEP是他顶着重重反对硬推过去的。在一封题为「Transfer of power」(权力交接)的邮件里,他写道:「既然PEP 572已经尘埃落定,我再也不想为了一个PEP拼得这么辛苦,然后发现有那么多人鄙夷我的决定」,给了自己「一个永久的BDFL休假」,并直截了当地拒绝指定继任者。8社区用一个选举产生的五人指导委员会取代了他。
来源
-
“PEP 8 – Style Guide for Python Code,” peps.python.org,作者为Guido van Rossum、Barry Warsaw和Alyssa Coghlan。「Guido的关键洞见之一,是代码被阅读的次数远多于被编写的次数。」该准则随即引用了PEP 20的「可读性至关重要」。 ↩↩↩
-
Tim Peters, “PEP 20 – The Zen of Python,” peps.python.org。作者为Tim Peters(而非Guido van Rossum);由
import this打印。包含「可读性至关重要」以及「应当有一种——最好只有一种——显而易见的做法」。 ↩↩↩↩↩↩ -
“Guido van Rossum,” Wikipedia。1956年1月31日生于荷兰海牙;1982年取得阿姆斯特丹大学硕士学位;在CWI参与开发ABC;1989年12月开始编写Python解释器,1991年首次发布;名字取自Monty Python’s Flying Circus。Google(2005–2012,在那里他打造了Mondrian代码评审工具)、Dropbox(2013–2019)、Microsoft(自2020年11月起)。 ↩↩
-
“ABC (programming language),” Wikipedia。由Leo Geurts、Lambert Meertens和Steven Pemberton在CWI设计;一门以教学/可读性为重的语言,用缩进表示代码块结构(越位规则);程序篇幅约为等价Pascal或C代码的四分之一。van Rossum在20世纪80年代中期参与了ABC的实现,并把它的缩进与可读性思想带进了Python。 ↩↩↩↩↩↩
-
Bill Venners, “The Making of Python: A Conversation with Guido van Rossum,” Artima。van Rossum谈到把Python作为ABC的后裔、为Unix/C黑客而创造——保留ABC更好的那些特性(可读性、用缩进来分组),同时修正它的问题,以及他之所以喜欢上缩进,是因为它终结了花括号摆放之争。 ↩↩↩↩
-
Guido van Rossum, “Foreword for ‘Programming Python’ (1st ed.),” python.org。「六年多以前,在1989年12月,我在找一个能让自己在圣诞节前后那一周有事可做的『业余』编程项目。」关于名字:「我为这个项目选了Python作为工作代号,当时心情有点不太正经(而且我是Monty Python’s Flying Circus的铁杆粉丝)。」 ↩↩
-
“Benevolent dictator for life,” Wikipedia。这个说法在1995年首次用于van Rossum;由Ken Manheimer在一次Python聚会上造出「Benevolent Dictator」一词,Barry Warsaw建议加上「for Life」。另见Guido van Rossum, “Origin of BDFL,” Artima,将该说法追溯至1995年的一次会面。 ↩↩
-
Guido van Rossum, “[python-committers] Transfer of power,” python-committers邮件列表,2018年7月12日。「既然PEP 572已经尘埃落定,我再也不想为了一个PEP拼得这么辛苦,然后发现有那么多人鄙夷我的决定。」他宣布自己「将给自己一个永久的BDFL休假」,并声明「我不会任命继任者」。背景见:“Guido van Rossum resigns as Python leader,” LWN.net。PEP 572(海象运算符)见peps.python.org/pep-0572。 ↩↩↩↩
-
“A Team at Microsoft is Helping Make Python Faster,” Microsoft for Python Developers Blog,介绍van Rossum于2020年为之加入Microsoft的Faster CPython项目,目标是让解释器大约提速一倍。另见“Guido van Rossum’s Ambitious Plans for Improving Python Performance,” The New Stack。van Rossum谈到结束退休生活:「我向Microsoft投了简历,被录用了……我选择回到我的根。」 ↩