1. 程式人生 > >教你如何系統的自學Python - 純乾貨!

教你如何系統的自學Python - 純乾貨!

教你如何系統的自學Python - 純乾貨!


Python 的設計哲學之一就是簡單易學,體現在兩個方面:

    語法簡潔明瞭:相對 Ruby 和 Perl,它的語法特性不多不少,大多數都很簡單直接,不玩兒玄學。

    切入點很多:Python 可以讓你可以做很多事情,科學計算和資料分析、爬蟲、Web 網站、遊戲、命令列實用工具等等等等,總有一個是你感興趣並且願意投入時間的。

廢話不多說,學會一門語言的捷徑只有一個: Getting Started

¶ 起步階段

任何一種程式語言都包含兩個部分:硬知識和軟知識,起步階段的主要任務是掌握硬知識。

°1 硬知識

“硬知識”指的是程式語言的語法、演算法和資料結構、程式設計正規化等,例如:變數和型別、迴圈語句、分支、函式、類。這部分知識也是具有普適性的,看上去是掌握了一種語法,實際是建立了一種思維。例如:讓一個 Java 程式設計師去學習 Python,他可以很快的將 Java 中的學到的面向物件的知識 map 到 Python 中來,因此能夠快速掌握 Python 中面向物件的特性。

如果你是剛開始學習程式設計的新手,一本可靠的語法書是非常重要的。它看上去可能非常枯燥乏味,但對於建立穩固的程式設計思維是必不可少。

下面列出了一些適合初學者入門的教學材料:

(1.)「笨方法學 Python」:http://learnpythonthehardway.org/book/

這本書在講解 Python 的語法成分時,還附帶大量可實踐的例子,非常適合快速起步。

(2.)「The Hitchhiker’s Guide to Python!」:The Hitchhiker’s Guide to Python!

這本指南著重於 Python 的最佳實踐,不管你是 Python 專家還是新手,都能獲得極大的幫助。

(3.)「Python 官方文件」:Our Documentation

實踐中大部分問題,都可以在官方文件中找到答案。

(4.)輔助工具:Python Tutor

一個 Python 物件視覺化的專案,用圖形輔助你理解 Python 中的各種概念。

Python 的哲學:

    用一種方法,最好是隻有一種方法來做一件事。

學習也是一樣,雖然推薦了多種學習資料,但實際學習的時候,最好只選擇其中的一個,堅持看完。

必要的時候,可能需要閱讀講解資料結構和演算法的書,這些知識對於理解和使用 Python 中的物件模型有著很大的幫助。

°2 軟知識

“軟知識”則是特定語言環境下的語法技巧、類庫的使用、IDE的選擇等等。這一部分,即使完全不瞭解不會使用,也不會妨礙你去程式設計,只不過寫出的程式,看上去顯得“傻”了些。

對這些知識的學習,取決於你嘗試解決的問題的領域和深度。對初學者而言,起步階段極易走火,或者在選擇 Python 版本時徘徊不決,一會兒看 2.7 一會兒又轉到 3.0,或者徜徉在類庫的大海中無法自拔,Scrapy,Numpy,Django 什麼都要試試,或者參與編輯器聖戰、大括號縮排探究、作業系統辯論賽等無意義活動,或者整天跪舔語法糖,老想著怎麼一行程式碼把所有的事情做完,或者去構想聖潔的效能安全通用性健壯性全部滿分的解決方案。

很多“大牛”都會告誡初學者,用這個用那個,少走彎路,這樣反而把初學者推向了真正的彎路。

還不如告訴初學者,學習本來就是個需要你去走彎路出 Bug,只能腳踏實地,沒有奇蹟只有狗屎的過程。

選擇一個方向先走下去,哪怕髒醜差,走不動了再看看有沒有更好的解決途徑。

自己走了彎路,你才知道這麼做的好處,才能理解為什麼人們可以手寫狀態機去匹配卻偏要發明正則表示式,為什麼面向過程可以解決卻偏要面向物件,為什麼我可以操縱每一根指標卻偏要自動管理記憶體,為什麼我可以巢狀回撥卻偏要用 Promise...

更重要的時,你會明白,高層次的解決方法都是對低層次的封裝,並不是任何情況下都是最有效最合適的。

技術湧進就像波浪一樣,那些陳舊的封存已久的技術,消退了遲早還會湧回的。就像現在移動端應用、手遊和 HTML5 的火熱,某些方面不正在重演過去 PC 的那些歷史麼?

