Python之父宣布退休,但Python仍在吞噬世界

编者按:本文来自微信公众号“ InfoQ ”(ID:infoqchina),作者InfoQ,36氪经授权发布。

10月30日,Python之父Guido大牛宣布退休,离开Dropbox。

他发推文说,“这件事感觉既苦涩又甜蜜:苦涩的是,我马上要离开Dropbox,现在已经退休;甜蜜的是,在Dropbox做工程师期间,我学到很多,比如类型标注就来自这段经历。我会非常怀念在这里工作的日子。”

Python正在吞噬世界

如今,人们对Python的热情已经远远超出了最初的开发者圈子。一些人预测,随着Python用户群的快速增长,它很快会成为世界上最流行的编程语言。每天有数以百万计的人使用Python,用户群呈现出指数级的增长,几乎没有出现下降的迹象。

不管是专业的还是业余的开发人员,他们都在使用Python处理大大小小的任务,特别是Web开发人员、数据科学家和系统管理员。今年出现的第一批黑洞图片就是用Python拼接出来的。

Python在一些世界知名的组织中扮演着关键角色,比如,Netflix用Python向全球1亿多户家庭提供流媒体视频,Instagram用Python实现图片分享,NASA借助Python来探索太空。

Python的早年时期

Python原先是荷兰程序员GuidovanRossum的一个个人项目。20世纪80年代末,vanRossum在荷兰国家数学和计算机科学研究中心的CWI部门开发分布式系统。由于对已有的编程语言感到十分失望,他决定开发一门新的语言——一门既易于使用功能又强大的语言。

Python之父GuidovanRossum

对于当时的vanRossum来说,使用仅有的几种编程语言完成任何一件事情都显得很困难。他正在开发的Amoeba分布式计算系统要求他使用C语言或Unixshell,但这两种语言都有很大的局限性。C语言要求开发人员自己手动管理内存,容易埋下潜在的bug,而且还缺少可重用的代码库。

开发人员想要完成日常任务,需要在每个新项目中重新发明轮子。Unixshell存在另外一个问题——它虽然为日常任务提供了一些实用程序,但它们的运行速度太慢,无法处理复杂的逻辑。

这些语言对开发人员造成的限制如此之大,以至于在vanRossum看来,他自己创建的这门解释型语言——从ABC语言借用了一些特性——似乎是最好的选择。

vanRossum回忆道:“我当时在想,为什么不自己开发一门语言呢?我完全可以借鉴ABC的一些想法,并将项目的规模缩小一些,把原先需要花三年时间完成的东西缩短至三个月内,让它变成我自己的个人项目。于是,Python诞生了”。

1989年末,vanRossum开始认真地开发这门语言,并借用了他最喜欢的喜剧团体“MontyPython”的名字,又因为与蛇有关系,后来就有了那个盘绕的巨蟒的logo。

他说:“当时我也不知道Python是否真的会让我的工作变得更有效率。在某种程度上,我真的很喜欢这种可以自己完成一个大项目的想法,并且可以按照我想要的方式来设计和实现。在我看来,编程是件有趣的事情”。

三个月之后,vanRossum做出了可运行的Python原型。

他说:“虽然现在的Python有很多在当时并不存在的抽象特性,但语言本身仍然始终如一”。

“那时,Python已经具备了解析器和运行语言所需的基本组件。第一个可运行的Python程序放到现在仍然可以运行”。它们的函数定义是一样的,缩进是一样的,字典和元组的创建语法是一样的,交互式提示符也是一样的。

当他的两个同事开始使用这门语言处理日常任务时,vanRossum并没有指望它会流行起来。因为他知道,在互联网时代到来之前,让一门编程语言流行起来有多么困难。

在今天,只需要点击几下鼠标就可以把一款软件分享给全世界,但在上世纪80年代,这是一件非常费力的事情。

1991年,vanRossum通过alt.sources新闻组向全世界发布了Python。这在当时基本上算是一种开源许可协议,比”开源许可协议“这个术语本身早了六年出现。虽然当时的Python解释器仍然需要将21个单独的部分连接成一个压缩文件,并需要连夜从Usenet网络上下载下来,但与几年前线下送磁带的方式相比,它仍然要高效得多。

