為什麼 Python 現在(2015年)越來越火了?
為什麼現在感覺很火熱?之前為什麼沒有代替php或者ruby
語言火不火主要表現的是市場的需求,和語言本身好不好是有相關性,沒有因果性
比如Python,我們七八年前就開始用了,當時有如醍醐灌頂,發現編程語言竟也可以如此優雅(原來一直用C++)。而大眾覺得開始火的這幾年,Python本身確沒有『突然』增加什麼更迷人的東西。
對於我來說,Python在很多年前我第一次打開ipython時就火了,同好不多,但個頂個的能扯上一翻。而現在動輒看到『python程序員』寫的代碼:
sum = 0
for i in range(len(num_list)):
sum += num_list[i]
我就有種看到douban變成約炮網站的悲哀
從理想上看,Python和C++是十分相似的,它們都想做萬金油。
C++是學術性的,大牛們都指著靠它揚名立萬,設計哲學是『什麼都想要』,首先要兼容C要快,其次是別的語言有的咱都要有,別的語言沒有的咱也要有。但是一方面C語言本身也不是很完善(比如頭文件這樣的粗暴的機制),另一方面為了運行時的爽快把新功能的臟活累活全往預處理、編譯上扔,導致C++的晦澀、艱深。用C++寫代碼有點像是用文言文寫公文,逼格滿滿,文采飛揚,需要耗費大量的精力在內容以外的地方。而看文言文公文(C++代碼)更是痛苦,首先你得熟悉各種反人類的語法(傳值/傳址/move語義、預處理、函數指針……),通曉歷代典故(effective C++, ……)
Python的想法不一樣,Python的核心是簡潔直接清晰,Python認為最好的方式只有一種,它也只呈現那最好的一面。Python的語法本身就是一種偽代碼的最佳實踐,而且這個『偽代碼』還是可以運行的。這造就了Python較低的使用門檻和極高的編程效率。用Python開發只要『有事兒說事兒』就好。ruby on rails最火的那幾年,有人問guido叔(Python作者)怎麼看,guido說的大概是:Python不需要殺手級應用,因為如果是這樣的話,Python在其它方面的作用就被忽略了。
回到話題本身,為什麼Python會顯得越來越火?
python最大的問題在於性能。性能問題其實是在設計時最容易被誤解的部分。C++以『接近C語言的性能』橫行多年。隨著物理硬體性能的顯著提升以及軟體複雜性的顯著提升,人們開始對性能有了更正確的看法。
首先,有些時候性能並不重要。IO密集型的業務大部分時間都在等待IO,節省不到1ms讓開發量增加幾倍似乎不是很划得來。
其次,有些時候程序員的效率比機器的效率更重要。對於很多複雜的邏輯性功能,使用更加清晰的語言比晦澀的語言給程序減少的負擔,可以大大增強軟體的質量。(尤其是公司給的待遇招不到知乎上的大牛程序員的時候)
於是,Python/Ruby/Java開始崛起了。用Python的『inside battery』就可以做到過去需要反覆造輪子、天天加班還做得不是那麼好的東西。我在看Python的源代碼時,突然有一種感覺:Python底層的源代碼其實可以理解為C語言的一些常用功能的庫(如hashmap實現的dict),Python進程就是載入了這些庫然後讀取配置文件(Python代碼)執行相應的邏輯。相同的功能,Python進行了一次轉義,肯定會比直接用C實現要慢,但你不一定能這麼快的寫出這樣運行比Python快的C代碼。(當然,知乎上的大牛還是除外)
於是,類似Python這樣的語言們解放了程序員的時間,程序員們寂寞難耐的夜晚可以有了更多的產出,一個一個的項目建立起來了,社區建立起來了,遲滯的市場也開始有感知了。
即便這樣,Python還有會心一擊:我也可以不那麼慢。Python可以十分方便地和C代碼融合到一起。Python和C的組合徹底解決了後顧之憂:先用Python快速開發快速搭建產品原型,然後找出性能瓶頸有針對性的性能優化。所謂好鋼用在刀刃上,節約時間,節省成本,減少風險,提高程序員的生活品質又有什麼不對呢?
泛泛而談,匿之
---------------------------------
鑒於最近知乎上的大學生太多,我再補充幾點
如果學校里教的是C++,那請你好好學,C++能學好的人證明素質還是相當不錯的。就比如熟悉文言文的人一般也很容易寫好白話文。當你學好C++之後,如果你不認同我的觀點,那也沒關係,C++的需求永遠是那麼旺盛,如果認同我的觀點,那就更好了,以後你看其它編程語言時就能有一個對比從而加深理解。
學生或研究人員與工程技術人員是不一樣的,工程技術人員只想又快又好的活兒幹得漂亮,而學生即使多花點時間去研究一些不一定那麼實際的問題也是很有必要的。
我最近招人,有一次,我問到C++,對方回答說『學校里學習過但經常上技術論壇大家都說C++不好』,可是如果你連C++虛函數都不知道是啥,又怎麼講得出C++的好或不好呢多圖預警,Bruce Eckel 是 MindView公司的總裁,C++標準委員會擁有表決權的成員之一,擁有應用物理學學士和計算機工程碩士學位。他寫的《Thinking in C++》一書被評為「最佳軟體開發圖書」。
然而幾年後,當他開始使用 Python時,成為了堅定的 Python 擁護者,下面是 Bruce Eckel 的 Why I Love Python,估計很多 Pythoner都看過:因為大家的電腦越來越快了!
不說 Python 幾乎萬能適配各種工程場景(Web開發、網路開發、系統開發、並行計算、科學計算等等等),已經強大到真正符合「人生苦短,快學 Python」的豪言壯語。
只說「人生苦短,快學 Python」這句口號吧,這口號多牛逼,比起當年我黨的口號還牛逼:「打土豪,分田地」。
口號這東西,越簡單越好喊越好普及,你們看「Python 黨」現在人數多壯大,而且大多數都是死忠。
至於為什麼說 Python 這個口號比我黨的更牛逼,你猜?幾年前 Python 在國內還只是一門小眾語言,但從 2011開始 到現在,Python 的百度搜索指數翻了10 倍,從下圖看得出 Python 在國內的流行度已經直逼 Java,大有趕超之勢
(百度指數)
一個行業火不火,就看有多少(自)媒體、培訓機構湧入進來為之瘋狂,用百度搜關鍵字「python」就有5條是培訓廣告,而Ruby、PHP、Go 等語言一條都沒有,顯然還是Python的生意更好做。我最早接觸 Python 是在 2010年,那時國內除了豆瓣、搜狐在用 Python 之外,很難看到有體量的公司用Python,而在美國,Python 其實一直都很流行,像 Google、Instagram、Dropbox、Youtube、Reddit、Quora 這些明星網站都在用Python做核心業務。從 Google Trands 看得出它一直處於平穩的趨勢,這兩年上升趨勢比較明顯,顯然主要貢獻來自於中國。
(Google Trands)
那麼國內這幾年 Python 怎麼突然就火起來了?
究其原因,大概可以從分3個階段來分析。
12~14年是雲計算最火的幾年,大批創業公司和巨頭擠破頭地進軍雲計算領域,大家都在做IAAS,最著名的雲計算開源平台OpenStack 就是基於Python 開發的,為此催生出不少Python 崗位
14~15年是「大眾創新,萬眾創業」口號喊得最響兩年,北京大街小巷似乎人人都是創業者,O2O、P2P產品如雨後春筍般冒出,什麼語言最適合快速搭建原型?當然是Python,Python 的開發速度一個頂三。
16~17年人工智慧火遍大江南北,AlphaGO 的出現讓業界為之興奮,人工智慧不再是概念,而人工智慧、機器學習的首選語言就是Python。
這兩年特別是網路爬蟲火得一塌糊塗,10個寫爬蟲的9個在用Python,曾經有一段時間知乎的Python話題全部被爬蟲相關的帖子刷屏,為什麼爬蟲這麼火,這個還是跟大數據有關,因為數據挖掘、分析、機器學習、人工智慧都需要大數據的支撐,而真正有大數據的廠商沒幾個,所以小廠不得不通過爬蟲去獲取數據。
為什麼偏偏就 Python 火了,其它語言沒有?
Ruby on Rails 最火的那幾年,有人問Python 之父吉多·范羅蘇姆怎麼看,他說:」Python 不需要殺手級應用,因為如果是這樣的話,Python 在其它方面的作用就被忽略了。」 Python 在網路爬蟲、數據分析、AI、機器學習、Web開發、金融、運維、測試等多個領域都有不俗的表現,從來沒有哪一種語言可以同時在這麼多領域紮根
Python 是一門兼具簡單與功能強大的編程語言,它專註於如何解決問題、自由開放的社區環境以及豐富的第三方庫,無需浪費時間去造輪子,各種Web框架、爬蟲框架、數據分析框架、機器學習框架應有盡有,拿來即用,如果你不知道去哪找第三庫,可以看看 awesome-python
儘管後起之秀 Go 語言為並發編程而生,效率高,但物理硬體性能已經顯著提升的情況下,編程語言帶來的性能影響已經不那麼重要的,開發速度才是人們首要關注的問題,即使真遇到的性能問題,那麼也可以用C語言無縫對接。
雖說Java是老大哥,江湖地位無人能撼動,但體型過於臃腫、冗長的語法被越來越多的開發者所詬病,這也是為什麼 Google 決定把 Kotlin 作為 Android 官方支持語言的主要原因
Python 的發展完全是由社區自我驅動的,喜歡Python的原因很簡單,因為它確確實實給開發者帶來了愉悅的編程體驗。
我覺得這和行業熱點有關。
php和ruby火是因為相對j2ee的輕量級web開發的興起而火的,而python是一門古老的全棧式語言,它的技術框架和相關庫也是最全最多的,但web框架和php和rails比是沒有優勢的。
然而最近數據是行業的熱點,numpy和scikit-learn等強大的machning learning庫,還有主流的大數據處理框架spark和hadoop多語言支持優先支持python api。
其實python和php,ruby都是一線的編程語言,只不過最近數據科學的興起讓人們更加註意到了python。
Life is short, you need Python --- Bruce Eckel因為python的非常靈活,適用性非常廣,學習成本低,出活快。
我用python干過的事情有:小爬蟲、gpu加速、web後台、c++代碼中的插件、在python中封裝c++的庫、機器間進程監控重啟、spark 程序。可以看到python可以從單機小程序一直寫到大型分散式程序,從web一直到伺服器後台。
-------------------2017-7-1更新--------------------------
最近在用tensorflow 做深度學習相關的事情,各大深度學習框架都在Python上提供最全面的介面~吐槽一句,,"傻子"都在學,,
Python 的學習這跨越各個專業,關鍵是簡單易懂,,用python能寫得出typhoon(颶風)的感覺,那種感覺真的是爽到不行。
可能是有人同時使用版本二和版本三,然後被重複統計了
差生永遠在進步,優秀生進一步就是超越極限了
我家裡一直備著萬能膠水
現在雲計算的時代啊,分散式這麼發達,一台機器搞不定,多台搞啊,當然這不是讓你寫程序不考慮資源了。python的開發速度快啊,雖然有的python也是call C庫,講一個項目中的經歷,我們有一款gateway 產品,用戶上網log 我們去爬,log被切分成分鐘級別壓縮數據zip,總python去爬兩行代碼解壓出數據就可以將數據分解開始了,但是結果發現效率達不到要求,就用C去爬,效率提高3倍,但是code開發效率低得不止3倍,在一台gateway伺服器上效率跟不上只能用C,最後我們有一個分散式產品來管理很多台gateway log,這個時候用python完全不是問題了。
前幾天RedMonk 發布了 2017 年一季度的編程語言排行榜:JavaScript 依然穩居榜首,Java 緊隨其後;PHP 在此榜單上首次出現下降,被 Python 反超,但仍然很受歡迎,排名第四;Ruby 從第五名降至第七;TypeScript 首次進入前二十強。
Python已經上升到第三名了,還不火么?
至於為什麼火……
大概就是因為Python能滿足我作為程序員的一切幻想:
- 提高了我的編碼效率
- 各種強大的第三方庫
- 能完成太多太多事情
那麼我們為什麼不用Python呢?Python為什麼不火呢?因為速度比C++、C、Java慢嗎?
Programmers waste enormous amounts of time thinking about, or worrying about, the speed of noncritical parts of their programs, and these attempts at efficiency actually have a strong negative impact when debugging and maintenance are considered. We should forget about small efficiencies, say about 97% of the time: premature optimization is the root of all evil.
- 人的時間比機器的時間值錢,而且機器可以堆。
- 獲得結果比節省運行時間更重要的領域開始火起來。
- 不靠編程吃飯的人需要一門萬能的語言。
因為懂軟體的人越來越多。
因為入門簡單一張圖就可以入門語法 除了編碼
豐富的第三方庫無論你做什麼都能找到合適的庫
基本上理科生都會有一點點的C基礎,so學習這個分分鐘就能搞定。
想做爬蟲搜爬蟲
想做web搜web
想做什麼搜什麼,基本上沒有語言層面的負擔。
寫個web服務,可以用python寫個伺服器腳本,可以用python寫個桌面客戶端,可以用python做機器學習數據挖掘,可以就用python寫測試工具自動化腳本,可以用pythonETC...而且震驚的是上面所有領域,python都可以名列前茅,python代碼量少效率快,社區豐富程度不輸java,所以說:人生苦短,我用python!
從哪裡看出來火了。。。
python一如既往的蹣跚前行,火的原因,是你最近比較關注而已。比如最近五年我不看F1了,不看NBA了,有些時候看到F1或是NBA的新聞,甚至覺得這貨怎麼還沒停擺,有人看嗎的錯覺。再比如今年看了幾場歐冠,甚至覺得歐冠今年太爽了,全是強隊,雖然我明知道歐冠新聞已經太久沒上過體育版頭條了,可在我覺得,依舊是非常火爆。
推薦閱讀:
※想提高編程能力,請大家評價這種學習方法是否可取?
※考慮到未來人工智慧的發展,應該學習C++/C語言還是Python語言?
※大學理科生零基礎自學計算機和編程有哪些書籍和方法比較好?
※對於一個程序員來說,寫代碼用台式機好還是筆記本好?
※如何系統的學習 Unity 3D 中的 shader 編寫(nvidia cg 編程)?