Python:30年编程革命,世界正在被它吞噬

发表时间: 2019-08-26 13:28


【新智元导读】这篇长文详细写了Python从诞生到流行的故事,专访了Python发明人Guido van Rossum以及相关的一些人,展示了Python是如何成为最受欢迎的编程语言的。

谁能想到,30年后,一条蟒蛇因为人工智能而席卷了全世界!这一切,都源于1989年的那个圣诞节。

一个名叫Guido van Rossum程序员在荷兰的阿姆斯特丹呆着,无所事事的圣诞假期有点无聊。为了打发时间,他开发了一个新的脚本解释程序。于是,现在机器学习的首选语言:Python诞生了。

Python以简单易用而广受欢迎,它简单到即使你不是学计算机的人,也可以轻松的学会Python,开发一些可以提高工作效率的脚本程序。

如今的Python,既可以将黑洞的第一张图像拼接在一起,也能够在全球无数台电脑上为黑客提供动力;它帮助Netflix将视频流传输到全球超过1亿个家庭,为照片共享现象Instagram提供动力,帮助NASA进行太空探索。

但有个问题一直非常耐人寻味:Python究竟是如何从一个“闲散人员”的业余项目开始,短短几十年便成为全世界最热门语言的?

TechRepublic首席记者采访了Python之父Guido van Rossum,试图解开Python身上神奇的谜团。

就让我们,从Python的身世说起吧。

为什么是Python?

到底作者是怎么想的才会起名Python?

Python诞生于1989年,距今刚好30个年头。Python的诞生源于一次偶然,而Python的命名则源于一部喜剧。

