1. 程式人生 > >趣談程式設計史第3期-大器晚成的新晉流量Python發展史

趣談程式設計史第3期-大器晚成的新晉流量Python發展史

寫在前面

  這篇博文主要介紹javaScript的發展史,根據作者在B站釋出的同名視訊的文案整理修改而成,對視訊感興趣的博友可訪問https://www.bilibili.com/video/av86031488/

Python的誕生背景

  Python的創始人名叫Guido van Rossum,因為這個名字冗長又難記,調皮的中國程式設計師發揮拼音的特長給他起了個特短的名字,龜叔.    故事要從ABC開始說起,ABC不是中國農業銀行,也不是美國廣播公司,它是由荷蘭教學研究組織旗下的CWI負責研發的一種結構化高階語言.   1982年,龜叔從阿姆斯特丹大學畢業進入了該組織,參與ABC語言的研發,ABC語言致力於提高程式語言的可讀性和易用性,說白了就是降低程式語言的學習門檻,讓更多的非計算機專業的人也能快速上手.   上世紀80年代,最流行的語言就是C,C語言功能強大但是實現過程繁瑣,學習門檻也不低,而且你必須以機器而不是人的思維方式去程式設計,如果不是科班出身的程式設計師估計只能望C興嘆,而與之形成鮮明對比的是Shell,Shell字面意思就是殼,區別於核心,它實際上是一個命令直譯器,他接受使用者的命令然後送到系統核心去執行,簡單理解, 如果把系統核心比作汽車發動機,輪胎等裝置,Shell就是你的方向盤,離合剎車,Shell允許你使用一些簡單的指令碼把系統的功能連線在一起, 不是專業程式設計師也能很快上手,實現一些複雜功能,比如日誌定期備份,批量處理檔案等,雖然ABC語言在當時已經解決了可讀性以及易用性的問題,但並沒有獲得很大的成功,一方面由於執行ABC語言的編譯器需要更高配置的電腦,另一方面ABC的設計也有很多遺憾之處 比如擴充套件性很差,實現新功能的成本很大 ,有沒有一種語言即能像C一樣 無所不能,又能像Shell一樣 簡潔優雅呢?在龜叔的想象中,就有一個這樣前衛的語言,時尚時尚最時尚,程式設計肯定棒.

初出茅廬(Python第一個十年)

  1989年,龜叔為了打發無聊的聖誕節假期,開始動手編寫這個他想象之中的新語言,並且命名為Python,Python有蟒蛇的意思 但是這個Python並不是來源於此,據龜叔本人說這是為了紀念喜劇天才Monty Python,Monty Python是一個英國的喜劇團體,有喜劇界的披頭士之稱,1969年,Monty Python’s Flying Circus翻譯過來也就是巨蟒的飛翔馬戲團,第一季在BBC電視臺播出,並且迅速獲得觀眾的追捧,龜叔也是忠實觀眾之一.   1991年,第一個Python編譯器正式誕生,Python借鑑了ABC的很多語法規範,比如強制縮排,它是用C語言實現的,能夠呼叫C語言庫,並且具備了類 函式 異常處理以及模組系統等Python核心元件的雛形.   Python誕生後,得到了龜叔同事的歡迎,他們也都紛紛參與到Python的優化和改造工作中,由於Python最大程度的遮蔽機器底層的細節,讓Python直譯器去接管,程式設計師可以專注於業務邏輯,這一點讓Python在小圈子開始流行起來.   1994年,Python1.0正式釋出,這個版本加入了lambda, map, filter和reduce等新功能.   在Python誕生的第一個十年,屬於Python韜光養晦的十年,這段時期,Python還沒有真正走進大眾的視野 ,屬於小眾語言,但在小圈子裡Python已經小有名氣.

