藝 FUN 券使用期限到今年 4 月 30 日,身為有中籤的小小幸運兒,我也得把握時間緊趕把它消費掉了。

對於軟體工程師而言,走一趟天瓏書局無疑是個絕佳的選擇,畢竟書是買不完的。

買書的考量

書確實是買不完的,但如果買了也沒怎麼看,大量堆積在房間裡妨礙走路,那可就適得其反了——望向已經累積了 5、6 本的 JavaScript 書籍。

簡單來說,還是買一些「近期用得上」的書吧!

所謂的「近期」如果真要講個具體,大概指 3 個月左右,3 個月以上才可能派上用場的書,還是先別買了,而我的 JavaScript …

而這裡的「用得上」也不限於工作,就像我在〈Docker 新手入門:書與線上課程推薦〉說的:

入門 Docker 最好具備的前提就是有一個實際的 Docker 相關需求,可能是工作上的,也可能是自己的 side project(專案容器化),甚至是為了寫文章!空手學習並不太推薦。

其實學什麼都差不多——應用場景很重要。

兩本 Python 新書介紹

大概逛了半小時後,還是決定下手兩本 Python 書籍,且不約而同都和「clean code」有關。說真的,「clean code in Python」這類主題,如果市面上有 100 本,我就能買好買滿 100 本!這主題對我存在著中毒般的魔力。

有機會再來聊聊我對「程式可讀性」為何如此痴迷,不止是說說而已。講到這裡不禁想到,被我 code review 的同事們是曾在某些時刻於腦海中掠過一絲殺意?——畢竟我對程式碼品質的要求著實不低。

扯遠了,還是回到書本身,在此簡單介紹一下這兩本書。


Python 出神入化:Clean Coder 才懂的 Pythonic 技法,為你的程式碼畫龍點睛!

如果沒有副標題,還真不知道這本書到底是講述 Python 的哪個面向,簡直是外國電影譯名法!其實原文名就是《Clean Code in Python: Refactor your legacy codebase》,有放在書的封面作為補充,大概編輯也自知只放主標題會讓人不知所謂。

作為 clean code 類的 Python 書籍,這樣的翻譯書名無疑是個經典的反面教材:模糊的變數命名(書名),以至於封面上又不得不加上一堆文字來補充說明。

這是不是像極了程式碼中,因為變數或函式的命名不佳,而作繭自縛般地為它寫了一行又一行的程式註解來亡羊補牢呢?

反觀,本書第一版譯名就叫《簡潔的Python:重構你的舊程式》,完全的直譯!貼切的書名一望即知,比較不會讓人誤會。新版換了出版社,命名風格也跟著魔幻了起來。話雖如此,這封面我是還挺喜歡的,尷尬的命名就權當作是編輯的巧思吧。

書我還沒翻,但第一版我有買,也大致看完一輪。不得不說有一定的難度——intermediate 以上,差不多是《流暢的 Python》那個等級,所以並不適合入門者。


強健的 Python|撰寫潔淨且可維護的程式碼

本書去年 8 月英文版才剛上市,現在就有繁中,出社版可謂誠意十足!

入手前仔細看了一下目錄,從目錄可知,這本和上一本雖然都有著「clean code」字眼,但切入的角度截然不同,比較是從 code infrastructure 層級(你可以想成 linter 層級)加以規範,來建構良好的 Python 程式碼。

內容有大量篇幅都在講述如何正確使用 type hints,包括介紹專用的 linter——mypy,以及最近因為 FastAPI 也跟著火紅的 pydantic

光想想是不是就有點小興奮了呢?


小結:一生的追求

光兩本書就有兩種截然不同的角度可以增進程式碼品質,足見「clean code」一詞遠遠不像它字面上那般「simple」,需要認真著墨與不斷思考、練習面向很多。

就像《棋魂》中,已成為職業棋士的配角本田敏則,在練習局中慘敗於社清春的「第一手天元」後,他的老師嚴肅提醒並勉勵他說:「職業的道路很長,不但長,而且沒有終點,一生都在學習。」

對於每一個有志於寫出 clean code 的你我而言,又何嘗不是一生的追求?而最最基本的當然還是先善用好 linter 與 formatter,行有餘力,再來好好鑽研這些迷人的「寫作技藝」,進而體會知覺與快樂的螺旋