只要談起程式設計,Python 在近十年幾乎都是榜上有名的必學程式語言,富比世雜誌 更預測 Python 會是 2023 年最熱門的語言。如果你也有想學 Python 的念頭,也想知道如何學習,這則文章幫助你整理了 Python 自學資源,讓你即使沒有理工科背景知識與學歷,也能順利學會 Python!
這則筆記不只將分享筆者閱讀過且認為對學習確實有幫助的課本、線上課程、以及講座資源,也寫下我認為學好 Python 最重要的關鍵:目標設定,我依照初學、中級、與進階等不同學習階段,為你設定了適當的目標,設定目標將幫助 Python 學習者更有效率的學習,階段性的成就感也會讓你養成更多學習 Python 的熱忱。希望看完這則筆記的你,能建立起屬於你自己的程式設計學習地圖。
目錄
如果你還沒開始學 …
步驟 0:先思考為什麼要學 Python,幫自己設個目標吧!
這是人人都說程式設計技能很重要的時代,是每個科技人都說 Python 很值得學的時代,但那些都是「別人說」,你知道自己為什麼想學 Python 嗎?先幫自己回答這個問題、先找到學習的目的,這樣才撐得過學習過程遇到的困難,達到目標也會更有成就感喔!
思考學習 Python 目標不只幫助你累積成就感,也會避免你走一些彎路。筆者好豪非常熱愛 Python 這個程式語言,但我仍不會斷言 Python 就是最好的、不會盲目推薦給每一個人,而是取決於你想達成的目標是什麼,例如:
- 如果你是在上統計學課程的學生,你可能需要檢查一下老師是否要求你要用 R 語言完成作業
- 假如你想成為網頁的前端工程師,你需要研究你有興趣求職的公司是否使用 Python 語言,畢竟 JavaScript 或 Ruby 也是熱門的前端程式語言
- 你想寫手機 APP 的話,則是要確認自己想寫什麼平台的 APP,要是你從一開始就是對蘋果的 iOS APP 有興趣,Swift 是更主流的語言,代表它更多人討論、更好學
(若是你發現自己其實更需要學習 R 語言,推薦你移步閱讀我寫的 R 語言自學指南)
我在此也簡短分享我喜歡使用 Python 的理由。首先,筆者作為一名資料科學家,Python 幾乎是必備語言,處理資料的時候 Pandas 套件非常方便,也有 PyTorch
或 Scikit-Learn
等等業界常用的機器學習工具;其次,Python 能做到的功能多元、確實提高了我的工作效率,像是為 Excel 有多個資料表要做的高重複性瑣碎工作、可以用程式自動化,或者用 Flask
迅速搭建網站後端;最後,Python 的語法相對於其他程式語言更簡單好懂,我要學習上述的任何新任務的時候,因為語法直觀、通常不用花太多時間就能上手!
「決定要花時間學 Python」就是學 Python 重要的第一步!相信看到這裡的你,是已經決定要用 Python 來達成某些重要任務,接下來,我將分享我看過的實用自學資源,幫助你高效率學習 Python 的同時、逐漸累積學 Python 的成就感與自信。
入門:初學 Python 程式設計
學習目標:紮實看完一本課本,學會程式設計基本專有名詞
自學的資源有許多種類,我認為,初學 Python 的第一項資源,選擇看書是必要的。初學 Python 的時候,一下學到許多新知識與基本觀念的名詞,包括變數、函數、迴圈等等,看完一段時間後、很容易忘記細節,需要反覆回頭複習,課本就是讓你方便快速複習的最好媒介!
《Real Python 人氣站長教你動手寫程式》
我喜歡這本書,並且認為它很適合 Python 初學者,有兩大理由。
首先,它是一本強調「從做中學」的書,不會對讀者講太多程式設計的理論,而是期望讀者跟著書本範例一行行輸入程式碼,看著螢幕上呈現相對應的結果,來感受 Python 為你做了什麼工作。《Real Python 人氣站長教你動手寫程式》還附上難度適中的練習題與解答,我反而覺得練習題是這本書的精華!在筆者的學習經驗,程式設計終究是需要透過 反覆練習 才能讓技能純熟。
其次,作者 Dan Bader 是很有經驗的 Python 教學者,它設計的教材很重視學習「有 Python 特色」的程式設計,也就是 Pythonic 程式碼。讓你不只在一開始學 Python 就建立起良好的寫程式習慣,也可以迅速運用 Python 的優勢。舉例而言,在 Python 3.4 版本之後,Python 設計者們將 pathlib
套件 納入了標準函式庫,作者 Dan Bader 就將 pathlib
的教學納入 此課本,讓你跟上潮流、學會這個官方設計者都認為重要的好工具。
《Python 教學手冊》
筆者好豪相信這本書值得推薦的理由非常單純:排版漂亮、好讀!
我認為,學習 Python 的第一本書,課本內容有多深或多廣不是重點,選書標準應該是要能看得完!看程式碼偶爾會有看到頭昏眼花的時候,要避免學到放棄,課本排版看得順眼是容易被低估的重要要求,翻開課本下一頁的第一眼至少要在視覺上覺得舒適,讀者才會願意看下去。
《Python 教學手冊》是我目前少數看過之後、會對其好看排版印象深刻的 Python 初學課本,程式碼跟教學敘述文字穿插的內容,還能維持版面乾淨好讀,感覺一直讀眼睛都不會累。
更別說作者 洪維恩老師 是有豐富經驗的程式設計教學者,他的教材是多間大學資工與資管系的指定課本,《Python 教學手冊》這本書也是同樣高品質,是適合大家從零開始自學 Python 的教材。
《Automate the Boring Stuff with Python》
筆者好豪在初學 Python 讀這本書的時候,最大的收穫是:要是能早點知道 Python 能幫我做到這麼多事情就好了!
《Automate the Boring Stuff with Python》是寫給初學者的完全免費線上課本,除了大部分老師都會教的 Python 基礎語法知識以外,這本書的目標是用最快速度讓你感受到 Python 超有用,書中介紹的任務範例都是用程式自動化能幫你處理那些做起來很繁瑣、反覆、又超無趣的工作。像是:
- 用爬蟲程式同時蒐集許多網頁的內容
- 在滿坑滿谷的 PDF 與 Excel 文件裡搜尋你需要的關鍵字資料
- 每天早上不用自己看天氣預報,有可能要下雨的時候,讓程式自動寄一封 Email 提醒你
如果你是那種「聽說」Python 很好用、但是其實你自己並沒有明確想要用 Python 完成特定目標的那種人,我特別推薦你用《Automate the Boring Stuff with Python》這本書學習 Python,透過書中專為提高工作效率與生產力而設計的有趣小專案,我相信你會對 Python 越學越有興趣!
我不得不稍微抱怨,這本線上課本的版面設計我不是很喜歡,尤其程式碼的字體反而比其他文字小,實在讓我汗顏,好在這本線上課本現在在台灣也有出版中文翻譯課本《Python 自動化的樂趣:搞定重複瑣碎 & 單調無聊的工作》,這本中文翻譯課本排版好看多了,推薦給喜歡實體書的你;喜歡透過課程學習的話,該書作者在 Udemy 也開設了 線上課程,適合想要隨時隨地拿起手機都能看影片學 Python 的讀者。
中級:完成你的第一項小目標
學習目標:做出第一份作品、追求第一份成就感!
在這個階段,你需要看完至少一本初學等級的 Python 課本,不用擔心你對之前學的理解還不夠深、也不用擔心已經忘掉很多,事實上,學習 Python 本來就是永無止盡的,既然你已經辛苦讀完至少一本課本了,接下來你需要想辦法讓自己樂於持續學下去。
要養成學 Python 的樂趣,可以從創造第一份作品開始,因為創造作品的過程將讓你獲得 真實成長 的成就感,作品不需要拘泥於任何形式,可以單純是整理 Excel 表格的小工具、也可以是個漂亮的網站,它只需要能讓你感受到學習 Python 確實對你的人生產生效益即可。
此外,經過了完全初學階段,要用什麼媒介學習已經不是重點,線上課程、書本、或者講座都可以,只要能激發你創造作品就好。以下筆者將分享自己較熟悉的領域,期望其中有你想學習的主題,請讀者依照興趣,找出能符合你工作目標、能協助你創造作品與成就感的自學資源。
資料科學
《Python 資料分析》
說到用 Python 裡的資料科學與數據分析工具,幾乎所有專家都會認同:pandas
套件非學不可!
pandas
是一個基於 Python 設計、為了資料處理而生的套件,任何你需要整理、清理、或者計算數據相關的任務,pandas
讓你可以華麗快速地完成,它不只執行效率高、功能彈性多元、語法也很簡潔好懂。
而《Python 資料分析》這本書,就是 pandas
專案創立者 Wes McKinny 所著,要學好 pandas
、由該工具創立者本人教學的課本當然是絕佳的資源。從資料的輸入輸出、表格合併(Join)與變形(Reshape)、到視覺化等等,最常見的數據處理任務幾乎都有涵蓋,很適合用來打好分析基本功。
這本書的書寫風格十分務實,書中用到的程式碼全都在 GitHub 開源分享,作者就是希望讀者邊寫程式邊學,課本內不會著墨太多數據分析理論,而是著重教學 Python 與 pandas
的語法、以及如何高效使用這項工具,適合已經對統計學稍有概念、而想用 Python 來實踐資料科學任務的學習者。
學習此書的同時,北商的 謝承熹老師 佛心的在 此 YouTube 頻道 上分享了這本書的全中文影片教學,強力推薦你邊看書、邊看影片學習。
《Pandas 資料清理、重塑、過濾、視覺化》
這本書的內容與上面提到的《Python 資料分析》相似,目標都是讓讀者全面地學會 pandas
資料處理。不過,雖然專案創立者自己寫的課本無疑十分扎實,筆者好豪個人主觀喜好、至今仍會常常拿出來會複習的是這本《Pandas 資料清理、重塑、過濾、視覺化》,因為我很喜歡它的寫作風格。
首先,《Pandas 資料清理、重塑、過濾、視覺化》是一本「Cookbook」類型的書,意思是,作者不斷透過多樣化的範例,帶領讀者看到不同類型的數據問題,進而一步步引導讀者用 pandas
解決問題。書中引用的範例數據,從簡單到進階總共有超過 100 個,每個範例都有詳細的 pandas
程式碼展示問題解決流程,在大量的範例中「從做中學」,能幫助你養成看到某類型資料就想到可以怎麼分析的直覺。
其次,這本書有非常多的延伸資訊,不只教學 pandas
必要的基礎操作技巧,還會有補充章節介紹額外的 pandas
功能或操作。尤其 pandas
是個非常具有廣度的工具,同一個資料處理任務,在 pandas
幾乎都有多種方法來完成,作者在書中會對同一個問題提供多種 pandas
解決方案,只要你不怕腦容量爆炸,這本書可以讓你學到超級多!也因此,讀者需要熟悉 Python 基本知識(至少知道 list、set、dict 是什麼),閱讀這本書才不會覺得頭昏眼花。
這裡介紹的這本書跟前面介紹的《Python 資料分析》,其實擇一閱讀即可。如果你對 Python 還不是很有自信,《Python 資料分析》的教學方法比較循序漸進;相對地,如果你目標遠大,想要有深度又有廣度的學習 pandas
,《Pandas 資料清理、重塑、過濾、視覺化》會教學更多樣的語法、大量擴充你的分析工具箱,較適合學習意志力堅強的讀者。
Hahow:Python 的 50+ 練習.資料科學學習手冊
如果你喜歡透過線上課程來學習資料科學,Hahow 的 Python 的 50+ 練習.資料科學學習手冊 會是個好選擇。課程講師 郭耀仁 不只本身是資深分析師,也是台大、師大等大學的講師,更已經開設過多門線上課程,因此 Python 的 50+ 練習.資料科學學習手冊 當然也是非常優質的課程。
這門課會教授多個 Python 資料科學最熱門的工具,包括 numpy
、pandas
、scikit-learn
、以及 matplotlib
,資料前處理、建模分析、以及畫圖表視覺化等等全方位的資料科學任務都涵蓋在課程中。講師在課程介紹中強調,這門課如其名,非常重視練習題實作,不動手做是無法完整學習的,而在 Hahow 上課的優點就是,課程網站不只是提供 Python 練習題程式碼詳解,真的遇到其他困難的話,在課程平台上發問、講師在兩三天內就會回覆,如果你喜歡像在學校課堂一樣,透過作業練習、又能向老師提問的體驗,這門 Hahow 課程能讓你開心學習 Python 資料科學。
《Deep learning 深度學習:Keras 實作》
在人工智慧蓬勃發展的現在,每個人只要對這個領域稍有興趣,肯定都會想學一點深度學習與類神經網路, 《Deep learning 深度學習:Keras 實作》這本書所教學的 keras
套件是非常值得推薦的 Python 深度學習入門。
《Deep learning 深度學習:Keras 實作》用淺顯易懂的方式,讓你遍覽深度學習的應用,包括電腦視覺的 CNN 模型、文字與序列資料的 RNN 模型、還會介紹 GAN 生成對抗神經網路—它正是現在火紅的 ChatGPT 技術核心!此課本會用 keras
套件帶讀者透過 Python 實作上述這些模型,比起看艱澀的論文,親手寫出程式碼、看到模型產出結果,更能深刻學習。尤其這本書的作者 François Chollet 正是 keras
深度學習的開發者,我初學深度學習的時候就是用此書自學,覺得好理解也好上手。此書的範例程式碼也都 開源分享在 GitHub,讓讀者邊做邊學。
再次推薦,北商的 謝承熹老師 對此書也佛心分享了 全中文 YouTube 教學影片,老師的課程影片手把手的帶我們看 Python 程式碼如何與書中的機器學習觀念對應,著實能讓同學「深度學習」!
在這個小節的開端提過,我認為剛脫離初學的中級 Python 學習者,最重要的目標就是做出第一份作品、追求第一份成就感,如果你使用 Python 的目標就是要完成數據分析任務、或者成為資料科學家,參與 Kaggle 類型競賽就是累積作品的好方式,建議你接著閱讀這篇文章了解 參與 Kaggle 類型資料科學競賽的 3 大好處。
演算法與求職
雖然不確定正在讀這篇的你,有多麽喜歡演算法這門學問,但筆者好豪自己並沒有熱愛演算法到痴狂,學習演算法單純就是為了求職、對抗面試的考題!
如果你跟我一樣,學演算法是為了求職面試,我回想自己的 Python 面試經驗 後,最好的演算法自學方法不是看書、也不是花時間看線上課程,而是:
不斷、不斷地寫 Leetcode 的 Python 練習題!
Leetcode
Leetcode 是一個線上練習寫程式的平台,可以用多種程式語言練習資料結構與演算法,Python 當然也是其中之一。雖然要付費才能看到練習題的官方標準答案,但是,熱情的網友會在每個練習題留言分享它們的解題法,光是參考大家的非官方解答,就能學到很多 Python 以及演算法技巧!因此你完全可以選擇免費使用這個練習平台。
要是你跟筆者一樣不是資工本科系出身,對資料結構與演算法沒什麼概念的話,以下兩個資源可以參考閱讀。但我仍會強調,比起看書,直接上去 Leetcode 網站寫習題,能更有效學習 Python 與演算法。
- 《Problem Solving with Algorithms and Data Structures using Python》:免費的線上電子書,最經典、非知道不可的資料結構與演算法幾乎都有講到,程式都是用 Python 示範。美國的一位大學教授 Gerry Jenkins,也熱心地在 他的 YouTube 頻道 分享講解這本課本內容的課程影片
- 《Python 面試題目與解答:邁向高薪之路》:講解 LeetCode 類型演算法面試題的中文課本,大量例題、排版也清楚,如果你偏好透過書本學習、也需要中文資源自學 Python 的演算法面試,這本書會適合你
網站開發
Udemy: REST APIs with Flask and Python
這門 Udemy 線上課程會教你使用 Python 的 flask
套件以及其相關套件建立 REST API,是基礎的網頁後端開發課程。課程教學方式循序漸進,在一開始的一個小時課程內,老師就會帶你寫出一個基本的 REST API、讓你快速理解 REST API 究竟在做什麼,之後的課程會逐漸為這個基本後端架構加入更完善的進階功能,包括使用者驗證、Docker 部署、以及資料庫管理等等。
(補充:REST API 的意思很簡單地說,是可以接受其他程式要求、回傳資料的程式)
REST APIs with Flask and Python 專注教學 flask
後端入門知識,要是你需要全方位學習網頁開發(例如想學 HTML、CSS),這門課的內容不太足夠。但如果你像我一樣,是為了機器學習的工程實踐(MLOps)而學習後端知識,我認為這門課的份量恰到好處,我從這門課學會後端工程要考慮哪些重要面向。這門課更詳細的介紹,歡迎參考我在 2020 年修習這門課的 學習心得。
進階:追求 Pythonic!
學習目標:知道怎麼發揮 Python 才有(而其他程式語言沒有)的優勢
提醒:以下介紹的書或課程都較為進階,也比較沒有那麼「循序漸進」地教學,你如果沒有完整讀過至少一本 Python 入門課本、或者上過至少一門課,恐怕會覺得艱澀難懂。
《Python 神乎其技》
任何人問我,該怎麼提升 Python 技能,我一律會先推薦他/她閱讀這本:《Python 神乎其技》。
這本書和本文提過的《Real Python 人氣站長教你動手寫程式》是同一位作者 Dan Bader,他長時間經營 Python 教學部落格,我從很久以前就持續拜讀他的部落格教學,每一篇都讓我收穫豐碩,這本《Python 神乎其技》就是他過去教學文章與影片內容的濃縮精華版。並且,此書的主題是 Python 特殊語法(Pythonic Code),在我拜讀 Dan Bader 的教學之前,筆者只是把 Python 當作「語法比較簡單的 C++」在寫,而讀了作者的 Python 教學之後,我才知道什麼叫「Pythonic」、開始用全新的角度思考怎麼寫 Python 程式。
想要有系統地學習 Pythonic 程式、想讓自己 Python 程式碼更簡潔或是看起來更內行,推薦你從這本書開始!
要學習 Dan Bader 教學的進階 Python 技巧,不見得非買書不可,此書的內容在他的部落格全都找得到、可以免費線上閱讀,筆者好豪幫你把書中重要章節對應的部落格文章整理好了,有興趣的話請看這篇:《Python 神乎其技》免費教學文章整理。
《Python Cookbook》
(寫在前面:這是線上閱讀的非官方、簡體中文翻譯書)
《Python Cookbook》是寫給已有一些 Python 開發經驗的讀者看的技巧集錦,大多內容專注在專業 Python 套件、框架、或者軟體會使用進階 Python 知識,幫助讀者更理解 Python 專屬的特殊語法背後運作邏輯。
我將這本書以「一天學一則 Python 小知識」的方式閱讀,雖然撰寫此文的當下我只陸續看了前半本,但書中教的每則技巧都讓我收穫滿滿,每篇都激發我延伸搜尋其他相關知識才能真正理解書中教的其中一小節內容。
此書每個章節各自獨立,你完全可以跳著讀,筆者好豪在此推薦你優先閱讀第四章學習 iterator 與 generator,我個人主觀覺得這章節特別實用。
再次提醒,此筆記附上的連結是熱心網友翻譯的非官方線上課本,你也可以對照課本原作者的 Github 參考 作者原創的範例程式碼。
Udemy: Python 3 Deep Dive
我上這門課的時候,每看一部影片、都會在心中發出「原來 Python 可以這樣用!」的驚嘆。
Python 3 Deep Dive 線上課程主旨是引導學生深入理解 Python 能做到什麼事,講者著重教學標準函式庫(Standard Library),讓你感受到 Python 本身內建的功能就十分強大,很多重要任務根本不見得要依賴其他開發者寫的第三方函式庫。
我曾完整看完的是這個線上課程的第一部份 Functional 篇,我上完課後,開始用全新的眼光看待 Python 這個程式語言,例如,容易讓初學者搞糊塗的裝飾器(Generator),把它當作長相比較特殊的函式(function)會更好理解一些;或者,透過函式的 First-class citizen 特性,了解函式也是一種物件,可以像字串或數值資料一樣做出指定給特定變數等等動作。
不瞞你說,這門課的內容對我來講不太容易,因此我上這門課的速度很慢,常常要暫停影片上網查資料,查完資料回來又要重播幾個段落,才充分學懂課程內容,以此經驗再次提醒這門課並不適合 Python 初學者。相對地,如果你有大量挑戰慾與求知慾,Python 3 Deep Dive 實際上在 Udemy 總共出了四集線上課程,完全足夠你發揮對 Python 的熱愛、一集一集看完:
Udemy: Deployment of Machine Learning Models
Docker、CI/CD、或者 REST API 等等,你是否覺得自己已經努力在學這些知識,卻不知道怎麼運用、不知道怎麼將他們整合進自己的 Python 程式專案呢?如果是,這門 Udemy 線上課程 Deployment of Machine Learning Models 會幫你解決這個困境。
雖然這門課以機器學習為標題,課程主體是 MLOps,把機器學習從零散的實驗模型檔案、部署成真的能上線為大量使用者服務的應用程式。然而,筆者實際修完課的經驗中,學到最多的是建立完整 Python 專案的知識,我在這裡一次學到很多 Python 好用的工具,像是紀錄資料的 logging
、單元測試 pytest
、Docker 容器與 CI 工作流結合等等。
(延伸閱讀:MLOps 是非本科找機器學習工作的常見弱點)
這門課 的優點是一次學到許多工具、以及如何順利將它們整合成一個大專案,但我認為這同時也是課程缺點,每個主題都只會蜻蜓點水地介紹,課程重點是讓你知道這些 Python 工具怎麼結合運用、做出一個功能完整的機器學習 APP,而不是讓你精通每個工具。此外,這門課也幾乎不會講機器學習理論,將會直接介紹程式碼,因此,這門課適合對 Python 與機器學習都有一定基礎經驗,想知道 Python 生態系有什麼好用工具可以使用、想要快速拓展視野的學習者。
結語
回想自己曾經讀過的書、看過的課程,其實有更多是學完沒什麼感想跟收穫的,希望這則筆記整理出我認為特別實用的資源,能夠對你的 Python 自學之路有幫助。
Python 的學習沒有止盡,筆者至今、還有未來都會規劃時間持續學習 Python 知識,以下是我時常關注 Python 新知的管道,在筆記的最後也分享給你:
- PyData 的 YouTube 頻道:專注在資料科學的非營利教育計畫,有超多全球強者分享的實用講座
- PyCon 講座影片網站:全球 Python 社群年度盛會,講座全都錄影分享在此網站中,根本學不完!
- 偏好中文講座的話,可以集中看 PyCon Taiwan 的 YouTube 頻道
- Kaggle:知名的數據分析競賽平台,全球的資料科學家都積極在此分享自己的分析方法
- 探索像是 Udacity 或 Udemy 等等線上課程,例如我一開始就是透過在 Facebook 在 Udacity 的課程 學會 PyTorch 深度學習的
如果這則筆記有幫助到你,歡迎追蹤 好豪的粉絲專頁 與 Threads 帳號,我會持續分享 Python 以及資料科學相關文章;也可以點選下方按鈕分享,讓更多想提升 Python 技能的朋友看到!