野蠻生長(Python第二個十年)

  2000年Python2.0釋出,Python2.0加入了記憶體回收機制,算是基本確定了現代Python語言框架的基礎,這時候Python還只是主要用來寫一些自動化指令碼,但是眼光獨到的社群開發者對Python的期待就遠不止如此,你這個實力,不去更大的舞臺上揚名立萬 ,豈能窩在指令碼領域上做了一個膠水語言.   2004年,Python的web框架Django誕生,這是一個Web解決方案的全家桶 功能強大全面,包含了幾乎所有WEB開發所需要的相關元件和功能,Django的面世極大的推動了Python在Web開發領域開疆拓土.   2005年,龜叔進入谷歌任職,江湖傳言,龜叔面試谷歌 簡歷上只有一行字I wrote Python,當然這事大概率就是個緋聞,感覺這種傳奇程式設計師也不需要簡歷吧,這裡我們多提一下谷歌公司,這個從1998年成立以搜尋引擎起家的軟體公司,如今已經成長為全球最偉大的網際網路公司之一,谷歌從成立初期就是Python的忠實粉絲,谷歌搜尋引擎的第一個版本 服務端程式碼是用Python完成的,包括後來的谷歌地圖 谷歌爬蟲 谷歌廣告等等都大量使用了Python,龜叔入職谷歌後,谷歌特許龜叔把自己一半的時間都用來維護和改進Python,從這個方面來看,谷歌和Python算是互相成就.   除了谷歌,還有大量公司在非常早期就使用了Python進行開發,這對Python的推廣至關重要,像喬治盧卡斯為了拍星球大戰建立的工業光魔特效公司,公司旗下的CGI部門就大量使用了Python,像美國最大的圖片分享網站,Instagram,世界最大的視訊網站Youtube,還有Netflix,Reddit等等這些鼎鼎大名的公司和機構,也都在網站開發,資料分析等很多地方使用了Python,不僅是商業公司,Python也受到了科技機構以及政府部門的歡迎,像美國中央情報局CIA,其官方網站就是使用Python開發,像美國航天局NASA以及很多科研機構都大量使用Python進行資料分析和運算,這讓Python獲得了極大的曝光率.   2008年,Pyhton3.0釋出,這個版本屬於大破大立,因為Python3.0並不能相容Python2,這個一定程度上給Python社群和使用者帶來了麻煩,因為經過Python2多年的深耕,在Python2上已經積累了很多成熟的解決方案以及相關庫,如果你直接選擇Python3可能有一些現有的庫無法直接呼叫,只能自己造輪子,那為什麼不能相容呢 ,因為Python2有一些讓人詬病的歷史遺留問題,比如文字字元和二進位制資料的二義性問題,,字元編碼的問題等.   網際網路公司總是滯後的,雖然2008年就釋出了Python3 但基本沒什麼人鳥它,Python2.X依然是市場主流 ,此時Python2和Python3並存發展,被官方同時維護更新.   2010年,Python榮獲當年TIOBE的年度程式語言 風頭一時無兩.   Python的第二個十年,是野蠻生長的十年,從小圈子到大世界,Python依靠自身簡單優雅的特性,以及藉助開源和社群數以百萬極客的群眾力量,不斷壯大聲勢,越來越多的開發者紛紛路人轉粉,投入到Python的懷抱,Python當年的迷妹粉也慢慢變成了親媽粉,目睹著Python從無人問津變成萬人敬仰,網際網路時代風起雲湧 ,從2006年開始,隨著神經網路,深度學習等技術的出現,重新點燃了一個可能會影響人類命運的高新技術科學,人工智慧,此時,大部分人還不知道 ,Python的封神之路才剛剛開始.

