世界上有几百种编程语言,而真正流行的不过20余种,Python就是其中之一。多年前,GuidovanRossum创造了Python,成为了如今的「Python之父」。面对数百万人忠诚拥趸,NickHeath与vanRossum共同探讨了Python的过去以及未来。
那一年是年底,来自美国各地的一群精英程序员召开会议,讨论如何打造出一款新的秘密武器。
BarryWarsaw正是二十位与会成员之一,回忆起首届研讨会上大家的激动之情,他至今仍记忆犹新。“我记得有个人反复强调,‘千万别告诉别人我们在这里,因为我们的Python是一招独门绝技’。”
在那时候,当时效力于马里兰州美国国家标准局的Warsaw就已经意识到,Python语言会带来一些前所未有的东西,极大降低代码编写与开发任务的难度。“当我第一次见到Python时,我就知道这里头一定有些不同寻常的东西。它非常重视可读性,而且编写Python代码也相当有趣。”Python回忆道。
▲图:年,BarryWarsaw在第一届Python研讨会上发言。
如今,Python所激发的热情已经远远超出最初的开发人员小团队。有些人预测,Python将很快成为世界上最流行的编程语言,因为它仍在以远超其它语言的速度吸引着更多新用户。每一天,都有数百万人在使用Python,且至今其用户指数在增长方面也几乎没有出现过下滑。
Python被无数专业以及业余开发人员用于处理大大小小的任务,尤其受到网络开发人员、数据科学家以及系统管理员们的青睐。今年早些时候,Python将来自约5亿公里外黑洞的第一张完整照片拼接出来(如下图),正如它在全球无数台计算机上为脚本提供支持一样。
Python在众多全球知名的组织当中发挥着关键作用,包括:帮助Netflix将视频流传输至全球超过1亿个家庭,为照片共享应用Instagram提供支持,协助NASA推进太空探索等等。
Python,早年的故事
从某些角度来看,Python同其名称来源、英国著名喜剧团体“巨蟒与圣杯”有着惊人的相似。同样是在自身的小众受众当中,Python语言声名鹊起并迅速积累起巨大的影响力。
该编程语言由荷兰程序员GuidovanRossum以编外项目的形式建立。上世纪八十年代末,vanRossum正在荷兰国家数学与计算机科学研究中心CWI当中开发分布式系统。由于对现有编程语言的不足感到沮丧,他决定创建一种新型语言——既要易于使用,又得功能充沛。
对于一个局外人来说,创建自己的编程语言在我听起来就像是“我要独力制造一架飞机”。但是,时年三十多岁的vanRossum有着自己的优势。他曾投入三年时间在CWI的一个团队内工作,并曾创建一种解释性编程语言ABC。因此,他已经深入理解到负责执行程序员指令的解释器在构建过程中存在哪些问题,以及新语言需要哪些语法构建单元。
▲图:GuidovanRossum摄于年,当时正值Python软件基金会成立。
话虽如此,vanRossum当时只能利用有限的编程语言进行项目开发,其中的难度可想而知。他当时正在研究的Amoeba分布式计算系统只支持C或者Unixshell,而这两者都有很大的局限性。C不仅要求开发人员必须以手动方式管理内存(这项工作极为复杂),其导航机制当中也存在大量犯错空间;此外,C语言也缺乏能够显著减少开发人员日常工作的可复用代码库——换言之,开发者必须在每个新项目当中重新发明轮子。另一方面,Unixshell则有着自己的问题——它虽然为常见任务提供一整套实用程序,但却运行速度太慢,且无法处理复杂的逻辑。
考虑到这些语言给开发人员带来的种种限制,对于vanRossum来说,创建自己的解释语言——能够从ABC语言当中直接借用最佳特性——看起来确实是最好的选择。
他表示,“我当时的想法很简单,‘为什么不自己创造一种语言’,它可以从ABC当中借鉴自己的想法,从而将原本需要三年完成的项目压缩到一个人就能在三个月之内开发完成。作为一次寂寂无名的小尝试,Python正式进入孕育期。”
年底,vanRossum开始认真工作,并决定从他最喜爱的喜剧团体“巨蟒与圣杯(MontyPython)”处借用这个名字。有了与蛇相关的Python之名,再加上缠绕的徽标,接下来他把自己能够支配的所有时间都投入到了项目当中。
虽然创造Python在名义上能够帮助他完成自己的其它工作,但vanRossum认为最大的动机,其实来自自主创造语言所带来的挑战与激励。
他表示,“我还记得,最能让自己提高工作效率的,就是坚信自己能够做到的信念。在某种程度上,我真的很希望能够创建出一个伟大的项目,列出我想要代码,并让它按照我想要的方式进行布局与设计。编程对我来说是件很有趣的事儿。”
尽管单枪匹马创造编程语言听起来好像不太靠谱,但vanRossum同志还是很好地完成了工作。在上世纪八十年代末,各类主要语言的最大问题,就是会带来开发人员们非常强烈的挫败感。LarryWall曾有一句名言,他说在开发Perl语言的过程中,最大的动力主要来自语言本身在解决编码问题上的笨拙,以及设计中体现出的种种“懒惰、急躁与狂妄自大”。同样的,JohnOusterhout也是在构建集成电路交互工具的过程当中,在糟糕现状的驱使下设计出Tcl。
在短短三个月当中,vanRossum就开发出一套Python解释语言的工作原型。他表示这套原型缺少现代功能,但其中已经出现了当前Python所具备的种种特征。
他指出,“如今的Python当中拥有很多重要的抽象;当时没有,但语言本身看起来已经极为相似。”
“当时,我已经开发完成解释器以及语言的所有基本组件。来自首套Python解释器中的简单Python程序直到今天仍能正常运行。”他还补充道,函数的定义方式完全相同、缩进机制完全相同、字典与元组使用的语法完全相同,甚至连用户在使用Python开发时面对的交互提示符也完全相同。
不过,虽然他的两位同事接受了这种语言并立即开始使用,但vanRossum当时对其广泛流行并没有抱很大的期望。毕竟他们都很清楚,在互联网时代到来之前,获取一种编程语言有多么困难。
不同于如今只需几下点击就能完成软件共享的方式,上世纪八十年代的软件发布可谓困难重重。vanRossum回忆起最早推广ABC解释语言时的艰辛历程。
vanRossum表示,“我还记得那时候大概是年,我去美国度假。那是我第一次去美国,我把存储着ABC语言的磁带放在了行李箱里。”
通过当时才刚刚成形的基础电子邮件系统,他得到了一份对该语言有兴趣的开发人员的住址与电话清单。由于传输能力有限,这些报名信息就是邮件所能承载的极限了。他只能挨家挨户邮寄这些磁带。尽管付出了不小的努力,但ABC并没能获得成功。
“就是因为这种分发上的困难,虽然ABC也拥有一系列非常出色的特性,但却没能走得太远。”但随着互联网革命的蓬勃发展,即使不用装满磁带的手提箱,Python也能够被轻松分发到用户手中。
VanRossum于年通过alt.sources新闻组向全世界发布了Python语言。这是一份开源许可,而这时距离开源许可这个概念的出现才刚刚过去六年。虽然Python解释器仍然由多达21个独立的压缩文件组成,但需要在Usenet网络上下载整整一夜,但其效率仍然远远高于几年前的手动邮寄。
他表示,“我希望这种新生的语言能够在一定程度上获得成功,但我之前也尝试过,最终却只是徒劳一场。”
根据以往的经验,vanRossum开始