無(wú)處不在的Python

1991年2月20號(hào),后來(lái)被稱為“仁慈的獨(dú)裁者”的Guido van Rossum首次發(fā)布Python,當(dāng)時(shí)這還只是作為一個(gè)名為Amoeba的操作系統(tǒng)項(xiàng)目中的輔助工具,Python甚至沒(méi)有被正式立項(xiàng)。沒(méi)有人會(huì)想到,Amoeba項(xiàng)目在1996年就停止開(kāi)發(fā),而Python卻在20多年后發(fā)展成為最流行的編程語(yǔ)言之一。

image.png

Guido van Rossum設(shè)計(jì)Python的初衷,是希望用它來(lái)簡(jiǎn)化系統(tǒng)管理工具的開(kāi)發(fā),這個(gè)目標(biāo)確實(shí)達(dá)到了,大部分Linux操作系統(tǒng)以及macOS都內(nèi)置Python,更不用說(shuō)還有Fabric,Ansible, Saltstack這些基于Python系統(tǒng)的管理工具。然而,只把主業(yè)做好,從來(lái)不是Python的唯一目標(biāo)。世界這么大,Python要去看看。

不務(wù)正業(yè)的Python

當(dāng)Python不再僅僅作為系統(tǒng)管理工具,邁出跨界的第一步時(shí),就再也停不下來(lái),從Web開(kāi)發(fā)到科學(xué)計(jì)算,從3D建模到人工智能,從嵌入式開(kāi)發(fā)到云計(jì)算和大數(shù)據(jù),幾乎每一個(gè)角落,都能看到Python的身影。

系統(tǒng)管理工具

Python從一開(kāi)始就是為了提高系統(tǒng)管理效率而開(kāi)發(fā)的。內(nèi)置的os模塊可以在兼容大部分主流操作系統(tǒng)的情況下,提供基本一致的操作方式,系統(tǒng)管理員的腳本只需要寫(xiě)一次,就可以運(yùn)行在不同的操作系統(tǒng)上。借助Python簡(jiǎn)潔高效的語(yǔ)法,Python在復(fù)雜系統(tǒng)管理任務(wù)上的開(kāi)發(fā)效率要遠(yuǎn)遠(yuǎn)高于Shell,同時(shí)執(zhí)行效率也是遠(yuǎn)高于需要不停進(jìn)程切換的Shell。為了可以使用常用的Linux命令行工具,David Beazley用Python在幾天之內(nèi)在Windows上開(kāi)發(fā)了一套Linux常用的工具集

對(duì)于復(fù)雜的系統(tǒng)管理工作,目前流行的配置管理工具,如Fabric,Ansible,Saltstack等,可以讓運(yùn)維人員使用幾行命令,讓成百上千臺(tái)服務(wù)器俯首帖耳。隨著DevOps運(yùn)動(dòng)的發(fā)展,“基礎(chǔ)設(shè)施即代碼”的理念越來(lái)越深入人心,借助于molecule或者testinfra這樣的工具,開(kāi)發(fā)者可以像運(yùn)行單元測(cè)試一樣,對(duì)基礎(chǔ)設(shè)施的配置進(jìn)行測(cè)試。

image.png

Web開(kāi)發(fā)

全世界第一個(gè)網(wǎng)站在1989年上線,而萬(wàn)維網(wǎng)(World Wide Web)在1994年被發(fā)明出來(lái)。可以說(shuō),Python是和互聯(lián)網(wǎng)一起長(zhǎng)大的。作為動(dòng)態(tài)語(yǔ)言,并且具有更高的抽象層次的Python和Perl,很快就被開(kāi)發(fā)者們發(fā)現(xiàn)更適合用于開(kāi)發(fā)網(wǎng)站,并在早期互聯(lián)網(wǎng)的興起過(guò)程中發(fā)揮重要作用。