因此,不要擔心自己走錯路誤了終身,堅持並保持進步才是正道。

起步階段的核心任務是掌握硬知識,軟知識做適當瞭解,有了穩固的根,粗壯的枝幹,才能長出濃密的葉子,結出甜美的果實。

¶ 發展階段

完成了基礎知識的學習,必定會感到一陣空虛,懷疑這些語法知識是不是真的有用。

沒錯,你的懷疑是非常正確的。要讓 Python 發揮出它的價值,當然不能停留在語法層面。

發展階段的核心任務,就是“跳出 Python,擁抱世界”。

在你面前會有多個分支:科學計算和資料分析、爬蟲、Web 網站、遊戲、命令列實用工具等等等等,這些都不是僅僅知道 Python 語法就能解決的問題。

拿爬蟲舉例,如果你對計算機網路,HTTP協議,HTML,文字編碼,JSON一無所知,你能做好這部分的工作麼?而你在起步階段的基礎知識也同樣重要,如果你連迴圈遞迴怎麼寫都還要查文件,連 BFS 都不知道怎麼實現,這就像工匠做石凳每次起錘都要思考錘子怎麼使用一樣,非常低效。

在這個階段,不可避免要接觸大量類庫,閱讀大量書籍的。

°1 類庫方面

「Awesome Python 專案」:vinta/awesome-python · GitHub

這裡列出了你在嘗試解決各種實際問題時,Python 社群已有的工具型類庫,如下圖所示:

如何系統的自學Python?完整的系統學習規劃和學習路線送上

你可以按照實際需求,尋找你需要的類庫。

至於相關類庫如何使用,必須掌握的技能便是閱讀文件。由於開源社群大多數文件都是英文寫成的,所以,英語不好的同學,需要惡補下。

°2 書籍方面:

這裡我只列出一些我覺得比較有一些幫助的書籍,詳細的請看豆瓣的書評:

「集體智慧程式設計」:集體智慧程式設計 (豆瓣)

「數學之美」:數學之美 (豆瓣)

「統計學習方法」:統計學習方法 (豆瓣)

「Pattern Recognition And Machine Learning」:Pattern Recognition And Machine Learning (豆瓣)

「資料科學實戰」:資料科學實戰 (豆瓣)

「資料檢索導論」:資訊檢索導論 (豆瓣)

爬蟲:

「HTTP 權威指南」:HTTP權威指南 (豆瓣)

Web 網站:

「HTML & CSS 設計與構建網站」:HTML & CSS設計與構建網站 (豆瓣)

...

列到這裡已經不需要繼續了。

聰明的你一定會發現上面的大部分書籍,並不是講 Python 的書,而更多的是專業知識。

事實上,這裡所謂“跳出 Python,擁抱世界”,其實是發現 Python 和專業知識相結合,能夠解決很多實際問題。這個階段能走到什麼程度,更多的取決於自己的專業知識。

¶ 深入階段

這個階段的你,對 Python 幾乎瞭如指掌,那麼你一定知道 Python 是用 C 語言實現的。

可是 Python 物件的“動態特徵”是怎麼用相對底層,連自動記憶體管理都沒有的C語言實現的呢?這時候就不能停留在表面了,勇敢的拆開 Python 的黑盒子,深入到語言的內部,去看它的歷史,讀它的原始碼,才能真正理解它的設計思路。

這裡推薦一本書:

「Python 原始碼剖析」:Python原始碼剖析 (豆瓣)

這本書把 Python 原始碼中最核心的部分,給出了詳細的闡釋,不過閱讀此書需要對 C 語言記憶體模型和指標有著很好的理解。

另外,Python 本身是一門雜糅多種正規化的動態語言,也就是說,相對於 C 的過程式、 Haskell 等的函式式、Java 基於類的面向物件而言,它都不夠純粹。換而言之,程式語言的“道學”,在 Python 中只能有限的體悟。學習某種程式設計正規化時,從那些面向這種正規化更加純粹的語言出發,才能有更深刻的理解,也能瞭解到 Python 語言的根源。

¶ 最後的話

每個人學程式設計的道路都是不一樣的,其實大都殊途同歸,沒有迷路的人只有不能堅持的人。雖然聽上去有點雞湯,但是這是事實。

