作者:JeffKnupp
翻译:吴蕾、霍静
众所周知,Python是目前使用最广泛且用户增长最快的编程语言。优雅简洁的语法、强大的第三方库支持等都是Python能够风靡各行各业的原因。然而,你或许不知道,Python能够实现用户飞速增长,背后其实另有玄机。
就让我们从近年来大数据的兴起说起,为你娓娓道来Python火爆的真正原因。
郁闷的大数据程序员
随着大数据的崛起,大多数行业发现自己进入了一种恐慌状态:他们花费了大量的时间和金钱来建立他们的大数据渠道,但是他们的投资回报率却很低。在毫无喘息机会的竞争中,虽然能够挖取到日益增长的数据,但大多数公司并没有一个明确的计划来处理他们挖取到的数据。当时,几乎每个人都认为,有了大量的数据存储,后面的分析就会变得更简单,数据的业务价值也会变得显而易见。这在今天听起来可能很愚蠢,但大多数人依旧认为,只要获取到足够的数据,数据背后的规律和信息就会自动浮现。
被时代召唤的“数据科学家”
随后,业界几乎同时觉醒,他们希望得到的各种卓越远见和希望回答的问题都需要严格的数学分析和验证。SQL查询能让你知道数据最明显的模式和趋势,但要想获取数据中最为有用的信息,你需要的其实是完全不同的另一套技术——一套牢固扎根于数学和应用数学的技能。而具备这种技术的人才似乎只存在于学术界中。此外,负责分析这些庞大数据集的人不仅需要非常强大的数学背景,还需要能够编写软件。这也不难解释为什么“数据科学家”这一职位频繁出现在招聘网站上了。
Ruby与Python的“Web开发语言之争”
我们再往回讲讲,在大数据还没有真正风靡之前,Ruby和Python曾在成为最受欢迎的“web开发语言”上发生过激烈的争战。两者都非常适合开发Web应用程序。Ruby的受欢迎程度与Rails框架密切相关。在那个年代,大多数自称为“Ruby程序员”其实更应该称自己为“Rails程序员”。而Python在学术界和少数不同行业已经相当完善。在Python中,与Rails最相近的是Django,Django尽管在Rails之前发布,但它的受欢迎程度似乎远远落后于Rails。
很多人认为,Python和Ruby的性能都很相似,最终只会有一种语言能够赢得“web开发语言之战”。但实际上,Ruby的流行度与Rails密切相关,而Django只代表了一个已经很活跃的Python生态系统的一小部分。事实也证明,“Web开发语言之战”的重要性远低于人们的预期。即便从很多层面来讲,Ruby都凭借Rails赢得了这场争战,但这丝毫不影响Python成为当今最受欢迎的语言。这到底是为什么呢?
Oliphant的大手笔
为了揭开这个谜团,我们就不得不提一下一位大佬了,他就是TravisOliphant。追溯到年。当时,TravisOliphant还是BYU的助理教授,他仍未创办Anaconda(注:Anaconda是一个完全以Python为基础的,目前最成功的商业数据科学平台之一)。一年前,他参考科学计算库Numeric开发了NumPy。他后来又成为SciPy的创始人并兼任了PSF的主管。
在年,他与CarlBanks一起提交了PEP,这是Python的“缓冲区协议”的修订版。这为Python的兴起埋下了重要伏笔。
Python的缓冲协议:Python风靡全球的首要原因
缓冲器协议是(并且仍然是)一个极低级别的API,被其他库用来直接操纵内存缓冲区。这些是由解释器创建和使用的缓冲器,用于存储连续存储器中某些类型的数据(最初,主要是“类似数组的”数据类型和大小都被提前给出的数据结构)。
提供这样一个API的主要动机是:消除在只读取时复制数据的必要性,澄清缓冲区的所有权转移语意,并将数据存储在连续的存储器中(即使在多维数据结构的情况下),其中读取访问速度非常快。那些将使用该API的“其他库”一般都是用C写的,而且对性能十分敏感。这一新协议意味着,如果我创建了一个NumPy的int数组,其他库可以直接访问底层内存缓冲区,而不是间接访问或者在使用该数据之前复制该数据。
现在问题来了:什么类型的程序员会从快速、零拷贝的大量数据获取中受益呢?
当然是数据科学家了!
让我们们来梳理一下事件的发展过程:
Oliphant和Banks提出了Python的缓冲协议的修订,以简化对刚开始的NumPy项目工作所驱动的某些数据结构的底层内存的直接访问。
PEP(