如何系統地自學 Python?

  是否很是想學好 Python,一方面被雜事糾纏,一直沒能動手,另外一方面,擔憂學習成本過高,內心默默敲着退堂鼓?python

  幸運的是,Python 是一門初學者友好的編程語言,想要徹底掌握它,你沒必要花上太多的時間和精力。程序員

  Python 的設計哲學之一就是簡單易學,體如今兩個方面:正則表達式

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

  切入點不少:Python 可讓你能夠作不少事情,科學計算和數據分析、爬蟲、Web 網站、遊戲、命令行實用工具等等等等,總有一個是你感興趣而且願意投入時間的。編程

  廢話很少說,學會一門語言的捷徑只有一個: Getting Started安全

¶ 起步階段

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

°1 硬知識

  「硬知識」指的是編程語言的語法、算法和數據結構、編程範式等,例如:變量和類型、循環語句、分支、函數、類。這部分知識也是具備普適性的,看上去是掌握了一種語法,實際是創建了一種思惟。例如:讓一個 Java 程序員去學習 Python,他能夠很快的將 Java 中的學到的面向對象的知識 map 到 Python 中來,所以可以快速掌握 Python 中面向對象的特性。數據結構

  若是你是剛開始學習編程的新手,一本可靠的語法書是很是重要的。它看上去可能很是枯燥乏味,但對於創建穩固的編程思惟是必不可少。框架

  下面列出了一些適合初學者入門的教學材料:數據結構和算法

  1「笨方法學 Python」:http://learnpythonthehardway....

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

  2「廖雪峯的 Python 2.7 教程」:Home - 廖雪峯的官方網站

  Python 中文教程的翹楚,專爲剛剛步入程序世界的小白打造。

  ❖「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 社區已有的工具型類庫,以下圖所示:

  你能夠按照實際需求,尋找你須要的類庫。

  至於相關類庫如何使用,必須掌握的技能即是閱讀文檔。因爲開源社區大多數文檔都是英文寫成的,因此,英語很差的同窗,須要惡補下。

°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 語言的根源。

  這裏推薦一門公開課

  「編程範式」:斯坦福大學公開課:編程範式

  講師高屋建瓴,從各類編程範式的表明語言出發,給出了每種編程範式最核心的思想。

  值得一提的是,這門課程對C語言有很是深刻的講解,例如C語言的範型和內存管理。這些知識,對閱讀 Python 源碼也有大有幫助。

  Python 的許多最佳實踐都隱藏在那些衆所周知的框架和類庫中,例如 Django、Tornado 等等。在它們的源代碼中淘金,也是個不錯的選擇。

¶ 最後的話

  每一個人學編程的道路都是不同的,其實大都異曲同工,沒有迷路的人只有不能堅持的人。雖然聽上去有點雞湯,可是這是事實。

相關文章
相關標籤/搜索