希望想學 Python 想學程式設計的同學,不要猶豫了,看完這篇文章,Just getting started~
摘要①:微軟再發力Python ,VS Code與Anaconda達成合作

微軟近日在官方部落格宣佈,其免費和跨平臺程式碼編輯器 Visual Studio Code 已預設被包含在 Anaconda 發行版中。Python 使用者現在可以在安裝 Anaconda 的同時輕鬆安裝 Visual Studio Code ,以提供出色的編輯和除錯體驗,微軟還為 Anaconda 使用者量身定製了專用功能。

如何系統的自學Python?完整的系統學習規劃和學習路線送上

Anaconda 是一個流行的 Python 發行版,主要用於資料科學和訊號處理等領域,可為 Windows、Mac 和 Linux 上的使用者提供簡化的 Python 環境。

此次合作也是微軟投資 Python 社群的又一個示例。微軟在去年 9 月曾宣佈計劃將 Python 引入 Azure 機器學習,Visual Studio 和 SQL Server 中。 據微軟稱,Microsoft Python Extension for Visual Studio Code 是 VS Code marketplace 中下載次數最多的擴充套件外掛,迄今為止已有超過 600 萬次的下載。

如何系統的自學Python?完整的系統學習規劃和學習路線送上
摘要②:新興技術崗位薪資漲幅驚人,Python需求增速達174%!

看到Boss直聘釋出《2017網際網路人才趨勢白皮書》,只想說新的一年,希望大家火得像Python一樣,根本停不下來。接下來,我們一起解讀《2017網際網路人才趨勢白皮書》!

2017年是網際網路行業全面轉向技術驅動的一年,技術類人才招聘需求已經佔到整體人才需求的25%。在人工智慧熱潮的驅動之下,AI相關崗位人才需求飆升,然而缺口依然超過百萬。

2017年還是熱門職位更迭的一年。與人工智慧、資料科學等前沿技術相關的職位熱度顯著提升;移動網際網路紅利日漸消退,通用開發基礎崗位的平均薪酬和需求均進入下行通道。

01 北上廣深杭網際網路人才需求佔比全國63%

從城市分佈上看,網際網路行業人才需求高度集中,北上廣深杭五座城市的網際網路人才需求佔到了全國的63%。北京身為網際網路行業大本營,人才需求穩居首位。

02 技術人才需求佔總體需求25.1%

2017年,從巨頭到創業公司,為尋找新的增長動力,紛紛轉向技術驅動。資料顯示,2017年,技術人才招聘需求佔到總體人才需求的25.1%,較2016年提高2.7個百分點,佔比連續2年提升。產品、設計人才需求也有小幅上升,運營、市場、銷售類職位需求則分別呈現小幅下降。

03 人工智慧人才需求翻倍

從具體職位來看,人工智慧相關的職位需求增幅排在最前。由於大批公司涉足AI領域,2017年AI人才需求已達到2016年的兩倍,2015年的5.3倍,人才需求直線上升,大部分崗位三年複合增長率超過200%。AI應用層職位需求增速尤為顯著,增速最高的三個崗位依次是演算法工程師、語音識別和影象處理。

大資料類職位需求增幅僅次於AI崗位。眼下,幾乎所有網際網路企業均把資料人才列為團隊標配。許多公司在資料層面增加投入,大量招募具有演算法和建模能力的人才,力求通過資料沉澱與挖掘更好地推進產品的迭代。資料架構師、資料分析師成為企業爭搶物件,過去一年招聘需求提高150%以上。

04 薪資最高職位過半為AI類崗位

2017年薪資最高的十個職位中,過半為AI類崗位。語音識別、NLP、機器學習等職位平均薪資超過2.5萬元,遠高於一般網際網路職位。在部分大公司,60萬年薪加期權股票只是爭搶高階AI人才的低配標準。同時我們注意到,50%的人工智慧崗位的職位描述上會明確提到為員工提供股票期權,這一比例顯著高於其他職位。

如何系統的自學Python?完整的系統學習規劃和學習路線送上

同時,我們從資料中可以看到,新興技術崗位薪資漲幅驚人。

影象演算法、推薦演算法、深度學習崗位薪資增幅均在15%以上,大資料類崗位僅次於人工智慧。

如何系統的自學Python?完整的系統學習規劃和學習路線送上

新興技術崗位薪資漲幅驚人

