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