1. 程式人生 > >數百種程式語言,我為什麼只學Python?

數百種程式語言,我為什麼只學Python?

點選上方“中興開發者社群”,關注我們

每天讀一篇一線開發者原創好文640?wx_fmt=png&wxfrom=5&wx_lazy=1

如果讓你從數百種的程式語言中選擇一個入門語言?你會選擇哪一個?

640?wx_fmt=jpeg&wxfrom=5&wx_lazy=1

是應用率最高、長期霸佔排行榜的常青藤 Java?是易於上手,難以精通的 C?還是在遊戲和工具領域仍佔主流地位的 C++?亦或是佔據 Windows 桌面應用程式半壁江山的 C#?......

我想,每個人可能會根據工作要求的必然條件、興趣愛好的充分條件,做出相應不同的選擇。

也有很多工程師在學習一門新的技術時,會擔心自己所學的技術是否會越來越流行,儘量去避免學習了一個非常小眾和冷門的技術。

這種擔憂是可以理解的,畢竟,一門技術使用的人越多,對於早期學習這門技術的工程師來說,就有越多的好處和優勢。

與此同時,如果學習了一門冷門的技術,不但英雄無用武之地,而且,在求職市場上也沒有什麼優勢。

要問我的入門程式語言選擇,我首選一定是 Python,其具體原因可以引用一位網友的回答,「學完 Python,可以上天」

640?wx_fmt=png

Python 流行度

如果大家身處網際網路,一定能夠切身地感受到 Python 語言的流行程度。Python 語言由於其簡單易學、語法優美、應用領域廣泛等諸多優點,俘獲了大批的粉絲。

但是,拿不出確切的證據,很多開發者也無法說服自己靜下心來學習,接下來我們就用資料來說話。

程式語言排行榜

首先,我們瞭解一下近期程式語言排行榜中,Python 語言排名的變化。TIOBE 每個月釋出的程式語言排行榜是程式語言流行趨勢的一個指標,每個月更新。

這份排行榜排名基於網際網路上有經驗的工程師、課程和第三方廠商的數量,使用搜索引擎進行計算而得,一定程度上反映了程式語言的熱度。

640?wx_fmt=png

2017 年 9 月 TIOBE 程式語言排行榜

640?wx_fmt=png

2017 年 10 月 TIOBE 程式語言排行榜

640?wx_fmt=png

2017 年 11 月 TIOBE 程式語言排行榜

從近三個月的排行看,Python 一直穩定在排行榜的前五名。但程式語言排行榜僅能反應 Python 語言當下的流行程度,並不能回答 Python 是否越來越流行這個問題。

不過,我們可以從 TIOBE 釋出的歷史資料中找到一些線索。在 2015 年 2 月份釋出的 TIOBE 程式語言排行榜中,Python 還排在第 8 名的位置,短短兩年半的時間,Python 語言已經躥升到第 4 名,其上升速度不可謂不快。

Google trends

既然 TIOBE 的程式語言排行榜是根據搜尋引擎得到的資料,那麼,我們也可以通過搜尋引擎得到 Python 的搜尋指數,通過搜尋指數來檢視 Python 語言熱度的變化。圖1.1 給出了最近 4 年,Python 這個關鍵詞的 Google 搜尋指數。

640?wx_fmt=png

圖 1.1 Python 的 Google 搜尋指數

圖 1.1 中可以看到,從全球範圍來看,Python 語言是越來越流行的,其熱度超過了以往任何時候。

從中國的搜尋指數來看,Python 語言已經不是越來越流行這麼簡單了,而是出現了爆發式的增長。2014 年以前,Python 在中國都屬於小眾語言,從 2014 年開始,Python 在中國越來越火爆。

一個有趣的事實是,在圖 1.1 給出的 Python 搜尋指數中,Python 在中國的搜尋每年都會有一個非常明顯的、向下的尖刺。

這個尖刺所在的時間正好與春節的時間吻合,說明春節對所有中國人都是一個重要的節日,在春節期間,很少有人還在鑽研技術了。

