《Python 功力提升的樂趣》心得:Python 開發 Clean Code 入門指南
文章目錄
Python 功力提升的樂趣
這是「Python 入門三部曲」的最後一篇!歷時 2 年,終於要為這個系列劃下句點。
在此之前,我已寫下 3 篇關於《Python 功力提升的樂趣》的筆記與心得。本文建立在它們之上,但會從更高的俯視角度來介紹與推薦這本書。
從全書的輪廓與定位切入,讓初學者更容易掌握觀念,不至於迷失在細節中。對於已有經驗的 Python 開發者,則可以藉由一篇篇的筆記,直接找到自己感興趣的章節。
所以,本文不會在內容上重複前文,或在細節上多加著墨,而是更多的回顧與比較。
這是為什麼我要先寫筆記,最後再完成這篇閱讀心得的原因。
當然,不是每一本書都值得你如此對待。畢竟其中要投入時間精力甚多,這是我第一次——可能也是最後一次,這麼詳細地介紹一本書。
但這本書,我認為值得。
系列:Python 入門三部曲
- 《精通 Python 第二版》心得:給入門者的 Python 學習藍圖
- 最佳 Python 入門書——《Python 技術者們 - 練功!》心得與導讀
- 《Python 功力提升的樂趣》心得:Python 開發 Clean Code 入門指南
系列:Python 功力提升的樂趣
- 使用 Black 格式化程式碼——《Python 功力提升的樂趣》筆記
- 如何寫出 Pythonic 程式碼——《Python 功力提升的樂趣》筆記
- Docstring 的重要性——《Python 功力提升的樂趣》筆記
- 《Python 功力提升的樂趣》心得:Python 開發 Clean Code 入門指南
有鑑於本文是上述兩個系列的最後一篇,我打算嘗試一個與以往截然不同的寫法。
改用回顧與分析的方式,一步一步地梳理過去各篇文章的關鍵著眼點,最後勾勒出本書的核心價值。為兩個系列同時劃下句點。
我認為,和其它文章內容的互相比較,更能突顯本書的整體定位。
這或許是我所能想到,最好也最有趣的收尾方式。
「Python 入門書系列」的定位與回顧
我們先來看看「Python 入門三部曲」部分。
精通 Python 第二版
第一本我選擇了,可能是全台最暢銷的 Python 書籍——《精通 Python 第二版》。
這是一個「大而全」的選擇,儘管它的內容不算深入,而且對於初學者來說,很多部分我覺得也稱不上平易近人。比如介紹 Flask 框架。
不過它的基礎語法教學很值得肯定。
之所以必須如此,是因為 Python 使用者實在太多樣化。彼此的目的不同、需求不同,學習 Python 的方式也必然有所差異。
所以我們要先準備一張「藍圖」,讓我們縱觀 Python 的全貌,以及它所能做的到所有事情,再從中做出屬於自己的取捨。
而本書顯然是扮演藍圖角色的絕佳選擇。
Python 技術者們 - 練功!
有了全局輪廓之後,我們真的要來「練功」了。
對於有特定目標的 Python 使用者,比如使用 Python 進行資料分析,可以不必完整地看完這本書,就可以開始動手實作。
因為很多工作其實更需要對特定套件的熟悉與了解,而不是 Python 語言本身。
可以說,本書的目標客群還是更加著眼於「Python 開發者」,而不是「Python 使用者」(兩者沒有明確的分界,但仍有些區別)。
因此,如果你的目標是成為一名 Python 開發者,那麼這本書就是你的最佳入門選擇。
Python 功力提升的樂趣
最後是我們的主角——《Python功力提升的樂趣:寫出乾淨程式碼的最佳實務》。
為什麼是第三位出場的呢?原因不難理解。
首先我們要知道 Python 能做什麼,然後問自己想用 Python 做什麼。
經過思考,決定成為一個 Python 開發者後,才是如何寫出乾淨的 Python 程式碼。
換句話說,對於主要把 Python 當作完成工作的工具的使用者而言,是否能寫出乾淨的 Python 程式碼,恐怕不是特別重要——完成目標才是第一位。
所以,如果覺得自己不太需要看完上述第二本書,那本書則更加不是必讀。
這是取捨的優先順序,也是選擇的藝術。
誰需要看《Python 功力提升的樂趣》?
當然是自認已經或將要成為 Python 開發者的人。
Python 開發者
我們還是試著簡單定義一下,怎麼樣算是一個 Python 開發者:
- 熟悉 Python 語法,使用 Python 開發應用程式、服務或系統。
- 你寫的 Python 程式碼不只要能完成工作,還會被讓他人閱讀、維護。
- 對於「最佳實踐」有一定追求。不只關心結果,還關心過程。因為這將會影響到產出的程式碼品質。
我終究只能列舉一些條件,因為 Python 開發者的定義實在太廣泛了。
簡而言之,你希望自己的 Python 程式碼更加乾淨、易讀、易維護,那麼這本書就是你的好幫手。
而在我看來,有這樣的心態,就已經算是一個 Python 開發者了。
為什麼要寫乾淨的 Python 程式碼?
為什麼 Clean Code 很重要?
乾淨的程式碼有兩個不可取代的優點:
- 易讀性:程式碼不僅是給自己,同時也是給別人看的。
- 易維護性:當程式碼變得更加複雜時,乾淨的程式碼可以讓你更容易找到問題。
這兩件事,說到底,就是減少痛苦與省下時間!
其它都不論,省下寶貴的時間就是王道。
Bug 越少,修 bug 的時間就越少;程式碼越好讀,你就越快找到問題所在。
誰不想要快樂工作、快樂生活呢?
「Python 功力提升的樂趣」系列定位與回顧
好,那我們就來看看,了解了 Python 基本功後,究竟要如何更進一步讓自己的程式碼乾淨、好讀。
筆記(一)Black、命名、壞味道
工欲善其事,必先利其器。
如果專案沒有使用 linter、formatter 來進行開發,那我幾乎無法想像,這個專案程式碼會有多麼的雜亂。
整潔的程式碼有很多層次,就像金字塔一樣。而機器能夠代勞的,就讓它們代勞吧!
作者推薦 Black,這是很好的選擇。而現在的我一律推薦 Ruff。
總之,有這些工具輔助,我們未必能寫出乾淨的程式碼。
但沒有它們,一切都只是空談。
筆記(二)Pythonic、行話、陷阱
Pythonic 是一個很有趣的概念,它代表了 Python 的獨特風格,以及最佳實務。
要達到 Pythonic,就必須要熟悉 Python 的特性,並且適時運用。
這需要長時間的經驗與累積。
事實上,只要不是「有意識地追求」,無論你寫了再久的 Python,都不一定能夠寫出 Pythonic 的程式碼。
這不是時間問題,而是「心態」問題。
當然我並不認為每一個 Python 開發者都需要追求 Pythonic,但如果你也想,那本書是一個很好的開始。
筆記(三)函式、註解、docstring
這篇的重點應該是 docstring。
我在許多文章中都強調過 docstring 的重要性。它遠遠不止是單純的註解或文件,應該視為程式碼的一部分。
我很清楚——我非常清楚:一則用心撰寫的 docstring,可以為一個「複雜函式」降低多少「認知負擔」。可以為函式的閱讀者省下多少理解時間(和腦細胞)。
然而,docstring 在實際開發中被輕忽的程度,幾乎與它所帶來的價值一樣巨大。
在我看來,不寫 docstring、不知道怎麼寫好 docstring,都是非常非常可惜的事。
以後我會專門寫一篇文章,示範如何寫好 Python docstring。我們只需要先知曉:
專案程式碼不是一堆待執行的指令,做完就好。而是需要理解與維護的有機體,docstring 更是其中重要的一環。
結語:Beyond the Basic Stuff with Python
沒有人能夠只因為寫得久,就自動變成真正的 Python 大師。
無論是 Pythonic 或 Clean Code,都需要我們在開發這條路上一次又一次捫心自問:
這樣寫,是不是最好的方式?
而本書的最大價值,在於讓這個「起點」變得清晰且平易近人。
因為再往後的 Clean Code 之路,就不再只是表面的程式碼風格,而是需要你了解更多 Python 的進階特性,才能夠理解這些設計的長短得失與取捨之道。
我們需要一本書,幫助我們打好基礎,培養能力去面對未來更加錯綜複雜的情況。
而《Python 功力提升的樂趣》無疑是一個非常稱職的選擇。