走上神壇(Python的第三個十年)

  2008年Python3.0釋出到2019年 ,除了偶爾的拖更 ,Python差不多以每年一個小版本的速度穩健發育,截止這個視訊釋出 ,Python最新版本已經來到了Python3.8,根據官方在2019年統計的2018年的使用情況,Python3的佔用率已經達到了84%,Python2正在慢慢退出歷史舞臺,並且官方也已經宣佈將在2020年停止維護.   接下來我們重點梳理一下人工智慧和Python的關係,AI這個詞最近幾年被炒得火熱,在國內,這個詞被廣大普通人熟悉,我感覺是開始於一個引發了全民狂歡的科技新聞,2016到2017年 谷歌開發的圍棋AI程式AlphaGo,接連擊敗歐洲冠軍樊麾,韓國九段棋手李世石,而後又贏了世界冠軍柯潔 登頂地球之巔,此時距離深藍計算機在國際象棋中橫掃人類選手剛好二十年,幾個月後 AlphaGo的升級版化名AlphaGo Zero捲土重來,僅經過3天的自我訓練就擊敗了擊敗了李世石的AlphaGo Lee,經過40天的訓練,又輕描淡寫的擊敗了擊敗了柯潔的AlphaGo Master,沒有一點點防備,也沒有一絲顧慮,圍棋這個被認為是人類智慧遮羞布的領域,就這麼猝不及防的就被機器按在地上狠狠地摩擦,這個徹底引發了輿論的狂歡,人們紛紛奔走相告 AI時代來臨了.    上面講的算是人工智慧在遊戲競技領域的應用,人工智慧的應用場景還有很多,比如計算機視覺 語音識別 無人駕駛 自然語言理解 個性化推薦等等.

Python和人工智慧

  那麼問題來了 ,Python和人工智慧是什麼關係 ,為什麼是Python獨得人工智慧的恩寵而不是其他語言.   我們先回答第一個問題,首先需要明確一點,人工智慧所有核心的演算法,都是依賴C或者C++完成的,這些演算法跑起來非常複雜,屬於計算密集型的任務,,需要榨乾硬體的每一分效能,而Python本身的效能只能說是可惜 ,Java的效能一直被人詬病 它比java還要更下一層樓,,如果一個人黑Python,肯定是朝效能這個點狠揍,Python在人工智慧,深度學習等領域扮演的更多是一個工具人的角色,也就是發揮一個前端或者說”花瓶”的作用,Python雖然不快但是它易學易用人易推倒 ,你只需要拿Python做做視覺化,調一下AI介面,寫寫展示層的邏輯就完事了,現在的人工智慧還處於人工智障的階段,快速搭建一個可以除錯和迭代的原型比啥都重要,而且一些專門搞科研和演算法的牛人精力都不在程式語言上,用Python就能以最低的學習成本快速上手,它不香嗎.   那問題又來了,簡單的語言也不只有你Python一家 ,Java學習成本也不高 ,即使拿指令碼語言來說事 ,Lua也同樣簡潔優雅 憑啥不配有姓名,這個問題就要結合歷史來看了 ,只能說Python前期優勢太大,尤其是和AI息息相關的資料分析領,Python更是深耕多年,早早佔據了先機,像一些廣受歡迎的資料分析框架,NumPy,Pandas等都是出自Python的手筆.   你以為這就完了嗎,我上面提到了谷歌和facebook對Python的鐘愛,而這兩家公司都是走在人工智慧前沿的先鋒,而谷歌釋出的深度學習框架TensorFlow,FaceBook推出的機器學習庫PyTorch,都是將Python放在了扛把子的位置.   你以為這就完了嗎,不僅如此 ,Python在學術圈和科研圈的滲透力度也遠非其他語言所能相提並論,放著簡單易學庫有多的Python不學,難道去學C++嗎,博士也是人 柿子也淨挑軟的捏.   你以為這就完了嗎,還有更狠的,連政府都出面背書以及協助推廣,奧巴馬政府和特朗普政府都投入了巨量的真金白銀來推廣計算機教育,在國內長期霸佔的中小學計算機入門語言的VB也隨著微軟的退出而逐漸失寵,那他們用啥語言替換VB呢,Python.

Python自身的幾大優勢

  說一千道一萬,外部的原因那都是浮雲,打鐵還需自身硬,沒有金剛鑽也幹不了這個瓷器活,我總結了Python的幾大優勢,以下幾個原因缺少一個,我都認為Python無法火到現在這種如日中天的程度.

簡單優雅

簡單意味好學,好學就意味著開發效率更高,,那什麼是優雅,同樣一個功能 ,C語言可能幾百行,java可能幾十行,而Python可能幾行就搞定了,這就是優雅,試想你要是自己創業開公司,沒錢沒人沒資源,你會選什麼語言呢?