微信搜尋指數

我們再來看一下最新發布的微信搜尋指數中,Python 語言的熱度如何。圖 1.2 給出了Python、Java、PHP 和 Ruby 的微信搜尋指數對比圖。

640?wx_fmt=png

圖 1.2 Python的微信搜尋指數

由於微信最多支援 4 個關鍵詞進行比較,因此,我們選擇了 Java、PHP、Ruby 與 Python 進行比較。

選擇 Java 是因為它是一門比 Python 使用更加廣泛的程式語言;選擇 PHP 是因為它被認為是“世界上最好的”程式語言;選擇 Ruby 是因為,它是所有程式語言中,與 Python 定位最接近的程式語言。

從圖中可以看出,Python 語言和 Java 語言的微信搜尋指數遙遙領先,並且,Python 語言的微信搜尋指數比 Java 語言還要略高一點。

基於以上的程式語言排行榜、Google 搜尋指數和微信搜尋指數這幾個不同的資料來源,檢視了 Python 語言的流行程度。

現在,我們可以非常明確的得出一個結論——Python 語言越來越流行,而且現在非常火。

為什麼 Python 語言會越來越流行

原因諸多,例如:

  • 越來越多的工程師使用 Python 進行大資料處理。

  • 科研工作者開始使用 Python 來進行資料分析。

  • 系統管理員使用 Python 管理 Linux 系統。

  • 開源的雲端計算平臺 OpenStack 使用 Python 語言開發。

  • 很多程式設計愛好者使用 Python 進行爬蟲等。

但是,筆者認為,Python 語言之所以越來越流行,使用越來越廣泛,主要還是得益於其自身的諸多優點。對 Python 的愛與恨,可以歸集到那些不得不說的優缺點:

顯著的優點

Python 語言擁有諸多的優點,以下幾個優點特別顯著:

  • 簡單易學:Python 語言相對於其他程式語言來說,屬於比較容易學習的一門程式語言,它注重的是如何解決問題而不是程式語言的語法和結構。

    正是因為 Python 語言簡單易學,所以,已經有越來越多的初學者選擇 Python 語言作為程式設計的入門語言。

    例如,在浙江省 2017 年高中資訊科技改革中,《演算法與程式設計》課程將使用 Python 語言替換原有的 VB 語言。

  • 語法優美:Python 語言力求程式碼簡潔、優美。在 Python 語言中,採用縮排來標識程式碼塊,通過減少無用的大括號,去除語句末尾的分號等視覺雜訊,使得程式碼的可讀性顯著提高。

    閱讀一段良好的 Python 程式就感覺像是在讀英語一樣,它使你能夠專注於解決問題,而不用太糾結程式語言本身的語法。

  • 豐富強大的庫:Python 語言號稱自帶電池(Battery Included),寓意是 Python 語言的類庫非常的全面,包含了解決各種問題的類庫。無論實現什麼功能,都有現成的類庫可以使用。

    如果一個功能比較特殊,標準庫沒有提供相應的支援,那麼,很大概率也會有相應的開源專案提供了類似的功能。合理使用 Python 的類庫和開源專案,能夠快速的實現功能,滿足業務需求。

  • 開發效率高:Python 的各個優點是相輔相成的。例如,Python 語言因為有了豐富強大的類庫,所以,Python 的開發效率能夠顯著提高。相對於 C、C++ 和 Java 等編譯語言,Python 開發者的效率提高了數倍。

    實現相同的功能,Python 程式碼的檔案往往只有 C、C++ 和 Java 程式碼的 1/5~1/3。雖然 Python 語言擁有很多吸引人的特性,但是,各大網際網路公司廣泛使用 Python 語言,很大程度上是因為 Python 語言開發效率高這個特點。

    開發效率高的語言,能夠更好的滿足網際網路快速迭代的需求,因此,Python 語言在網際網路公司使用非常廣泛。

  • 應用領域廣泛:Python 語言的另一大優點就是應用領域廣泛,工程師可以使用 Python 做很多的事情。

    例如,Web 開發、網路程式設計、自動化運維、Linux 系統管理、資料分析、科學計算、人工智慧、機器學習等等。

    Python 語言介於指令碼語言和系統語言之間,我們根據需要,既可以將它當做一門指令碼語言來編寫指令碼,也可以將它當做一個系統語言來編寫服務。

