如何高效學Python?
如果你一直想學Python,但是不知道如何入手,那就別猶豫了。這篇文章就是為你寫的。
疑問
隨著數據科學概念的普及,Python這門並不算新的語言火得一塌糊塗。
因為寫了幾篇用Python做數據分析的文章,經常有讀者和學生在留言區問我,想學習Python,該如何入手?
我經常需要根據他們的不同情況,提出對應的建議。這樣針對性雖強,但效率不高。這個問題,我還是寫出來,讓更多的人一同看到吧。
有幾位出版社的編輯,給我發私信,鼓勵我趕緊寫一本Python教材出來。
我暫時還沒有寫Python基礎教程的計劃。因為在我看來,現有的學習資源已經足夠好了。
有現成的資源和路徑,為什麼許多人依然在為學Python犯愁呢?
因為學習有個效率問題。
Python語法清晰明快,簡單易學。這是Python如此普及的重要原因。但是,選擇合適的Python學習方式,需要跟你自身的特性相結合。
人群劃分的標準是什麼?不是你是否計算機相關專業,也不是你是否已經工作,而是一個重要的指標——你的自律能力。
你可能覺得我說的話沒有信息含量。自律能力強,學得更好,地球人誰不知道?
可是,自律不夠強的人,難道就註定什麼也不能學了?
當然不是。
每個人的性格都有不同的特點,沒有絕對的高下之分。不信你聽聽劉寶瑞先生的相聲《日遭三險》,就明白了。
自律能力也是這樣。只要你能清楚認識自己,就能以更高效的方法來學習新知識和技能。
下面我們分類探討一下,不同自律能力的人,該如何學Python,才能更高效。
路徑I
咱們先從自律能力最差的人說起。
這樣的同學,往往是三分鐘熱度。偶然受到了刺激,發奮要學習Python,以便投入數據科學的事業中。
他會立即跑到圖書館或者書店抱回來一本《X天從入門到精通Python》的書開始啃。結果X天還沒到,就順利跑完了從入門到放棄的全過程。
你沒能堅持下來,自己肯定是有責任的。但是最大的問題,在於過度高估自己的自律能力。
這樣的同學,我推薦你到Coursera平台上,按部就班學習一門非常好的MOOC——「Programming for Everybody」。
推薦這門課,是因為課程質量真是太好了。
首先是教材好。這本教材的來源是有故事的。
先是 Allen B. Downey 寫了一本開放書籍 「Think Python: How to Think like a Computer Scientist」。
這本書在Amazon上的評價是這樣的:
Charles Severance覺得這本書寫得太好了,想把它作為教材。於是徵得作者同意,大篇幅借鑒了這本書的內容架構,編寫了一本 「Python for Informatics」。
Charles寫作這本書的時候,同時開放推出了iBook格式。裡面就包含了自己的授課視頻,供學生直接觀看學習。
後來,Charles用這本書擴展,做成了一門MOOC。2015年上線不久,矽谷資深工程師就都爭相學習。
Charles深諳課程迭代的技藝。他不斷添加內容,完善課程體系,將一門課發展成一個專項課程(Signature Track),並且將教材升級為 「Python for Everybody: Exploring Data In Python 3」
在目前全球MOOC口碑榜上,Charles的這門課一直名列前茅。
這個專項課程深入淺出講解Python本來就很簡單的語法,而且還用數據科學的一些基礎工作任務,帶動你去使用Python語言寫簡單項目。這種紮實的訓練過程可以增強你的信心,激發興趣。
對於自律程度低的同學來說,下面這個特性更重要——一切工作都有時限。
Coursera上的課程,每周的任務很明確。練習題正確率如果不能達到80%,就不能過關。到了截止日期,如果你不能完成全部練習和課程項目,就拿不到證書。
老師在前面引領你,助教在旁邊督促你,平台用時間表提醒你,論壇上的同學們在用同儕壓力推擠你……
想偷懶?想三天打魚兩天晒網?很難。
路徑II
如果你的自律能力中等偏上,那麼你可以選擇的面就寬了。
這裡我給你推薦另一個MOOC平台,叫做Datacamp。
我第一次接觸Datacamp,是在2015年初。那時我在Coursera上選修杜克大學的統計學課程 「Statistical Inference」,配套的練習就在Datacamp上。
當時這個平台就給我留下了非常深刻的印象,因為代碼的運行都採用了雲環境。學習者不需要在本機安裝任何環境,一個支持HTML5標準的瀏覽器就能帶給你完整的學習體驗。
對初學者來說,這種入門方式太好了。要知道,許多人的學習熱情,就是被環境配置和依賴軟體包安裝的坑埋掉的。
兩年之後,Datacamp已經迭代得更為強大。你可以打開首頁的Data Scientist with Python這個學習路徑,查看其中已經提供的20門課程。
這些課程涵蓋了從Python基礎,到數據處理,直至人工智慧和深度神經網路的方方面面。
所有的課程設計,都是短小精悍的。一般不超過4個小時,就可以完成某一主題的學習。這樣你學起來毫不費力,可以在相當短的時間內獲得反饋(練習題自動評分)和成就感(證書)。
這個平台的課程,進度完全由學習者自己掌控。所以我把它歸納為適合有一定自律能力的學習者。
它既可以給你即時的回饋,讓你時刻了解自己所處的位置進度,不會迷失方向,又能充分體驗自主學習的樂趣。
Datacamp的課程,一般都是第一部分免費開放。後面部分購買後才能解鎖學習。如果你對自己的學習能力和毅力有信心,可以購買一個完整時間段(例如一年)的課程。在此期間,所有平台上的課程,你都可以學習,並且可以在通過後獲取證書。這樣的購買方案本身已經有優惠,而且每年都會有特定時段的大幅打折促銷,非常划算。建議放到購物車裡面多關注。
這是我在Datacamp拿到的深度學習框架Keras課程證書。確實只需要幾個小時的時間就能學完。成就感還是蠻強的。
路徑III
前面提到的課程費用不菲。Coursera上每門課平均價格在49美元左右。對來自發展中國家的學生群體,Coursera可以提供助學金。你可以根據自己的需求如實填寫申請表,來獲得資助。
對於自律能力強的同學來說,你的選擇可以變得非常簡單直接——可以用最受推崇的教材,自己看書學習。
最受推崇的教材,其實是沒有的。正如西諺有云:
One man』s meat, is another man』s poison.
這個世界上,就沒有哪件東西大家都說好。但口碑非常好的教材是存在的,例如這本起了個怪名字的《笨辦法學Python》(Learn Python the Hard Way)。
千萬不要被名稱迷惑,望文生義覺得這是一本糟糕的Python入門教程。
恰恰相反,這本書的設計,非常適合人們的認知規律。
我們學東西,由淺入深,由易到難,逐步遞進。如果一味追求新知,那麼之前學的東西會很快遺忘。如果總是原地打轉,會帶來枯燥和無聊的感覺。還記得高三做的那一年卷子吧?
好的教科書,應該在每一個章節給學習者提供新的知識和內容,提出足夠的挑戰。但是挑戰性不能高到讓學習者產生挫敗感而放棄。同時也不能忽視在後續內容中把前面所學知識改換面目不斷螺旋上升式重複出現。只有這樣才能鞏固所學,讓學習者感受到基礎知識的作用,增強學習的愉悅感。
這麼說有些抽象,實際上有一本英語教材非常符合上述認知規律。就是我在課堂上和文章里反覆推薦過的這一套教材:
《笨辦法學Python》也是一本這樣的書。你需要做的就是把書打開,同時打開一個好用的代碼編輯器,開始按書中要求敲代碼、運行代碼、改代碼……
下圖是我當初學習時,照著這本書敲的代碼。
書中對Python基礎內容訓練的完備性,至今無出其右者。
順便說一句,這本書有中文版哦。所以如果你英語不好,完全不用擔心。
囑咐一句,英語真該好好學。拓寬的不僅是你的眼界,也增加了你可能獲得的機會。考慮到仔細閱讀這部分的讀者都是自律性很強的人,我就不用多說了。
挑戰
三條基本的Python入門路徑講完了。通過對自己自律能力的清晰理解,相信你可以找到一種適合自己逐漸學習和掌握Python的方式。
但是完成了讀書和聽課,是不是就完事大吉了?
當然不是。
許多人在這裡犯了錯誤。他們以為拿到了證書,或學完了教材,就算是真正掌握了Python。然後把這門語言丟棄在一旁,去刷美劇和小說了。
相信我,你會遺忘的。
如果你對於長期不接觸的東西從不遺忘……去醫院檢查一下吧。
大部分人的記憶模式,都是這個樣子的:
若不加以干涉,不出一個星期,你就能把學到的新知識幾乎忘光。
如果你不希望自己辛苦學來的Python知識被如此輕易浪費掉,怎麼辦?
實踐
你應該實踐。
實踐Python技能,未必一定要找個世界500強企業的核心技術部門,「996」工作N年才能完成。
你可以從生活中尋找各種有趣的問題,然後思考能否用Python編程來解決它。
我真正覺得自己初步掌握了Python,就是在完成了我的第一個github項目之後。
項目非常簡單,就是用Python作為膠水語言,把一系列工具連接在一起。可以把Markdown撰寫的內容隨心所欲一鍵變化成各種格式。
格式包括而不限於:
- PDF/LaTeX;
- Word;
- Bitcron文稿;
- MarkEditor文稿;
- MWeb文稿;
- Bear文稿;
- TextBundle(可以導入MindNode, Ulysses等);
- Reveal.js幻燈;
- 發布版本Markdown(圖片一鍵至七牛圖床);
- 本地版本Markdown(簡書等遠程Markdown同步圖片至本地);
- Day One日記。
其中部分功能我正陸續發布在github公開項目中,地址在這裡。相應地,我也撰文做了介紹。
這個小項目,我從2014年開始做。實話實說,現在回頭看當時的代碼,簡直慘不忍睹。但是如果你逐漸對自己的代碼有了這種感覺,證明你在進步。
不要指望自己一出手就能寫出完美的代碼,要把「迭代」兩個字時刻裝在心裡。這樣你才能容忍自己的笨拙,不斷提高。正如古人說的那句:
勤學似春起之苗,不見其增,而日有所長。
我在做這個項目的過程中,曾經遇到了中文編碼、隱私信息存儲、文件名空格處理、絕對與相對路徑、發布流程劃分、功能解耦合、Web圖片地址附帶參數……等等一系列的問題。
通過回顧用git版本控制工具記載下來的日誌,以及版本對比功能,你可以清楚看到自己是在何時利用什麼方法解決了這些問題。然後別忘了,給自己工具箱里的新增小技能打個勾。
一個個小問題逐漸被你攻克的時候,你才能真正感受到所學技能的價值,並且點滴積累自信。
討論
你學會Python了嗎?你是用什麼方法學會的?可否把你的學習心得體會分享給大家?對本文推薦的資源和路徑,你有什麼不同的意見,或者更好的建議?歡迎留言,記錄下你的思考,我們一起交流討論。
如果你對我的文章感興趣,歡迎點贊,並且微信關注和置頂我的公眾號「玉樹芝蘭」(nkwangshuyi)。
如果本文可能對你身邊的親友有幫助,也歡迎你把本文通過微博或朋友圈分享給他們。讓他們一起參與到我們的討論中來。
推薦閱讀:
※Hello World!
※利用Requests+正則表達式爬取貓眼電影,學習全過程記錄與體會。
※《機器學習實戰》學習總結(六)——支持向量機SVM(一)
※用Python實現貝葉斯定理
※跟黃哥學習python第二章