1994 年末,一群来自美国各地的程序员聚在一起,讨论他们的新式秘密武器。
这是 Python 有史以来的第一次研讨会,有 20 多名开发者参加,Barry Warsaw 是这些与会者当中的一员。他回忆起那些早期 Python 用户的兴奋之情:
我记得有一个人说,“你不要跟别人说我来参加这个研讨会,因为使用 Python 就像拥有了某种竞争优势”。在他们看来,Python 就是他们的秘密武器,不是吗?
在早期的 Python 研讨会上,Warsaw 就曾说过,Python 提供了一些东西,让代码编写变得更加简单,更容易完成编程任务。
他回忆道:“当我第一次接触 Python 时,我就知道它有一些特别之处。Python 的可读性不错,编写 Python 代码变成了一种乐趣”。
如今,人们对 Python 的热情已经远远超出了最初的开发者圈子。一些人预测,随着 Python 用户群的快速增长,它很快会成为世界上最流行的编程语言。每天有数以百万计的人使用 Python,用户群呈现出指数级的增长,几乎没有出现下降的迹象。
不管是专业的还是业余的开发人员,他们都在使用 Python 处理大大小小的任务,特别是 Web 开发人员、数据科学家和系统管理员。今年出现的第一批黑洞图片就是用 Python 拼接出来的。
Python 在一些世界知名的组织中扮演着关键角色,比如,Netflix 用 Python 向全球 1 亿多户家庭提供流媒体视频,Instagram 用 Python 实现图片分享,NASA 借助 Python 来探索太空。
Python 的早年时期
从某些方面看,Python 的崛起就像那个英国喜剧团体(Python 因这个喜剧团体而得名)一样不寻常。在 Python 自己的领域,这门编程语言也变得越来越出名和越来越有影响力。
Python 原先是荷兰程序员 Guido van Rossum 的一个个人项目。20 世纪 80 年代末,van Rossum 在荷兰国家数学和计算机科学研究中心的 CWI 部门开发分布式系统。由于对已有的编程语言感到十分失望,他决定开发一门新的语言——一门既易于使用功能又强大的语言。
对于外行来说,自己开发一门编程语言就像是“造飞机”一样,但当时 30 多岁的 van Rossum 在某些方面已经很有造诣。他花了三年时间与 CWI 的一个团队合作,一起开发了 ABC(一种解释型编程语言),他知道开发一个可以执行指令的解释器需要些什么,以及一门新的编程语言需要哪些语法构建块。
对于当时的 van Rossum 来说,使用仅有的几种编程语言完成任何一件事情都显得很困难。他正在开发的 Amoeba 分布式计算系统要求他使用 C 语言 或 Unix shell,但这两种语言都有很大的局限性。C 语言要求开发人员自己手动管理内存,容易埋下潜在的 bug,而且还缺少可重用的代码库。开发人员想要完成日常任务,需要在每个新项目中重新发明轮子。Unix shell 存在另外一个问题——它虽然为日常任务提供了一些实用程序,但它们的运行速度太慢,无法处理复杂的逻辑。
这些语言对开发人员造成的限制如此之大,以至于在 van Rossum 看来,他自己创建的这门解释型语言——从 ABC 语言借用了一些特性——似乎是最好的选择。
van Rossum 回忆道:“我当时在想,为什么不自己开发一门语言呢?我完全可以借鉴 ABC 的一些想法,并将项目的规模缩小一些,把原先需要花三年时间完成的东西缩短至三个月内,让它变成我自己的个人项目。于是,Python 诞生了”。
1989 年末,van Rossum 开始认真地开发这门语言,并借用了他最喜欢的喜剧团体“Monty Python”的名字,又因为与蛇有关系,后来就有了那个盘绕的巨蟒的 logo。
他说:“当时我的社交生活并不丰富。除了看电视就是写代码,有时候也会同时做这两件事”。
虽然名义上 van Rossum 是为了更好地完成日常工作而开发 Python,但他承认他的动力更多的是来自于自己开发一门语言所要面临的挑战。
他说:“当时我也不知道 Python 是否真的会让我的工作变得更有效率。在某种程度上,我真的很喜欢这种可以自己完成一个大项目的想法,并且可以按照我想要的方式来设计和实现。在我看来,编程是件有趣的事情”。
对于一般人而言,自己开发一门编程语言可能是件很不寻常的事情,但像 van Rossum 这样的例子并非独有。在 20 世纪 80 年代末,各种主要编程语言的出现都是因为当时有限的工具无法满足开发者的需求。Larry Wall 曾经说过,他之所以创建 Perl,是因为其他语言很难解决他的问题,而且他是一个“懒惰、不耐烦和狂妄自大”的人。类似地,为了找到可用于构建集成电路交互工具的语言才,John Ousterhout 设计了 Tcl。
三个月之后,van Rossum 做出了可运行的 Python 原型。
他说:“虽然现在的 Python 有很多在当时并不存在的抽象特性,但语言本身仍然始终如一”。
“那时,Python 已经具备了解析器和运行语言所需的基本组件。第一个可运行的 Python 程序放到现在仍然可以运行”。它们的函数定义是一样的,缩进是一样的,字典和元组的创建语法是一样的,交互式提示符也是一样的。
当他的两个同事开始使用这门语言处理日常任务时,van Rossum 并没有指望它会流行起来。因为他知道,在互联网时代到来之前,让一门编程语言流行起来有多么困难。
在今天,只需要点击几下鼠标就可以把一款软件分享给全世界,但在上世纪 80 年代,这是一件非常费力的事情。van Rossum 回忆起当时推广 ABC 遇到的困难:
“我记得大约在 1985 年,我第一次去美国度假。那是我第一次去美国,我的行李箱里装了一沓磁带”。
当时可用的通信方式只有电子邮件,而电子邮件并不适合用来传播源代码。他从电子邮件里拿到了对 ABC 感兴趣的人的地址和电话号码,然后挨家挨户送磁带。尽管他很卖力地给用户送磁带,都没能让 ABC 真正流行起来。
他说:“尽管 ABC 提供了很多优秀的特性,但我们在 ABC 的推广方面并没有取得很大进展”。不过,随着互联网革命进程的演进,Python 的推广工作变得容易得多,他不用再拖着装满磁带的行李箱到处跑了。
1991 年,van Rossum 通过 alt.sources 新闻组向全世界发布了 Python。这在当时基本上算是一种开源许可协议,比”开源许可协议“这个术语本身早了六年出现。虽然当时的 Python 解释器仍然需要将 21 个单独的部分连接成一个压缩文件,并需要连夜从 Usenet 网络上下载下来,但与几年前线下送磁带的方式相比,它仍然要高效得多。
他说:“我希望 Python 可以取得成功,毕竟之前我做的另一个东西基本上以失败告终”。
van Rossum 说,在很长一段时间之后,他才知道 Python 的用户群在增长。渐渐地,他意识到 Python 的发展势头正在形成,在与 Python 社区进行了一段时间的交流之后,他知道,Python 成功了。
“这个发现来得非常缓慢。在发布了第一个开源版本之后,我制定了一个新的发布周期,并与 Python 社区频繁交流。我们感觉这是一件很了不起的事情”。
Python 为什么会赢
Python 在 20 世纪 90 年代初期到中期开始受到关注,Python 的时代到来了,这让 van Rossum 感到震惊。
van Rossum 相信,被 Python 吸引过来的开发者,他们转向 Python 的原因与他当初创建 Python 的原因是一样的。他们需要一门高级的脚本语言,能够在易用性和功能之间取得平衡。他们希望能够结束在 C 语言中手动管理内存、在开始新项目时需要为重复任务重新实现代码的日子。
Warsaw 说,Python 在可用性和功能之间取得了平衡——在 20 世纪 90 年代早期,任何一门主流编程语言都没能提供这种平衡。”我写过很多 Perl、Tcl 和 C 代码,感觉它们一点都不好玩。Python 一出现,我就想,‘哇,它让编程变得更有趣了’”。
不管是过去还是现在,Python 提供的都是清晰而明确的语法,它使用缩进将代码分组成块,让开发人员更容易阅读和理解代码。
Gartner 公司的研发总监 Fintan Ryan 说,无论是现在还是在上世纪 90 年代,Python 清晰明了的风格都在吸引开发者方面起到了重要作用,尽管通过缩进来达到这种效果在开发者当中存在分歧。”Python 的语法非常简洁。你也可以在其他语言中实现缩进,但 Python 已经自动实现了。有些程序员喜欢这种缩进方式,有些则不喜欢”。
1994 年,Barry Warsaw 在第一次 Python 研讨会上
Python 强调代码的简洁和可读性,这并非偶然。van Rossum 曾公开表示,编程语言不仅要告诉计算机该做什么,还要便于在开发者之间传递思想。
Ryan 说,除了可读性之外,Python 很早就内置了一些通用的功能,这让 Python 从其他语言中脱颖而出。“你从一开始就可以使用某些功能,比如类和异常处理。Python 还提供了对 lambda、map 和 filter 等函数的支持,这些东西在很多情况下都非常有用”。
如果 80 年代末的主流编程语言能够再好一点,或许就不会给 Python 留有机会。van Rossum 开发 Python 的动机之一就是因为 Perl 与他在 CWI 工作时使用的 Amoeba 分布式计算系统不兼容。他说:“Python 的幸运之处在于 Perl 不能被移植到 Amoeba。如果 Perl 可以被移植到 Amoeba,我就不会想要自己去开发一门语言”。
尽管 Python 在发布后吸引了一批铁杆粉丝,但在 20 世纪 90 年代,Python 在编程语言方面仍然处于劣势。van Rossum 说,Python 的竞争对手是 Tcl/Tk 和 Perl,这两种语言的目标与 Python 是一样的,即简单易用且功能强大。
他说:“上世纪 90 年代,在前三大编程语言中,Perl 无疑是第一名,Tcl/Tk 是第二名,而 Python 则是第三”。
Stack Overflow 开发者报告显示,从开发者活跃度方面看,Python 是增长最快的编程语言,而 Perl 在缩水,它甚至都没有出现在最新的 Stack Overflow 开发者报告中。