python初學者的自我修養,找到本身的方向

做者:梁唐前端

來源: 早起Pythonpython

早起導讀git

常常會有讀者讀者在後臺問我,學習python有哪些適合新手入門的小項目推薦,因此今天這篇文章我們來聊聊這個問題。對於我來講Python的應用場景主要是機器學習、深度學習相關,對於其餘的場景涉獵很少。所以本文的目的並非列舉出一系列小項目給大家練手,而是但願引導你們思考這個問題,從而找到適合本身的練習項目。程序員

python的誤區github

不知道各位初學者如何看待Python這一門語言,又是如何看待程序員的技能,根據個人理解, 這當中可能存在一些誤解。其實不論哪一門語言的應用場景可能都不僅是一個方向,每每是多個方向,尤爲是Python這種比較成熟而且廣受歡迎的語言,它在許多領域都有很高的建樹,這就致使了Python能夠作的事情很是多,相應的要學習的東西也就很是多。web

也許在新手看來一個比較厲害的Python使用者,應該是全部技術通殺的,對於Python的方方面面都很是瞭解。然而很遺憾,這是很是困難或者說幾乎是不可能的。困難的緣由也是很簡單的,由於人的精力是有限的,想要在一個領域作到優秀就已經很是不容易,須要學習大量技術和知識了,更況且掌握全部方向。因此你們對於這樣一個問題,應該有一個清晰的答案,對於Python這樣一門語言,大家學習它的目的到底是什麼?redis

也許你有不少個答案,可是很遺憾,對於你將來職業發展來講,你可能只能選擇其中一個數據庫

方向選擇後端

若是你玩過暗黑破壞神、魔獸世界或者是相似的RPG遊戲的話,那麼你對於選擇職業這個問題應該很是瞭解。在咱們剛進入遊戲或者是進入遊戲不久,咱們就須要面臨一次職業選擇,職業一旦選擇每每不可更改,你就須要在這個職業一直玩下去,若是想要換職業只有從頭開始,從新玩一個新的號。設計模式

在職場當中和遊戲是很是相似的,咱們最終也須要選擇咱們的職業,而且咱們只能選擇一個崗位,輕易也是不能更改的。若是要更改,須要從頭開始,以前累積的經驗會所有清零。由於不一樣崗位對於能力的要求是徹底不一樣的,因此對於初學者而言,其實也會面臨這麼一個選擇,只不過這個選擇是隱形的,當你選擇崗位進行投遞簡歷的時候,這個選擇就潛移默化的發生了。

Python經常使用的基礎語法並很少,在咱們以前的文章當中幾乎涵蓋了大半。當咱們完成了這部分學習以後,單單學習語法已經沒有出路了。再接下來進階就必需要學習一些應用上的內容,也就是要面臨一個技術選型了。

對於Python而言,通常常見的方向有這麼幾種:web開發、機器學習、網絡爬蟲、運維、遊戲開發

下面我簡單介紹一下這幾個方向,你們能夠對照一下本身的興趣,選擇一個本身感興趣或者是比較適合的。

Web開發

Web開發應該是當下最廣泛的程序員的工做崗位了,Python在web上的應用主要是web的後端開發,也就是負責服務器邏輯處理這個部分。

咱們都知道在後端這個領域目前國內最吃香的語言應該是Java,幾乎大半的公司都是使用Java做爲後端語言。Java以後的其餘幾門語言我也難分伯仲,簡單列舉一下有新興的Go,有古老的PHP,固然還有Python,還有已經幾乎絕跡的C++和C#。Python在這個領域當中應該只能算是不算特別小衆,整體來講仍是偏小衆的

小衆的緣由和Python自己的特性有關,由於Python是解釋型語言,而不是編譯型語言。因此和Java、Go這種編譯型語言相比,在性能上自然就要劣勢。而且因爲Python全局鎖的限制,致使了Python多線程在計算密集型的併發場景當中表現很是糟糕,因此不多有大公司會使用Python做爲後端主力語言。據我瞭解國內知名一些的應該只有豆瓣、知乎,國外的有YouTube,但聽說有些已經遷移到其餘語言了,有的已經有相應的遷移計劃了。