他说:“我希望Python可以取得成功,毕竟之前我做的另一个东西基本上以失败告终”。

vanRossum说,在很长一段时间之后,他才知道Python的用户群在增长。渐渐地,他意识到Python的发展势头正在形成,在与Python社区进行了一段时间的交流之后,他知道,Python成功了。

Python为什么会赢

Python在20世纪90年代初期到中期开始受到关注,Python的时代到来了,这让vanRossum感到震惊。

vanRossum相信,被Python吸引过来的开发者,他们转向Python的原因与他当初创建Python的原因是一样的。他们需要一门高级的脚本语言,能够在易用性和功能之间取得平衡。他们希望能够结束在C语言中手动管理内存、在开始新项目时需要为重复任务重新实现代码的日子。

Warsaw说,Python在可用性和功能之间取得了平衡——在20世纪90年代早期,任何一门主流编程语言都没能提供这种平衡。”我写过很多Perl、Tcl和C代码,感觉它们一点都不好玩。Python一出现,我就想,‘哇,它让编程变得更有趣了’”。

不管是过去还是现在,Python提供的都是清晰而明确的语法,它使用缩进将代码分组成块,让开发人员更容易阅读和理解代码。

1994年,BarryWarsaw在第一次Python研讨会上

Python强调代码的简洁和可读性,这并非偶然。vanRossum曾公开表示,编程语言不仅要告诉计算机该做什么,还要便于在开发者之间传递思想。

Ryan说,除了可读性之外,Python很早就内置了一些通用的功能,这让Python从其他语言中脱颖而出。“你从一开始就可以使用某些功能,比如类和异常处理。Python还提供了对lambda、map和filter等函数的支持,这些东西在很多情况下都非常有用”。

如果80年代末的主流编程语言能够再好一点,或许就不会给Python留有机会。vanRossum开发Python的动机之一就是因为Perl与他在CWI工作时使用的Amoeba分布式计算系统不兼容。他说:“Python的幸运之处在于Perl不能被移植到Amoeba。如果Perl可以被移植到Amoeba,我就不会想要自己去开发一门语言”。

尽管Python在发布后吸引了一批铁杆粉丝,但在20世纪90年代,Python在编程语言方面仍然处于劣势。vanRossum说,Python的竞争对手是Tcl/Tk和Perl,这两种语言的目标与Python是一样的,即简单易用且功能强大。

他说:“上世纪90年代,在前三大编程语言中,Perl无疑是第一名,Tcl/Tk是第二名,而Python则是第三”。

StackOverflow开发者报告显示,从开发者活跃度方面看,Python是增长最快的编程语言,而Perl在缩水,它甚至都没有出现在最新的StackOverflow开发者报告中。

下图显示了这种爆炸式的增长。近年来,StackOverflow网站上与Python相关的问题的增长速度远远快于其他编程语言。

那么,Python是如何超越昔日的竞争对手的呢?又如何解释这两门语言之间截然不同的命运呢?vanRossum认为,这与代码库在达到一定规模后的维护难易程度有关。

他说,“从人们的经验来看,Perl适合用来编写行数较少的脚本,但如果你的主干代码超过了500行,除此之外还有数千行分支代码,那么在Perl中维护这些代码就需要遵循很多原则。而在Python中,你不需要遵循那么多原则,代码仍然具有很好的可读性和可维护性”。

Python一方面简单易用,一方面又健壮到可以用来开发大型的应用程序,这两个因素的组合正是Python在上世纪90年代取得成功的原因。

“一些互联网开发者想要开发越来越大型的应用程序,而且他们意识到用Python开发应用程序要比用C语言、C++或Java容易得多”。

随着Python在20世纪90年代逐渐流行起来,当时还在CWI工作的vanRossum发现他创造的这门编程语言越来越多地把他与来自世界各地的人联系在一起。

Python与Web

20世纪90年代中期,Python出现了新的应用场景,从音频录制和播放到首次涉足Web开发,而Web开发后来成为Python的主要应用场景。

