標籤:

為什麼要學 Python?

我是一名大三本科生,一直學的是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做成語言特性是多牛逼嗎?


看圖:


2017年7月20日,IEEE Spectrum 發布了第四屆頂級編程語言交互排行榜。因為有各種不同語言的排行,所以 IEEE Spectrum 依據不同的變數對流行度進行了排行。據 IEEE Spectrum 介紹,他們的排行依據數據記者 Nick Diakopoulos 提供的數據,結合 10 個線上數據源的 12 個標準,對 48 種語言進行了排行。

Python 的排名從去年開始就藉助人工智慧持續上升,現在它已經成為了第一名。但排在前四名的語言 Python、C、Java 和 C++都擁有廣大的用戶群體,並且他們的用戶總量也十分相近。實際上,Diakopoulos 在對公司招聘所要求的基本語言分析中,C 語言的需求甚至還要在 Python 之前。

Python的火熱度持續不斷。。。。。。作為入門語言還是不錯的!

你覺得Python真的好嗎?或許你在漫天的宣傳中看到了這些:

接近英語的簡單語法;

開發環境簡單,能打字就能寫代碼;

眾多的第三方庫;

解釋執行,不需要編譯;

跨平台,方便移植;

但是作為一個負責任的假程序媛,要跟你說的是:就算再簡單的語言,也得學才會會,不要在好不好,真的好不好這些事情上下功夫,要在怎麼學如何學上下功夫。

那麼,言歸正傳,我們來看看Python這個神奇的語言。

第一部分:各個領域應用的語言。

大家看這個內容,其實你很明顯發現,其實各個語言都有他的用處。我們可以說Python是應用最廣的。但是暫時還是不能說它是全能的,因為他也有它的短板,但是對於一般的小公司和小項目而言,是很難得的全能。

現在有個很奇怪的現象,就是大家把Python神話了。Python作為一門語言,確實有他的優勢。但是建議大家在學好這個語言的同時,要學第二門語言,這樣未來對大家有好的發展。

第二環節:Python工程師在企業裡面的定位是什麼?

四個重要的定位:驗證演算法、快速開發、測試運維、數據分析。

1、驗證演算法:就是對我們公司一些常見設計演算法或者公式的驗證,公式代碼化。

2、快速開發:這個大家應該都比較熟悉,快速開發,就是用成熟框架,更少的代碼來開發網站,Python在網站前後台有大量的成熟的框架,如django,flask,bottle,tornado,flask和django的使用較多,國內用Python開發的網站有:知乎、豆瓣、扇貝、騰訊、阿里巴巴;

3、測試運維:做運維同學應該清楚,在Linux運維工作中日常操作涵蓋了監控,部署,網路配置,日誌分析,安全檢測 等等許許多多的方面,無所不包。python可以寫很多的腳本,把「操作」這個行為做到極致。與此同時,python在伺服器管理工具上非常豐富,配置管理(saltstack) 批量執行( fabric, saltstack) 監控(Zenoss, nagios 插件) 虛擬化管理( python-libvirt) 進程管理 (supervisor) 雲計算(openstack) ...... 還有大部分系統C庫都有python綁定。

4、數據分析:Python有三大神器:numpy,scipy,matplotlib,其中numpy很多底層使用C語言實現的,所以速度很快,用它參加各種數學建模大賽,完全可以替代r語言和MATLAB。spark,Hadoop都開了Python的介面,所以使用Python做大數據的mapreduce也非常簡單,加上py對資料庫支持都很好,或者類似sqlalchemy的orm也非常強大好用。

在結束這個部分之前,大家有沒有一個疑問:為什麼爬蟲沒有中重點講?

