為什麼要學 Python?

來源:互聯網
上載者:User
我是一名大三本科生,一直學的是java,像多線程反射這些東西也都瞭解,spring,ibatis這些架構也在實習時用過,其它web架構也多少瞭解。
身邊很多同學在大二就開始學python,但是我至今沒看到他們怎麼用過,所以一直很困惑自學python有什麼用,加之對python的用途也不是很瞭解,大二沒有考慮學python。我看過一些介紹,說python是一種"膠水語言",linux下用python做伺服器的工具也很常見。
如果是為了開發自己用的小工具,我覺得對我而言java就足夠了。所以我想問問前輩們當初學習python是什麼什麼動機、什麼目的、什麼理由?因為我總覺得學校裡某些同學似乎是為了趕時髦才學的python,然後看兩天就四處吹噓自己會python,python有多麼多麼進階牛掰厲害,然後就扔著不用了,我想如果我都不知道學習的目的,估計也會看兩天python就扔到一邊,所以想諮詢一下前輩們的學習python的理由以及用它做了什麼。

可能大家曲解了我的意思了,我只是想問一下python和其他語言相比有沒有什麼有魅力的地方,這樣我就能學習時更好的體會python這門語言設計者的本意,有自己的體會,用自己的思維方式去學習。而不是為了盲目的去看教程,只為了把它作為自己的一個額外能力。我覺得只有一直用python的人才能說出它與其它語言的不同之處,這些體會是網上教程不可能去寫的,所以我才會問為什麼要學python,因為我覺得每一種語言一定是有其它語言可取代的地方才會一直存在下去,我的本意只是想問問大家對python這門語言的見解體會,以及對學習python的認識,不是想貶低什麼,更沒有炫耀哪種語言的意思。雖然大家對我的問題可能偏重於指責,但是還是很用心的回答了我的問題,很受教

回複內容:

因為吃完py就可以吃raspberry pi啊。

學會py還可以飛。