vanRossum说,“Web开发很重要,它对我来说也是一件非常有趣的事情”。Python开始与Perl和Shell脚本一起被用于Web服务器后端开发。“你可以创建动态网页,这也是我最喜欢的Python应用场景之一”。

Gartner公司的Ryan说,上世纪90年代,Python之所以能够在开发人员当中流行起来,主要是因为它可以用来快速地创建强大的脚本。“作为一门功能非常强大的脚本语言,它降低了很多用户的使用门槛”。Ryan还说,这门语言非常灵活,容易上手,因此吸引了很多具备不同程度技术专长的用户。

1994年,Python引起了MichaelMcLay的注意。McLay当时在美国国家标准局(NBS)担任高级职位,现在在美国国家标准与技术研究所(NIST)。McLay当时在想如何也让国家统计局的科学家们从Python的易用性中得到一些好处。在vanRossum看来,国家统计局的科学家们“需要处理大量数据,但他们都不擅长编程”。

为了在NBS中推广Python,McLay邀请当时还在荷兰CWI工作的vanRossum,让他到NIST做了两个月的客座研究员。这一举动成了Python未来发展的催化剂,也是vanRossum人生的一次重要转变。

vanRossum和Warsaw、RogerMasse在第一次Python研讨会上

正是在这个时候,他们在国家统计局的办公室里举行了第一个Python研讨会。vanRossum、BarryWarsaw和其他早期的Python爱好者聚在一起,分享他们正在用Python做什么,以及对Python未来发展的期望。

也就是在这间办公室里,vanRossum认识了BobKahn。Kahn是TCP/IP协议的作者。

那次会面给vanRossum带来了一份工作邀请——与Kahn一起在美国国家研究创新联合会(CNRI)工作。CNRI是一个位于弗吉尼亚州的非盈利研究组织,专注于网络技术的战略发展和研究。

自1991年Python公开发行以来,Python用户群有了显著的增长。到了90年代后期,Python吸引了大量来自全球各地的用户。在此期间,随着Python软件基金会(PSF,于2001年正式成立)前身的组建,Python语言的管理工作开始走向规范化。随着社区的发展,两年一度的Python研讨会逐渐演变成更大型的年度活动,并最终演变成PSF的年度PyCon,直到今天仍然很受欢迎。

到了21世纪,Python用户群越来越壮大,早期的Python用户担心如果vanRossum发生意外会对Python造成什么样的影响。

不管怎样,vanRossum继续扮演着Python的核心角色。他就是Python的核心,这种想法从未消失,有人称他是Python“仁慈的终身独裁者”(BDFL)。这个半开玩笑式的头衔流传了多年。

vanRossum说:“在很长一段时间内,我承受住了压力,还培养出了项目管理技能。我将很多事情委派给别人,让他们按照自己的想法做事”。

实际上,vanRossum确立的Python开放本质(在社区核心开发者之间公开讨论)是Python成功的决定性因素。

Python的演变

在这期间,Python有了飞跃式的发展。2008年,Python3.0发布,让Python成为一门现代化的编程语言。近来,Python的管理方式也发生了重大变化。

这些变化是去年发生的,当时vanRossum卸掉了BDFL的头衔,原因是人们对PEP572中引入的赋值表达式存在分歧。

虽然赋值表达式的引入是为了更高效地编写代码,但vanRossum在网上遭到了反对者的严厉批评,一些人认为这一提案会降低代码的可读性和可维护性。

vanRossum说,虽然他已经习惯了围绕新功能而展开的争论,但这次有人诋毁他,他们的态度十分强硬,甚至有人对他进行人身攻击,所以他决定辞职。

他说:“那些在技术上持不同意见的人在社交媒体上开始抱怨我破坏了Python的决策流程,或者说我犯了一个严重的错误。我感到非常失望,我感觉受到了来自背后的攻击”。

“过去,在决定是否要对Python做出变更或改进时,一群核心开发人员会讨论这件事的利弊。他们会得出一个明确的共识,如果结果不明确,我会在脑子里反复考虑,然后做出决定。在PEP572这个提案上,尽管它存在争议,但我还是选择了“是的,我想做这个”,但人们并不买账。

“这并不是一种反叛,但我觉得我没有得到核心开发者社区足够多的信任”。

