大数据文摘出品
来源:Zdnet
编译:洪颖菲、李可、Vicky、李雷
1989年,荷兰的一位叫Guido Van Rossum的宅男程序员觉得其他语言都不好用,于是花三个月创造了一种新的编程语言。
Guido肯定没有想到,30年后,每天都有数百万人使用他创立的这一新语言——Python。
无论是专业人士还是非专业人士,都在使用Python解决大大小小的问题,尤其是网络开发者、数据科学家和系统管理员。
今年早些时候,研究人员首次将5500万光年之外黑洞的图像拼接出来,使用的编程语言也是Python,。
一些全球大厂也在用Python处理关键业务,比如网飞(Netflix),用它将视频流传输到全球超过1亿个家庭,Instagram用它实现照片共享功能,NASA更是用它处理太空探索数据。
今天,文摘菌就和大家一起深扒一下Python的前世今生,一起看看这款编程语言是怎样被创造出来,并且成长为火遍全球的编程语言的。
命名自喜剧团体,宅男程序员三个月写出的编程语言
20世纪80年代末,Guido Van Rossum为荷兰国家数学和计算机科学研究中心Centrum Wiskunde&Informatica(CWI)开发分布式系统。因为当时的编程语言存在缺陷,他决定创建一种新的语言—— 一种更易于使用又功能强大的语言。
2014年,Guido Van Rossum在Dropbox 总部。照片来源:Dan Stroud
对于一个从未开发过语言的人来说,创建编程语言就像是说“我要自己造一架飞机”。当时,三十多岁的Van Rossum已经从事编程多年,他已经在CWI的ABC语言开发团队工作了三年,所以他很了解了构建指令解释器需要什么,也知道新语言需要哪些语法构建块。
要知道,Van Rossum当时所用的编程语言非常具有局限性,要完成任何任务都很难。他正在研发的Amoeba分布式计算系统需要使用C或Unix shell,但是这两者都有很大的局限性:C语言不仅要求开发人员自己解决复杂的内存管理及各种坑,而且还缺少实现常用功能的可重用代码库,使得开发人员不得不针对每个新项目都重新进行开发;而Unix shell则有 不同的缺点——它虽然为常见任务提供了一套实用程序,但其运行速度太慢,因此无法处理复杂的逻辑。
这些语言对开发人员的限制使得Van Rossum想要创建新解释型语言——一种具备ABC编程语言功能特征的解释型语言——这一想法成为了当时的最佳选择。
“我的初衷就想着,好吧,为什么我不开发一种自己的语言,我可以利用现有的ABC语言,但将开发规模从需要三年完成的大项目缩小到自己可以在三个月内完成的小项目,于是Python诞生了。”Van Rossum说到。
1989年年底开始,他开始投入所有精力来开发Python。
Van Rossum从他最喜欢的喜剧剧团Monty Python的名字中借用Python一词给这个语言命名。至于Python与蛇的联系,以及后来双蛇缠绕图标,则都是后话。
“我当时比较宅,会在家看电视,或者写代码,或者边看电视边写代码,”他承认道。
虽然一开始的初衷是创建Python来辅助自己工作,但Van Rossum认为,他的动力可能更多是来源于创建属于自己的编程语言这一挑战。
“我认为,在某种程度上,我的确很喜欢自己创建一个大项目这种想法,按照我的理念,我的方式来布局和设计代码,这样的编程对我来说很有趣。”他说。
在短短三个月内,Van Rossum就开发出了解释型语言Python的原型,虽然他声称这个原型缺少现在的许多功能,但这便是今天Python的始祖。
“现在的Python语言多了很多重要的底层抽象功能,但从使用角度来说,还是与原型非常相似的。”他说。
“当时,我已经拥有了解释器和语言的所有基本组件。用首个Python解释器的编译出的简单Python程序今天仍然可以工作。”他说,并补充道,“函数定义方式相同,缩进格式相同,字典和元组是使用相同的语法创建,并且连用于交互式计算的提示符都是和原来一样的。”
互联网的兴起,python社区逐渐壮大
不过,尽管他的两位同事很快就接受开始使用这种语言,但Van Rossum并没有对其更广泛的传播抱多大期望,因为在互联网时代之前,要想使一门编程语言落地生根是非常困难的。
虽然今天分享一个软件只需轻点鼠标,但在上世纪80年代这可是一件十分费力的事情。Van Rossum回忆起推广Python前身ABC语言时的艰辛。
“我记得大约是85年前后,我第一次到美国度假的时候,我的行李箱里放了一盒装有ABC语言安装文件的磁带。”Van Rossum说。
2001年的Guido Van Rossum,这一年Python软件基金会成立。
因为当时简陋的电子邮件系统无法传输如此大的安装程序,Van Rossum只能搜集那些对ABC语言感兴趣的人们的地址和电话号码,然后挨家挨户地递送这些装有安装源文件的磁带。尽管付出了很大的努力,ABC仍没有真正为大众所接受。
“因此,尽管ABC语言有强大的功能,我们在其推广方面并不成功。”但随着互联网的蓬勃发展,Python的推广就容易得多了,再不需要用磁带。
1991年,Van Rossum在alt.sources新闻组里发布了Python,这是一个类似开源软件的版本(六年后开源软件这一术语才首次出现)。虽然Python解释器的安装文件被压缩成21个文件,需要一个晚上才能从Usenet上完成下载,但这仍然比几年前的磁带分发更有效率。
“我希望这能成功,即使没有,我至少发布了我发明的语言,这本身就是一种成就。”Van Rossum说。
凭借以往经验,Van Rossum表示,他花了很长的时间才从Python不断增长的用户群中看出些苗头。经过一段时间与Python社区定期互动后,他渐渐意识到自己创造了一种成功的语言。
“这种进展非常非常缓慢。在我们发布第一个开源版本后,我开始定期发布新版本,并与各新兴Python社区进行交流。这样做非常重要。”Van Rossum说。
Python为何能超越对手并发展壮大?
从90年代初期到中期,Python开始逐渐受到关注,Van Rossum也意识到,Python的时代到来了。
Van Rossum认为Python受欢迎的原因是开发人员具有和他初创Python时一样的感受。他们想要一种高级脚本语言,用起来方便,并且在处理复杂逻辑时没有Unix shell那样的局限性。他们希望解决C语言那种开发人员自己管理内存的问题,实现基础功能的代码复用。
来看看Python刚崭露头角就赢得广大程序员青睐的样子吧。
1994年底,来自美国各地的一群万里挑一的程序员开会讨论他们的新秘密武器。
Barry Warsaw是参与Python语言创始研讨会的20来位开发人员之一,他至今还能忆起使用Python给他们带来的兴奋。
Warsaw表示Python取得了某种平衡,易用,同时也没有牺牲其功能性。在90年代初,还没有任何一种主流编程语言能真正实现这种平衡。“我写过很多Perl、Tcl和C的代码,但感觉不到编码的乐趣。这时Python出现了,我就找到了救星,它让编程又变得有趣了。”他说。
Barry Warsaw在1994年Python创始研讨会上。
从那时起,Python的语法一直是清晰明确的,用缩进将代码分组成块,使开发人员更容易理解代码。
分析公司Gartner的应用程序平台战略团队研究主管Fintan Ryan表示,无论在现在还是90年代,语法清晰性都是Python赢得开发人员青睐的重要因素,尽管有些人不同意是缩进造就了如此重要的特性。“缩进提供了一种非常干净的语法。虽然在其他语言中你也可以这么做,但Python是强制执行缩进的。有些程序员喜欢这样,有些则讨厌。”他说。
事实上,Python优先考虑代码清晰可读并不是出于偶然,Van Rossum认为,编程语言开发人员间进行思想交流与告诉计算机该做什么同样重要。
除了清晰易读之外,Ryan还表示,Python的一系列内置功能,使其从其他语言中脱颖而出。“从一开始你就有类和异常处理等功能,Python还提供了对lambda,map和filter等函数的支持,在很多情况下被证明非常有用。”
如果80年代后期的流行编程语言能做得更好,Python可能永远不会出现,毕竟Van Rossum创建Python的动机之一就是Perl脚本语言与他在CWI使用的Amoeba分布式计算系统不兼容。“对于Python来说,幸运的是,Perl在Amoeba上不可移植,”他说, “如果可以将Perl移植到Amoeba,我就不会想要创造我自己的语言了。”
尽管Python在发布后吸引了众多硬核粉丝,但在90年代,Python仍然不能算成功。Van Rossum说,它的竞争对手是Tcl/Tk和Perl,它们都部分实现了Python简单易用和性能上的目标。
“在90年代最受欢迎的前三种语言中,Perl绝对是老大——就像一只800磅重的大猩猩, Tcl/Tk排名第二,而Python只排到第三。”他说。
今天,根据Stack Overflow年度开发人员编程语言使用情况调查, Python已成为成为开发人员中增长最快的编程语言,而Perl在最新的Stack Overflow报告中已经看不到了。
下图的爆炸式增长,显示了近年来Stack Overflow上Python相关问题查阅数的增长速度远远超过了其他语言。
相比于其他编程语言,Stack Overflow上Python问题查阅数量的增长反映了Python用户数的巨幅增长。图片来源:Stack Overflow
因此Python是如何超越昔日竞争对手的,又该如何解释两种语言截然不同的命运?
Van Rossum认为,这就得看当代码量超过一定规模时,其维护的难易程度。“人们得出的经验是,对于只有10行的脚本,Perl是完美的,” 他说,“但如果你的Perl代码里有500行的主程序和几千行的功能库,那么需要制定并遵守大量的规则才能保证其维护。而在Python中,即使没有那么些规定,代码仍然具有相当的可读性和可维护性。”
这种可读性和可维护性使Python易于上手,同时又非常强大,足以用于编写大型应用程序,Van Rossum认为这正是90年代Python一出现便获得成功的原因。
“一些互联网开发人员——其中很多从事早期的互联网工作,他们在编写更大型的应用程序时,认为用Python编写应用程序要比用C,C ++,或Java轻松得多。”
随着Python在90年代的使用范围越来越广,仍然在CWI工作的Van Rossum发现他的语言也让他越来越多地接触到来自世界各地的人。
他说:“我创造了Python,而它将世界各地的人——澳洲人、美国人、欧洲人联系在一起,这让我非常快乐。”
Python与互联网的那些事
到90年代中期,Python开始有了新的应用场景,从音频录制和回放脚本,到首次涉足Web开发,互联网应用成为Python的主要舞台。
Van Rossum说,“最重要的应用之一就是网页开发,这对我来说也是一件非常有趣的事情。”这时,Python开始与Perl和Shell脚本一起用于Web服务器上的后端脚本开发。“你可以创建动态网页,这是我最喜欢的Python应用之一。”
Gartner公司的Ryan认为,90年代Python在开发人员中倍受欢迎的原因在于,它是快速创建强大脚本的最佳选择。“作为一种功能强大的脚本语言,Python降低了使用者的入门门槛。”
不仅如此,这种语言功能多样且容易上手,因此吸引了许多拥有各种技术专长的用户。“系统管理员可以用Python进行系统自动化编程,功能开发人员可以使用函数式编程以及继承类,而Perl这样的语言在这方面的功能就要少得多,”Ryan说, “由于入门门槛相当低,一旦人们掌握了这种语言,就会很快开发出大量程序。”
1994年,Python引起了Michael McLay的注意,他当时在美国国家标准局(NBS)担任高级职务,这个机构现在是美国国家标准与技术研究院(NIST)。这预示着Python将受到研究人员和科学家的青睐。McLay对于国家统计局的科学家们如何使用Python很感兴趣,Van Rossum说这些科学家 “需要处理大量数据,但编程水平一般”。
为了向局内的其他人推广Python,McLay邀请当时仍在荷兰CWI工作的Van Rossum作为客座研究员,在NIST工作了两个月。这段工作给Van Rossum的生活和Python的未来发展带来了巨大的变化。
正是在这段工作期间,在国家统计局的办公室举行了Python初创研讨会,Van Rossum,Barry Warsaw和一众Python爱好者聚集在一起讨论他们可以用Python做什么以及Python未来如何发展。
Van Rossum,摄于Python初创研讨会,Warsaw和Roger Masse在与其进行讨论,那时Masse与Warsaw同在CNRI工作。图片来源:Barry Warsaw
在国家统计局的办公室,Van Rossum遇到了Bob Kahn,后者曾经参与开发TCP/IP协议。
那次会议给了Van Rossum与Kahn一起为国家创新研究组织(CNRI)工作的机会,CNRI是一家位于弗吉尼亚州的非营利性研究组织,专注于网络技术的战略发展。
当时Python满足了对新型编程语言的需求,而Van Rossum则开始质疑他在CWI的未来,这个工作机会来得恰逢其时。
他说:“CWI更像是一个学术机构,在那里工作没什么压力,因此我要么去读博士学位,要么就得找其他工作。”
“我那时35岁左右,转去读博对我来说没有太大的吸引力。而在那之前,因为Python的缘故,让我有了新的方向,经过深思熟虑,我决定不去读博。我喜欢CNRI的同事,喜欢这里的环境、项目,所以我去了。”
在CNRI,在一群Python爱好者的帮助下,Van Rossum将Python语言的功能特性进行了整合。从1995年4月加入CNRI之后,Van Rossum带领开发团队开始构建Knowbot程序,这是一种移动代理程序,运行在分布式计算机系统(互联网)上。
开发团队包括Jeremy Hylton,Roger Masse,Barry Warsaw,Ken Manheimer,Fred Drake和Van Rossum,使用的语言是Python,而这些人也成为Python社区的中坚力量。
“我们成立了一个4到10人组成的小组,其中大多数人在CNRI工作,他们是Python开发的核心,”Van Rossum说。
Van Rossum在CNRI工作时,这个小组帮助他创建了python.org网站和用于管理核心代码库的CVS服务器,以及用于用户反馈的“Python特殊兴趣小组”的邮件列表。
自1991年公开发布以来,Python社区用户数增长显著,到90年代中后期,Python已经拥有相当大的全球用户群。在此期间,随着Python软件基金会(PSF)前身的建立,(PSF于2001年创立),Python语言的管理开始正式化。随着社区的发展,1994年开始的两年一度的Python研讨会越来越受欢迎,最终发展成PSF的年度大会PyCon,至今依然是年度盛事。
1994年,那时的Python用户还会担心“如果Guido被公共汽车撞了”怎么办。而到了21世纪之交,1994年那个夏天已经过去了很久,Python语言也早已不是一个人的语言,在其发展中社区的力量发挥着积极的作用。
然而,Van Rossum继续扮演着核心角色,并且他是这一语言的灵魂的想法从未消失,正如他被昵称为Python“仁慈的终身独裁者”(BDFL),表明了他对Python的最终话语权,这一诙谐的头衔也伴随了他许多年。
“在这么多年里,我能够很好地承担各种压力,同时培养了我的项目管理技能,这使我能够将不少事情委派给其他人自行处理。” Van Rossum说。
Gartner公司的Ryan表示,语言的创建者同时作为该语言的管理者是件很平常的事,比如Larry Wall的Perl语言和Ryan Dahl的JavaScript 运行库Node.js,但是他说,Van Rossum尤以其对Python的平衡式管理而为人所称道。
“大家都承认,他对项目的方向把控和整体管理都非常有条不紊。”这是人们对Van Rossum的评价。
然而Van Rossum很谦虚,他认为社区核心开发人员间的公开讨论,赋予了Python在发展中的开放性,这是Python成功的决定性因素。
Python社区众口难调
Python社区的迅猛扩张,对Van Rossum反而成了一个沉重的负担。
在这些年里,Python 不断取得重大飞跃。2008年发布的Python 3.0标志着Python的现代化,而最近在其管理方式上又出现了显著变化。
这些变化是从去年开始的,因为公众对Python增强提案PEP572中引入的赋值表达式存在异议,Van Rossum辞去了Python“终身独裁者”的身份。
尽管赋值表达式的引入是为了编写出更有效率的代码,Van Rossum还是在网上遭到了那些反对者的严厉批判,一些人认为使用赋值表达式会降低代码的可读性和可维护性。
Van Rossum表示他过去习惯了为新功能进行辩解,但某些抨击者的固执和别有用心让他下定决心放弃最终话语权。
他说:“我对那些人感到很失望。他们在技术层面上有分歧,就去社交媒体上嚷嚷说提案过程出了毛病,或者就说我犯了个天大的错误。这种感觉就像是被人在背后捅了一刀。”
“在过去,如果我们要针对语言改变或功能改进做个决定,一群核心开发人员就会讨论此决定的利弊,一直都是这样的。我们要么会得出个明确的共识,或者如果没达成共识,我会在脑中仔细斟酌并想个什么方法将其确定下来。对于这个PEP572,即便它存在明显的分歧,我的选择是——我要这么做,但大家就是不能求同存异。”
“这不算是严格意义上的反抗,但我觉得我已经没有了来自核心开发者社区的足够信任来使我继续这一(独裁者)身份。”
他认为如何结束语言变化的纷争在一定程度上取决于现如今Python使用者的数量。
“这也有可能是因为Python社区规模太大了,这样就更难达到任何形式的共识,因为不管你决定什么,总是会有那么些异类跟你唱反调。”
今年早些时候,Python的核心开发者们,也就是那些致力于维护和更新(用C语言实现的) CPython解释器的开发人员,选举产生了一个指导委员会来管理Python的未来。除了Van Rossum,其他一并当选的还有Warsaw及其余几个核心开发人员Brett Cannon,Carol Willing和Nick Coghlan。
Warsaw表示,对于管理一门用户群增长如此迅猛的语言来说,这种变化是必须的。
“我认为Guido Van Rossum真不能把所有的问题都自己扛。”他说。
“25年前这样或许还行得通,当时Python社区规模还很小,Python也只是门小众语言,但现在让一个人来承担这一切真的太过了,你知道吗?我觉得单纯为了他的个人健康和增强整社区参与度着想,有5个人一起分担重任真的很好了。”Warsaw提道。
每当新的Python功能发布后,指导委员会都会进行新一轮选举,Warsaw说这将为新一代的Python核心领导层铺平道路。
“如果想要Python在未来的25年内健康成长,就不能只有Guido和我来进行管理,不是吗?” Warsaw说道。
指导委员会的设立也受到了Python核心开发者社区的广泛欢迎,核心开发人员Mariatta Wijaya表示此举意味着他们向着正确的方向迈出了一步,“对我而言,有个指导委员会比由一个人确定一切要更好——一个人的责任与重担都太大了。这是个好兆头,而且它使得社区能够有更多的参与。”
Python核心开发员Mariatta Wijaya对选举指导委员会来监督Python的发展表示欢迎。图片来源:A. Jesse Jiryu Davis
Python的未来之路:社区驱动
虽然Python继续以惊人速度吸粉,但社区里的部分人也看到了未来的挑战:要想保持其推广,Python就得不断发展。
在今年的Python峰会上,BeeWare的联合创始人Russell Keith Magee警告说,如果不改善其对移动端和新网络平台的支持,Python就将会面临着“生存风险”。
“手机和平板电脑的市场渗透率远远超过了台式机与笔记本曾经的辉煌,但作为一个社区,我们并没有去考虑关于如何在这些设备上使用Python的场景。“他提到他儿子在学校用iPad的例子,并问:“当平板电脑成为下一个巨大市场时,Python会发生哪些改变呢?”
Keith Magee所开发的BeeWare项目目的是使Python应用程序可以任意平台上运行。他不假思索地列出了一长串Python现阶段所面临的问题,都是与非标准x86 PC系统以外的其它平台相关的。
他还给出了一系列为了更好地支持在新的非x86硬件平台上编译代码的理由:Python的测试框架很容易在移动端和网页平台上崩溃;Python应用安装时占用空间太大,且无法分割成更小的从属子集;编写运行于Android、Windows和网页上的GUI代码时需要先设置asyncio库;以及标准库中有不少模块与除CPython以外的其他Python解释器互不兼容。
Warsaw称Keith-Magee提出了很好的观点,并认为考虑Python如何能在新平台(包括手机、平板和WebAssembly等新网络技术)中继续发挥作用这一点至关重要。
“目前的Python还没有在各平台之间实现无缝的拓展。” Warsaw说,他希望能未来人们在iPhone或安卓手机上下载运行应用程序的时候,可以“永远不知道它是用Python编写的”。
随着现代芯片中处理器内核数目不断攀升(英特尔最新的服务器可达48核),Warsaw也希望Python可以有更好机制将任务分散到多核上进行处理。
他非常看好Eric Snow所主导的Python子解释器项目的潜力,这将扩展Python并行运行代码的能力。“我希望看到更多对多核处理器的利用。”他说。
Snow的子解释器项目,其目的在于让Python在多核环境下更有效地分割任务,Snow关注的重点是对Python现有的子解释器功能进行修订,并解决每个子解释器与Python全局解释器锁(GIL)之间的交互。
“Python 3.8里还不包含这些修订,Python 3.9或许可以。” Warsaw说,“我想在未来的两年至两年半时间里,我们就能看到这些新机制,这一点我持乐观态度的,Eric的努力让我感到很高兴,因为我觉得这真的非常重要。”
他还提到,即便是之前的失败项目The Gilectomy,这是一个旨在多核处理器上运行多线程Python程序的项目,也能产生有意义的经验教训,像是如何让Python在跨核分布工作负载方面做得更好。
Python社区也在采取措施使语言的内置代码标准库更加现代化。社区最近发布了一个删除内置代码库中过时模块的提议。这个提议解决了最近对Python标准库的一些质疑。通用代码库通常被视作Python的优势之一,因为它可用于执行大多数常见任务,这就是为什么Python会被称作为“自带装备”的原因。然而,今年Python峰会上的一场演讲提出了一个问题:让人们从PyPI库中选择某代码库,而不是将所有标准库打包与Python捆绑安装,可能会使Python更加有的放矢。
还有些问题如,语言开发的监督机构组成——Python的核心开发人员和指导委员会,是否能更好地代表目前Python的不同用户群体。
Wijaya说:“我想看到这个机构能更好地代表各类群体,不仅仅是不同性别,还包括种族和其他一切。”
“我在PyCon与来自印度和非洲的 PyLadies 成员进行了对话。他们认为,‘当听到Python或PyLadies时,人们通常会联想到北美或加拿大的成员,而实际上许多用户群都是来自世界上的其他地区。为什么我们没看到他们呢?我认为他们说的很有道理,所以我当然希望看到更多来自其他地区的开发人员,而且为此贡献我们的力量。”
Warsaw认为,尽管过去是一言堂,但是自从Python敞开心扉迎接各路新用户的那一刻开始,推动Python发展的各种想法就不断从社区中腾涌而出。
“比起自上而下的发展策略,社区中产生的萌芽可多得去了。”
其中一个例子就是类型提示(Type Hints),表明简单社区项目也能Python产生巨大影响。这是Python 3.5的一个功能,由一位博士生受mypy项目启发在2012年所创。这种类型提示允许使用可选的类型检查,帮助开发者发现可能导致软件漏洞的错误。
这种额外的安全检查不仅在大型代码库上多人协同工作时有好处,而且对指导代码开发中什么该做什么不该做也有重要意义。
“对我来说,这意味着Python可以应用于更大型的组织系统——比如基于Python 3的Instagram,前途不可估量。”不仅如此,Warsaw还提到了另一个社区衍生思想的例子:asyncio,它对编程语言的可塑性产生了极大影响。
面对指导委员会的出现和比以往任何时候都要大的用户群,Van Rossum乐观地表示社区驱动下的语言演变将会继续“前所未有地成功”。
“Python的铁杆粉丝们现在有了个新的管理机构,所以无论Python作什么样的变化,我们都已经做好了准备。”他说道,并高度赞扬了社区对Python某些方面的充分理解。
Warsaw则表示,如果还有人怀疑Python社区发现语言新用途的能力,那么就丢一张Python协助捕捉到的有史以来第一张黑洞图像给他们看。
今年早些时候,Python协助研究人员将首张5500万光年之外黑洞的图像拼接出来
“黑洞照片真的把我给震到了。社区里总有那么几个人让我觉得他们就是Python界的科学狂人。对于他们我只能说,不逼一下自己,怎么知道自己有多优秀呢?”
相关报道:
https://www.zdnet.com/article/python-is-eating-the-world-how-one-developers-side-project-became-the-hottest-programming-language-on-the-planet/?2