隨著互聯(lián)網(wǎng)的發(fā)展,很多以互聯(lián)網(wǎng)為生的編程語(yǔ)言被發(fā)明出來(lái),比如Java,PHP,Ruby等,逐漸超越了Python和Perl這些前輩。不過(guò)Python在Web開(kāi)發(fā)領(lǐng)域仍然占有一席之地。比如著名的一站式Web框架Django,輕巧的Flask,高并發(fā)性能的Tornado等。一些著名的網(wǎng)站,也是在Python技術(shù)的支持下運(yùn)行著,比如Youtube、Reddit、Pinterest、Dropbox、豆瓣等。

科學(xué)計(jì)算

在Web技術(shù)大行其道,Java、PHP等編程語(yǔ)言來(lái)勢(shì)洶洶之時(shí),Python的注意力卻沒(méi)有完全放在Web上面,隨隨便便的就把先發(fā)優(yōu)勢(shì)給放棄,轉(zhuǎn)而搞科學(xué)計(jì)算去了。

Python在設(shè)計(jì)之初的一個(gè)理念是,盡可能的用英語(yǔ)或者高中代數(shù)中約定的表達(dá)方式來(lái)編程,所以盡管一開(kāi)始的應(yīng)用場(chǎng)景并沒(méi)有考慮科學(xué)計(jì)算,但學(xué)術(shù)界卻盯上了Python。1995年,一個(gè)研究如何讓Python支持高效矩陣運(yùn)算的小組成立,Python的創(chuàng)始人——Guido van Rossum也在這個(gè)小組之中,為了讓Python能夠更好地支持矩陣操作,還專門(mén)設(shè)計(jì)和修改了一些Python語(yǔ)法。就在這一年,Numeric數(shù)值計(jì)算庫(kù)發(fā)布,在2006年,Numeric正式改名叫做NumPy。

image.png

進(jìn)入新世紀(jì),圍繞NumPy,更多科學(xué)計(jì)算相關(guān)的工具包被開(kāi)發(fā)出來(lái),比如用于科學(xué)計(jì)算的SciPy,用于符號(hào)計(jì)算的SymPy,用于數(shù)據(jù)分析的Pandas,用于數(shù)據(jù)可視化的Matplotlib,以及可以實(shí)時(shí)畫(huà)圖的交互式開(kāi)發(fā)環(huán)境IPython Notebook等。在Matlab等專業(yè)軟件主導(dǎo)整個(gè)科學(xué)計(jì)算領(lǐng)域多年之后,Python用近10年的時(shí)間,在學(xué)術(shù)界贏得了一席之地。而當(dāng)其他通用編程語(yǔ)言在Web浪潮中廝殺結(jié)束,回頭也想要到科學(xué)計(jì)算中搶一塊領(lǐng)地時(shí),卻發(fā)現(xiàn)事情已經(jīng)變得比當(dāng)年要難得多了。

云計(jì)算

在后互聯(lián)網(wǎng)時(shí)代,云計(jì)算和大數(shù)據(jù)是被提起最多的兩個(gè)概念。互聯(lián)網(wǎng)的普及,帶來(lái)了信息生產(chǎn)和交換成本的大幅降低,也因此導(dǎo)致了信息大爆炸。為了進(jìn)一步降低成本,并釋放數(shù)據(jù)的價(jià)值,云計(jì)算和大數(shù)據(jù)技術(shù)應(yīng)運(yùn)而生。

提到云計(jì)算,不得不提的就是OpenStack,目前已經(jīng)成為了事實(shí)上的開(kāi)源私有云平臺(tái)標(biāo)準(zhǔn)。OpenStack選擇Python作為主要開(kāi)發(fā)語(yǔ)言,其最主要的原因,是Python作為膠水語(yǔ)言,可以和操作系統(tǒng)很好的交互,同時(shí)集成其他語(yǔ)言編寫(xiě)的工具庫(kù)也很容易,而且Python自身的生態(tài)足夠健壯,像分布式任務(wù)管理,Web開(kāi)發(fā)等都能夠很好的支撐。出于同樣的原因,目前市場(chǎng)份額最大的公有云平臺(tái)AWS在發(fā)布之初就提供Python SDK支持。