不可忽視的缺點

Python 並不是沒有缺點的,最主要的缺點有以下幾個:

  • Python 的執行速度不夠快:當然,這也不是一個很嚴重的問題,一般情況下,我們不會拿 Python 語言與 C/C++ 這樣的語言進行直接比較。

    在 Python 語言的執行速度上,一方面,網路或磁碟的延遲,會抵消掉部分 Python 本身消耗的時間;另一方面,因為 Python 特別容易和 C 結合起來。

    因此,我們可以通過分離一部分需要優化速度的應用,將其轉換為編譯好的擴充套件,並在整個系統中使用 Python 指令碼將這部分應用連線起來,以提高程式的整體效率。

  • Python 的 GIL 鎖限制併發:Python 的另一個大問題是,對多處理器支援不好。如果讀者接觸 Python 時間比較長,那麼,一定聽說過 GIL 這個詞。

    GIL 是指 Python 全域性直譯器鎖(Global Interpreter Lock),當 Python 的預設直譯器要執行位元組碼時,都需要先申請這個鎖。這意味著,如果試圖通過多執行緒擴充套件應用程式,將總是被這個全域性直譯器鎖限制。

    當然,我們可以使用多程序的架構來提高程式的併發,也可以選擇不同的 Python 實現來執行我們的程式。

  • Python 2 與 Python 3 不相容:如果一個普通的軟體或者庫,不能夠做到後向相容,那麼,它會被使用者無情的拋棄了。

    在 Python 中,一個槽點是 Python 2 與 Python 3 不相容。因為 Python 沒有向後相容,給所有的 Python 工程師帶來了無數的煩惱。

Python 如何上手?

瞭解了 Python 的整體趨勢及優缺點,接下來自然是如何學習 Python?

在此筆者的建議是:

  • 找一本淺顯易懂比較好的教程。無須多種選擇,僅精選一本,從頭到尾看完。將教程中的案例自己親手實踐一遍。

  • 通過實際專案練手。如果僅是紙上談兵,可能過目就忘,所以最好是要有真實的專案做。注意,真實專案不一定非要是商業專案,例如自己動手搭建網站,其關鍵是要核心功能完整。

  • 最好能找到一個已經會 Python 的人。問他一點學習規劃的建議,然後在遇到卡殼的地方找他指點。這樣會事半功倍。但是,要學會搜尋,學會如何更好地提問。

運維要不要追趕 Python 的熱潮?

Python 這麼熱,運維要不要追趕 Python 的熱潮?現階段,掌握一門開發語言已經成為高階運維工程師的必備技能。

不會開發,你就不能充分理解你們系統的業務流程,你就不能幫助除錯、優化開發人員開發的程式,因為開發人員有的時候很少關注效能的問題。

這些問題就得運維人員來做,一個業務上線了,導致 CPU 使用過高,記憶體佔用過大,如果你不會開發,你可能只能查到程序級別,也就是哪個程序佔用這麼多,然後呢? 然後就交給開發人員處理了,這樣怎麼體現你的價值?

其次,不會一門開發語言的運維,你就不能自己寫運維平臺複雜的運維工具,一切要藉助於找一些開源軟體拼拼湊湊。

如果是這樣,那就請不要抱怨你的工資低,你的工作不受重視了,話說人家 FaceBook 一個運維工程師管 2 萬臺機器,運維工程師年薪十幾萬 USD,你以為人家是蓋的呢? 哪個不是身懷絕技,開發運維兼備?

Python 可以用來做什麼