其實這裡給大家重點說一下,如果你要學好Python,僅僅停留在爬蟲上,這個是很不靠譜的。Python 寫爬蟲的教程網上一抓一大把,據大家所知很多初學 Python 的人都是使用它編寫爬蟲程序。小到抓取一個小黃圖網站,大到一個互聯網公司的商業應用。通過 Python 入門爬蟲比較簡單易學,不需要在一開始掌握太多太基礎太底層的知識就可以很快上手,而且很快可以做出成果,非常適合小白一開始想做出點看得見的東西的成就感。

除了入門,爬蟲也被廣泛應用到一些需要數據的公司、平台和組織,通過抓取互聯網上的公開數據,來實現一些商業價值是非常常見的做法。

當然這些選手的爬蟲就要厲害的多了,需要處理包括路由、存儲、分散式計算等很多問題,與小白的抓黃圖小程序,複雜度差了很多倍。

第三部分:python的崗位,薪資,及技能要求

Python崗位有哪些呢?主要的崗位有這些:

Python全棧開發工程師(10k-20K)

Python運維開發工程師(15k-20K)

Python高級開發工程師(15k-30K)

Python大數據工程師(15K-30K)

Python機器學習工程師(15k-30K)

Python架構師(20k-40k)

目前應用最多的:全棧開發、數據分析、運維開發,大家知道他們分別的要求是什麼嗎?

我們來看三個崗位要求:

崗位1:任職要求

1.計算機、軟體相關專業本科或以上學歷,3年以上工作經驗;

2.熟悉python、JS開發語言;

3.具有MySQL資料庫設計與優化能力,熟悉mongoDB、mc、redis等一種以上;

4.熟悉Linux/Unix,能進行shell編程;

5.具有良好的學習能力,時間和流程意識,溝通能力、團隊合作

崗位定義:Python運維開發

崗位2:職位要求

1,熟悉 Python 編程;

2,熟悉 Linux 系統;

3,熟悉 shell 編程;

4,了解 django/web.py/flask 框架一種及以上;

5,有一定的 Web 後端開發經驗,熟悉前後端分離的開發模式

熟悉關係型資料庫的使用與基本設計優化方法,了解常見的 NoSQL 資料庫如MongoDB, Redis等;

6,良好的編碼風格及測試習慣

加分項:

在 GitHub 上有開源項目

崗位定義:Python全棧開發

崗位3:任職資格

1、具有python開發數據處理軟體的經驗;

2、精通Python,掌握numpy,scipy,matplotlib,pandas等數據處理方面常用的第三方python庫;

3、熟悉至少一種Sql資料庫 (mysql/ sqlserver/oracle);

4、熱愛編程、具有良好的代碼風格;

5、做事具有條理性,具有良好的自學能力、分析問題以及解決問題的能力。

崗位定義:Python數據分析

那麼,大家來看看,這三個崗位基本要求裡面,有哪些共性和不同?

第一層:python的基本語法和標準庫

既然你要會python開發,那麼語法基礎和庫是最基本的。

第二層:Linux基礎

全棧和運維涉及linux伺服器的操作,那需要shell編程和linux基礎操作的基礎能力。數據分析其實就沒有這一層,涉及是數據採集,也就是爬蟲。全棧對linux基礎要求少一些,而運維需要更多,還需要一些DNS/DHCP之類的,很多企業也需要一定的運維工作年限。

第三層:資料庫操作

資料庫操作:SQL、Nosql,數據的儲存和處理,就是常見的增刪改查。

第四層:web前端

前端的實現,包括web前端技能,了解或熟悉HTML、CSS、Javascript,Bootstrap,jq,nodejs。全棧就不說了,運維開發涉及到可視化的界面。

第五層:基礎python的框架和庫

基礎python的框架和庫做各種實現,需要開發一個網站或者做一個自動化運維監控,數據分析師基於一些可視化的庫和數據分析的庫。

第六層:演算法設計和求職準備

學一個技術和進階的核心是演算法設計,最重要的是:求職

最後一個部分:說說薪資和城市

全國python就業形勢分析:招聘待遇,工資20000-29999佔比最多,達40%。經驗要求,3-5年工作經驗要求的佔比最多,達71%;學歷要求,本科學歷要求的佔比最多,達76%。該數據僅供參考