那个时候,Guido非常痴迷一部喜剧《蒙提·派森的飞行马戏团(Monty Python's Flying Circus)》。该剧在当时以革新的电视喜剧模式发展,一定程度地影响了日后的英国喜剧。因此Guido给自己新项目起了一个霸气的名字:Python(蟒蛇)。

2年后,即1991年,Python首版正式面世;2000年,最负盛名版本:Python 2正式发布;2008年,最具争议版本:Python 3出世。

到底Python是因为什么被创建出来的呢?

Perl脚本语言与他在CWI工作的Amoeba分布式计算系统不兼容,是促使他自己开发一门语言的关键。

一个人开发一门语言,难度那是相当大的。好在当时而立之年的Guido已经有了相当的开发经验。此前,他花了三年时间在CWI的一个团队工作,创建了一个解释性编程语言ABC,已经深入了解了构建执行程序员指令的解释器需要什么,以及新语言所需的语法构建块。

而ABC并不成功,他看到了ABC身上的很多缺点,例如:不可扩、不能直接进行IO、传播困难、过度革新。因此在写Python的时候,Guido从一开始就奠定了“开放”的基调。

Python本身被设计为可扩展的。并非所有的特性和功能都集成到语言核心。Python提供了丰富的API和工具,以便程序员能够轻松地使用C、C++、Cython来编写扩展模块。Python编译器本身也可以被集成到其它需要脚本语言的程序内。

因此,有很多人把Python作为一种“胶水语言”使用。使用Python将其他语言编写的程序进行集成和封装。在Google内部的很多项目,例如Google应用服务引擎使用C++编写性能要求极高的部分,然后用Python或Java/Go调用相应的模块。

到底是什么样的人能开发出Python这样的语言呢?

当时的Guido也是个典型的理工宅男,没有太多的社交生活。再说当时也没有WhatsApp、Tinder。Guido基本就是看电视、编程,或者看电视的时候顺便编程。

同样作为一个典型的理工宅男,亲手创造产品的冲动总是如影随形。在一个无所事事的圣诞节假期,Guido决定自己动手,亲自设计、开发一个大项目,完全按照他的想法写代码、进行布局和设计。编程这件事情,比电视剧更让他沉迷。

从1989年开始,Guido就一直是Python的决策者以及主力开发者,因此Python社群经常称呼他是终身仁慈独裁者。

到底谁是Python的第一批种子用户?

Guido刚把Python做出来,需要有人来使用。但当时Guido并不是什么意见领袖、名人大腕,加上那时候还没有互联网,虽然手捧着Python这把屠龙宝刀,却难寻屠龙的剑士。他硬是说服了两位同事,成为Python的第一批种子用户。

那个时候,Guido对这个小蛇蛇并没有什么大的期待,只要有人用就感觉很开心了,也算辛苦没有白费。

1991年,Guido通过alt.sources新闻组向世界发布了Python。从此,一传十,十传百,Python收获到了越来越多的用户,Python社群也开始活跃起来。

他意识到,自己可能成功了!

为什么Python赢了

下图显示了各语言的增长趋势。注意哪条加粗的红线,Python可以说缔造了一个奇迹!

怎么会这样?

Guido觉得,开发者之所以热爱Python,因为它解决了开发者的痛点,也就是Guido开发Python的初衷:开发者需要一种高级脚本语言,在易用性和功能性之间取得平衡、在处理复杂逻辑时没有Unix shell的限制;能够像C语言那样,全面调用计算机的功能接口,又可以像shell那样,可以轻松的编程。

分析公司Gartner的应用程序平台战略团队的研究主管Fintan Ryan表示,Python清晰易读的语法,在赢得开发人员方面发挥了重要作用,无论是现在还是在20世纪90年代,即使将这种重要性归因于缩进已经证明是分裂的。

除了这种可读性之外,Guido还表示,从早期开始,Python就提供了一系列内置功能,例如具有类和异常处理等功能;提供了对lambda、map和filter等函数的支持等。

在Python的开发过程中,社区同样起到了重要的作用。Guido自认为自己不是全能型的程序员,所以他只负责制订框架。

如果问题太复杂,他会选择绕过去,也就是cut the corner。这些问题最终由社区中的其他人解决。

社区中的人才是异常丰富的,就连创建网站,筹集基金这样与开发稍远的事情,也有人乐意于处理。如今的项目开发越来越复杂,越来越庞大,合作以及开放的心态成为项目最终成功的关键。

而互联网也是成就Python的重要推力。Python被应用于Web开发,迎来了Python的一次井喷。

到1994年,Python引起了Michael McLay的注意,他当时美国国家标准局(NBS,现在是NIST,美国国家标准与技术研究所)担任高级职位。

为了向局内的其他人推销Python,McLay邀请当时还在荷兰CWI工作的van Rossum到NIST做两个月的客座研究员。这个职位后来被证明是Python未来发展的催化剂,也是van Rossum人生中的一个重大变化。

van Rossum 与Warsaw和Roger Masse在第一次Python研讨会上,当时他们一起在CNRI工作 Credit: Barry Warsaw

正是担任这个职位期间,第一次Python研讨会在国家统计局的办公室举行了,van Rossum、Barry Warsaw以及其他早期Python爱好者聚集在一起,讨论他们正在用Python做什么,以及对这种语言未来发展的希望。

在国家统计局的办公室里, van Rossum 见到了罗伯特·卡恩(Bob Kahn)。卡恩因参与开发了互联网的一项基本技术——TCP/IP协议而闻名。

那次会议的结果是van Rossum得到了一份工作邀请,与卡恩一起在国家研究计划公司(CNRI)工作。CNRI是一个位于弗吉尼亚州的非盈利研究组织,专注于网络技术的战略发展。

那时Python已经解决了对一种新型编程语言的需求,van Rossum说正好是在他开始质疑自己在CWI的未来时,这份工作邀约恰逢其时。

他说:“CWI更像是一个学术机构,他们对我施加了轻微的压力,要么让我攻读博士学位,要么让我面对不得不到别处找工作的前景。”

“那时我已经35岁了,攻读博士课程的前景并没有真正吸引我。早些时候,由于Python的原因,其他一些潜在客户找到了我,在打了很多电话并思考之后,我决定拒绝他们。但在这里,我喜欢这里的人,喜欢他们提供给我的东西,喜欢这个项目,我就去做了。”

正是在CNRI, van Rossum在一群Python爱好者的帮助下,将许多用于管理Python语言的结构组合在一起。1995年4月加入CNRI后,van Rossum领导了一个小型开发团队,致力于开发名为Knowbot的程序,该软件被称为移动代理,设计用来运行跨分布式计算机系统,比如互联网。

这个团队使用Python工作,加入van Rossum的还有Jeremy Hylton、Roger Masse、Barry Warsaw、Ken Manheimer和Fred Drake,他们都将在Python社区中发挥重要作用。

van Rossum说:“我们最终形成了一个由4到10人组成的团队,其中大部分人在CNRI工作,他们是Python开发的核心。”

当van Rossum在CNRI工作时,这个团队帮助他创建了python.org网站、用于管理核心代码库更改的CVS服务器,以及用于改进和维护Python语言的Python特殊兴趣组的邮件列表。

自1991年公开发布以来,Python用户群体显著增长,到2016年,该语言已经吸引了相当大的全球用户群。在此期间,随着Python软件基金会(PSF)前身的建立,语言的管理开始形式化,该基金会于2001年成立。随着社区的发展,从1994年开始的两年一度的Python研讨会逐渐演变成更大型的年度活动,并最终演变成PSF的年度PyCon,直到今天仍然很受欢迎。

到了21世纪之交,Python语言发展到非常大,有一个相当大的社区在其发展中发挥着积极作用,而在1994年的夏天,早期Python用户对这门语言最担心的事情是“万一Guido发生车祸怎么办”。

然而,Van Rossum继续扮演着核心角色,他是这门语言的核心的想法从未消失,他得到一个昵称“仁慈的终身独裁者”(BDFL),这个半开玩笑的头衔流传了多年。

Ryan说,一种语言的创建者充当这种语言的管理员并不是不寻常的事,他引用了Perl语言创建者Larry Wall,以及Node.js的Ryan Dahl的例子。但是他说van Rossum在Python的管理上是公平的。

实际上,通过核心开发人员社区之间的公开辩论,van Rossum将Python开发的开放性归结为Python成功的决定性因素。

Python的演变

在这期间,Python取得了重大飞跃,特别是2008年Python 3.0的推出使该语言现代化了,最近该语言的管理方式也发生了重大变化。

这些变化是去年触发的,当时van Rossum辞去了BDFL的领导角色,原因是社区对PEP 572提案中引入“赋值表达式”争论不休。

虽然引入赋值表达式是为了让编写代码更高效,但van Rossum在网上遭到了反对修改的人的严厉批评,一些人认为使用赋值表达式会降低代码的可读性,难以维护。

Van Rossum说,他习惯了就新功能进行辩论,但正是一些诋毁他的人的顽固态度,以及某些攻击他个人的举动,使他决定辞职。

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

“过去,如果要对语言的变化或功能的改进做出决定,很显然,一群核心开发人员会讨论这件事的利弊。要么会出现一个明确的共识,要么,如果没有那么明确的共识,我会在脑海中反复考虑,然后做出决定。在PEP572项目上,尽管它很有争议,但我选择了肯定的答案。”

“这并不是一场反抗,但我觉得我没有得到足够多的核心开发者社区的信任,来支持我继续前进。”

他认为,这种争论变了味儿的部分原因是今天使用Python的人太多了。

“Python社区的规模如此之大,这可能也是原因之一。当然,达成任何形式的共识都比较困难,因为无论你怎么决策,总会有一些异见人士。”

Python核心开发人员Mariatta Wijaya对选举Python指导委员会来监督该语言的开发表示欢迎。来源:A. Jesse Jiryu Davis

今年早些时候,负责维护和更新Python参考CPython解释器的Python核心开发人员选举了一个指导委员会来监督该语言的未来。Van Rossum和Warsaw以及其他核心开发者Brett Cannon、Carol Willing和Nick Coghlan一同当选。

Warsaw说,对用户基数增长如此之快的语言进行管理是必要的。

“要是25年前可能还好,当时Python社区很小,Python语言也比较小,但现在它真的太大了,完全让一个人负担是不行的。我认为,仅仅是为了Guido个人的健康和对社区的参与,将这种负担分摊到五个人身上比较好。”

每次新的Python功能发布后,指导委员会都会进行新的选举,Warsaw说这将为下一代领导语言铺平道路。

他说:“如果Python在25年后还能保持健康,那就不会是Guido和我在管理了。”

指导委员会的成立也受到了更广泛的Python核心开发人员社区的欢迎,核心开发人员Mariatta Wijaya说,这一举措感觉像是朝着正确的方向迈出了一步。她说:“对我来说,指导委员会比一个人决定一切要好——这是太大的责任和负担。”

Python的未来

虽然Python继续以惊人的速度吸引新用户,但社区内的一些人看到了未来的挑战,如果Python想保持增长,就需要不断发展。

在今年的Python语言峰会上,BeeWare联合创始人Russell Keith-Magee警告说,如果对移动平台和新的web平台的支持得不到改善,Python将面临“生存风险”。

“手机和平板电脑正在实现台式机和笔记本电脑从未见过的市场渗透,但作为一个社区,我们没有一个关于如何在这些设备上使用Python的计划,”他说。“那么,当笔记本电脑成为利基设备时,Python会发生什么变化呢?”

Keith-Magee的BeeWare项目旨在使用Python编写应用程序并使其在任何地方运行成为可能。

他提到,需要更好地支持为非x86硬件平台编译代码;Python的测试套件很容易在移动平台和web平台上崩溃;Python应用程序的安装大小过于庞大;在Android、Windows和web上编写GUI代码时,使asyncio库工作所需的工作量过大;以及标准库中与除CPython外的Python解释器不兼容的模块数量太多。

Warsaw说,Keith-Magee提出了许多很好的观点,并认为重要的是要考虑Python如何与新平台——手机、平板电脑以及诸如WebAssembly等较新的web技术——保持相关性。

“目前,Python在这方面并没有做得很好,”Warsaw说,他希望能够为iPhone或Android手机下载一款应用程序,“甚至不知道它是用Python编写的”。

随着现代芯片中处理器核的数量不断攀升(英特尔最新的服务器产品中处理器核的数量达到了48个),Warsaw也希望Python能够更好地将任务分散到多个核上。

他对Eric Snow在子解释器方面的工作潜力以及如何扩展Python并行运行代码的能力感到兴奋。他说:“我真正希望看到的是更多能够利用多核心的工作。”

Snow参与了一个长期项目,旨在使Python更容易地在多个处理器核心之间有效地分割任务。Snow 专注于使用 Python 现有的子解释器功能的重新编写版本,并改变每个子解释器与GIL交互的方式。

Warsaw说:“它还没为Python 3.8完全准备好,也许3.9就可以了。”“我认为,我们将在未来两到两年半的时间里看到这一点。我很乐观。我真的很高兴Eric能继续从事这个项目,因为我认为这是一项重要的工作。”

Python社区还在采取措施,对内置代码的标准库进行现代化,他们最近发布了一项提案,建议从库中删除过时的模块;这样做解决了最近对Python标准库状态的一些批评。这个库通常被认为是Python的优势之一,因为它可以用于执行广泛的常见任务。然而,在今年的Python语言峰会上,有人提出了这样一个问题:如果允许人们从PyPI存储库中选择代码库,而不是将该语言的功能捆绑为标准库,是否会对Python更好。

还有一个问题是,监督语言开发的组织(Python核心开发人员和Python指导委员会),能否更好地反映2019年Python用户群的多样性。

Warsaw说,最终,尽管有一个“仁慈的独裁者”掌管一切这样半开玩笑的说法,但近年来,Python的形成理念已经从社区中涌现出来,人们不断推动Python的可能性,打开新用途的大门。

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

今年早些时候, Python帮助合成了第一批黑洞图像,距离地球约5万亿公里。来源:Event Horizon Telescope collaboration et al.

随着指导委员会的成立和比以往任何时候都多的用户基础,van Rossum乐观地认为“社区驱动的语言进化”将继续“非常成功”。

Warsaw说,如果有人怀疑Python社区是否有能力继续为该语言找到令人惊讶的新用途,那么他只需看看Python在帮助捕获第一张黑洞图像方面的作用。

“这让我感到震惊。在Python社区中有几个人,我认为他们是Python的疯狂科学家。他们总是在想,好吧,这是我今天能做的——我能把它推进多远呢?”