如何系統學習Python?
學生們是否非常想學好 Python,一方面被瑣事糾纏,一直沒能動手,另一方面,擔心學習成本太高,心裡默默敲著退堂鼓?幸運的是,Python 是一門初學者友好的程式語言,想要完全掌握它,你不必花上太多的時間和精力。
Python 的設計哲學之一就是簡單易學,體現在兩個方面:語法簡潔明瞭:相對 Ruby 和 Perl,它的語法特性不多不少,大多數都很簡單直接,不玩兒玄學。
切入點很多:Python 可以讓你可以做很多事情,科學計算和資料分析、爬蟲、Web 網站、遊戲、命令列實用工具等等等等,總有一個是你感興趣並且願意投入時間的。

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 中的物件模型有著很大的幫助。
“軟知識”則是特定語言環境下的語法技巧、類庫的使用、IDE的選擇等等。這一部分,即使完全不瞭解不會使用,也不會妨礙你去程式設計,只不過寫出的程式,看上去顯得“傻”了些。
對這些知識的學習,取決於你嘗試解決的問題的領域和深度。對初學者而言,起步階段極易走火,或者在選擇 Python 版本時徘徊不決,一會兒看 2.7 一會兒又轉到 3.0,或者徜徉在類庫的大海中無法自拔,Scrapy,Numpy,Django 什麼都要試試,或者參與編輯器聖戰、大括號縮排探究、作業系統辯論賽等無意義活動,或者整天跪舔語法糖,老想著怎麼一行程式碼把所有的事情做完,或者去構想聖潔的效能安全通用性健壯性全部滿分的解決方案。
很多“大牛”都會告誡初學者,用這個用那個,少走彎路,這樣反而把初學者推向了真正的彎路。
還不如告訴初學者,學習本來就是個需要你去走彎路出 Bug,只能腳踏實地,沒有奇蹟只有狗屎的過程。
選擇一個方向先走下去,哪怕髒醜差,走不動了再看看有沒有更好的解決途徑。
自己走了彎路,你才知道這麼做的好處,才能理解為什麼人們可以手寫狀態機去匹配卻偏要發明正則表示式,為什麼面向過程可以解決卻偏要面向物件,為什麼我可以操縱每一根指標卻偏要自動管理記憶體,為什麼我可以巢狀回撥卻偏要用 Promise...
更重要的時,你會明白,高層次的解決方法都是對低層次的封裝,並不是任何情況下都是最有效最合適的。
技術湧進就像波浪一樣,那些陳舊的封存已久的技術,消退了遲早還會湧回的。就像現在移動端應用、手遊和 HTML5 的火熱,某些方面不正在重演過去 PC 的那些歷史麼?
因此,不要擔心自己走錯路誤了終身,堅持並保持進步才是正道。
起步階段的核心任務是掌握硬知識,軟知識做適當瞭解,有了穩固的根,粗壯的枝幹,才能長出濃密的葉子,結出甜美的果實。
2.發展階段
完成了基礎知識的學習,必定會感到一陣空虛,懷疑這些語法知識是不是真的有用。
沒錯,你的懷疑是非常正確的。要讓 Python 發揮出它的價值,當然不能停留在語法層面。
發展階段的核心任務,就是“跳出 Python,擁抱世界”。
在你面前會有多個分支:科學計算和資料分析、爬蟲、Web 網站、遊戲、命令列實用工具等等等等,這些都不是僅僅知道 Python 語法就能解決的問題。
拿爬蟲舉例,如果你對計算機網路,HTTP協議,HTML,文字編碼,JSON一無所知,你能做好這部分的工作麼?而你在起步階段的基礎知識也同樣重要,如果你連迴圈遞迴怎麼寫都還要查文件,連 BFS 都不知道怎麼實現,這就像工匠做石凳每次起錘都要思考錘子怎麼使用一樣,非常低效。
在這個階段,不可避免要接觸大量類庫,閱讀大量書籍的。
3.類庫方面
「Awesome Python 專案」:vinta/awesome-python · GitHub
這裡列出了你在嘗試解決各種實際問題時,Python 社群已有的工具型類庫,如下圖所示:
你可以按照實際需求,尋找你需要的類庫。
至於相關類庫如何使用,必須掌握的技能便是閱讀文件。由於開源社群大多數文件都是英文寫成的,所以,英語不好的同學,需要惡補下。
4.深入階段
這個階段的你,對 Python 幾乎瞭如指掌,那麼你一定知道 Python 是用 C 語言實現的。
可是 Python 物件的“動態特徵”是怎麼用相對底層,連自動記憶體管理都沒有的C語言實現的呢?這時候就不能停留在表面了,勇敢的拆開 Python 的黑盒子,深入到語言的內部,去看它的歷史,讀它的原始碼,才能真正理解它的設計思路。
這裡推薦一本書:

「Python 原始碼剖析」:Python原始碼剖析
這本書把 Python 原始碼中最核心的部分,給出了詳細的闡釋,不過閱讀此書需要對 C 語言記憶體模型和指標有著很好的理解。
另外,Python 本身是一門雜糅多種正規化的動態語言,也就是說,相對於 C 的過程式、 Haskell 等的函式式、Java 基於類的面向物件而言,它都不夠純粹。換而言之,程式語言的“道學”,在 Python 中只能有限的體悟。學習某種程式設計正規化時,從那些面向這種正規化更加純粹的語言出發,才能有更深刻的理解,也能瞭解到 Python 語言的根源。
5.最後的話
每個人學程式設計的道路都是不一樣的,其實大都殊途同歸,沒有迷路的人只有不能堅持的人。雖然聽上去有點雞湯,但是這是事實。
希望想學 Python 想學程式設計的同學,不要猶豫了,看完這篇文章,Just getting started~
PS:微軟再發力Python ,VS Code與Anaconda達成合作

微軟免費和跨平臺程式碼編輯器 Visual Studio Code 已預設被包含在 Anaconda 發行版中。Python 使用者現在可以在安裝 Anaconda 的同時輕鬆安裝 Visual Studio Code ,以提供出色的編輯和除錯體驗,微軟還為 Anaconda 使用者量身定製了專用功能。
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交流學習qq群:250933691,多多交流問題,互幫互助,群裡有不錯的學習教程和開發工具。學習python有任何問題(學習方法,學習效率,如何就業),可以隨時來諮詢我