注册
登录

您现在的位置是:首页 > 学无止境

无处不在的Python

木木彡82 2017-12-30 12:19:03 100人围观
转载自:http://insights.thoughtworks.cn/python/

1991年2月20号,后来被称为“仁慈的独裁者”的Guido van Rossum首次发布Python,当时这还只是作为一个名为Amoeba的操作系统项目中的辅助工具,Python甚至没有被正式立项。没有...

转载自:http://insights.thoughtworks.cn/python/

1991年2月20号,后来被称为“仁慈的独裁者”的Guido van Rossum首次发布Python,当时这还只是作为一个名为Amoeba的操作系统项目中的辅助工具,Python甚至没有被正式立项。没有人会想到,Amoeba项目在1996年就停止开发,而Python却在20多年后发展成为最流行的编程语言之一。

(图片来自:http://t.cn/RHGUMx6

Guido van Rossum设计Python的初衷,是希望用它来简化系统管理工具的开发,这个目标确实达到了,大部分Linux操作系统以及macOS都内置Python,更不用说还有Fabric,Ansible, Saltstack这些基于Python系统的管理工具。然而,只把主业做好,从来不是Python的唯一目标。世界这么大,Python要去看看。

不务正业的Python

当Python不再仅仅作为系统管理工具,迈出跨界的第一步时,就再也停不下来,从Web开发到科学计算,从3D建模到人工智能,从嵌入式开发到云计算和大数据,几乎每一个角落,都能看到Python的身影。

系统管理工具

Python从一开始就是为了提高系统管理效率而开发的。内置的os模块可以在兼容大部分主流操作系统的情况下,提供基本一致的操作方式,系统管理员的脚本只需要写一次,就可以运行在不同的操作系统上。借助Python简洁高效的语法,Python在复杂系统管理任务上的开发效率要远远高于Shell,同时执行效率也是远高于需要不停进程切换的Shell。为了可以使用常用的Linux命令行工具,David Beazley用Python在几天之内在Windows上开发了一套Linux常用的工具集

对于复杂的系统管理工作,目前流行的配置管理工具,如Fabric,Ansible,Saltstack等,可以让运维人员使用几行命令,让成百上千台服务器俯首帖耳。随着DevOps运动的发展,“基础设施即代码”的理念越来越深入人心,借助于molecule或者testinfra这样的工具,开发者可以像运行单元测试一样,对基础设施的配置进行测试。

Web开发

全世界第一个网站在1989年上线,而万维网(World Wide Web)在1994年被发明出来。可以说,Python是和互联网一起长大的。作为动态语言,并且具有更高的抽象层次的Python和Perl,很快就被开发者们发现更适合用于开发网站,并在早期互联网的兴起过程中发挥重要作用。

随着互联网的发展,很多以互联网为生的编程语言被发明出来,比如Java,PHP,Ruby等,逐渐超越了Python和Perl这些前辈。不过Python在Web开发领域仍然占有一席之地。比如著名的一站式Web框架Django,轻巧的Flask,高并发性能的Tornado等。一些著名的网站,也是在Python技术的支持下运行着,比如Youtube、Reddit、Pinterest、Dropbox、豆瓣等。

科学计算

在Web技术大行其道,Java、PHP等编程语言来势汹汹之时,Python的注意力却没有完全放在Web上面,随随便便的就把先发优势给放弃,转而搞科学计算去了。

Python在设计之初的一个理念是,尽可能的用英语或者高中代数中约定的表达方式来编程,所以尽管一开始的应用场景并没有考虑科学计算,但学术界却盯上了Python。1995年,一个研究如何让Python支持高效矩阵运算的小组成立,Python的创始人——Guido van Rossum也在这个小组之中,为了让Python能够更好地支持矩阵操作,还专门设计和修改了一些Python语法。就在这一年,Numeric数值计算库发布,在2006年,Numeric正式改名叫做NumPy。

进入新世纪,围绕NumPy,更多科学计算相关的工具包被开发出来,比如用于科学计算的SciPy,用于符号计算的SymPy,用于数据分析的Pandas,用于数据可视化的Matplotlib,以及可以实时画图的交互式开发环境IPython Notebook等。在Matlab等专业软件主导整个科学计算领域多年之后,Python用近10年的时间,在学术界赢得了一席之地。而当其他通用编程语言在Web浪潮中厮杀结束,回头也想要到科学计算中抢一块领地时,却发现事情已经变得比当年要难得多了。

云计算

在后互联网时代,云计算和大数据是被提起最多的两个概念。互联网的普及,带来了信息生产和交换成本的大幅降低,也因此导致了信息大爆炸。为了进一步降低成本,并释放数据的价值,云计算和大数据技术应运而生。

提到云计算,不得不提的就是OpenStack,目前已经成为了事实上的开源私有云平台标准。OpenStack选择Python作为主要开发语言,其最主要的原因,是Python作为胶水语言,可以和操作系统很好的交互,同时集成其他语言编写的工具库也很容易,而且Python自身的生态足够健壮,像分布式任务管理,Web开发等都能够很好的支撑。出于同样的原因,目前市场份额最大的公有云平台AWS在发布之初就提供Python SDK支持。

大数据

大数据技术的兴起,让很多新技术有了露脸的机会。比如Scala、R、Julia这些语言,曾经都是小众语言,但因为他们在大数据方面的优势,吸引了大量的开发者。除了这些小众语言之外,Java和Python算是在传统强势编程语言中没有掉队的两个。

Python的不掉队,要得益于其在科学计算领域的积累,比如Pandas和SciPy,这些曾经用在学术界的工具,在大数据处理中同样变得重要。因此,像Spark, H2O这样的大数据处理工具,核心部分并不是Python编写,但为了满足工具使用者的需求,都花了巨大精力来开发Python接口。除此之外,完全基于Python的工具,虽然不多,但还是存在,比如Airbnb开发的数据可视化工具superset和任务编排工具airflow。

仿真模拟

在程序员圈子里一提到Python,第一反应就是“上手简单”。正是由于简单,每个人都会写一点,就算不会写,也可以看懂,因此大家并不以会Python为多么骄傲的事情。相比Python,程序员们更愿意炫耀自己擅长Clojure或者Haskell这样相对复杂的编程语言。

不过简单也有简单的好。正是由于上手简单,让Python成为各种仿真模拟软件首选的脚本语言。比如大名鼎鼎的图片处理工具GIMP,3D模型制作工具3ds Max,Blender,电影特效工具Houdini, Maya,电影后期合成工具Nuke等等,都以Python作为脚本。

人工智能

自从AlphaGo战胜李世乭开始,人工智能就火得一塌糊涂。然而,人工智能并不是什么新概念,其历史已经超过了半个世纪。在人工智能领域过去这几十年的发展中,传统的主流编程语言明明是Lisp,而后起之秀也是像Prolog这样的语言。但是当这一波人工智能真正开始流行起来时,人们发现,那些流行的框架和工具,要么是用Python写的,比如Theano,要么是C++写的,但是Python作为接口语言,比如TensorFlow,Caffe,MxNet等。仅有的非Python框架Torch,在2017年也抵不住压力,开发了PyTorch。

其他

在算法交易和量化投资领域,Python是最佳选择之一

在嵌入式领域,广受欢迎的程序员玩具树莓派,选择Python作为主要编程接口。

在软件开发管理中,构建工具Scons和事务追踪工具Trac虽然不算特别流行,但也处于活跃的状态。

尽管Python的主要应用场景都在命令行,但不代表其不能做桌面软件开发,借助于PyQt和Kivy这些图形库,Python也可以开发出漂亮的桌面软件。

借用一句流行语:Python这么厉害,咋不上天呢?

事实上,NASA确实在使用Python来开发软件,主要是用于系统集成和卫星、火箭等的测试自动化方面。

软件开发的万金油

看似Python没有在哪个领域成为最好的编程语言,但是Python在各个领域都数得上号。从最初的系统管理到互联网时代,云计算和大数据时代,再到现在的人工智能时代,只有“不务正业”的Python,在每一波浪潮之中都在。

在领域细分的时代,像Python这样的通而不专的语言在每一个领域之内收到的重视都不如领域中的主要语言。然而时代在变,数字化浪潮伴随着人工智能与物联网的东风,汹涌而来,企业为了能够快速应对,不得不做出改变。

业务没有线上与线下之分,只有已经数字化和即将数字化之分。

为了跟上需求的变化,原本的“分析-设计-开发-集成-测试-上线”这个瀑布式开发流程被不断压缩。在敏捷软件开发运动的推动下,首先是开发和测试的界限不再明确;后来DevOps运动兴起,开发与运维之间的墙被打破;实时大数据架构和数据驱动业务的出现,让曾经原本相对独立的数据团队,也要更紧密的参与到业务开发中。

当所有的角色都在同一个团队中,为了一个业务目标而写代码的时候,用同样的语言进行交流就变得异常重要。这时候,不掉队的Python,优势就显现出来了。“不务正业”的Python曾在不同的领域中都占有一席之地,这让分属于不同的部门、不同角色的团队成员有机会使用Python来统一工作语言。不论是开发、测试、运维,还是数据科学家,Python都是一个虽然不是最好、但还不错的选择。

低成本试错的最佳选择

曾经,编程本身就是一项业务;现在,编程只是一个用来实现想法的工具。当年可以因为一个新概念,炒出很多新语言,比如面向对象技术的出现,并没有给企业的业务带来什么巨大创新,但却掀起了一波技术浪潮;而现在,一项新技术被提出来,企业首先要考虑能够在业务上带来什么收益。

像人工智能这样的新概念(或者说是老概念新提法),对于企业来说,本身的门槛相对较高,业务收益尚不明朗,如果要投入大量的人力和资金去学习全新的技术,对企业来说,风险是非常大的。然而为了创新,企业不能故步自封。尤其是作为追赶者或者初创企业,在互联网赢家通吃的规则下,创新甚至和企业的生死息息相关。因此,低成本试错是企业成功的关键。

利用开源软件或云服务,避免重新创造轮子,对于企业降低试错成本是非常有效果的。因为Python语言本身非常适合作为服务集成的“胶水”语言,所以很多开源软件和云服务都选择Python作为接口语言(比如Spark、TensorFlow、AWS等)。如果企业希望利用这些技术进行创新试验,Python是一个非常好的选择。

Python之后是谁?

Python的流行,并不是从一开始就设计好的剧本。只是在特定的时间,对于编程语言有特定的需求,而刚好Python满足这样的需求。Python作为一门编程语言,并不比其他编程语言更优秀。

技术没有最好,只有最合适。

如果要预测未来什么编程语言更流行,就必须要知道未来对于编程语言有什么样的需求。当前对于编程语言的需求是能够让不同角色使用,并且可以集成或者重用已有技术或服务,而Python上手快,可读性高,和其他语言的互通性好,刚好能够满足这样的需求。

如果未来某一天,对于程序执行速度的关注,超过了其他需求,也许C语言或者Go语言,会成为更流行的语言;如果是对于编程语言的抽象能力有更高要求,也许Elixir、Scala或者Clojure会更加流行;如果是对程序员数量的需求更高,就需要降低入门难度,也许Java还会再次流行;再或者,未来对于编程的需求,对于目前所有编程语言来说,都没办法满足,就会有新的编程语言出现。所以,未来的编程会走向何方,要看企业对于编程提出什么样的需求。

结束语

也许Python还有很多缺陷,在每一个方面都不是特别出色,但是它可以串联所有的关键技术,降低引入新技术的成本,可以让团队的成员具有共同语言,企业何乐而不为呢?

纯粹的编程已经不再,玩跨界,Python可以,你可以么?


文章评论

  • 登录后评论

点击排行