查看原文
其他

Python 高速增长的三次历史机遇

gashero Python猫 2019-06-24

花下猫语: Python 在最近几年确实很火,这导致很多人对 Python 心生疑惑:Python 这么火,到底是名副其实的呢,还是被培训机构们过度吹捧了呢?跟其它语言相比,Python 真的有那么“无所不能”么,它到底有什么长项是旁人不能及的?

事实上,Python 诞生快 30 年了,在最初的 10 多年里,它根本无法与其它编程语言抗衡。不像今天某些语言的家里有个富有的爹扶持,Python 就是一介穷小子出身,能取得今天的成绩,实属不易。

关于 Python 的“天赋”和后天习得的种种“武艺”,我们已经多篇文章写过,后续也会继续写下去。而今天分享的文章,主要介绍的是帮助 Python 成长起来的三次重大机遇。

这篇文章来自知乎的一个问答,作者 gashero 是前果壳网技术总监,资深 Python 工程师,多才多艺的极客。为保证阅读体验,转载时略有删减。

图片来源:pexels

作者:gashero(本文经原作者授权转载,不得二次转载)

来源:https://dwz.cn/CmzWkFQD

很多对Python不熟悉的人,认为Python在最近这些年的兴起是运气而已。本文帮助大家回顾一下过去十几年Python的3次增长和对应的历史背景。

Python设计之处的特点,包括易学易用,以及作为胶水语言。易学易用是个难以量化的东西,但至少我接触的绝大多数朋友都认同Python在学习和使用上是比大部分语言简单的。有些人不认同Python通常也不是认为Python相对其他语言难学,而是认为Python的运行速度慢,或者动态类型语言的通病。至于胶水语言就比较窄了,面向作为胶水而设计的语言是很少的,印象里只有Lua算得上一个。另一个Python相较其他语言的优势是字符串处理。

以下介绍Python获得发展的3次机遇期。

2006年的搜索/NLP:2006年前后正好是搜索引擎公司发展的爆发期。那一年Google中国李开复搞了关门弟子计划,百度也做了诸多广告,比如百度更懂中文系列。在那个时代搜索引擎就是IT行业的高科技。之后不久,阿里巴巴也搞了个ASC(阿里巴巴搜索技术研究中心),后来多次追潮流更名,一直作为阿里巴巴内部的前沿研发部门。

而Python用作搜索引擎和NLP是很有历史的。早期Google在90年代开发搜索引擎爬虫就是使用Python实现的。而即便是现在,开发爬虫,Python也基本上就是第一选择。很多人学习Python的入门程序也是爬虫。而Python适合开发爬虫的关键在于Python的字符串处理是很方便的。

也就是从2006年末开始,国内的python-cn邮件列表涌入了大量的新人,并以爬虫为例开始深入学习Python。

2010年的WEB创业潮:2010年开始,国内外出现了新一轮的创业潮,大家开发的是各种各样的网站。此时的WEB开发上,Python已经逐步成为主流WEB服务器开发选项中的一种。相对于同时代的Java和PHP等,有着开发效率上的优势。

正因为早期创业公司需要迅速的迭代和试错,使得这个时代的Python成为了一个不错的选项。进而让更多工程师开始学习起来Python。

也就是从这个时期开始,才逐渐有较多的公司会公开招聘Python工程师。在此前招聘Python工程师的广告是非常非常少见的。

2014年的Deep Learning:从2014年开始火起来的深度学习上,Python的优势是近乎绝对的。深度学习的主流开发语言只有C++和Python两种了,其他语言可以认为根本就没能在这里分到什么像样的空间。所有主流的Deep Learning框架,也是官方直接提供了C++和Python两种接口。而由于C++开发的难度,当前确实有不少从业工程师是直接用Python搞定深度学习的相关步骤。

这次Python的增长期被更多不了解Python的人认为是Python的狗屎运。但其背后的逻辑反倒是非常坚固的。原因就是Python是个很好的胶水。最初的起点是numpy库。

numpy是封装了BLAS的科学计算库。BLAS是对CPU向量指令集高度优化的数学运算库。通过BLAS进行科学计算可以得到顶级的计算性能,这个计算性能比未经向量指令集优化的C程序还能快上数倍。而numpy的另一个重要特点就是,把buffer做了封装,使得buffer的内容是无需Python处理的,而是实际交给特定的软件库来处理,numpy只是负责维护该buffer的生命周期,形状等元数据。这就使得numpy的计算性能不会受到Python的影响,但同时却可以利用Python的易学易用来管理buffer的生命周期。

numpy对buffer的管理带来的易用性优势在后来得到了很大的发展。如以下几点:

OpenCV:在opencv-python中就是使用了numpy.array来管理图像数据,却没有像C++接口一样使用Mat。同样的顶级性能。

PyCuda/PyOpenCL:也是利用了numpy.array来透明传递数据给GPU做高性能计算。尤其是集成了JIT,使得可以用字符串的方式传递kernel function,不再像C++一样要独立编译一遍。

Caffe/TensorFlow:同样利用了numpy.array,并利用了PyCuda/PyOpenCL的集成。

所以这样一路发现下来,由Python是个好胶水,就真的把若干很好用的库全流程的粘在了一起。在流程集成上都是顶级的性能,而没有Python的性能损耗,同时带来了非常好的易用性。

相比其他语言,对这些C/C++库的玩法都是先封装一层对象,包准封装的前后对不上。而且因为大部分语言并不是面向胶水设计,开发C接口都很困难。自然与这些高性能计算库的结合困难重重。累计起来就与Python产生了差距。

随机推荐,偶遇精彩

1

GIL 已经被杀死了么?

2

Facebook工程师给Python学习者的进阶指南

3

sum() 函数性能堪忧,列表降维有何良方?

4

Python进阶:如何将字符串常量转为变量?


最后补两句:

1、Facebook工程师给Python学习者的进阶指南 极客时间的课程优惠还有 2 天结束,有需要的同学不要错过了。

2、本月 25 日开始,有当当满 400 减 230 活动,我这里有优惠码,想购书的同学请留意了(数量有限,可提前找我预约)。

    您可能也对以下帖子感兴趣

    文章有问题?点此查看未经处理的缓存