首頁  >  文章  >  後端開發  >  如何有系統地自學Python 語言

如何有系統地自學Python 語言

伊谢尔伦
伊谢尔伦原創
2016-12-02 11:58:461127瀏覽

零基礎情況下,學一門語言充實下自己,Python,簡潔、優美、容易使用,是一個很好的選擇。那麼該如何有系統地自學Python呢?

有的人很想學好Python,一方面被瑣事糾纏,一直沒能動手,另一方面,擔心學習成本太高,心裡默默敲著退堂鼓?

 幸運的是,Python是一門初學者友善的程式語言,想要完全掌握它,你不必花太多的時間和精力。

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

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

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

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

1、起步階段

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

1、硬知識

「硬知識」指的是程式語言的語法、演算法和資料結構、程式設計範式等,例如:變數和類型、循環語句、分支、函數、類別。這部分知識也是具有普適性的,看起來是掌握了一種文法,實際上是建立了一種思考。例如:讓一個Java程式設計師去學習Python,他可以很快的將Java中的學到的物件導向的知識map到Python中來,因此能夠快速掌握Python中物件導向的特性。
如果你是剛開始學習程式設計的新手,一本可靠的文法書是非常重要的。它看起來可能非常枯燥乏味,但對於建立穩固的程式設計思維是必不可少。
下面列出了一些適合初學者入門的教學材料:

❖「笨方法學Python」:http://learnpythonthehardway.org/book/
這本書在講解Python的語法成分時,還附帶大量可實踐的例子,非常適合快速起步。

❖「The Hitchhiker’s Guide to Python!」:The Hitchhiker’s Guide to Python!
這本指南著重於Python的最佳實踐,不管你是Python專家還是新手,都能獲得極大的幫助。

❖「Python官方文件」:Our Documentation
實務大部分問題,都可以在官方文件中找到答案。

❖ 輔助工具:Python Tutor
一個Python物件視覺化的項目,用圖形輔助你理解Python中的各種概念。

Python的哲學:

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

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

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


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

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

很多「大牛」都會告誡初學者,用這個用那個,少走彎路,這樣反而把初學者推向了真正的彎路。
不如告訴初學者,學習本來就是個需要你去走彎路出Bug,只能腳踏實地,沒有奇蹟只有狗屎的過程。

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

自己走了彎路,你才知道這麼做的好處,才能理解為什麼人們可以手寫狀態機去匹配卻偏要發明正則表達式,為什麼面向過程可以解決卻偏要面向對象,為什麼我可以操縱每一根指針卻偏要自動管理內存,為什麼我可以嵌套回調卻偏要用Promise...

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

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

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

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

2、發展階段

完成了基礎知識的學習,必定會感到一陣空虛,懷疑這些語法知識是不是真的有用。
沒錯,你的懷疑是非常正確的。要讓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 和專業知識相結合,能夠解決很多實際問題。這個階段能走到什麼程度,更多的取決於自己的專業知識。   

3、 深入階段

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


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

這裡推薦一本書:
「Python 源碼剖析」:Python源碼剖析 
這本書把Python 源碼中最核心的部分,給出了詳細的闡釋,不過閱讀此書需要對C 語言內存模型和指針有著很好的理解。

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

這裡推薦一門公開課
「程式設計範式」:史丹佛大學公開課:程式設計範式
講師高屋建瓴,從各種程式設計範式的代表語言出發,給出了每種程式設計範式最核心的想法。

值得一提的是,這門課程對C語言有非常深入的講解,例如C語言的範型和記憶體管理。這些知識,對閱讀 Python 原始碼也有大有幫助。

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

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


陳述:
本文內容由網友自願投稿,版權歸原作者所有。本站不承擔相應的法律責任。如發現涉嫌抄襲或侵權的內容,請聯絡admin@php.cn