Python在後端的主要優點在於敏捷,也就是開發效率比較高。Python的Django、Falsk等框架仍是很是完善以及好用的,咱們能夠很快地從零開始搭建出一個像樣的後端來,而且迭代的速度也很快。因此對於一些須要小步快跑對於性能要求不高的小公司,可能會選擇Python,也就是大公司幾乎不會選擇Python做爲Web後端的開發語言,技術棧也必然徹底不一樣。

若是你須要選擇這個方向,那麼你除了要學習Python後端開發的相關知識,好比Django、Flask等框架以外,對於計算機網絡以及前端也須要必定的瞭解,這些也是後端工程師的必修課。

整體來講,Python後端這個發展方向相對比較平坦,後期發力的難度比較大,天花板比較低。學習難度和Java後端相比可能要稍微簡單一些,就業壓力應該也還好,相關的崗位雖然不太多但也不會太少。

若是要選擇這個領域的話,能夠選擇一些比較常規的項目做爲入門的項目。好比搭建一個我的博客,或者是XX管理系統,等這些熟練了以後就能夠學習更多其餘的工具庫了,好比數據庫ORM框架、kafka、redis等這些經常使用的中間件。把這些內容再結合到web當中,建立出新的項目。等這一塊也差很少了,接下來就能夠研究研究架構設計、設計模式等等進階的內容了。

機器學習

這個領域我相對比較瞭解一些,對於機器學習來講,Python目前是妥妥的主力語言。早年還能看到一些使用R來作機器學習的工程師,目前已經幾乎看不到了,幾乎是清一色的Python。可是老實說機器學習當中Python只是起到膠水語言的做用,幾乎全部核心的實現邏輯都不是Python支撐的。

在機器學習當中對於Python原生的內容要求很是普通,只須要會基本的語法,瞭解迭代器、生成器幾乎就足夠了。由於大部份內容都是經過框架或者是工具來實現的,Python只是把這些邏輯粘合到一塊兒而已。這個方向的從業者的技能點在Python上的很是少,大部分都在機器學習的相關理論、一些庫工具的使用、深度學習框架的使用、數據處理方面的經驗。

而且機器學習自己就是一個比較大的領域,它也有不少方面的應用。好比搜索、廣告、推薦這些傳統的應用場景,以及CV(計算機視覺)、NLP(天然語言處理)、風控等等比較新一些的領域。因此選擇了機器學習這個大方向,而且完成了基礎知識的學習以後,仍是要再面臨一次選擇的,由於還須要選擇進一步細分的小方向。根據我我的的經驗來講它們的發展前景是推薦、搜索、廣告 > NLP > CV > 風控,這只是我我的的判斷,僅供你們參考。

機器學習這個方向總體來講前景是很是不錯的,目前幾乎大中小型的公司都有機器學習或者是深度學習的崗位。雖然崗位多,可是競爭並不低,由於想要涌進來的人實在是太多了。尤爲是這兩年AI火熱,大量的人想要擠進這個行業中來,因此招聘門檻仍是不低的。

若是你想要選擇這個方向的話,只須要基本的Python語法便可,可是須要對機器學習這個領域有着比較深刻的學習。好比機器學習的核心概念、經常使用的一些模型、數據處理的一些方法、模型效果的評估標準等等。等對機器學習的理解足夠了,就能夠找kaggle、天池大數據等一些比賽來實戰一下。

Python爬蟲

爬蟲這個方向你們也不陌生,不少人應該看過一些相關的負面新聞,好比竊取用戶隱私或者是竊取了某某公司的數據等等。實際上爬蟲的本質是利用程序模擬人工對網頁進行訪問,從而將網頁當中相關有價值的信息存儲下來

