吉多·范罗苏姆

从 8 月 21 日到 24 日,我参加了在加利福尼亚州蒙特雷举行的 O'Reilly 开源软件大会。那是一个很棒的地点,天气很好,会议也很棒。前两天是教程,接着是两天的会议和贸易展览。展览总体上非常出色,有超过 1600 名与会者。
本次会议是 Perl 会议的延伸,除了 Perl 轨道外,还设有 Linux、Apache、Python、Sendmail 和 Tcl/Tk 轨道。这种多样化的轨道为各种开源软件部落提供了一个很好的相互了解的机会。
我试图广泛涉猎,参加了 Linux 轨道的 Samba 教程、Apache 轨道的 modperl 教程、Tcl/Tk 入门以及 Python XML 编程工具教程。
在为期两天的会议期间,我花了一些时间参加会议,包括盖伊·川崎和比尔·乔伊的主题演讲,以及在Linux杂志展位上停留了一段时间。总的来说,这是一次很棒的会议。GNOME 项目的领导者米格尔·德伊卡萨总结说,与其他最近的展会不同,这真的是一个由开发者为开发者举办的会议。从教程到包含的午餐,良好的组织和良好的内容随处可见。我期待明年再次参加这次会议。
由于 Python 轨道规模很大,吉多·范罗苏姆当然也出席了。我们原定 30 分钟的采访变成了一个愉快的三个半小时的蒙特雷海滨之夜。采访的第一部分包含在此处。在这次采访之后,吉多继续谈论 CP4E,他将 Python 转变为大学使用的语言的项目。我们采访的那部分内容在此处: 吉多·范罗苏姆访谈。
菲尔:Python 与 Perl?显而易见的问题。我昨晚听说一些 Python 人和 Perl 人见面了,现在你们是好朋友了。或者实际上约翰·奥万特说,“Python 人比 Perl 人友善得多。”
吉多:有趣的是,虽然下层员工之间有很多敌意,但自从五年前我们在汤姆组织的 VHLL 研讨会上见面以来,我实际上一直与拉里·沃尔和汤姆·克里斯滕森非常友好。汤姆真的希望我去那里,并确保我成为描述三种主要脚本语言之一的特邀演讲者之一。
菲尔:第三种是什么?
吉多:Tcl。好吧,也许 Python 是第三种!
菲尔:我从事 shell 编程和 AWK 编程已经将近 20 年了,如果有人说,“嘿,你能用 Perl 写这个吗?”答案是,“嗯,是的,我可以,”我能做到是因为我有 20 年的经验,用构成 Perl 的所有部分进行编写。但是出去告诉别人,“哦,你要学习一门新的编程语言,而这门语言的设计非常有道理”是一个问题。我不明白我如何用 Perl 做到这一点,但我可以用 Python 做到这一点。这对我来说是区别。
吉多:我认为问题的核心是 Perl 有非常 UNIX 的背景,并声称是可移植的。如果你和人们交谈,他们都认为 Windows 很糟糕,而 UNIX 是唯一真正的操作系统。
菲尔:我也这么认为!
吉多:好吧,鉴于你选择的职业,你最好这样认为!这是你在 Perl 世界中经常发现的一种非常典型的观点。似乎也有点不喜欢 GUI 或任何带有用户友好的味道的东西。UNIX 社区的一部分人不喜欢这样。我在一个研究环境长大,我们在那里使用 UNIX;我们是欧洲最早的 UNIX 站点之一,也是欧洲最早的互联网站点之一。但我们对 UNIX 并没有那么偏爱。我们对接下来会发生什么感兴趣。有一段时间,我认为自己是图形用户界面设计师——学到了很多关于用户界面的知识。
菲尔:你在设计方面做什么?或者你在什么上实施?
吉多:哦,实现方式各不相同——包括十一个 X Window 系统以及 Macintosh。直到 Windows 95,我几乎从未接触过 Windows 机器。因为在那之前,任何 GUI 编程都是地狱。Windows 已经成熟了很多。实际上,甚至在 Windows 3.1 上也有一个有趣的 Python。我想那实际上是马克·哈蒙开始的地方。
菲尔:你说你现在并没有真正使用 Linux。你现在使用什么平台?
吉多:在工作中,我的办公桌上有一台非常大的 Solaris 机器。在家里,我有一台笔记本电脑,速度足够快,容量足够大,可以作为台式机使用,它双启动 Windows 98 和 Linux。我使用 Windows 只是为了与工作中的许多人兼容,也是出于历史原因,因为我们曾经使用过很多 Windows 应用程序。我不太使用 Windows 进行编程;我在 Windows 上做的唯一编程是——嗯,有两种——用 Python 编程的小游戏,用于测试某些想法的玩具应用程序,在这种情况下,我使用哪个平台都无所谓,以及维护 Python 到 Windows 的端口。Python 到 Windows 的端口有两个组件——核心部分,由我管理,以及旧的 Windows 特定的附加组件,由马克·哈蒙管理。因此,人们通常下载两个文件,他们可以从 https://pythonlang.cn/ 下载这两个文件。第一个是标准的 Python 发行版,它为您提供命令行解释器、文档和标准库——一堆好东西。然后,实际上,我查看了一堆统计数据——三分之一下载 Windows 安装程序的人也下载了马克·哈蒙的扩展。
菲尔:Windows 用户与 UNIX 用户的比例是多少?
吉多:我不知道实际用户,但 python.org 的下载量大约是三分之二 Windows 和三分之一 UNIX。对此有各种各样的解释,可能是因为 UNIX 用户可以从源代码构建。一次下载可能代表更多的用户。对于 Windows,我认为一次下载通常代表一个用户。Linux 至少也有可能从不同的站点下载 RPM——我们没有其他站点的任何统计数据。
菲尔:此外,Python 几乎随每个 Linux 发行版一起提供。

