<kbd id="afajh"><form id="afajh"></form></kbd>
<strong id="afajh"><dl id="afajh"></dl></strong>
    <del id="afajh"><form id="afajh"></form></del>
        1. <th id="afajh"><progress id="afajh"></progress></th>
          <b id="afajh"><abbr id="afajh"></abbr></b>
          <th id="afajh"><progress id="afajh"></progress></th>

          為什么大家都在學(xué)Python?我要來唱歌反調(diào)

          共 3843字,需瀏覽 8分鐘

           ·

          2021-02-26 15:08

          藍(lán),關(guān)注并星標(biāo),學(xué)術(shù)




          最近在知乎里看到一個問題挺有意思的,問題是說如何看待海淀區(qū)的媽媽們表示Python太簡單了是小學(xué)生學(xué)的?

          這也不是我夸大其詞,我老婆家里就有人從事幼兒教育的,他們教孩子們的還真的就是Python。Python這兩年也的確是火熱,幾乎只要是編程相關(guān)的培訓(xùn)班就必然會有Python的身影,往往也都會和人工智能、深度學(xué)習(xí)、大數(shù)據(jù)等高端詞匯牽扯上關(guān)系。今天就和大家聊聊這個話題,幫助大家排排雷。

          事先聲明,我本身不是Python專家,只能勉強(qiáng)算是一個Python使用者,所以如果有什么錯謬的地方,還請大家多多包涵。

          簡易但不簡單

          不知道大家有沒有想過,Python這門語言是怎么和萬金油這個詞牽扯上關(guān)系的,好像Python是一門萬能語言,它什么都可以做。圖像處理可以做、后端開發(fā)也可以做、機(jī)器學(xué)習(xí)算法更是離不開,其他語言為什么沒有變成這樣,Python誕生之初就是這么設(shè)計的嗎?它是如何做到的呢?

          這一切都要從Python的誕生說起,Python第一版的作者叫做Guido,是個荷蘭人。他最早寫Python據(jù)說完全是因為圣誕節(jié)假期期間他閑著太無聊了,估計也沒有女朋友,所以就想試著自己寫一個新的語言。他創(chuàng)建這門語言的初衷只有一個,就是簡易。他想要實現(xiàn)的就是像是類似shell腳本但是又可以實現(xiàn)像是C語言一樣強(qiáng)大功能的語言。不要覺得驚訝,當(dāng)時是上世紀(jì)九十年代,C語言正如日中天。

          所以Python誕生之初的核心就是簡易,語法簡單上手容易,學(xué)習(xí)曲線比較平緩。正因為它這個特點,所以很快就打開了市場。當(dāng)時第一批被Python吸引的其實都不是專業(yè)的程序員,這很好理解, 專業(yè)的程序員往往都有自己趁手的語言,一般不會突然使用一門新語言。最早使用Python的是一群高校內(nèi)的學(xué)者和研究員,這些人本身沒有編程的基礎(chǔ),但是手頭大量的研究工作卻離不開數(shù)據(jù)計算和分析。所以他們需要這樣一門容易上手的語言來幫助他們完成這樣的工作。

          有了需求便有了市場,也正因此,后來越來越多的科學(xué)計算包在Python上被開發(fā)了出來。比如大家所熟知的numpy、pandas等等。后來Python火了之后,它又吸引著人們在其他領(lǐng)域去使用它。于是人們開發(fā)或者是移植出了更多的工具庫,比如后端的flask、django框架,從C++移植來的opencv等等,Python也就變得越來越強(qiáng)大以及越來越萬金油。

          從根本上來說,Python的語言特性就是簡易,語法簡易,學(xué)習(xí)簡易。它本身并不是針對某個問題場景而特別設(shè)計的,這一點和Go、Java等語言都不同。這樣帶來的問題是,Python雖然什么都能做,但未必什么都能做好。比如后端,Python雖然也有功能強(qiáng)大的后端框架,但由于語言本身的一些原因,它的性能和拓展性都不是非常好。所以說起后端來,大家首先想到的還是Java,而不是Python。另外Python設(shè)計之初的語法和功能非常簡單,但隨著它的發(fā)展,它糅雜了許許多多的高端用法,這些高端用法的使用和學(xué)習(xí)并不簡單,所以它后期的學(xué)習(xí)曲線反而是比較陡峭的,典型的易學(xué)難精。

          所以如果你還沒有學(xué)過Python,正考慮學(xué)習(xí)它,最好先問一下自己,想學(xué)Python的目的究竟是什么?準(zhǔn)備將它應(yīng)用在什么方面?如果你只是因為興趣那當(dāng)然沒有問題,但如果你是想要在某一個方向上有所發(fā)展,那么可能就需要再好好了解以及研究一下,Python在這個領(lǐng)域的發(fā)展情況了。

          方向排坑

          我們來簡單列舉一下目前Python比較流行的幾個主要的方向,分別是算法、后端、數(shù)據(jù)分析、爬蟲以及腳本工具。像是圖像識別、文本處理這些方向其實都可以歸納進(jìn)算法當(dāng)中,我就不單獨拆分了。

          后端

          在這些方向當(dāng)中雷最大的就是后端,說起來國內(nèi)外還是不少公司的后端是用Python寫的,比如YouTube、instagram、國內(nèi)的豆瓣等等。但Python做后端是有天然缺陷的,我其實在之前Python技術(shù)的文章當(dāng)中也提到過,Python最大的問題就是GIL(global interpreter lock),也就是全局解釋器鎖。

          眾所周知Python是解釋型語言,也就是說當(dāng)我們執(zhí)行Python的時候,其實是執(zhí)行的Python解釋器,由它來閱讀我們的代碼解釋執(zhí)行。既然是逐行解釋執(zhí)行的,那么并發(fā)就是一個很大的問題。由于一系列歷史遺留問題以及種種考慮,最終Python沿用了GIL鎖的設(shè)計,這就導(dǎo)致了同一時刻只能有一個Python解釋器線程在執(zhí)行。本質(zhì)上來說,Python的多線程是偽多線程,因為不論我們在Python代碼當(dāng)中寫了使用多少個線程,真正解釋執(zhí)行的時候,還是只有一個解釋器線程在執(zhí)行。

          要知道現(xiàn)在的服務(wù)器動輒都是好幾十個核心,如果最多只能有一個線程在執(zhí)行,豈不是浪費了極大的資源?雖然我們也可以使用多進(jìn)程或者是協(xié)程等其他的一些手段來彌補(bǔ),但是還是不能從根本上解決問題,并且又會產(chǎn)生很多其他問題。所以Python在做后端的性能上,天然比Java以及go等語言弱了不少。一般大公司是不會使用Python作為后端的主力語言的,目前后端主流的還是Java和新興的Go。

          所以很現(xiàn)實的一點就是,如果想要從事Python后端方向,一個是可選擇的崗位會比較少,另一個是進(jìn)入大公司或者是一些比較優(yōu)秀的公司的機(jī)會也會相對少一些。

          爬蟲

          現(xiàn)在說起來爬蟲幾乎就必然會想到Python,其實爬蟲對于語言本身是沒有限制的,什么語言都可以用來寫爬蟲。只是Python寫爬蟲天然比較合適,因為爬蟲需要有大量的網(wǎng)絡(luò)請求,網(wǎng)絡(luò)請求當(dāng)中經(jīng)常會有IO等待。Python的多線程雖然是偽多線程,但是對于這種存在大量IO等待的場景非常合適。而且現(xiàn)在Python爬蟲相關(guān)的框架也很多,我試著用過幾款,體驗都還不錯。

          雖然如此,我還是想要勸退一下想要從事爬蟲方向的學(xué)生。勸退的原因不是Python本身,而是爬蟲。

          前幾年的時候國內(nèi)對于信息安全的重視程度比較低,所以當(dāng)時國內(nèi)的爬蟲幾乎都不會遵守robot協(xié)議,管你什么能爬什么不能爬,先爬了再說。但是這幾年大家也都知道了,對于信息安全的重視程度越來越高,所以爬蟲的風(fēng)險也就越來越大。尤其是在小公司里,老板和上層往往沒有法律意識,他們也不知道獲取這些信息是不是違法,然后就讓程序員去做了。到時候一旦出問題,可是需要承擔(dān)法律責(zé)任的,甚至要進(jìn)去吃牢飯。

          另外一個是現(xiàn)在爬蟲的門檻越來越高,無論是搞爬蟲的還是搞反爬蟲的專家?guī)缀醵荚诖蠊臼掷铩R驗榇蠊疽环矫嫘枰治龈偁帉κ值臄?shù)據(jù),另外一方面也不希望競爭對手分析自己的數(shù)據(jù)。這就有點像是矛和盾,既要研究矛能夠攻破別人的盾,又要研究盾,不能讓對方的矛戳進(jìn)來。

          這些人才壟斷了就會導(dǎo)致流通性降低,流通性降低就會導(dǎo)致貶值。無論是小公司里的想去大公司還是大公司里的想出來都不容易,職業(yè)發(fā)展也很容易到天花板。

          數(shù)據(jù)分析

          數(shù)據(jù)分析本身沒有什么問題,Python做數(shù)據(jù)分析問題也不大。

          這里唯一的一個小問題就是現(xiàn)在大數(shù)據(jù)平臺基本上沒有Python什么事,無論是hadoop家族還是spark,支持比較好的還是Java。Python雖然也可以寫pyspark,但是畢竟不是原生的。pandas一般都只能用來小規(guī)模的數(shù)據(jù)分析,大數(shù)據(jù)還是不太可行。所以一般來說專業(yè)的數(shù)據(jù)分析師也都需要會一些其他的技術(shù),比如hive、spark、flink等等,Python一般還是起到一個輔助的作用,只會Python是肯定不行的。

          一點建議

          首先第一個建議是不要只會Python,最好能再精通一門其他的語言。

          Python的確很方便,語法寫起來也很舒服,我經(jīng)常用它來寫各種東西,包括算法和數(shù)據(jù)結(jié)構(gòu)。但是如果是工作的話,一般沒有純Python的場景,即使是機(jī)器學(xué)習(xí)崗位也是一樣。我們也少不了一些數(shù)據(jù)分析、數(shù)據(jù)處理的工作,也會需要寫一些腳本,甚至有的時候還需要做一點開發(fā)的活。所以只會Python肯定是不行的,我個人建議是可以考慮Python + Java,擼模型和增刪改查兩不誤。

          第二個建議是弱化語言,聚焦方向

          對于程序員來說,從事的不是語言的使用,而是某一個領(lǐng)域的開發(fā)。Python也好,Java也罷,它們都只是語言,語言只是最基礎(chǔ)的工具。我們更應(yīng)該著重關(guān)注的是我們這個領(lǐng)域內(nèi)的技術(shù)或者是成長,比如后端的種種技術(shù),其實早就脫離了Java,都是圍繞著分布式系統(tǒng)做文章。再比如機(jī)器學(xué)習(xí)也和Python沒什么關(guān)系,都是圍繞模型和特征的設(shè)計。這些語言背后的東西才是真正的技術(shù)。

          第三個建議是努力鉆研不要淺嘗輒止

          Python這門語言有一個很有意思的點是會一點語法和語法非常精通的人都能寫出代碼來,但是代碼的質(zhì)量以及可讀性就千差萬別了。因為很多人學(xué)習(xí)的時候只是淺嘗輒止,僅僅學(xué)了一些基本的語法就上手了。這是遠(yuǎn)遠(yuǎn)不夠的,Python和其他語言相比有很多自己特色的東西,比如它的面向?qū)ο蟮脑硪约八鼘瘮?shù)式編程的支持等等。這些相對高端的一些用法是需要仔細(xì)鉆研學(xué)習(xí)的,也是真正能夠體現(xiàn)功力的地方。

          學(xué)Python本身沒有問題,但如果沒有想清楚自己為什么而學(xué),只是一股腦盲目跟風(fēng)的話,就有些不可取了。

          好了,今天的文章就到這里,感謝大家的閱讀,喜歡的話請給個三連支持一下吧~



          瀏覽 83
          點贊
          評論
          收藏
          分享

          手機(jī)掃一掃分享

          分享
          舉報
          評論
          圖片
          表情
          推薦
          點贊
          評論
          收藏
          分享

          手機(jī)掃一掃分享

          分享
          舉報
          <kbd id="afajh"><form id="afajh"></form></kbd>
          <strong id="afajh"><dl id="afajh"></dl></strong>
            <del id="afajh"><form id="afajh"></form></del>
                1. <th id="afajh"><progress id="afajh"></progress></th>
                  <b id="afajh"><abbr id="afajh"></abbr></b>
                  <th id="afajh"><progress id="afajh"></progress></th>
                  91美女黄网站 | 一区二区三区无码免费 | 免费伦片A片在线观看警官 | 亚洲一区视频 | 日韩无码APP |