《编程 Python》第一版序言
《编程 Python》第一版序言
这是我为 Mark Lutz 的著作《编程 Python》(第一版)所写的序言,该书由 O'Reilly 出版。另请参阅我为第二版写的序言。
作为 Python 的创造者,我想谈谈它的起源,并加入一些个人哲学。
六年多以前,1989 年 12 月,我正在寻找一个“业余”编程项目,可以在圣诞节前后的一周里让我忙碌起来。我的办公室(阿姆斯特丹的一个政府研究实验室)会关闭,但我有一台家用电脑,手上也没有太多其他事情。我决定为我最近一直在思考的新脚本语言编写一个解释器:它是 ABC 的后代,会吸引 Unix/C 黑客。我选择了 Python 作为该项目的工作名称,当时心情有点不敬(并且是 Monty Python 飞行马戏团的忠实粉丝)。
今天,我可以肯定地说,Python 改变了我的生活。我已经搬到了另一个大陆。我把工作日花在用 Python 开发大型系统上,当我没有在 Python 上进行黑客攻击或回复与 Python 相关的电子邮件时。有 Python T 恤、研讨会、邮件列表、新闻组,现在还有一本书。坦率地说,我唯一没有实现的愿望是我的照片登上《纽约时报》的头版。但在我沉迷于白日梦之前,这里有一些关于 Python 过去的轶事。
这一切都始于 ABC,这是一种我曾在 80 年代初帮助创建的精彩的教学语言。它是一种极其优雅且功能强大的语言,旨在面向非专业程序员。尽管它具有所有优雅和强大功能,并且可以免费实现,但 ABC 从未在 Unix/C 世界中流行起来。我只能推测原因,但这是一个可能的原因:向 ABC 添加新的“原始”操作的难度。它是一个整体式的“封闭系统”,只有最基本的 I/O 操作:从控制台读取字符串,向控制台写入字符串。我决定不在 Python 中重蹈覆辙。
除了这个意图之外,我对 ABC 还有一些其他的改进想法,并且渴望尝试它们。例如,事实证明 ABC 强大的数据类型不如我们希望的那么高效。过于强调理论上最优的算法,而没有对常见情况进行足够的调整。我还认为,ABC 的一些针对新手程序员的功能对于(当时!)目标受众的经验丰富的 Unix/C 程序员来说不太理想。例如:ABC 的特有语法(所有大写关键字!);一些术语(例如,“how-to”而不是“procedure”);以及集成的结构化编辑器,其用户几乎普遍讨厌它。Python 将更多地依赖 Unix 基础设施和约定,而不是受限于 Unix。事实上,第一个实现是在 Mac 上完成的。
事实证明,Python 非常摆脱了传统编程语言的许多束缚。这也许是由于我对示例的选择:除了 ABC 之外,我的主要影响是 Modula-3。这是另一种具有非凡优雅和强大功能的语言,由一个小型且意志坚定的团队设计(他们中的大多数人我在 DEC 的帕洛阿尔托系统研究中心暑期实习期间见过)。想象一下,如果我以 Unix shell 和 C 为模型来设计 Python,它会是什么样子!(是的,我也借鉴了 C,但只是它最不具争议的功能,为了取悦 Unix/C 受众。)
任何个人的创造都有其特有的怪癖,有时其创造者必须为这些辩护。也许 Python 最具争议的特性是它使用缩进进行语句分组,这直接来源于 ABC。它是该语言中我最珍视的功能之一。它使 Python 代码在两个方面更具可读性。首先,缩进的使用减少了视觉混乱并使程序更短,从而减少了理解基本代码单元所需的注意力。其次,它允许程序员在格式化方面减少自由度,从而实现更统一的样式,这使得阅读其他人的代码更容易。(例如,比较 C 中大括号放置的三种或四种不同的约定,每种都有强烈的支持者。)
对可读性的这种强调并非偶然。作为一种面向对象的语言,Python 旨在鼓励创建可重用的代码。即使我们始终编写完美的文档,如果代码不可读,也几乎不能认为是可重用的。除了使用缩进外,Python 的许多功能共同使 Python 代码具有高度的可读性。这反映了 ABC 的理念,其目的是以最纯粹的形式教授编程,因此非常重视清晰度。
通过减少不必要的变异性,通常可以提高可读性。如果可能,有一种单一、显而易见的方法来编码特定的构造。这减少了编写代码的程序员面临的选择数量,并增加了阅读代码的第二个程序员熟悉它的机会。Python 可读性的另一个贡献是选择以保守的传统方式主要使用标点符号。大多数运算符符号对于即使对高中数学有模糊记忆的人来说都很熟悉,而且不必学习像 @&$! 这样的漫画诅咒字符的新含义。
我会欣然承认 Python 不是运行速度最快的脚本语言。但它是一个很好的亚军。随着硬件速度的不断提高,程序在其生命周期中的累积运行时间通常可以忽略不计,与编写和调试程序所需的程序员时间相比。当然,这才是真正可以节省的地方。虽然这很难客观地评估,但大多数尝试过的人都认为 Python 在编码时间方面是赢家。此外,许多人认为使用 Python 是一种乐趣——很难想象更好的推荐了。
我独自承担 Python 的优点和缺点,即使某些代码是由其他人编写的。然而,它的成功是一个社区的产物,从最早的采用者开始,他们在我在网上首次发布 Python 时就选择了它,并在他们自己的环境中传播了有关它的信息。他们通过电子邮件向我发送了他们的赞扬、批评、功能请求、代码贡献和个人启示。他们愿意在我很快设置的邮件列表中讨论 Python 的各个方面,并在我的初始直觉失败的地方教育我或推动我朝正确的方向发展。贡献者太多,无法一一感谢。但是,我将破例一次:本书的作者是 Python 的早期采用者和传播者之一。随着本书的出版,他长期以来的愿望(也是我的!)得到了实现,那就是拥有比标准手册更易于理解的 Python 描述。
但闲聊够了。我强烈推荐这本书给任何有兴趣学习 Python 的人,无论是为了个人提升还是作为职业发展。请开始吧,埃里克,乐队指挥!(如果你不理解最后一句话,说明你没有看过足够的 Monty Python 重播。)
Guido van Rossum
弗吉尼亚州雷斯顿,1996 年 5 月