開源免費

在程式語言界開源就是硬通貨,企業都是逐利的,錢能多花就少花 能少花就不花 ,像資料分析領域如雷貫耳的matlab,想獲得正版授權 價格著實不菲 而且版權問題也令人寒心,以後會不會被Python革命,我們騎驢看賬本

膠水特性 

  Python一度被人們認為是一種膠水語言,它不僅能和C或者C++混編,還能和java,C#搞到一起,標準版本的Python是使用C編譯的,稱為CPython,此外還有java的實現版本Jython ,.net的實現版本IronPython.

可移植性

  可移植性一方面和它開源免費有很大關係,另一方面,Python是解釋型語言 ,不需要編譯可以直接從原始碼中執行程式 ,這個依賴於Python強大的直譯器,程式語言從執行過程的角度,可以分為編譯型和解釋型兩種 ,我打一個不太合適的比喻幫助你理解 ,你去餐廳吃飯,假設你點了10個菜 ,如果是十個菜全部做好了,一併給你端上桌,這就是編譯型 ,如果是做好一個菜上一個菜,這就是解釋型 ,在這個比喻裡 你就是CPU 食材就是程式設計師的程式碼 菜就是你能識別的機器語言,可移植性主要說的就是跨平臺,你就理解成換桌 ,你說是十個菜一塊上你比較方便換桌還是一個菜一個菜的上比較方便換桌呢 

社群力量

  群眾的力量是巨大的,群眾的眼光是雪亮的,Python發展如此迅速 離不開無數社群程式設計師的添磚加瓦,而海量的第三方功能庫 更是社群送給Python的一份大禮,只要會用搜索引擎,恭喜你,你已經是一個合格的Python程式設計師了.

天公作美

  這個有點玄學的意味,但是我覺得也不容忽視,我舉兩個例子.   ABC語言沒有成功很大一部分原因是當時的硬體不爭氣,上世紀末,也就是Python剛出來那幾年 你猜怎麼著,個人計算機飛入尋常百姓家,電腦效能大幅提高,人們不再專注於搜刮硬體效能 而是轉而關注計算機的易用性,Python帶著誠意迎面撲來 可謂是求錘得錘.   VB這門語言由於視覺化的優勢多年來在編外入門以及教育領域風光無限,在程式設計新手村可謂出盡風頭,你猜這麼著 微軟為了推廣.net平臺不再維護它了,Python帶著誠意撲面而來 可謂是想玩啥來啥.

總結和展望

  Python以指令碼語言起家,最初被設計用來編寫自動化指令碼,Python的設計從人的視角出發,以人為本 ,使得其語法有幾分自然語言的風格,這就註定了它的不平凡.    在面世的前十,Python本來打算以普通人的身份和世人相處,但是換來的確是疏遠,並沒有獲得多大的關注.   進入二十一世紀以來,尤其是近十年間,憑藉自身優雅簡潔易推倒的特質,以及機器學習,人工智慧,大資料處理等高新技術的興起和發展,指令碼這個小寺廟 早已容不下Python這尊大佛,Python在越來越多的領域攻城略地 捷報頻傳,包括但不限於 資料分析,網路爬蟲,web開發,機器學習等,十年寒窗無人問 一朝成名天下知,當年的名不見經傳的毛頭小子,已經成長為腳踏七彩祥雲的蓋世英雄.   Python爆紅即像是順勢而為 多年媳婦熬成婆,又像是天選之子 命格無雙 ,生來就是要牛逼的 ,對於Python的未來我抱有很大的期待,作為一個主要使用java進行開發的鹹魚程式設計師,憶往昔 看今朝 我此起彼伏,我覺得Python在未來極有可能和java並駕齊驅,甚至是後來居上.   Python語言從群眾中來 到群眾中去,隨著奇點臨近,AI時代的到來,Python必然還會再上一層樓,網際網路的風口瞬息萬變 ,唯一不變的就是變化本身,不管世界怎麼變,Python已經於風口浪尖處穩穩站住了腳跟,未來的程式語言必然會有Python的一席之地