好吧我夠了。悄悄搬運開始學py的第一個slide。感覺這個概括的相當全面了。一句話Java和Py和平共存互補啦。壯哉我大Java母語(抱歉有點跑題了(逃_(√ ζ ε:)_
如果只給一個理由的話,一句話:寫起來快、看起來明白。

你要非要問它可以幹什麼。作為通用性的語言基本上什麼都能幹,除了一些對效能要求很高的場合。比較常見的領域是:web伺服器、科學計算、應用內嵌指令碼、系統管理(程度由高到低)。

就這個事情而言簡單說說我的看法吧。

首先,我覺得趕時髦沒有任何的問題(話說Python現在算時髦麼,都快20年了。時髦的應該是go、hack之類的吧)。作為一個職業程式員,追趕技術的潮流本來就是很正常的事。有了什麼新的工具、語言、理論。先拿來玩一玩,瞭解一下他的特性。這叫技術儲備。一個東西之所以能流行起來必然有它的特點在裡邊。有的時候學些東西僅僅就是 have a fun 而已。每次都當你有需求的時候再學永遠都會落後一拍,而且無法站在一個高度去選擇。
舉個例子:比如你現在要寫個手機遊戲,現在有Unity、cocos2d、cocos2d-x、cocos2d-x lua 及其他引擎可供選擇。如果你從來都沒有用過這幾個東西你怎麼選擇?肯定是上網看一堆良莠不齊的部落格,問問同事、學長之類的,最後憑感覺選一個就開始寫。如果你只會其中一個呢?你肯定會毫不猶豫的使用你會的那個。問題在於,有的時候不同的技術方案有不同的局限性,弄不好這就是定時炸彈啊。如果這些你都用過,即使不是非常的精通。你也可以根據自己的團隊組成、工期、人員招聘的難度、遊戲類型等等來選擇最合適的工具。等到有需求的時候根本不會有那麼時間來讓你每個都學一遍的。

其次,最為一個程式員,開拓視野很重要。多嘗試幾門語言沒有任何壞處。學習其他的語言有助於你跳出自己之前的局限來看問題。語言限制了你的表達,也限制了你思考問題的方式。多瞭解一些不同的編程範式,有助於你加深對程式設計語言的瞭解。沒有什麼壞處。只是蜷縮在自己熟悉的東西裡永遠無法提高。

最後,我覺得你的心態有很大的問題。為什麼這麼說呢?如果很多人不斷的對我說:“自己會python,python有多麼多麼進階牛掰厲害。”我的第一反應是:“我擦,真的嗎?這麼吊的東西我居然沒用過。回去玩玩看,到底好不好用。”而不是說:“擦,又TM給老子裝逼,會python了不起嗎?”如果你真正渴求的是知識or技術,你根本不會在意誰在什麼地方用什麼語氣說的。你在意的只會是知識本身。因為被洗腦了,覺得Python大法好。
PS:Python大法確實好阿。有人說我不好好說話,那就改一下言辭。不過還是要把這句放最前面:

『學XX有什麼用,我會XX,不也挺好的嗎』這種話從CS學生嘴裡說出來真是不應該。

我上大學的時候,學校只教C++和Java。因為Linux玩過一段時間被叫去寫網站,接觸了PHP。當時對PHP驚為天人:語言簡潔,能直接寫網站,帶字串處理。這種感覺就是題主所說的『神器感』,那段時間天天和同學介紹PHP,介紹它有多強大。

後來對Python有了『神器感』,對Django有了『神器感』,對flask有了『神器感』,對scala有了『神器感』,對go有了『神器感』。再後來,對C++有了『神器感』,對Java有了『神器感』。我現在接觸過的語言只有這些了,實在沒精力再學習其他語言,如果讓我回到大學,那麼多閑暇時間足夠我學多少東西啊!

說白了,任何一個語言,稍微深入地學習一下而不是看知乎上『學習XX有什麼用』的問題回答,你都會很快有『神器感』,因為任何一門語言如果流行到你聽說過名字,一定是有一個區別其他語言的比較優勢。

真正有求知慾的人,看到一門簡單並且上手很快的語言怎麼都會去學習一下的。你學Java,沒問題啊,基於JVM的語言那麼多。scala,closure,還有一大堆知名語言的JVM實現,一個一個學習一下又如何呢?只會Java,那麼就好好研究下JVM,看看byte code,理解JVM GC機制和ref counting的區別,理解它的JIT機制。

你說用過spring和ibatis,那 Pony ORM - Use Pure Python to Speak to Your Data 這種用Python黑魔法做出來的ORM你用過嗎?Django Admin site這種建站神器用過嗎?再不濟,web.py和flask這種快速建站工具試過嗎?

你說學過多線程,那你知道工業界很少用多線程,多是纖程、協程了嗎?你知道go把goroutine做成語言特性是多牛逼嗎?看圖,別說話。
因為 人生苦短寫指令碼啊!生活中遇上的小問題,沒有必要動用“重型武器”。

處理文本,歸類檔案,批量下載……
爬蟲什麼的,幾行就寫出來了。

一切懶得用手操作的,都丟給Python好了。

Java太臃腫;
PHP不方便在本地運行;
C和C++太麻煩;
Golang需要編譯;
Cmd功能太弱(Bash還可以,可我日常用的是Windows)。
LIST神馬的我還沒學明白呢……

選擇很有限,Python的出現就很及時了嘛……只會java的話有些不方便的地方:
  1. 系統部署,如果經常調用外部命令或者資源,用java很不方便。
  2. 如果要和其他工具或者語言互動,java不如有膠水語言之稱的python效率高。
  3. 網頁開發,非工業級應用的話,python代碼量只有1/3不到,多快好省效能不差。
  4. 發布簡單,python的環境比起java來相當輕量級。
你非要說什麼python能做java做不了的,我一時也想不出來(我java也非常熟絡,仔細想想麼什麼需求也都能用java做,就是有些東西我直覺就是不會選java。)。用python寫代碼目前看來效率是最高的,比Go還高,如果對效能不重視的場合,肯定首選python。你想想,如果弄個mapreduce簡單處理下資料,java還在import的行數python就能幹完事了,你會用哪個?

PS:最近花了很多時間在Go上,目前看來很有可能用GO取代Java和一部分python的用途,開發效率很高,寫並發程式超級省心,和linux系統結合也比java好,部署簡單,不依賴於外部工具(go內建的工具,相對於maven和virtualenv來說相當簡潔好用)。長期看來,一直依賴的c/c++/Java/Python可能會變成c/go/python,完全能實現一樣的功能和效能,而且更加高效。不用動機,動機就是好奇或者自己恰好有時間而已,拋開具體用途的目的,多學一門語言也不是壞事,因為一這可以培養你的視野和不同的思維方式,二可以熟悉學習新語言的能力。

你看我現在如果要用一門新語言,一個星期左右的空閑時間就夠我上手了,因為大多數有點名氣的語言我都研究過,基本要素無非那幾個,強型別弱類型,靜態類型動態類型,有沒有lazy evaluation,函數式還是命令式,有沒有gc,動態還是編譯,oo系統是怎麼樣的,並發支援是哪種,多線程怎麼樣,還是原生支援協程,或者Erlang那種進階的api,語言執行效率怎麼樣。知道的足夠多對你自己就靈活多了,平時的選擇也就多了。

比如我之前的實驗一直是用Python寫的,但是最近我發現Python效率實在是太坑了,那我很自然的想到換門語言嘛,那我就去找,首先用慣了python,c/java這種肯定是回不去了,要考慮效率,那基本選擇就是JVM或者js v8上的或者靜態編譯的,同時我還偏好函數式,找了一圈,Clojure貌似還可以,那我就換Clojure,一星期熟悉語言,然後就切換過來了。結果發現Clojure太依賴Java了,還有效能還是不行,要提高效能我還得給各個變數手動type hint,那我何必用Clojure,於是又花一個星期乾脆轉到Haskell。為什麼切換的這麼自如,就是因為我沒事的時候這些語言基本都翻過知道大概是怎麼回事啊。

所以我跟你講,珍惜大學這種空閑時間,有興趣就多學點。學過就扔了沒關係,你忘記的是文法,但是思想和特點是不會忘或者即使忘了也是會有點印象的,而文法這種東西是最簡單最容易學的忘了也無所謂。但以後萬一用到了,你就多種選擇了。

(另外,我不覺得Java程式員學了Python會看兩天就扔到一邊哈哈,既然三分之一的代碼量就能幹同樣的事何必和自己過不去呢哈哈~~逃~~另外五年前學Python那叫趕時髦現在都爛大街了好麼~裝逼不來加入我大Haskell麼少年~

嗯哼~讓每個問 “Python 能幹什麼” 的人都去看這個網頁就對了:http://nbviewer.ipython.org

至於做點大家都能做的事情,寫個網站好了。Django 這種重型架構的代碼重啟時間也是在 1s 以內的,在 Tomcat 部署個 WAR 包 30sec 夠不夠?
  • 聯繫我們

    該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

    如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

    A Free Trial That Lets You Build Big!

    Start building with 50+ products and up to 12 months usage for Elastic Compute Service

    • Sales Support

      1 on 1 presale consultation

    • After-Sales Support

      24/7 Technical Support 6 Free Tickets per Quarter Faster Response

    • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.