無處不在的Python
一、無處不在的Python
1991年2月20號,后來被稱為“仁慈的獨裁者”的Guido van Rossum***發(fā)布Python,當時這還只是作為一個名為Amoeba的操作系統(tǒng)項目中的輔助工具,Python甚至沒有被正式立項。沒有人會想到,Amoeba項目在1996年就停止開發(fā),而Python卻在20多年后發(fā)展成為***的編程語言之一。
Guido van Rossum設計Python的初衷,是希望用它來簡化系統(tǒng)管理工具的開發(fā),這個目標確實達到了,大部分Linux操作系統(tǒng)以及macOS都內置Python,更不用說還有Fabric,Ansible, Saltstack這些基于Python系統(tǒng)的管理工具。然而,只把主業(yè)做好,從來不是Python的唯一目標。世界這么大,Python要去看看。
二、不務正業(yè)的Python
當Python不再僅僅作為系統(tǒng)管理工具,邁出跨界的***步時,就再也停不下來,從Web開發(fā)到科學計算,從3D建模到人工智能,從嵌入式開發(fā)到云計算和大數(shù)據(jù),幾乎每一個角落,都能看到Python的身影。
1. 系統(tǒng)管理工具
Python從一開始就是為了提高系統(tǒng)管理效率而開發(fā)的。內置的os模塊可以在兼容大部分主流操作系統(tǒng)的情況下,提供基本一致的操作方式,系統(tǒng)管理員的腳本只需要寫一次,就可以運行在不同的操作系統(tǒng)上。借助Python簡潔高效的語法,Python在復雜系統(tǒng)管理任務上的開發(fā)效率要遠遠高于Shell,同時執(zhí)行效率也是遠高于需要不停進程切換的Shell。為了可以使用常用的Linux命令行工具,David Beazley用Python在幾天之內在Windows上開發(fā)了一套Linux常用的工具集。
對于復雜的系統(tǒng)管理工作,目前流行的配置管理工具,如Fabric,Ansible,Saltstack等,可以讓運維人員使用幾行命令,讓成百上千臺服務器俯首帖耳。隨著DevOps運動的發(fā)展,“基礎設施即代碼”的理念越來越深入人心,借助于molecule或者testinfra這樣的工具,開發(fā)者可以像運行單元測試一樣,對基礎設施的配置進行測試。
2. Web開發(fā)
全世界***個網(wǎng)站在1989年上線,而萬維網(wǎng)(World Wide Web)在1994年被發(fā)明出來。可以說,Python是和互聯(lián)網(wǎng)一起長大的。作為動態(tài)語言,并且具有更高的抽象層次的Python和Perl,很快就被開發(fā)者們發(fā)現(xiàn)更適合用于開發(fā)網(wǎng)站,并在早期互聯(lián)網(wǎng)的興起過程中發(fā)揮重要作用。
隨著互聯(lián)網(wǎng)的發(fā)展,很多以互聯(lián)網(wǎng)為生的編程語言被發(fā)明出來,比如Java,PHP,Ruby等,逐漸超越了Python和Perl這些前輩。不過Python在Web開發(fā)領域仍然占有一席之地。比如著名的一站式Web框架Django,輕巧的Flask,高并發(fā)性能的Tornado等。一些著名的網(wǎng)站,也是在Python技術的支持下運行著,比如Youtube、Reddit、Pinterest、Dropbox、豆瓣等。
3. 科學計算
在Web技術大行其道,Java、PHP等編程語言來勢洶洶之時,Python的注意力卻沒有完全放在Web上面,隨隨便便的就把先發(fā)優(yōu)勢給放棄,轉而搞科學計算去了。
Python在設計之初的一個理念是,盡可能的用英語或者高中代數(shù)中約定的表達方式來編程,所以盡管一開始的應用場景并沒有考慮科學計算,但學術界卻盯上了Python。1995年,一個研究如何讓Python支持高效矩陣運算的小組成立,Python的創(chuàng)始人——Guido van Rossum也在這個小組之中,為了讓Python能夠更好地支持矩陣操作,還專門設計和修改了一些Python語法。就在這一年,Numeric數(shù)值計算庫發(fā)布,在2006年,Numeric正式改名叫做NumPy。
進入新世紀,圍繞NumPy,更多科學計算相關的工具包被開發(fā)出來,比如用于科學計算的SciPy,用于符號計算的SymPy,用于數(shù)據(jù)分析的Pandas,用于數(shù)據(jù)可視化的Matplotlib,以及可以實時畫圖的交互式開發(fā)環(huán)境IPython Notebook等。在Matlab等專業(yè)軟件主導整個科學計算領域多年之后,Python用近10年的時間,在學術界贏得了一席之地。而當其他通用編程語言在Web浪潮中廝殺結束,回頭也想要到科學計算中搶一塊領地時,卻發(fā)現(xiàn)事情已經(jīng)變得比當年要難得多了。
4. 云計算
在后互聯(lián)網(wǎng)時代,云計算和大數(shù)據(jù)是被提起最多的兩個概念。互聯(lián)網(wǎng)的普及,帶來了信息生產(chǎn)和交換成本的大幅降低,也因此導致了信息大爆炸。為了進一步降低成本,并釋放數(shù)據(jù)的價值,云計算和大數(shù)據(jù)技術應運而生。
提到云計算,不得不提的就是OpenStack,目前已經(jīng)成為了事實上的開源私有云平臺標準。OpenStack選擇Python作為主要開發(fā)語言,其最主要的原因,是Python作為膠水語言,可以和操作系統(tǒng)很好的交互,同時集成其他語言編寫的工具庫也很容易,而且Python自身的生態(tài)足夠健壯,像分布式任務管理,Web開發(fā)等都能夠很好的支撐。出于同樣的原因,目前市場份額***的公有云平臺AWS在發(fā)布之初就提供Python SDK支持。
5. 大數(shù)據(jù)
大數(shù)據(jù)技術的興起,讓很多新技術有了露臉的機會。比如Scala、R、Julia這些語言,曾經(jīng)都是小眾語言,但因為他們在大數(shù)據(jù)方面的優(yōu)勢,吸引了大量的開發(fā)者。除了這些小眾語言之外,Java和Python算是在傳統(tǒng)強勢編程語言中沒有掉隊的兩個。
Python的不掉隊,要得益于其在科學計算領域的積累,比如Pandas和SciPy,這些曾經(jīng)用在學術界的工具,在大數(shù)據(jù)處理中同樣變得重要。因此,像Spark, H2O這樣的大數(shù)據(jù)處理工具,核心部分并不是Python編寫,但為了滿足工具使用者的需求,都花了巨大精力來開發(fā)Python接口。除此之外,完全基于Python的工具,雖然不多,但還是存在,比如Airbnb開發(fā)的數(shù)據(jù)可視化工具superset和任務編排工具airflow。
6. 仿真模擬
在程序員圈子里一提到Python,***反應就是“上手簡單”。正是由于簡單,每個人都會寫一點,就算不會寫,也可以看懂,因此大家并不以會Python為多么驕傲的事情。相比Python,程序員們更愿意炫耀自己擅長Clojure或者Haskell這樣相對復雜的編程語言。
不過簡單也有簡單的好。正是由于上手簡單,讓Python成為各種仿真模擬軟件***的腳本語言。比如大名鼎鼎的圖片處理工具GIMP,3D模型制作工具3ds Max,Blender,電影特效工具Houdini, Maya,電影后期合成工具Nuke等等,都以Python作為腳本。
7. 人工智能
自從AlphaGo戰(zhàn)勝李世乭開始,人工智能就火得一塌糊涂。然而,人工智能并不是什么新概念,其歷史已經(jīng)超過了半個世紀。在人工智能領域過去這幾十年的發(fā)展中,傳統(tǒng)的主流編程語言明明是Lisp,而后起之秀也是像Prolog這樣的語言。但是當這一波人工智能真正開始流行起來時,人們發(fā)現(xiàn),那些流行的框架和工具,要么是用Python寫的,比如Theano,要么是C++寫的,但是Python作為接口語言,比如TensorFlow,Caffe,MxNet等。僅有的非Python框架Torch,在2017年也抵不住壓力,開發(fā)了PyTorch。
8. 其他
在算法交易和量化投資領域,Python是***選擇之一。
在嵌入式領域,廣受歡迎的程序員玩具樹莓派,選擇Python作為主要編程接口。
在軟件開發(fā)管理中,構建工具Scons和事務追蹤工具Trac雖然不算特別流行,但也處于活躍的狀態(tài)。
盡管Python的主要應用場景都在命令行,但不代表其不能做桌面軟件開發(fā),借助于PyQt和Kivy這些圖形庫,Python也可以開發(fā)出漂亮的桌面軟件。
借用一句流行語:Python這么厲害,咋不上天呢?
事實上,NASA確實在使用Python來開發(fā)軟件,主要是用于系統(tǒng)集成和衛(wèi)星、火箭等的測試自動化方面。
三、軟件開發(fā)的萬金油
看似Python沒有在哪個領域成為***的編程語言,但是Python在各個領域都數(shù)得上號。從最初的系統(tǒng)管理,到互聯(lián)網(wǎng)時代,云計算和大數(shù)據(jù)時代,再到現(xiàn)在的人工智能時代,只有“不務正業(yè)”的Python,在每一波浪潮之中都在。
在領域細分的時代,像Python這樣的通而不專的語言在每一個領域之內收到的重視都不如領域中的主要語言。然而時代在變,數(shù)字化浪潮伴隨著人工智能與物聯(lián)網(wǎng)的東風,洶涌而來,企業(yè)為了能夠快速應對,不得不做出改變。
業(yè)務沒有線上與線下之分,只有已經(jīng)數(shù)字化和即將數(shù)字化之分。
為了跟上需求的變化,原本的“分析-設計-開發(fā)-集成-測試-上線”這個瀑布式開發(fā)流程被不斷壓縮。在敏捷軟件開發(fā)運動的推動下,首先是開發(fā)和測試的界限不再明確;后來DevOps運動興起,開發(fā)與運維之間的墻被打破;實時大數(shù)據(jù)架構和數(shù)據(jù)驅動業(yè)務的出現(xiàn),讓曾經(jīng)原本相對獨立的數(shù)據(jù)團隊,也要更緊密的參與到業(yè)務開發(fā)中。
當所有的角色都在同一個團隊中,為了一個業(yè)務目標而寫代碼的時候,用同樣的語言進行交流就變得異常重要。這時候,不掉隊的Python,優(yōu)勢就顯現(xiàn)出來了。“不務正業(yè)”的Python曾在不同的領域中都占有一席之地,這讓分屬于不同的部門、不同角色的團隊成員有機會使用Python來統(tǒng)一工作語言。不論是開發(fā)、測試、運維,還是數(shù)據(jù)科學家,Python都是一個雖然不是***、但還不錯的選擇。
四、低成本試錯的***選擇
曾經(jīng),編程本身就是一項業(yè)務;現(xiàn)在,編程只是一個用來實現(xiàn)想法的工具。當年可以因為一個新概念,炒出很多新語言,比如面向對象技術的出現(xiàn),并沒有給企業(yè)的業(yè)務帶來什么巨大創(chuàng)新,但卻掀起了一波技術浪潮;而現(xiàn)在,一項新技術被提出來,企業(yè)首先要考慮能夠在業(yè)務上帶來什么收益。
像人工智能這樣的新概念(或者說是老概念新提法),對于企業(yè)來說,本身的門檻相對較高,業(yè)務收益尚不明朗,如果要投入大量的人力和資金去學習全新的技術,對企業(yè)來說,風險是非常大的。然而為了創(chuàng)新,企業(yè)不能故步自封。尤其是作為追趕者或者初創(chuàng)企業(yè),在互聯(lián)網(wǎng)贏家通吃的規(guī)則下,創(chuàng)新甚至和企業(yè)的生死息息相關。因此,低成本試錯是企業(yè)成功的關鍵。
利用開源軟件或云服務,避免重新創(chuàng)造輪子,對于企業(yè)降低試錯成本是非常有效果的。因為Python語言本身非常適合作為服務集成的“膠水”語言,所以很多開源軟件和云服務都選擇Python作為接口語言(比如Spark、TensorFlow、AWS等)。如果企業(yè)希望利用這些技術進行創(chuàng)新試驗,Python是一個非常好的選擇。
五、Python之后是誰?
Python的流行,并不是從一開始就設計好的劇本。只是在特定的時間,對于編程語言有特定的需求,而剛好Python滿足這樣的需求。Python作為一門編程語言,并不比其他編程語言更優(yōu)秀。
技術沒有***,只有最合適。
如果要預測未來什么編程語言更流行,就必須要知道未來對于編程語言有什么樣的需求。當前對于編程語言的需求是能夠讓不同角色使用,并且可以集成或者重用已有技術或服務,而Python上手快,可讀性高,和其他語言的互通性好,剛好能夠滿足這樣的需求。
如果未來某一天,對于程序執(zhí)行速度的關注,超過了其他需求,也許C語言或者Go語言,會成為更流行的語言;如果是對于編程語言的抽象能力有更高要求,也許Elixir、Scala或者Clojure會更加流行;如果是對程序員數(shù)量的需求更高,就需要降低入門難度,也許Java還會再次流行;再或者,未來對于編程的需求,對于目前所有編程語言來說,都沒辦法滿足,就會有新的編程語言出現(xiàn)。所以,未來的編程會走向何方,要看企業(yè)對于編程提出什么樣的需求。
六、結束語
也許Python還有很多缺陷,在每一個方面都不是特別出色,但是它可以串聯(lián)所有的關鍵技術,降低引入新技術的成本,可以讓團隊的成員具有共同語言,企業(yè)何樂而不為呢?
純粹的編程已經(jīng)不再,玩跨界,Python可以,你可以么?
【本文是51CTO專欄作者“ThoughtWorks”的原創(chuàng)稿件,微信公眾號:思特沃克,轉載請聯(lián)系原作者】



