大數(shù)據(jù)

大數(shù)據(jù)技術(shù)的興起,讓很多新技術(shù)有了露臉的機(jī)會(huì)。比如Scala、R、Julia這些語(yǔ)言,曾經(jīng)都是小眾語(yǔ)言,但因?yàn)樗麄冊(cè)诖髷?shù)據(jù)方面的優(yōu)勢(shì),吸引了大量的開(kāi)發(fā)者。除了這些小眾語(yǔ)言之外,Java和Python算是在傳統(tǒng)強(qiáng)勢(shì)編程語(yǔ)言中沒(méi)有掉隊(duì)的兩個(gè)。

Python的不掉隊(duì),要得益于其在科學(xué)計(jì)算領(lǐng)域的積累,比如Pandas和SciPy,這些曾經(jīng)用在學(xué)術(shù)界的工具,在大數(shù)據(jù)處理中同樣變得重要。因此,像Spark, H2O這樣的大數(shù)據(jù)處理工具,核心部分并不是Python編寫(xiě),但為了滿足工具使用者的需求,都花了巨大精力來(lái)開(kāi)發(fā)Python接口。除此之外,完全基于Python的工具,雖然不多,但還是存在,比如Airbnb開(kāi)發(fā)的數(shù)據(jù)可視化工具superset和任務(wù)編排工具airflow。

image.png

仿真模擬

在程序員圈子里一提到Python,第一反應(yīng)就是“上手簡(jiǎn)單”。正是由于簡(jiǎn)單,每個(gè)人都會(huì)寫(xiě)一點(diǎn),就算不會(huì)寫(xiě),也可以看懂,因此大家并不以會(huì)Python為多么驕傲的事情。相比Python,程序員們更愿意炫耀自己擅長(zhǎng)Clojure或者Haskell這樣相對(duì)復(fù)雜的編程語(yǔ)言。

不過(guò)簡(jiǎn)單也有簡(jiǎn)單的好。正是由于上手簡(jiǎn)單,讓Python成為各種仿真模擬軟件首選的腳本語(yǔ)言。比如大名鼎鼎的圖片處理工具GIMP,3D模型制作工具3ds Max,Blender,電影特效工具Houdini, Maya,電影后期合成工具Nuke等等,都以Python作為腳本。

人工智能

自從AlphaGo戰(zhàn)勝李世乭開(kāi)始,人工智能就火得一塌糊涂。然而,人工智能并不是什么新概念,其歷史已經(jīng)超過(guò)了半個(gè)世紀(jì)。在人工智能領(lǐng)域過(guò)去這幾十年的發(fā)展中,傳統(tǒng)的主流編程語(yǔ)言明明是Lisp,而后起之秀也是像Prolog這樣的語(yǔ)言。但是當(dāng)這一波人工智能真正開(kāi)始流行起來(lái)時(shí),人們發(fā)現(xiàn),那些流行的框架和工具,要么是用Python寫(xiě)的,比如Theano,要么是C++寫(xiě)的,但是Python作為接口語(yǔ)言,比如TensorFlow,Caffe,MxNet等。僅有的非Python框架Torch,在2017年也抵不住壓力,開(kāi)發(fā)了PyTorch。

其他

在算法交易和量化投資領(lǐng)域,Python是最佳選擇之一

在嵌入式領(lǐng)域,廣受歡迎的程序員玩具樹(shù)莓派,選擇Python作為主要編程接口。

在軟件開(kāi)發(fā)管理中,構(gòu)建工具Scons和事務(wù)追蹤工具Trac雖然不算特別流行,但也處于活躍的狀態(tài)。

盡管Python的主要應(yīng)用場(chǎng)景都在命令行,但不代表其不能做桌面軟件開(kāi)發(fā),借助于PyQt和Kivy這些圖形庫(kù),Python也可以開(kāi)發(fā)出漂亮的桌面軟件。