他认为,Python的争议方式之所以发生变化,部分原因在于现在有太多的人使用Python。

“Python社区的规模越来越大,这可能也是原因之一。当然,要达成任何形式的共识都很困难,因为不管你做出什么样的决定,总会有一些持不同意见的人”。

Python核心开发者MariattaWijaya

今年早些时候,负责维护CPython解释器的核心开发人员成立了一个指导委员会,用来监督Python未来的发展。成员包括vanRossum、Warsaw以及其他核心开发者BrettCannon、CarolWilling和NickCoghlan。

Warsaw说,当一门编程语言的用户群以如此快的速度增长,使用这种方式来管理语言的发展是很有必要的。

他说,“我认为vanRossum真的把所有事情都扛在自己的肩上了”。

“25年前,当Python还只是一门小众编程语言的时候,社区规模也小得多,vanRossum可能还能自己扛,但即使是这样,他一个人的工作量也很大。我认为,考虑到他个人的健康以及社区的参与度问题,将这些重担分摊到五个人身上会更好”。

Warsaw说,在每发布一个Python新特性版本后都会进行一次指导委员会选举,为建立下一代Python语言核心领导层做好准备。

他说:“如果Python在25年后还能保持常青,那时候应该不是vanRossum和我在管事了”。

指导委员会的成立也受到了Python核心开发者社区的欢迎。核心开发人员MariattaWijaya说,这一举动感觉像是朝着正确的方向迈出了一步。她说:“对我来说,指导委员会比让一个人决定所有事情要好得多——这是一个巨大的责任和负担。这是一个好迹象,它意味着社区将会有更多的输入”。

Python的未来

虽然Python继续以惊人的速度吸引新用户,但社区内的一些人也看到了未来要面临的挑战。如果Python想要保持常青,就要不断进化。

在今年的Python语言峰会上,BeeWare联合创始人RussellKeith-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说:“这些功能不会出现在Python3.8中,但或许会在3.9中加入。我觉得我们将在未来两到两年半的时间内看到这些功能。我真的很高兴Eric能够继续做下去,这是一项非常重要的工作”。

Python社区正在对标准库进行现代化。最近发布了一项提案,建议将过时的模块从标准库中移除。Python的标准库通常被认为是Python的优势所在,因为它被用来处理很多常见任务,这也就是为什么人们都说Python有“内置电池”。

但在今年的Python语言峰会上,有人提出了这样的一个问题:如果人们能够从PyPI自行选择模块,而不是使用内置的标准库,这样是否会更好?

还有一个问题是,Python指导委员会的成员组成能否更好地反映2019年Python用户群的多样性?

Warsaw说,尽管有一个“仁慈的独裁者”在掌管一切,但近年来,有很多有关Python发展的理念来自于社区。

他说:“这些想法真的是从社区中冒出来的,而不是自上而下推行的。”

简单的社区项目也能对Python产生巨大影响。比如,类型提示功能,Python3.5的一个特性,灵感来自于2012年一位博士生发起的mypy项目。类型提示可以执行可选类型检查,帮助开发人员发现某一类bug,避免让这些bug渗透到程序中。

mypy项目链接:http://mypy-lang.org/

当有一群人同时开发一个大型的代码库时,这个额外的安全层就会非常有用。

Warsaw说,“在我看来,这样可以让Python渗透到更大的组织中(比如Instagram基本上都在使用Python3)”。

此外,asyncio是另一个社区在驱动Python发展的例子。

asyncio链接:https://docs.python.org/3/library/asyncio.html

随着指导委员会的成立和空前的用户群增长,vanRossum乐观地认为:“由社区驱动的Python进化”将继续取得“无与伦比的成功”。

他说,”一个拥有坚实的核心开发者的社区,现在有了一个新的管理制度,我想我们为Python语言的进化做好了更充分的准备”。

Warsaw说,如果有人怀疑Python社区是否有能力继续为Python找到新的应用场景,那就让他们看看使用Python捕捉的第一张黑洞图片。

“Python社区中总有那么一些人,我把他们看成是疯狂的Python科学家。他们总是在想,今天能把它做成这样,那么明天能不能走得更远?”