Python之父宣布退休,但Python仍在吞噬世界,未来如何发展?
10 月 30 日,Python 之父 Guido 大牛宣布退休,离开 Dropbox。他发推文说,“这件事感觉既苦涩又甜蜜:苦涩的是,我马上要离开 Dropbox,现在已经退休;甜蜜的是,在 Dropbox 做工程师期间,我学到很多,比如类型标注就来自这段经历。我会非常怀念在这里工作的日子。”
Python 正在吞噬世界
如今,人们对 Python 的热情已经远远超出了最初的开发者圈子。一些人预测,随着 Python 用户群的快速增长,它很快会成为世界上最流行的编程语言。每天有数以百万计的人使用 Python,用户群呈现出指数级的增长,几乎没有出现下降的迹象。
不管是专业的还是业余的开发人员,他们都在使用 Python 处理大大小小的任务,特别是 Web 开发人员、数据科学家和系统管理员。今年出现的第一批黑洞图片就是用 Python 拼接出来的。
Python 在一些世界知名的组织中扮演着关键角色,比如,Netflix 用 Python 向全球 1 亿多户家庭提供流媒体视频,Instagram 用 Python 实现图片分享,NASA 借助 Python 来探索太空。
Python 的早年时期
Python 原先是荷兰程序员 Guido van Rossum 的一个个人项目。20 世纪 80 年代末,van Rossum 在荷兰国家数学和计算机科学研究中心的 CWI 部门开发分布式系统。由于对已有的编程语言感到十分失望,他决定开发一门新的语言——一门既易于使用功能又强大的语言。
Python 之父 Guido van Rossum
对于当时的 van Rossum 来说,使用仅有的几种编程语言完成任何一件事情都显得很困难。他正在开发的 Amoeba 分布式计算系统要求他使用 C 语言或 Unix shell,但这两种语言都有很大的局限性。C 语言要求开发人员自己手动管理内存,容易埋下潜在的 bug,而且还缺少可重用的代码库。开发人员想要完成日常任务,需要在每个新项目中重新发明轮子。Unix shell 存在另外一个问题——它虽然为日常任务提供了一些实用程序,但它们的运行速度太慢,无法处理复杂的逻辑。
这些语言对开发人员造成的限制如此之大,以至于在 van Rossum 看来,他自己创建的这门解释型语言——从 ABC 语言借用了一些特性——似乎是最好的选择。
van Rossum 回忆道:“我当时在想,为什么不自己开发一门语言呢?我完全可以借鉴 ABC 的一些想法,并将项目的规模缩小一些,把原先需要花三年时间完成的东西缩短至三个月内,让它变成我自己的个人项目。于是,Python 诞生了”。
1989 年末,van Rossum 开始认真地开发这门语言,并借用了他最喜欢的喜剧团体“Monty Python”的名字,又因为与蛇有关系,后来就有了那个盘绕的巨蟒的 logo。
他说:“当时我也不知道 Python 是否真的会让我的工作变得更有效率。在某种程度上,我真的很喜欢这种可以自己完成一个大项目的想法,并且可以按照我想要的方式来设计和实现。在我看来,编程是件有趣的事情”。
三个月之后,van Rossum 做出了可运行的 Python 原型。
他说:“虽然现在的 Python 有很多在当时并不存在的抽象特性,但语言本身仍然始终如一”。
“那时,Python 已经具备了解析器和运行语言所需的基本组件。第一个可运行的 Python 程序放到现在仍然可以运行”。它们的函数定义是一样的,缩进是一样的,字典和元组的创建语法是一样的,交互式提示符也是一样的。
当他的两个同事开始使用这门语言处理日常任务时,van Rossum 并没有指望它会流行起来。因为他知道,在互联网时代到来之前,让一门编程语言流行起来有多么困难。
在今天,只需要点击几下鼠标就可以把一款软件分享给全世界,但在上世纪 80 年代,这是一件非常费力的事情。
1991 年,van Rossum 通过 alt.sources 新闻组向全世界发布了 Python。这在当时基本上算是一种开源许可协议,比”开源许可协议“这个术语本身早了六年出现。虽然当时的 Python 解释器仍然需要将 21 个单独的部分连接成一个压缩文件,并需要连夜从 Usenet 网络上下载下来,但与几年前线下送磁带的方式相比,它仍然要高效得多。
他说:“我希望 Python 可以取得成功,毕竟之前我做的另一个东西基本上以失败告终”。
van Rossum 说,在很长一段时间之后,他才知道 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 提供的都是清晰而明确的语法,它使用缩进将代码分组成块,让开发人员更容易阅读和理解代码。
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 开发者报告中。
下图显示了这种爆炸式的增长。近年来,Stack Overflow 网站上与 Python 相关的问题的增长速度远远快于其他编程语言。
那么,Python 是如何超越昔日的竞争对手的呢?又如何解释这两门语言之间截然不同的命运呢?van Rossum 认为,这与代码库在达到一定规模后的维护难易程度有关。他说,“从人们的经验来看,Perl 适合用来编写行数较少的脚本,但如果你的主干代码超过了 500 行,除此之外还有数千行分支代码,那么在 Perl 中维护这些代码就需要遵循很多原则。而在 Python 中,你不需要遵循那么多原则,代码仍然具有很好的可读性和可维护性”。
Python 一方面简单易用,一方面又健壮到可以用来开发大型的应用程序,这两个因素的组合正是 Python 在上世纪 90 年代取得成功的原因。
“一些互联网开发者想要开发越来越大型的应用程序,而且他们意识到用 Python 开发应用程序要比用 C 语言、C++ 或 Java 容易得多”。
随着 Python 在 20 世纪 90 年代逐渐流行起来,当时还在 CWI 工作的 van Rossum 发现他创造的这门编程语言越来越多地把他与来自世界各地的人联系在一起。
Python 与 Web
20 世纪 90 年代中期,Python 出现了新的应用场景,从音频录制和播放到首次涉足 Web 开发,而 Web 开发后来成为 Python 的主要应用场景。
van Rossum 说,“Web 开发很重要,它对我来说也是一件非常有趣的事情”。Python 开始与 Perl 和 Shell 脚本一起被用于 Web 服务器后端开发。“你可以创建动态网页,这也是我最喜欢的 Python 应用场景之一”。
Gartner 公司的 Ryan 说,上世纪 90 年代,Python 之所以能够在开发人员当中流行起来,主要是因为它可以用来快速地创建强大的脚本。“作为一门功能非常强大的脚本语言,它降低了很多用户的使用门槛”。Ryan 还说,这门语言非常灵活,容易上手,因此吸引了很多具备不同程度技术专长的用户。
1994 年,Python 引起了 Michael McLay 的注意。McLay 当时在美国国家标准局(NBS)担任高级职位,现在在美国国家标准与技术研究所(NIST)。McLay 当时在想如何也让国家统计局的科学家们从 Python 的易用性中得到一些好处。在 van Rossum 看来,国家统计局的科学家们“需要处理大量数据,但他们都不擅长编程”。
为了在 NBS 中推广 Python,McLay 邀请当时还在荷兰 CWI 工作的 van Rossum,让他到 NIST 做了两个月的客座研究员。这一举动成了 Python 未来发展的催化剂,也是 van Rossum 人生的一次重要转变。
van Rossum 和 Warsaw、Roger Masse 在第一次 Python 研讨会上
正是在这个时候,他们在国家统计局的办公室里举行了第一个 Python 研讨会。van Rossum、Barry Warsaw 和其他早期的 Python 爱好者聚在一起,分享他们正在用 Python 做什么,以及对 Python 未来发展的期望。
也就是在这间办公室里,van Rossum 认识了 Bob Kahn。Kahn 是 TCP/IP 协议的作者。
那次会面给 van Rossum 带来了一份工作邀请——与 Kahn 一起在美国国家研究创新联合会 (CNRI) 工作。CNRI 是一个位于弗吉尼亚州的非盈利研究组织,专注于网络技术的战略发展和研究。
自 1991 年 Python 公开发行以来,Python 用户群有了显著的增长。到了 90 年代后期,Python 吸引了大量来自全球各地的用户。在此期间,随着 Python 软件基金会(PSF,于 2001 年正式成立)前身的组建,Python 语言的管理工作开始走向规范化。随着社区的发展,两年一度的 Python 研讨会逐渐演变成更大型的年度活动,并最终演变成 PSF 的年度 PyCon,直到今天仍然很受欢迎。
到了 21 世纪,Python 用户群越来越壮大,早期的 Python 用户担心如果 van Rossum 发生意外会对 Python 造成什么样的影响。
不管怎样,van Rossum 继续扮演着 Python 的核心角色。他就是 Python 的核心,这种想法从未消失,有人称他是 Python“仁慈的终身独裁者”(BDFL)。这个半开玩笑式的头衔流传了多年。
van Rossum 说:“在很长一段时间内,我承受住了压力,还培养出了项目管理技能。我将很多事情委派给别人,让他们按照自己的想法做事”。
实际上,van Rossum 确立的 Python 开放本质(在社区核心开发者之间公开讨论)是 Python 成功的决定性因素。
Python 的演变
在这期间,Python 有了飞跃式的发展。2008 年,Python 3.0 发布,让 Python 成为一门现代化的编程语言。近来,Python 的管理方式也发生了重大变化。
这些变化是去年发生的,当时 van Rossum 卸掉了 BDFL 的头衔,原因是人们对 PEP572 中引入的赋值表达式存在分歧。
虽然赋值表达式的引入是为了更高效地编写代码,但 van Rossum 在网上遭到了反对者的严厉批评,一些人认为这一提案会降低代码的可读性和可维护性。
van Rossum 说,虽然他已经习惯了围绕新功能而展开的争论,但这次有人诋毁他,他们的态度十分强硬,甚至有人对他进行人身攻击,所以他决定辞职。
他说:“那些在技术上持不同意见的人在社交媒体上开始抱怨我破坏了 Python 的决策流程,或者说我犯了一个严重的错误。我感到非常失望,我感觉受到了来自背后的攻击”。
“过去,在决定是否要对 Python 做出变更或改进时,一群核心开发人员会讨论这件事的利弊。他们会得出一个明确的共识,如果结果不明确,我会在脑子里反复考虑,然后做出决定。在 PEP572 这个提案上,尽管它存在争议,但我还是选择了“是的,我想做这个”,但人们并不买账。
“这并不是一种反叛,但我觉得我没有得到核心开发者社区足够多的信任”。
他认为,Python 的争议方式之所以发生变化,部分原因在于现在有太多的人使用 Python。
“Python 社区的规模越来越大,这可能也是原因之一。当然,要达成任何形式的共识都很困难,因为不管你做出什么样的决定,总会有一些持不同意见的人”。
Python 核心开发者 Mariatta Wijaya
今年早些时候,负责维护 CPython 解释器的核心开发人员成立了一个指导委员会,用来监督 Python 未来的发展。成员包括 van Rossum、Warsaw 以及其他核心开发者 Brett Cannon、Carol Willing 和 Nick Coghlan。
Warsaw 说,当一门编程语言的用户群以如此快的速度增长,使用这种方式来管理语言的发展是很有必要的。
他说,“我认为 van Rossum 真的把所有事情都扛在自己的肩上了”。
“25 年前,当 Python 还只是一门小众编程语言的时候,社区规模也小得多,van Rossum 可能还能自己扛,但即使是这样,他一个人的工作量也很大。我认为,考虑到他个人的健康以及社区的参与度问题,将这些重担分摊到五个人身上会更好”。
Warsaw 说,在每发布一个 Python 新特性版本后都会进行一次指导委员会选举,为建立下一代 Python 语言核心领导层做好准备。
他说:“如果 Python 在 25 年后还能保持常青,那时候应该不是 van Rossum 和我在管事了”。
指导委员会的成立也受到了 Python 核心开发者社区的欢迎。核心开发人员 Mariatta Wijaya 说,这一举动感觉像是朝着正确的方向迈出了一步。她说:“对我来说,指导委员会比让一个人决定所有事情要好得多——这是一个巨大的责任和负担。这是一个好迹象,它意味着社区将会有更多的输入”。
Python 的未来
虽然 Python 继续以惊人的速度吸引新用户,但社区内的一些人也看到了未来要面临的挑战。如果 Python 想要保持常青,就要不断进化。
在今年的 Python 语言峰会上,BeeWare 联合创始人 Russell Keith-Magee 说,如果对移动和 Web 平台的支持得不到改善,Python 将面临“生存危机”。
他说:“手机和平板电脑对市场的渗透程度是台式机和笔记本电脑从未达到过的,但整个社区都没有一个关于如何在这些设备上使用 Python 的案例。那么,当有一天笔记本电脑逐渐成为小众设备时,Python 又将面临怎样的窘境?”
他指出了 Python 的一些问题,比如,Python 还不支持在非 x86 硬件平台上编译代码,Python 的测试套件很容易在移动和 Web 平台上崩溃,Python 应用程序的体积太大,在 Android、Windows 和 Web 平台上开发 GUI 代码时需要使用 asyncio 库,而这需要做额外的工作,标准库中的很多模块与 CPython 之外的解释器不兼容。
Warsaw 说,Keith-Magee 提出了很多很好的观点,并认为Python 需要与新的平台——手机、平板电脑以及 Web 技术(如 WebAssembly)保持接轨,这点很重要。
Warsaw 说,“目前 Python 在这方面并没有出彩的表现”,他希望 iPhone 或 Android 手机也能下载到使用 Python 开发的应用程序,而用户甚至都不知道“原来它们是用 Python 开发的”。
现代处理器芯片的核心数量在不断增长(英特尔最新的服务器处理器核数已经达到了 48 个),Warsaw 也希望Python 能够更好地让任务运行在多个处理器核心上。
Warsaw 说:“这些功能不会出现在 Python 3.8 中,但或许会在 3.9 中加入。我觉得我们将在未来两到两年半的时间内看到这些功能。我真的很高兴 Eric 能够继续做下去,这是一项非常重要的工作”。
Python 社区正在对标准库进行现代化。最近发布了一项提案,建议将过时的模块从标准库中移除。Python 的标准库通常被认为是 Python 的优势所在,因为它被用来处理很多常见任务,这也就是为什么人们都说 Python 有“内置电池”。但在今年的 Python 语言峰会上,有人提出了这样的一个问题:如果人们能够从 PyPI 自行选择模块,而不是使用内置的标准库,这样是否会更好?
还有一个问题是,Python 指导委员会的成员组成能否更好地反映 2019 年 Python 用户群的多样性?
Warsaw 说,尽管有一个“仁慈的独裁者”在掌管一切,但近年来,有很多有关 Python 发展的理念来自于社区。
他说:“这些想法真的是从社区中冒出来的,而不是自上而下推行的。”
简单的社区项目也能对 Python 产生巨大影响。比如,类型提示功能,Python 3.5 的一个特性,灵感来自于 2012 年一位博士生发起的 mypy 项目。类型提示可以执行可选类型检查,帮助开发人员发现某一类 bug,避免让这些 bug 渗透到程序中。
当有一群人同时开发一个大型的代码库时,这个额外的安全层就会非常有用。
Warsaw 说,“在我看来,这样可以让 Python 渗透到更大的组织中(比如 Instagram 基本上都在使用 Python 3)”。
此外,asyncio 是另一个社区在驱动 Python 发展的例子。
随着指导委员会的成立和空前的用户群增长,van Rossum 乐观地认为:“由社区驱动的 Python 进化”将继续取得“无与伦比的成功”。
他说,”一个拥有坚实的核心开发者的社区,现在有了一个新的管理制度,我想我们为 Python 语言的进化做好了更充分的准备”。
Warsaw 说,如果有人怀疑 Python 社区是否有能力继续为 Python 找到新的应用场景,那就让他们看看使用 Python 捕捉的第一张黑洞图片。
“Python 社区中总有那么一些人,我把他们看成是疯狂的 Python 科学家。他们总是在想,今天能把它做成这样,那么明天能不能走得更远?”