Python風靡全宇宙,首要原因竟是它?
眾所周知,Python是目前使用最廣泛且用戶增長最快的編程語言。優(yōu)雅簡潔的語法、強大的第三方庫支持等都是Python能夠風靡各行各業(yè)的原因。然而,你或許不知道,Python能夠實現用戶飛速增長,背后其實另有玄機。
就讓我們從近年來大數據的興起說起,為你娓娓道來Python火爆的真正原因。
郁悶的大數據程序員
隨著大數據的崛起,大多數行業(yè)發(fā)現自己進入了一種恐慌狀態(tài):他們花費了大量的時間和金錢來建立他們的大數據渠道,但是他們的投資回報率卻很低。在毫無喘息機會的競爭中,雖然能夠挖取到日益增長的數據,但大多數公司并沒有一個明確的計劃來處理他們挖取到的數據。當時,幾乎每個人都認為,有了大量的數據存儲,后面的分析就會變得更簡單,數據的業(yè)務價值也會變得顯而易見。這在今天聽起來可能很愚蠢,但大多數人依舊認為,只要獲取到足夠的數據,數據背后的規(guī)律和信息就會自動浮現。
被時代召喚的“數據科學家”
隨后,業(yè)界幾乎同時覺醒,他們希望得到的各種卓越遠見和希望回答的問題都需要嚴格的數學分析和驗證。 SQL查詢能讓你知道數據最明顯的模式和趨勢,但要想獲取數據中最為有用的信息,你需要的其實是完全不同的另一套技術——一套牢固扎根于數學和應用數學的技能。而具備這種技術的人才似乎只存在于學術界中。此外,負責分析這些龐大數據集的人不僅需要非常強大的數學背景,還需要能夠編寫軟件。這也不難解釋為什么“數據科學家”這一職位頻繁出現在招聘網站上了。
Ruby與Python的“Web開發(fā)語言之爭”
我們再往回講講,在大數據還沒有真正風靡之前,Ruby和Python曾在成為***的“web開發(fā)語言”上發(fā)生過激烈的爭戰(zhàn)。 兩者都非常適合開發(fā)Web應用程序。 Ruby的受歡迎程度與Rails框架密切相關。 在那個年代,大多數自稱為“Ruby程序員”其實更應該稱自己為 “Rails程序員”。 而Python在學術界和少數不同行業(yè)已經相當完善。 在Python中,與Rails最相近的是Django,Django盡管在Rails之前發(fā)布,但它的受歡迎程度似乎遠遠落后于Rails。
很多人認為,Python和Ruby的性能都很相似,最終只會有一種語言能夠贏得“web開發(fā)語言之戰(zhàn)”。 但實際上,Ruby的流行度與Rails密切相關,而Django只代表了一個已經很活躍的Python生態(tài)系統的一小部分。事實也證明,“Web開發(fā)語言之戰(zhàn)”的重要性遠低于人們的預期。即便從很多層面來講,Ruby都憑借Rails贏得了這場爭戰(zhàn),但這絲毫不影響Python成為當今***的語言。這到底是為什么呢?
Oliphant的大手筆
為了揭開這個謎團,我們就不得不提一下一位大佬了,他就是Travis Oliphant。追溯到2006年。當時,Travis Oliphant還是BYU的助理教授,他仍未創(chuàng)辦Anaconda(注:Anaconda是一個完全以Python為基礎的,目前最成功的商業(yè)數據科學平臺之一)。 一年前,他參考科學計算庫Numeric開發(fā)了NumPy。 他后來又成為SciPy的創(chuàng)始人并兼任了PSF的主管。
在2006年,他與Carl Banks一起提交了PEP 3118,這是Python的“緩沖區(qū)協議”的修訂版。這為Python的興起埋下了重要伏筆。
Python的緩沖協議:Python風靡全球的首要原因
緩沖器協議是(并且仍然是)一個極低級別的API,被其他庫用來直接操縱內存緩沖區(qū)。 這些是由解釋器創(chuàng)建和使用的緩沖器,用于存儲連續(xù)存儲器中某些類型的數據(最初,主要是“類似數組的”數據類型和大小都被提前給出的數據結構)。
提供這樣一個API的主要動機是:消除在只讀取時復制數據的必要性,澄清緩沖區(qū)的所有權轉移語意,并將數據存儲在連續(xù)的存儲器中(即使在多維數據結構的情況下),其中讀取訪問速度非常快。 那些將使用該API的“其他庫”一般都是用C寫的,而且對性能十分敏感。 這一新協議意味著,如果我創(chuàng)建了一個NumPy的int數組,其他庫可以直接訪問底層內存緩沖區(qū),而不是間接訪問或者在使用該數據之前復制該數據。
現在問題來了:什么類型的程序員會從快速、零拷貝的大量數據獲取中受益呢?
當然是數據科學家了!
讓我們們來梳理一下事件的發(fā)展過程:
-
Oliphant和Banks提出了Python的緩沖協議的修訂,以簡化對剛開始的NumPy項目工作所驅動的某些數據結構的底層內存的直接訪問。
-
PEP 3118(https://www.python.org/dev/peps/pep-3118/) 提交,被認可,實施。
-
受益于PEP 3118的實現,Python已悄然成為一個非常吸引人的編譯語言。在此基礎上,就有了很多基于C語言擴展的數字計算庫被開發(fā)出來(注:C語言擴展可以很便捷地實現數據共享和操作。)
-
Python和Ruby在網絡上一決雌雄,大多數人認為“Web開發(fā)語言之戰(zhàn)”必有分曉。
-
隨著磁存儲設備價格暴跌,存儲大量數據以供日后分析變得可行(因為數據已經變得很廉價,***是先把數據保存起來,甚至都不需要去考慮具體要分析什么。)
-
對新一代程序員的需求發(fā)生變化:具有統計學背景,***還得有應用數學背景的,且先前有過一些編程經驗的程序員開始被哄搶——數據科學家的時代來臨了!
-
數據科學家們想尋找一種既具有表現力又快速的語言(具有良好的數值計算庫支持啟動),所有的這些需求都指向于Python
后來,就如我們看到的那樣,Python受到萬千寵愛,一躍成為了***的編程語言。
作者:Jeff Knupp
翻譯:吳蕾、霍靜