创造新看点
首页 >> 科技咖 >> 正文

命名自喜剧团体,宅男程序员三个月写出的编程语言是如何改变世界的?

日期:2019-08-17 15:42:08 来源:互联网 编辑:小狐 阅读人数:249

大数据文摘出品

编译:洪颖菲、李可、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)分布式。因为当时的编程语言存在缺陷,他决定创建一种新的语言— 一种更易于使用又功能强大的语言。

命名自喜剧团体,宅男程序员三个月写出的编程语言是如何改变世界的?(图1)

对于一个从未过语言的人来说,创建编程语言就像是说“我要自己造一架飞机”当时,三十多岁的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与蛇的,以及后来双蛇缠绕图标,则都是后话。

“我当时比较宅,会在家看电视,或者写代码,或者边看电视边写代码,”他承认道。

“我认为,在某种程度上,我的确很喜欢自己创建一个大项目这种想法,按照我的理念,我的方式来布局和设计代码,这样的编程对我来说很有趣。”他说。

在短短三个月内,Van Rossum就出了解释型语言Python的原型,虽然他声称这个原型缺少现在的许多功能,但这便是今天Python的始祖。

“现在的Python语言多了很多重要的底层抽象功能,但从使用角度来说,还是与原型非常相似的。”他说。

“当时,我已经拥有了解释器和语言的所有基本组件。用首个Python解释器的编译出的简单Python程序今天仍然可以工作。”他说,并补充道,“函数定义方式相同,缩进格式相同,字典和元组是使用相同的语法创建,并且连用于交互式计算的提示符都是和原来一样的。”

互联网的兴起,python社区逐渐壮大

不过,尽管他的两位同事很快就接受开始使用这种语言,但Van Rossum并没有对其更广泛的传播抱多大期望,因为在互联网时代之前,要想使一门编程语言落地生根是非常困难的。

“我记得大约是85年前后,我第一次到美国度假的时候,我的行李箱里放了一盒装有ABC语言安装文件的磁带。”Van Rossum说。

命名自喜剧团体,宅男程序员三个月写出的编程语言是如何改变世界的?(图2)

2001年的Guido Van Rossum,这一年Python软件基金会成立。

“因此,尽管ABC语言有强大的功能,我们在其推广方面并不成功。”但随着互联网的蓬勃发展,Python的推广就容易得多了,再不需要用磁带。

“我希望这能成功,即使没有,我至少发布了我发明的语言,这本身就是一种成就。”Van Rossum说。

凭借以往经验,Van Rossum表示,他花了很长的时间才从Python不断增长的用户群中看出些苗头。经过一段时间与Python社区定期互动后,他渐渐意识到自己创造了一种成功的语言。

“这种进展非常非常缓慢。在我们发布第一个开源版本后,我开始定期发布新版本,并与各新兴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出现了,我就找到了救星,它让编程又变得有趣了。”他说。

命名自喜剧团体,宅男程序员三个月写出的编程语言是如何改变世界的?(图3)

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相关问题查阅数的增长速度远远超过了其他语言。

命名自喜剧团体,宅男程序员三个月写出的编程语言是如何改变世界的?(图4)

因此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未来如何发展。

命名自喜剧团体,宅男程序员三个月写出的编程语言是如何改变世界的?(图5)

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说。

自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的Java 运行库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“终身者”的身份。

命名自喜剧团体,宅男程序员三个月写出的编程语言是如何改变世界的?(图6)

尽管赋值表达式的引入是为了编写出更有效率的代码,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说道。

命名自喜剧团体,宅男程序员三个月写出的编程语言是如何改变世界的?(图7)

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等新网络技术)中继续发挥作用这一点至关重要。

随着现代芯片中处理器内核数目不断攀升(英特尔最新的可达48核)Warsaw也希望Python可以有更好机制将任务分散到多核上进行处理。

“Python 3.8里还不包含这些修订,Python 3.9或许可以。” Warsaw说,“我想在未来的两年至两年半时间里,我们就能看到这些新机制,这一点我持乐观态度的,Eric的努力让我感到很高兴,因为我觉得这真的非常重要。”