借用一句流行語(yǔ):Python這么厲害,咋不上天呢?

事實(shí)上,NASA確實(shí)在使用Python來(lái)開(kāi)發(fā)軟件,主要是用于系統(tǒng)集成和衛(wèi)星、火箭等的測(cè)試自動(dòng)化方面。

[圖片上傳失敗...(image-101f2c-1514355103274)]

軟件開(kāi)發(fā)的萬(wàn)金油

看似Python沒(méi)有在哪個(gè)領(lǐng)域成為最好的編程語(yǔ)言,但是Python在各個(gè)領(lǐng)域都數(shù)得上號(hào)。從最初的系統(tǒng)管理到互聯(lián)網(wǎng)時(shí)代,云計(jì)算和大數(shù)據(jù)時(shí)代,再到現(xiàn)在的人工智能時(shí)代,只有“不務(wù)正業(yè)”的Python,在每一波浪潮之中都在。

在領(lǐng)域細(xì)分的時(shí)代,像Python這樣的通而不專的語(yǔ)言在每一個(gè)領(lǐng)域之內(nèi)收到的重視都不如領(lǐng)域中的主要語(yǔ)言。然而時(shí)代在變,數(shù)字化浪潮伴隨著人工智能與物聯(lián)網(wǎng)的東風(fēng),洶涌而來(lái),企業(yè)為了能夠快速應(yīng)對(duì),不得不做出改變。

業(yè)務(wù)沒(méi)有線上與線下之分,只有已經(jīng)數(shù)字化和即將數(shù)字化之分。

為了跟上需求的變化,原本的“分析-設(shè)計(jì)-開(kāi)發(fā)-集成-測(cè)試-上線”這個(gè)瀑布式開(kāi)發(fā)流程被不斷壓縮。在敏捷軟件開(kāi)發(fā)運(yùn)動(dòng)的推動(dòng)下,首先是開(kāi)發(fā)和測(cè)試的界限不再明確;后來(lái)DevOps運(yùn)動(dòng)興起,開(kāi)發(fā)與運(yùn)維之間的墻被打破;實(shí)時(shí)大數(shù)據(jù)架構(gòu)和數(shù)據(jù)驅(qū)動(dòng)業(yè)務(wù)的出現(xiàn),讓曾經(jīng)原本相對(duì)獨(dú)立的數(shù)據(jù)團(tuán)隊(duì),也要更緊密的參與到業(yè)務(wù)開(kāi)發(fā)中。

當(dāng)所有的角色都在同一個(gè)團(tuán)隊(duì)中,為了一個(gè)業(yè)務(wù)目標(biāo)而寫(xiě)代碼的時(shí)候,用同樣的語(yǔ)言進(jìn)行交流就變得異常重要。這時(shí)候,不掉隊(duì)的Python,優(yōu)勢(shì)就顯現(xiàn)出來(lái)了。“不務(wù)正業(yè)”的Python曾在不同的領(lǐng)域中都占有一席之地,這讓分屬于不同的部門(mén)、不同角色的團(tuán)隊(duì)成員有機(jī)會(huì)使用Python來(lái)統(tǒng)一工作語(yǔ)言。不論是開(kāi)發(fā)、測(cè)試、運(yùn)維,還是數(shù)據(jù)科學(xué)家,Python都是一個(gè)雖然不是最好、但還不錯(cuò)的選擇。

低成本試錯(cuò)的最佳選擇

曾經(jīng),編程本身就是一項(xiàng)業(yè)務(wù);現(xiàn)在,編程只是一個(gè)用來(lái)實(shí)現(xiàn)想法的工具。當(dāng)年可以因?yàn)橐粋€(gè)新概念,炒出很多新語(yǔ)言,比如面向?qū)ο蠹夹g(shù)的出現(xiàn),并沒(méi)有給企業(yè)的業(yè)務(wù)帶來(lái)什么巨大創(chuàng)新,但卻掀起了一波技術(shù)浪潮;而現(xiàn)在,一項(xiàng)新技術(shù)被提出來(lái),企業(yè)首先要考慮能夠在業(yè)務(wù)上帶來(lái)什么收益。