python工資按工作經驗統計,其中0-2年工資¥13060,應屆畢業生工資¥4210,3-5年工資¥15220,6-7年工資¥23860,8-10年工資¥25220,10年以上工資¥14170,該數據僅供參考。

以上就是關於Python職業需求,薪資崗位以及常見職位的一個分析,歡迎大家留言和討論。

你想更深入了解學習Python知識體系,你可以看一下我們花費了一個多月整理了上百小時的幾百個知識點體系內容:

【超全整理】《Python自動化全能開發從入門到精通》筆記全放送


寫腳本啊!生活中遇上的小問題,沒有必要動用「重型武器」。

處理文本,歸類文件,批量下載……

爬蟲什麼的,幾行就寫出來了。

一切懶得用手操作的,都丟給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么少年~

嗯哼~


_(:_」∠)_我學UNITY是因為在技術群吹牛,然後被群主提升管理員,為了實現吹下的牛逼,當然,更多的是不能丟了胖臉︶︿︶於是我每天下班回來學_(:_」∠)_


因為 人生苦短


作為一個計算機系的學生,你竟然會問出為什麼要學習一門編程語言這句話來。如果你看不慣他們到處吹噓,你完全可以學的比他們更好然後打臉。沒有一種語言是沒有用的,想從事計算機行業,一顆好奇心和不斷學習的能力是必不可少的。


我來搶答了!python做伺服器端編程真的牛逼。雲計算和網路編程領域應用廣泛啊!聽說過openstack么?聽說過雲存儲swift么?什麼,都是用python寫的!!!嗯,豆瓣也不得不提一下,python寫的。再給你一個理由,有些公司專門應聘python工程師哦。python也是我見過的最接近自然語言的一門語言。寫起來那叫一個順暢啊,另外python魔法還在於import可以實現很多你想實現的功能。

ok,再補充一句:python可以顯示一家公司的逼格,特別是創業公司,對了別跟我說你家用lisp!


因為看了很多知乎上關於python的問題和答案


人生苦短,我用Python


因為在python里一切皆對象


學以致

你對Python的用處不了解,一方面是因為你沒有去仔細研究Python的生態系統與應用場景,另一方面是因為Python對於你現在接觸到的業務而言不具有不可替代性,也就是說你現在根本用不到Python。

實際上是這樣的。Python以語法簡潔著稱,它的最大的特點可以總結為「寫得快,跑得慢」(快慢是相對而言的),也就是說,Python的開發效率高,而.py程序的運行速度,跟JVM種語言、Golang、C/C++等相比,算是比較慢的了,而且存在一定的性能瓶頸。這就決定了,在一些中小型項目里、趕時間等情況下、一些專門的領域(比如科學計算、運維等),人們喜歡用一種比較快捷、優雅的工具來處理問題——所以選擇了Python(別問我為什麼不選擇Java,語法對比有人貼出來了,有些場合「殺雞焉用牛刀」確實不合適)。

我可以認為你現在是在做Java Web開發,關於Java的種種概念是必須掌握的,除此之外你就可以專註於業務邏輯、框架,好一點的話還會接觸到介面、架構等,最多再去看看資料庫,確實根本用不到Python等其他的語言/工具。

問題是,你犯了一個程序員的大忌:不要拒絕「新」技術。這裡的新不僅僅指時間上新出現的技術,還指對自己而言「全新」的技術。要知道,止步不前是會被淘汰的。


因為PYTHON寫腳本語言挺方便,而是是視效行業標準編程腳本語言,不得不學。


推薦閱讀:

有哪些值得推薦的Python學習網站?
有哪些值得推薦的 Python 開發工具?
Python零基礎初學者教程推薦哪個?
python如何查看某一個包中的某一個函數的使用方法?
python 用list of lists表示矩陣的問題?

TAG:Python |