他还提到,即便是之前的失败项目The Gilectomy,这是一个旨在多核处理器上运行多线程Python程序的项目,也能产生有意义的经验教训,像是如何让Python在跨核分布工作负载方面做得更好。

Python社区也在采取措施使语言的内置代码标准库更加现代化。社区最近发布了一个删除内置代码库中过时模块的提议。这个提议解决了最近对Python标准库的一些质疑。通用代码库通常被视作Python的优势之一,因为它可用于执行大多数常见任务,这就是为什么Python会被称作为“自带装备”的原因。然而,今年Python峰会上的一场演讲提出了一个问题:让人们从PyPI库中选择某代码库,而不是将所有标准库打包与Python捆绑安装,可能会使Python更加有的放矢。

还有些问题如,语言的机构组成—Python的核心人员和指导委员会,是否能更好地代表目前Python的不同用户群体。

Wijaya说:“我想看到这个机构能更好地代表各类群体,不仅仅是不同性别,还包括种族和其他一切。”

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协助捕捉到的有史以来第一张黑洞图像给他们看。

命名自喜剧团体,宅男程序员三个月写出的编程语言是如何改变世界的?(图8)

今年早些时候,Python协助研究人员将首张5500万光年之外黑洞的图像拼接出来

“黑洞照片真的把我给震到了。社区里总有那么几个人让我觉得他们就是Python界的科学狂人。对于他们我只能说,不逼一下自己,怎么知道自己有多优秀呢?”

本文相关词条概念解析:

编程语言

编程语言俗称“计算机语言”,种类非常的多,总的来说可以分成机器语言、汇编语言、高级语言三大类。电脑每做的一次动作,一个步骤,都是按照已经用计算机语言编好的程序来执行的,程序是计算机要执行的指令的集合,而程序全部都是用我们所掌握的语言来编写的。所以人们要控制计算机一定要通过计算机语言向计算机发出命令。目前通用的编程语言有两种形式:汇编语言和高级语言。编程语言学习群四一八,三五五,五三一。

网友评论
  • 小混混哈哈
    程序员最讨厌哪种编程语言?
    2019-09-20 13:16 386
  • 大小姐ding
    如果实在没有方向就找身边认识的程序员帮忙看看
    2019-09-14 14:42 988
  • oPoQoRo
    程序员该学哪几种编程语言?
    2019-09-21 20:05 257
  • solt020
    往往本身耐心不足的人就会变得狂躁、易生气,生自己的气有没有适当的释放就此狂躁气就会发泄倒无辜的人身上
    2019-09-17 03:27 287
  • Orangela子
    为什么程序员写出的程序都有bug?对此你怎么看?
    2019-09-17 10:38 784
  • 尼克小兔子
    java,或许写代码的事写完了发现哪个地方错错误了有试过各种纠正的时候结果还是有错漏,我想整个人有种崩溃的感觉吧
    2019-09-15 00:28 597
  • 亮了亮了亮
    学习Java编程可以从事的开发比较多些
    2019-09-19 16:23 538
  • 凯纳设计-
    要明白提出这个需求具体场景是什么,在设计模块的时候就能做到有的放矢
    2019-09-15 15:52 342
  • 眼角的潮湿
    基本上你能遇到的问题,群里面的人都遇到过,也都能帮你解决
    2019-09-15 12:10 747
  • 小混混哈哈
    有其他问题也可以在评论区留言
    2019-09-15 15:51 593
  • 我的豪气只
    通用学习方法对于初学者,学习任何编程语言都需要有自制力
    2019-09-16 22:09 59
  • 比八部泡泡
    不要只停留在看书的层面,实际动手敲代码可选加深印象和理解
    2019-09-15 10:04 501
  • jz0815
    编程语言会影响程序员的性格吗?
    2019-09-14 02:55 569
  • azurehello
    它会让你变得比较理性,对于生活会自我严谨
    2019-09-13 22:57 411
  • 咳咳咳不玩
    SQLServer
    2019-09-21 04:52 569
  • 8888777
    程序员如何写出优雅的代码?
    2019-09-20 18:09 645