相比之下,通用類崗位程式設計師由於從業人數不斷上升,人才稀缺程度大幅緩解,招聘薪酬不升反降,過去幾年格外吃香的PHP、.Net、iOS等職位招聘薪資在下半年出現了2-3%的回撥。點選檢視►就業|資料分析師、大資料開發、Hadoop開發工程師、資料探勘、演算法工程師的工資薪水到底怎麼樣?

05 社交領域Java技術受歡迎

社交網路行業招聘平均薪資一直處於高位。2017年社交網路平均招聘薪資高於網際網路行業整體招聘薪資16.7個百分點,薪資優勢顯著。

如何系統的自學Python?完整的系統學習規劃和學習路線送上

同時資料顯示,後端開發或移動開發方面的技術人才,在社交網路行業比較受歡迎。

如何系統的自學Python?完整的系統學習規劃和學習路線送上

06 Python技能需求增速達到174%

在人才需求升級的同時,網際網路公司對人才技能的要求也在逐漸提高。以資料分析師為例,2015年,超過40%的職位技能要求中只提到了SQL或HIVE,而到2017年,這一比例已降至30%以下,半數崗位要求候 選人還須掌握通用程式設計技能(Python、Java),資料探勘技能(R語言,SAS)以及資料視覺化等技能,其他崗位技能要求也普遍較過去更為嚴格。

從分佈上看,新興技能佔比提高顯著。Python由於語法簡潔,功能強大,且在人工智慧、大資料方面展現出效率優勢,越來越受到歡迎。資料顯示,2017年在僱主釋出的職位說明中,Python技能需求增速達到174%,居於首位,Spark、Hadoop等大資料技能需求增幅也十分靠前。【點選檢視Python資料分析與資料爬取實戰】

07 資訊保安領域需求佔比最高的技術職位

2017年,資訊保安領域尤其值得關注。儘管因企業數量不佔優勢,人才需求佔比不高,但需求增幅超過60%,其中技術人才需求佔比多達46.5%,高出網際網路均值超過20個百分點。該行業的高需求技術職位偏重於後端、運維、測試類人才。

如何系統的自學Python?完整的系統學習規劃和學習路線送上

從人才需求大資料中,我們還發現,資訊保安領域的技術人才需求中,機器學習、自然語言處理、深度學習等AI相關人才佔比已達1.3%,體量雖不大,但卻向我們傳遞了一個資訊,資訊保安行業正在向更高階、更高效、更智慧的方向發展。

資訊保安行業中,高需求職位的薪資漲幅依然強勢。Golang、運維開發工程師薪資漲幅在15%以上。即便是招聘薪資普降的運維工程師,在資訊保安行業中招聘薪資增幅也達到7.9%,足見行業間的側重差異。

08 複合型人才競爭力碾壓優勢愈發明顯

2017年,網際網路行業求職人才中,有26%的人掌握至少3種技能,較2015年增加3.1個百分點,更多的非技術人才開始掌握技術型技能。增長最快的五大技能分別是SQL、Python、Java、Tableau和Hive。

從競爭力上看,多重技能人才也比以往更加吃香。資料顯示,2017年掌握3項以上技能的人才,對企業的吸引力較僅擁有一項能力的人高出30%以上,而在兩年前,這一數字還保持在10%左右,特別是在創業公司,這一趨勢更加明顯。以技術職位為例,雖然不少企業在職位要求中只寫了一項程式設計能力,但過半數公司在尋找人才時偏愛掌握多門程式語言的求職者,多重技能人才對一般求職者的優勢碾壓愈發明顯。

09 2018年發展預測

在談到2018年發展趨勢時,其中Face++人力總監尹利,認為2018年的發展趨勢主要有以下幾個觀察角度:

● 人才的稀缺性會讓市場價值在未來兩年存在一定不合理性;

● 名校情結會更加嚴重,人才市場上的兩極分化會越來越嚴重;

● 這個行業更喜歡真正專注的人,而沒有過去移動網際網路人才的跳躍的基因;

● 海外人才迴流,越來越多的北美前30名高校的畢業生,因為美國政治因素,中國市場環境因素將回流 中國北上廣深等大城市。

2018年,以下三類職位很可能變得更加熱門:

● 跟底層演算法技術相關的職位;

● 能帶來AI從技術轉向產品化的職位;

● 新零售相關崗位。

So,看了這些,你還在猶豫到底學不學Python嗎?