在我看來,基本上可以不負責任地認為,Python 可以做任何事情。無論是從入門級選手到專業級選手都在做的爬蟲,還是 Web 程式開發、桌面程式開發還是科學計算、影象處理,Python 都可以勝任。

或許是因為這種萬能屬性,周圍好更多的小夥伴都開始學習 Python。Python 現在到底有多熱呢?我覺得我們可以看以下的這 2 組資料。

Python 排名穩居前五

如上文的 Python 排行,不多說,得益於 Python 在多個領域的應用都在逐漸變熱,Python 在 TIOBE 榜上已經是穩居前 5 了。

越來越多的公司在用 Python 做網站

除了大家熟悉的知乎、豆瓣,已經有越來越多的公司開始用 Python 來快速搭建網站產品。相應的,也有越來越多的公司開設了 Python Web 的職位。

640?wx_fmt=jpeg

根據我們的統計,目前在招的 Python Web 職位,所需技能按優先順序中,Python 基礎和 Django 的優先順序是最高的。

具體的排序,大致可以參考以下的這張圖表:

640?wx_fmt=jpeg

運維為什麼要用 Python

Good question!!!為什麼不用 PHP,JAVA, C++,Ruby?

這裡我只能說,見人見智, 如果你碰巧已經掌握了除 Python 之外的其他語言,那你愛用啥用啥,如果你是一個連 Shell 都還沒寫明白的新手,想學個語言的話,請用 Python,為什麼呢?

首先,PHP 是跟 Python 比的最多的,其實他倆根本就不用比,為什麼呢? 兩個語言適用性不同,PHP 主要適用於 Web 開發,可以迅速的做出中小型,輕量級的 Web 網站。

但後端嘛,基本還是要藉助其它語言,藉助什麼語言呢?Shell?Python?呵呵。而 Python 呢,是個綜合語言,前後端都可以,單拿出來比 Web,也一點不比 PHP 差,但為什麼 Web 方向上 PHP 比 Python 要火?

先入為主嘛,PHP 90 年代誕生就是做 Web 的,Python 2000 年後才出現 Web 框架,但論優秀程度上,Python 的 Web 框架基本上出其無左,至少是跟 PHP 比。

搞個運維小平臺,用 Java 真心沒啥必要,在我看來,Java 就是穩定的中年男人,穩定、成熟、禿頂,而 Python 代表的就是青春,簡潔、快、乾淨、帥!

C++/C,這個嘛,我只能說,如果你會了 Python,又會 C 的話,那你會更吃香,但是不會 C 的話,其實也無大礙。但對新手來講,不建議把 C 做為第一門語言開始學習,為什麼呢?打擊自信心…呵呵,你懂的。

Ruby,日本開發的,還不錯,風格跟 Python 有點像,因為 Ruby on rails 出了名,國外用的比較多,國內,放心吧!沒戲,Python 已經把它的想象空間都佔死了。

當然還有新的語言 GO,有些搞運維的看見做開發的人員搞 GO,也想湊熱鬧,覺得是未來,我想說,別沒事跟風,GO 再成功,也不會變成運維開發語言。

一個博士講過一句話,他說:程式效率高低,80% 都是寫程式的人決定了,語言本身就佔 20%。

所以下次有人再說 Python 效率低的時候,請讓他先回去自己檢查下自己的程式多了多少無用的邏輯、迴圈等等。

這個博士自己用 Python 寫的 Web 程式,一臺伺服器每天能處理上億請求,一秒併發近兩萬,什麼 Web 框架這麼牛 B?別問它是誰,它叫 tornado。

在選擇使用哪一門程式語言之前,我還想提醒讀者的是——“世界上只有兩種程式語言,一種是天天被人吐槽但卻被廣泛使用的程式語言,一種則是無人問津沒有存在感的程式語言”。

Python 語言作為排名第一的動態型別語言,自然有它的道理。如果我們充分了解它的優缺點,在使用的時候,取其精華去其糟粕,那麼,Python 一定是工程師解決問題的一把利劍。

640?wx_fmt=jpeg