像人工智能這樣的新概念(或者說(shuō)是老概念新提法),對(duì)于企業(yè)來(lái)說(shuō),本身的門(mén)檻相對(duì)較高,業(yè)務(wù)收益尚不明朗,如果要投入大量的人力和資金去學(xué)習(xí)全新的技術(shù),對(duì)企業(yè)來(lái)說(shuō),風(fēng)險(xiǎn)是非常大的。然而為了創(chuàng)新,企業(yè)不能故步自封。尤其是作為追趕者或者初創(chuàng)企業(yè),在互聯(lián)網(wǎng)贏家通吃的規(guī)則下,創(chuàng)新甚至和企業(yè)的生死息息相關(guān)。因此,低成本試錯(cuò)是企業(yè)成功的關(guān)鍵。

利用開(kāi)源軟件或云服務(wù),避免重新創(chuàng)造輪子,對(duì)于企業(yè)降低試錯(cuò)成本是非常有效果的。因?yàn)镻ython語(yǔ)言本身非常適合作為服務(wù)集成的“膠水”語(yǔ)言,所以很多開(kāi)源軟件和云服務(wù)都選擇Python作為接口語(yǔ)言(比如Spark、TensorFlow、AWS等)。如果企業(yè)希望利用這些技術(shù)進(jìn)行創(chuàng)新試驗(yàn),Python是一個(gè)非常好的選擇。

Python之后是誰(shuí)?

Python的流行,并不是從一開(kāi)始就設(shè)計(jì)好的劇本。只是在特定的時(shí)間,對(duì)于編程語(yǔ)言有特定的需求,而剛好Python滿足這樣的需求。Python作為一門(mén)編程語(yǔ)言,并不比其他編程語(yǔ)言更優(yōu)秀。

技術(shù)沒(méi)有最好,只有最合適。

如果要預(yù)測(cè)未來(lái)什么編程語(yǔ)言更流行,就必須要知道未來(lái)對(duì)于編程語(yǔ)言有什么樣的需求。當(dāng)前對(duì)于編程語(yǔ)言的需求是能夠讓不同角色使用,并且可以集成或者重用已有技術(shù)或服務(wù),而Python上手快,可讀性高,和其他語(yǔ)言的互通性好,剛好能夠滿足這樣的需求。

如果未來(lái)某一天,對(duì)于程序執(zhí)行速度的關(guān)注,超過(guò)了其他需求,也許C語(yǔ)言或者Go語(yǔ)言,會(huì)成為更流行的語(yǔ)言;如果是對(duì)于編程語(yǔ)言的抽象能力有更高要求,也許Elixir、Scala或者Clojure會(huì)更加流行;如果是對(duì)程序員數(shù)量的需求更高,就需要降低入門(mén)難度,也許Java還會(huì)再次流行;再或者,未來(lái)對(duì)于編程的需求,對(duì)于目前所有編程語(yǔ)言來(lái)說(shuō),都沒(méi)辦法滿足,就會(huì)有新的編程語(yǔ)言出現(xiàn)。所以,未來(lái)的編程會(huì)走向何方,要看企業(yè)對(duì)于編程提出什么樣的需求。

結(jié)束語(yǔ)

也許Python還有很多缺陷,在每一個(gè)方面都不是特別出色,但是它可以串聯(lián)所有的關(guān)鍵技術(shù),降低引入新技術(shù)的成本,可以讓團(tuán)隊(duì)的成員具有共同語(yǔ)言,企業(yè)何樂(lè)而不為呢?

純粹的編程已經(jīng)不再,玩跨界,Python可以,你可以么?

?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
平臺(tái)聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡(jiǎn)書(shū)系信息發(fā)布平臺(tái),僅提供信息存儲(chǔ)服務(wù)。

推薦閱讀更多精彩內(nèi)容