吉多:是的,嗯,对此有很多抱怨。它们不是很新,并且没有非常大的标准扩展集,因此在编译时配置它们需要额外的工作。例如,如果您想在 Red Hat Linux 上安装完整的 Python,您需要下载 Andre 的所有东西。
菲尔:顺便说一句,我实际上确实使用 Python。我一直在告诉办公室的人,“我们必须开始用 Python 编程。”我们经历了几位 Perl 程序员,他们可以非常快速地生成代码,但是当他们找到新工作时,我们坐在那里想,“这是什么东西?”
吉多:这是我一直以来作为我的理念的一部分:你能读懂别人的代码比你能多快地生成自己的代码重要得多。再说一次,Perl 社区中很少有人欣赏这一点。我知道汤姆·克里斯滕森很欣赏这一点。但是许多在第一线进行 Perl 编程的人没有时间学习如何正确编写;他们只是复制他们在以前在该站点进行黑客攻击的人的遗产中找到的示例。
菲尔:有时这很好。我用 AWK 写了很多一次性用品。这里有一些数据,我必须把它变成某种东西并加载它——很好。
吉多:只要你真的把它处理掉!
菲尔:没错!
吉多:我爸爸过去常说,没有什么比临时解决方案更永久的了。许多一次性软件最终会超出所有理由地持久存在。
这实际上是 Perl 哲学和 Python 哲学之间的主要区别之一。Perl 为你提供了很多不同的做事方式,这使得读者更难理解,因为如果你在编写代码,你只需要知道你知道什么——你只需要知道一种做你想做的事情的方式。但是,如果你在阅读,你需要知道一切才能真正读懂它。我的意思是,这与理解像英语这样的语言没有什么不同。我的被动词汇,即当人们对我说话时我可以理解的词汇,比我的主动词汇——我可以自己实际使用的词汇——要大得多。由于我不是以母语人士的身份长大的,我的主动词汇量比典型的母语人士要小。对于普通的程序员来说,你也会遇到同样的情况,你知道足够的语言来满足你自己的编程需求。但是,如果其他人向你展示他写的东西,他可能知道一个不同的子集,并且对于你们都需要知道的基本 600 个单词才能勉强应付过去,没有达成一致。通常,运行一个程序并查看结果,然后用你熟悉的习语重现代码并开始进行更正,比尝试理解代码的工作原理并进行更改要快得多。
菲尔:这类似于 IBM 对 PL/1 所做的事情,PL/1 是终极语言。如果你进入一家同时拥有 FORTRAN 和 Cobol 程序员的公司,你说,“你们都将用 PL/1 编写代码”,那么 Cobol 程序员用 PL/1 编写 Cobol,而 FORTRAN 程序员用 PL/1 编写 FORTRAN!
吉多:而 Algol 程序员用 PL/1 编写 Algol。
菲尔:Python 似乎开始在 Web 开发等方面被认真对待。Python 在学术界是否被认真对待?我想我的意思是相对于 Perl 而言,因为据我所见,Perl 并没有。
吉多:我会说 Python 正在被更认真地对待。有些语言设计者不赞成某些捷径,或者 Python 没有静态类型,或者还有其他语言和 Python 一样好,并且再次借鉴了这些语言的所有优点。
菲尔:什么语言?
吉多:例如,有些人认为 Dylan——我认为它具有非常学术的味道——是 Python 的一切,而且更多。
菲尔:Dylan?我从没听说过。
吉多:嗯,这正是 Dylan 的问题。我不知道,但我认为它最初是 LISP 变体,带有一种替代语法。该语法是故意非 LISP 风格的,目的是不吓跑所有尚未被 LISP 洗脑的人,因为 LISP 是世界上形象问题最大的编程语言之一。
菲尔:我在大学里不得不学习 LISP,我可以理解!手动输入括号不是我最喜欢的事情。
吉多:我喜欢 LISP 的很多概念,但我强烈反对他们处理语法的方式,这恰好与 Tcl 大致相同。也就是说,没有语法,或者语法非常简单,你必须在语法之外做其他一切。
菲尔:Tcl 在学术界有所作为吗?
吉多:我有点脱离学术界,所以我不太清楚。我不这么认为。我的意思是,我最近与之交谈过的一两个人来自学术界,他们非常强烈地认为 Python 是一种不错的语言,而 Perl 和 Tcl 则不是。
菲尔:对我来说,Python 最缺少的是书籍。要学习这门语言,基本上只有三本书:两本 O'Reilly 书和你写的那本……
吉多:我没写那本!
菲尔:好吧,你没写的那本书!
吉多:亚伦·沃特斯写的。我最初应该写一章。当我度假回来准备写那一章时,他们已经更改了截止日期并开始印刷了!所以我认为,嗯,很好!直到今年年初,书籍显然太少了。现在,Learning Python 是我最喜欢的 Python 书籍。
菲尔:嘿!这也是我的最爱!
吉多:是的。我认为我们将看到其他几家出版商将开始出版 Python 书籍。我的意思是,我一直在与作者交谈,而且我实际上成功地惹恼了一个人,因为我不喜欢他发送给我的章节。但其他所有人都相处得相当好。而我惹恼的那个人无论如何都会继续,所以祝他好运。到今年年底可能会再出版五六本书。马克·哈蒙和安迪·罗宾逊几乎完成了另一本 O'Reilly Python 书籍,专门针对 Windows 用户。戴夫·比兹利是一位在学术界扎根的人——芝加哥大学的助理教授——已经完成写作并提交了一本针对有经验的程序员的快速 Python 书籍的手稿。它包含了您快速学习该语言并开始使用它所需的所有信息。本书中有一个很大的附录,几乎是整个库参考手册。所有相关内容都在 New Riders 系列中。我认为有两个人正在编写关于带有 Tkinter 的 Python 书籍。还有另一本快速 Python 入门书,以及计划编写一本 800 页左右的书,其中包含大量注释示例。因此,有很多东西即将问世,并且它们的目标用户范围更广。第一批出版的书籍试图成为每个人的所有东西,这有点困难。