Python因爲語法簡單,而且網絡相關的工具庫很是完善,並且不須要通過編譯就能夠直接運行。更重要的一點是Python的全局鎖在網絡請求這種IO密集型的場景當中很是合適,並不會影響效率。並且Python能夠很方便的整合其餘語言的功能以及特性,使得Python作爬蟲很是合適,以致於市面上大部分的爬蟲工程師都是以Python爲語言開發的。而且如今也衍生了許多分佈式爬蟲的框架和工具。

因爲你們都使用爬蟲,而一些大公司不肯意本身的相關信息被競爭對手獲取了去。舉個例子,假設某東把淘寶全部的商品信息都爬取了下來,而後針對性的降價來強行吸引用戶,那麼顯然對於淘寶是一個打擊。爲了防止相似以及其餘不利於公司的狀況出現,這些大公司都會設置一些反爬蟲的機制。好比在請求來臨時會判斷是不是機器人,或者是會限制一個ip最多訪問的商品數量等等。

既然有反爬機制,那麼天然也有破除反爬機制的機制。因此公司裏真正爬蟲工程師每每的平常工做就是和一些大公司的反爬工程師鬥智鬥勇。你設置了這個反爬機制,我就想一個辦法來破除。明天你發現了個人方法作了修補,我再繼續想辦法……而且在編寫爬蟲以前,須要作大量網頁的分析,找到網頁或者是應用中數據的源頭api。有些公司會把api隱藏起來,或者是須要必定的校驗才能訪問,那麼就須要設置一些方法針對性的破除以後才能使用爬蟲。

有些人不喜歡這種鬥智鬥勇不少,開發時間不多的工做,而有些人就樂此不疲,你們能夠對照一下自身的狀況作一個選擇。若是想要選擇這個方向的話,能夠從一些公開的沒有設置反爬機制的數據開始,學習一些目前比較先進的爬蟲框架,以後再一步步提高難度,去試着破除大公司的反爬機制,成爲一個優秀的爬蟲工程師。

運維和遊戲開發

老實講這兩個領域個人瞭解實在是很少,因此硬着頭皮簡單說說,水平有限,若是有錯誤還請你們海涵。

運維在咱們都知道就是負責維護機房機器環境、項目發佈上線等工做的,因爲如今公司用到的機器的數量愈來愈多,整個發佈以及維護的流程也就愈來愈麻煩。以前極其少的時候還能夠人工一臺一臺搞定,如今機器多了還使用人工來幹顯然就不現實了。爲了解決這個問題,因此如今先進的運維會使用Python編寫腳本,來批量操做機器安裝環境或者是發佈項目等等。

說白了其實也是把Python當成是腳本語言這樣的工具來使用,核心的能力其實仍是偏在Linux命令、操做系統、分佈式集羣這一個部分。對於運維這個領域,我我的感受和機器學習差很少,Python只是純工具,你們想要入門項目的話,可能仍是要以運維相關的技能爲主,使用Python來做爲工具輔助。

遊戲開發我稍稍瞭解一點,以前用Python作過一些簡單的小遊戲。Python當中的pygame很是好用,編寫小遊戲很是合適。而且Python也能夠接入Unity,github裏能搜到很多使用Python作出來的遊戲。可是有沒有遊戲公司招聘Python程序員來進行遊戲開發我就不清楚了,畢竟不是作這個行業的,但至少你們作一些小遊戲來自娛自樂確定仍是沒問題的。若是要練手的話能夠考慮作一個2048,doodle jump這些比較簡單的小遊戲。

小結

若是隻是尋找Python的新手入門項目,網上隨便搜索一下出來的結果是很是多的。可是這並無太多的意義,由於這些項目並不必定適合每個人。而在明確本身想要從事的方向以前,合適與不合適也無從談起,因此但願你們均可以先明確本身的方向,以後再找到對應的進階道路則要容易得多。因此若是你以前只是想要學好Python這門語言,可是又沒有考慮過方向相關的話,我建議你能夠思考一下這方面的問題。

相關文章
相關標籤/搜索