也許Python還有不少缺陷,在每個方面都不是特別出色,可是它能夠串聯全部的關鍵技術,下降引入新技術的成本,可讓團隊的成員具備共同語言,企業何樂而不爲呢?html
1、無處不在的Pythonpython
1991年2月20號,後來被稱爲「仁慈的獨裁者」的Guido van Rossum首次發佈Python,當時這還只是做爲一個名爲Amoeba的操做系統項目中的輔助工具,Python甚至沒有被正式立項。沒有人會想到,Amoeba項目在1996年就中止開發,而Python卻在20多年後發展成爲最流行的編程語言之一。linux
Guido van Rossum設計Python的初衷,是但願用它來簡化系統管理工具的開發,這個目標確實達到了,大部分Linux操做系統以及macOS都內置Python,更不用說還有Fabric,Ansible, Saltstack這些基於Python系統的管理工具。然而,只把主業作好,歷來不是Python的惟一目標。世界這麼大,Python要去看看。程序員
2、遊手好閒的Python算法
當Python再也不僅僅做爲系統管理工具,邁出跨界的第一步時,就再也停不下來,從Web開發到科學計算,從3D建模到人工智能,從嵌入式開發到雲計算和大數據,幾乎每個角落,都能看到Python的身影。編程
1. 系統管理工具服務器
Python從一開始就是爲了提升系統管理效率而開發的。內置的os模塊能夠在兼容大部分主流操做系統的狀況下,提供基本一致的操做方式,系統管理員的腳本只須要寫一次,就能夠運行在不一樣的操做系統上。藉助Python簡潔高效的語法,Python在複雜系統管理任務上的開發效率要遠遠高於Shell,同時執行效率也是遠高於須要不停進程切換的Shell。爲了可使用經常使用的Linux命令行工具,David Beazley用Python在幾天以內在Windows上開發了一套Linux經常使用的工具集。架構
對於複雜的系統管理工做,目前流行的配置管理工具,如Fabric,Ansible,Saltstack等,可讓運維人員使用幾行命令,讓成百上千臺服務器俯首帖耳。隨着DevOps運動的發展,「基礎設施即代碼」的理念愈來愈深刻人心,藉助於molecule或者testinfra這樣的工具,開發者能夠像運行單元測試同樣,對基礎設施的配置進行測試。併發
2. 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、豆瓣等。
3. 科學計算
在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浪潮中廝殺結束,回頭也想要到科學計算中搶一塊領地時,卻發現事情已經變得比當年要可貴多了。
4. 雲計算
在後互聯網時代,雲計算和大數據是被提起最多的兩個概念。互聯網的普及,帶來了信息生產和交換成本的大幅下降,也所以致使了信息大爆炸。爲了進一步下降成本,並釋放數據的價值,雲計算和大數據技術應運而生。
提到雲計算,不得不提的就是OpenStack,目前已經成爲了事實上的開源私有云平臺標準。OpenStack選擇Python做爲主要開發語言,其最主要的緣由,是Python做爲膠水語言,能夠和操做系統很好的交互,同時集成其餘語言編寫的工具庫也很容易,並且Python自身的生態足夠健壯,像分佈式任務管理,Web開發等都可以很好的支撐。出於一樣的緣由,目前市場份額最大的公有云平臺AWS在發佈之初就提供Python SDK支持。
5. 大數據
大數據技術的興起,讓不少新技術有了露臉的機會。好比Scala、R、Julia這些語言,曾經都是小衆語言,但由於他們在大數據方面的優點,吸引了大量的開發者。除了這些小衆語言以外,Java和Python算是在傳統強勢編程語言中沒有掉隊的兩個。
Python的不掉隊,要得益於其在科學計算領域的積累,好比Pandas和SciPy,這些曾經用在學術界的工具,在大數據處理中一樣變得重要。所以,像Spark, H2O這樣的大數據處理工具,核心部分並非Python編寫,但爲了知足工具使用者的需求,都花了巨大精力來開發Python接口。除此以外,徹底基於Python的工具,雖然很少,但仍是存在,好比Airbnb開發的數據可視化工具superset和任務編排工具airflow。
6. 仿真模擬
在程序員圈子裏一提到Python,第一反應就是「上手簡單」。正是因爲簡單,每一個人都會寫一點,就算不會寫,也能夠看懂,所以你們並不以會Python爲多麼驕傲的事情。相比Python,程序員們更願意炫耀本身擅長Clojure或者Haskell這樣相對複雜的編程語言。
不過簡單也有簡單的好。正是因爲上手簡單,讓Python成爲各類仿真模擬軟件首選的腳本語言。好比大名鼎鼎的圖片處理工具GIMP,3D模型製做工具3ds Max,Blender,電影特效工具Houdini, Maya,電影后期合成工具Nuke等等,都以Python做爲腳本。
7. 人工智能
自從AlphaGo打敗李世乭開始,人工智能就火得一塌糊塗。然而,人工智能並非什麼新概念,其歷史已經超過了半個世紀。在人工智能領域過去這幾十年的發展中,傳統的主流編程語言明明是Lisp,然後起之秀也是像Prolog這樣的語言。可是當這一波人工智能真正開始流行起來時,人們發現,那些流行的框架和工具,要麼是用Python寫的,好比Theano,要麼是C++寫的,可是Python做爲接口語言,好比TensorFlow,Caffe,MxNet等。僅有的非Python框架Torch,在2017年也抵不住壓力,開發了PyTorch。
8. 其餘
在算法交易和量化投資領域,Python是最佳選擇之一。
在嵌入式領域,廣受歡迎的程序員玩具樹莓派,選擇Python做爲主要編程接口。
在軟件開發管理中,構建工具Scons和事務追蹤工具Trac雖然不算特別流行,但也處於活躍的狀態。
儘管Python的主要應用場景都在命令行,但不表明其不能作桌面軟件開發,藉助於PyQt和Kivy這些圖形庫,Python也能夠開發出漂亮的桌面軟件。
借用一句流行語:Python這麼厲害,咋不上天呢?
事實上,NASA確實在使用Python來開發軟件,主要是用於系統集成和衛星、火箭等的測試自動化方面。
3、軟件開發的萬金油
看似Python沒有在哪一個領域成爲最好的編程語言,可是Python在各個領域都數得上號。從最初的系統管理,到互聯網時代,雲計算和大數據時代,再到如今的人工智能時代,只有「遊手好閒」的Python,在每一波浪潮之中都在。
在領域細分的時代,像Python這樣的通而不專的語言在每個領域以內收到的重視都不如領域中的主要語言。然而時代在變,數字化浪潮伴隨着人工智能與物聯網的東風,洶涌而來,企業爲了可以快速應對,不得不作出改變。
業務沒有線上與線下之分,只有已經數字化和即將數字化之分。
爲了跟上需求的變化,本來的「分析-設計-開發-集成-測試-上線」這個瀑布式開發流程被不斷壓縮。在敏捷軟件開發運動的推進下,首先是開發和測試的界限再也不明確;後來DevOps運動興起,開發與運維之間的牆被打破;實時大數據架構和數據驅動業務的出現,讓曾經本來相對獨立的數據團隊,也要更緊密的參與到業務開發中。
當全部的角色都在同一個團隊中,爲了一個業務目標而寫代碼的時候,用一樣的語言進行交流就變得異常重要。這時候,不掉隊的Python,優點就顯現出來了。「遊手好閒」的Python曾在不一樣的領域中都佔有一席之地,這讓分屬於不一樣的部門、不一樣角色的團隊成員有機會使用Python來統一工做語言。不管是開發、測試、運維,仍是數據科學家,Python都是一個雖然不是最好、但還不錯的選擇。
4、低成本試錯的最佳選擇
曾經,編程自己就是一項業務;如今,編程只是一個用來實現想法的工具。當年能夠由於一個新概念,炒出不少新語言,好比面向對象技術的出現,並無給企業的業務帶來什麼巨大創新,但卻掀起了一波技術浪潮;而如今,一項新技術被提出來,企業首先要考慮可以在業務上帶來什麼收益。
像人工智能這樣的新概念(或者說是老概念新提法),對於企業來講,自己的門檻相對較高,業務收益尚不明朗,若是要投入大量的人力和資金去學習全新的技術,對企業來講,風險是很是大的。然而爲了創新,企業不能故步自封。尤爲是做爲追趕者或者初創企業,在互聯網贏家通吃的規則下,創新甚至和企業的生死息息相關。所以,低成本試錯是企業成功的關鍵。
利用開源軟件或雲服務,避免從新創造輪子,對於企業下降試錯成本是很是有效果的。由於Python語言自己很是適合做爲服務集成的「膠水」語言,因此不少開源軟件和雲服務都選擇Python做爲接口語言(好比Spark、TensorFlow、AWS等)。若是企業但願利用這些技術進行創新試驗,Python是一個很是好的選擇。
5、Python以後是誰?
Python的流行,並非從一開始就設計好的劇本。只是在特定的時間,對於編程語言有特定的需求,而恰好Python知足這樣的需求。Python做爲一門編程語言,並不比其餘編程語言更優秀。
技術沒有最好,只有最合適。
若是要預測將來什麼編程語言更流行,就必需要知道將來對於編程語言有什麼樣的需求。當前對於編程語言的需求是可以讓不一樣角色使用,而且能夠集成或者重用已有技術或服務,而Python上手快,可讀性高,和其餘語言的互通性好,恰好可以知足這樣的需求。
若是將來某一天,對於程序執行速度的關注,超過了其餘需求,也許C語言或者Go語言,會成爲更流行的語言;若是是對於編程語言的抽象能力有更高要求,也許Elixir、Scala或者Clojure會更加流行;若是是對程序員數量的需求更高,就須要下降入門難度,也許Java還會再次流行;再或者,將來對於編程的需求,對於目前全部編程語言來講,都沒辦法知足,就會有新的編程語言出現。因此,將來的編程會走向何方,要看企業對於編程提出什麼樣的需求。
6、結束語
也許Python還有不少缺陷,在每個方面都不是特別出色,可是它能夠串聯全部的關鍵技術,下降引入新技術的成本,可讓團隊的成員具備共同語言,企業何樂而不爲呢?
純粹的編程已經再也不,玩跨界,Python能夠,你能夠麼?
本文地址:http://www.linuxprobe.com/python-everywhere.html編輯:燁子,審覈員:逄增寶