吉多:JPython 确实很大,但我个人实际上并没有太多参与。我在 CNRI(国家研究倡议公司)一位受人尊敬的同事现在正在进行维护工作,此前吉姆·胡古宁(参见 https://pythonlang.cn/)和最初的作者已决定搬到西海岸。
菲尔:JPython 是一件非常棒的事情。如果 Java 真的像它希望的那样成功……
吉多:Java 是一种不错的语言,但它确实需要像 Python 这样的伙伴。我不得不承认,当吉姆·胡古宁提出这个想法时,我最初对此非常怀疑。我想,“哦,天哪!那会很慢!那是不值得的。”它确实有点慢,但并没有慢到无法使用的程度。我不得不推动吉姆在解释器初始化自身的方式中添加一些心理技巧。我认为当前版本会快速打印命令行、第一个提示,然后实际完成初始化。这样做的好处是,在您键入第一个命令所需的一秒左右的时间内,初始化完成,因此当您按下回车键时,您会立即得到响应。
菲尔:我在 1970 年为一个计算机科学系开发操作系统工作,当时每个人都在使用电传打字机。我们有一个基本的解释器,当您键入 run 时,基本解释器会打印出程序名称以及当前日期和时间。它这样做是为了掩盖它正在将其编译成字节码,然后才能运行的事实。同样的故事,但是当您在每秒 10 个字符的电传打字机上打印大约 50 个字符时,您有更多的时间。
吉多:嗯,这种技巧仍然有效,但 JPython 是它自己的世界。我认为它是唯一以这种特殊方式与 Java 集成的语言,您基本上拥有跨语言继承。您可以从 Python 类在 Java 中继承,反之亦然,并且您可以在每个方向覆盖方法。因此,使用它的人通常将其用作完全或几乎完全用 Java 编写的大型系统的扩展语言,他们需要提供一些最终用户程序能力。我认为 Object Domain 是一种产品,它是一种用于 Java 程序的 UML,您可以对 UML 对象进行各种操作。在屏幕的角落里有一个 Python 提示符——当菜单中的内容不足以提供足够的灵活性时,您可以直接在那里编写自己的 Python 代码并执行它。这就是 JPython 用作 Java 扩展语言的方式。这相当于人们一直在 C 或 C++ 应用程序中使用 CPython 所做的事情。但是对于 Java,实际上并没有太多这样的选择,而 Javascript 并没有在嵌入式 HTML 世界之外取得成功。
菲尔:我没有过多使用 Javascript。
吉多:它实际上是一种不错的语言。它没有 Python 拥有的整套面向对象的工具包,这是它的主要弱点。实际上,Javascript 和 Python 共享许多语法思想,语言的动态性也大致相同。这可能纯粹是巧合。
菲尔:在不久的将来,我们将开发一些需要本地用户以及基于 Web 的人机界面和数据库后端的软件。本地用户界面需要是半图形化的,并且击键次数最少。我们正在考虑使用 Python 和 MySQL 或 Postgres 等数据库。我们走在正确的轨道上,还是我们疯了?
吉多:有很多选择。我不知道您是否已经在该领域进行了任何研究,但我仍然最喜欢 Tkinter——它似乎是最流行的。它被称为事实上的标准。我喜欢它,因为它可以在 Windows、UNIX 和 Macintosh 之间移植。我认为唯一具有这三个平台的另一个选择是 WX Windows,这是一个基于 C++ 的大型产品。它曾经有一个相当糟糕的 Python 端口;我认为它已经全部重做了,我听说现在好多了。我自己从未使用过它,因为我对 Tk 界面非常满意。我也看到了其他好东西。我的一些同事刚刚开始使用 GTK,它看起来确实非常流畅;代码与 Tkinter 代码一样简洁。显然,GTK 到 Python 的端口正在积极维护中,这与其他一些产品不同。我认为有一个 KDE 或 Qt 端口不再维护。
菲尔:我们认为大多数 Tk 文档的最大问题是它附属于 Tcl,这是最容易混淆试图编写其他内容的人的方式。我想有一本书即将出版。
吉多:已经有两本书即将出版——我不知道确切的时间,所以甚至可能还要一年。我预计会比那早一点。与此同时,获取信息的最佳去处是 HOWTO 部分,或者在 python.org 站点上有一些资源指南,其中 Tkinter 实际上是主题之一,它基本上是指向您需要知道的所有其他内容的指针。Tkinter 的最佳文档是 Fredrick Lund 整理并在他的 Python 网站上发布的网页。
当我们设计 Tkinter 时,我们意识到我们不可能记录所有内容。当然不是记录所有语义。STK 正在发生变化,因为当我们开始 Tkinter 时,Tcl/Tk 正处于 7.3 左右的版本。我们知道 Tcl/Tk 将会发展,所以我们移植了大部分部件。我们设置了一个非常规则的结构,用于在 Tk 命令和 Tkinter 之间进行映射,以类的方式进行映射。因此,您可以准备一小组规则,说明如果它在 Tk 中看起来像 这样,那么它在 Python 中看起来像 这样。除此之外,您可以从标准的 Tcl/Tk 文档中学到很多信息。Tcl/Tk 有出色的手册页。每当您不确定 grep 命令的选项是什么,或者如何制作具有特定属性的按钮时,请在 Tk 文档中查找并应用映射——果然,它在 Python 世界中有效。
菲尔:太酷了。很可能这就是我们将要走的路。
吉多:我可以提供一条建议吗?我认为 Python、Perl、Tcl、Linux 和 Apache 成功的原因之一是它们具有很强的可扩展性。人们可以通过编写自己的小模块来解决自己的痛点,这样他们就不必打扰原始开发者,问“你能添加这个功能吗?”,这是每个 固定 系统最终都会遇到的问题。
菲尔:我完全同意。有太多软件是为了解决别人的问题而编写的,但实际上并没有解决,而营销部门负责解释为什么它确实解决了问题。在雷德蒙德有一家公司以完全做到这一点而闻名。
吉多:他们最近的产品实际上非常可扩展,但是当它们不可扩展时——那就很糟糕了。
菲尔:Python 社区是否准备好迎接一本杂志?
吉多:可能还没有。
菲尔:我也是这样告诉约翰·奥万特关于 Perl 社区的,但他不相信我!
吉多:好吧,那很好!对于这类事情,我总是很乐意被证明是错的。我们尝试过一本在线杂志,发行了一两期就结束了。
菲尔:是的,我看到了。
吉多:实际上,Python 社区比 Perl 社区小一个数量级。如果你看看这次会议上的 Python 人数与整体人数相比,这可能是一个数量级加上也许 2 倍的系数。所以我们需要成长。
菲尔:任何杂志的限制因素都是广告。当您购买订阅时,这笔钱用于支付邮政服务将杂志送到您手中。是广告收入支付了杂志的制作费用。我觉得 Python 处于一个实际上没有任何潜在广告商的地位,除了图书出版商。
吉多:没有多少人拥有 Python 产品。我的意思是,有很多人拥有在产品的某个角落使用 Python 的产品。也有很多人使用 Python,但不直接销售 Python 产品。我不知道您是否知道,工业光魔公司正在使用 Python。雅虎!收购了一家名为 411 的小公司,该公司拥有早期更成功的 Web 邮件应用程序之一,顺便说一句,该应用程序是用 Python 编写的。实际上,我认为这种情况至少发生过两次。我知道两个几乎相同的案例,一家小型初创公司非常快速地使用 Python 来原型化和发布一种同类产品中的第一个。他们是第一个将其推向市场的人,他们非常成功,以至于被一家大型组织收购,该组织正在寻找该领域的产品,但其努力尚未奏效。一旦它被吸收到那家大公司,通常会发生的事情是用 C++ 重写它。雅虎邮箱正在发生这种情况,主要是因为在经历了大约两年的经验之后,他们确定了功能的路线。现在他们有兴趣处理每周或每天获得的大约 80,000 名订阅者。他们也购买了新硬件,但您需要有效地使用新硬件,因此他们用 C++ 重写了代码。如果有人从头开始用 C++ 编写这些东西,他就永远不会推出产品!
菲尔:他们还在写!
吉多:没错!并且因为在最初的三个月左右的时间里,你要弄清楚你到底想要什么,你会多次重写这个东西,而这正是你真正需要非常高级的动态范围的地方。
菲尔:人们用 Python 进行原型设计并在 C++ 或其他半合理的语言中重写它有多常见?
吉多:我想说,对于那些取得巨大成功的事情来说,这很常见。很多地方最终都没有费心用 C++ 重写,即使他们总是将此作为其战略的一部分,因为原型工作良好,并且在许多情况下性能不是问题。
菲尔:当然,多年来,我们通过制造更快更便宜的硬件来解决性能问题。
吉多:多么美好的发展啊!
菲尔:我记得 UCSD P 系统,除了 Pascal 之外,它并不是世界语言的救星。如果 UCSD P 系统以当今硬件的速度出现,它将是一个惊人的成功,因为没有人会在意。它会解决问题。
吉多:我设法只关注了通用自由软件世界的一小部分。但我经常惊讶地看到人们发布一个小型 C 程序——也许一千行——他们花了很多时间编写,并且做得很好。我想,“我的天哪!他们为什么要费心用 C 编写它?这里的性能需求是什么?”例如,如果这是用来管理您的日历的东西,您为什么要费心用 C 编写它呢?
菲尔:好了,这就是我要挑剔你的全部内容了。感谢您抽出时间与我交谈。