對No Starch Press出版的《Python Playground》一書的書評及其作者訪談錄

jopen 8年前發布 | 33K 次閱讀 Python

No Starch Press出版的《 Python Playground 》一書囊括的項目主題廣泛,且為數眾多,該書旨在展示Python是如何運用在這些不同內容主題上的,包括創建ASCII art、飛鳥仿真、連接的Raspberry Pi的接口及其它。InfoQ采訪了書的作者Mahesh Venkitachalam。

確切地說,《Python Playground》不是一本Python語言的入門讀物,它面向的是已能熟練使用Python且打算進一步提升自身Python使用技巧和知識的程序員。不過該書在解釋所有相關細節方面做得相當不錯,讀者能很清楚地明白其中的來龍去脈。

書中每一章節對應一個項目。作者首先對項目的內容和解決方案進行初步介紹,然后詳盡地講解實現代碼,在此基礎上最后拋出一些試驗例子以供讀者自行完成。由于書籍的撰寫結構良好,閱讀該書無需依照特定順序,讀者可以直接切入到自己想讀的任一項目章節中去,沒有任何其它具體前置要求。

以下是該書涉及到的項目列表:

  • iTunes播放列表,重點關注XML和plist文件、列表和字典、圖表和散點圖等。
  • Spirographs,展示了如何創建參數化圖形、設置效果以及保存為文件。
  • 康威生命游戲(Conway’s game of life),介紹了使用matplotlib表征及驅動數據網格,還有numpy和隨機分布。
  • Musical overtones,展示了如何實現循環緩沖區、播放WAV文件以及畫圖。
  • 飛鳥仿真(Birds simulation),關注點再次聚集于numpy、matplotlib等。
  • ASCII art,介紹了灰度圖像處理的相關內容。
  • Photomosaic,介紹了RGB圖像處理的相關內容。
  • Austereograms,使用二維圖像制造三維幻覺。
  • OpenGL,展示了OpenGL在Python中的基礎使用。
  • 粒子系統(Particle systems),在OpenGL使用技巧的基礎上進一步介紹了混合、depth masks、alpha通道、相機的使用。
  • 體繪制(Volume rendering),介紹了OpenGL著色器。
  • Arduino intro,手把手指導讀者黑掉Arduino單片機。
  • 激光音頻顯示器,Arduino的進階章節,通過使用激光和雙轉鏡獲得生成模式。這個項目包括了應用實時FFT音頻數據分析法來驅動電機的內容。
  • Raspberry Pi,介紹了Raspberry Pi,以及通過Python與溫濕度傳感器交互。

正如以上列表所清晰展示的,該書的目標之一即是通過盡可能地展示多種多樣的案例,來表明Python在實際應用中的廣泛性。頗有意思的是,為了讓讀者能夠構建更多的專屬硬件接口項目,該書最后一章還回顧了電子工程實踐基礎知識,包括常用組件、工具、電路搭建等。

InfoQ:請您談一下寫作這本書的目的。為什么一定要寫這本書?

在很長一段時間里,我是一名C++程序員。幾年以前,我開始使用Python來完成一些自動化工作。很快,我發現Python已經成為我用于計算的唯一稱手工具。很多時候使用Python可以快速地完成想法初驗,而不用寫C++代碼。我重新找回了編程的快樂。當我開始積累了一系列探索性的使用Python編程的項目經驗時,我想這些積累也許能轉化為一本不錯的以項目為主題的書。

InfoQ:該書的目標群體是擁有一些Python編程經驗的中級開發者。對于他們閱讀本書您有什么樣的建議?他們應期待或者不應期待什么?

市面上有很多教你學習Python語法和使用技巧的好書,我的書不打算做此類重復。《Python Playground》試圖去回答這個疑問:“我對Python有一些了解。但又怎樣?”這本書結合大量的項目案例介紹了在你解決特定問題或探究想法時可能會用到的庫、技術和方法。所有的項目使用同樣的書寫結構——首先清楚地陳述問題,然后將問題分解為多個子任務,確認算法,找到合適的模塊來幫助你快速形成解決方案。我希望這些項目能作為讀者的跳板,幫助他們解決自己感興趣的問題。

InfoQ:有許多針對初級開發者的Python書籍,也有不少專注于解決特定應用領域的高級書籍,比如關于機器學習、網絡編程、科學計算等等。您的書和這些都不一樣,您在書中試圖覆蓋的應用領域相當廣泛。這么做的魅力之處是什么?

Python這門語言的核心功能集很小——你可以很快就學會它。在此之外,Python擁有各種類型的內置模塊和第三方庫,這意味著幾乎在所有你想做的事情上都能找到幫手。舉個例子,如果你想解析網頁或是與串口進行通信,這就有現成可用的庫。書中描述的具體應用對特定領域人員非常有用。不過我的目的是展示Python的廣泛應用,描述這門語言是如何應用在諸多領域的。這對部分剛學會了Python但還不懂得怎么應用所學到的技術的人來說,會特別有幫助。

InfoQ:您選擇項目的標準是什么?有沒有哪些項目是你本想包含進來的,但出于某種原因最后放棄了?

我基于自己的個人興趣來選擇項目。很久之前,為了完成碩士學位論文,我做一些材料科學方面的計算機仿真工作——因此書中出現了conway、boids、karplus-strong項目。類似的情況,在過去的差不多20年里,我一直從事OpenGL相關的工作,所以會覺得寫3D章節的內容很好玩。硬件相關的章節是源于我最近的興趣。有些項目構思沒能成功寫入書中,因為我得在項目的趣味性和實現及解釋項目的復雜度之間保持平衡。其中有一個沒寫入的項目是基于Raspberry Pi的機器人,另一個是關于變形預測的——可能你也看過這類街頭藝術,當從某個特別的角度去看圖像時,畫面會產生3D效果。

InfoQ:您覺得哪一個項目實現起來最有趣?最難的是哪一個?

對我來說,我覺得最有趣的項目是激光音頻顯示器。最難實現的是體繪制(Volume rendering)項目,不過它是難在下筆時的解釋說明。

InfoQ:書中還花了一整章講硬件破解,還有一些類似C的編程。您覺得在諸如涉及硬件接口的應用方面,使用Python的優勢之處在哪里?

Python可以像接口語言一樣應用在硬件上,在成熟體系的計算機上完成類似于串口通信的任務是完全可以的。你還可以在類似Raspberry Pi的硬件上使用Python,它自帶操作系統并對Python內置支持。后者的場景很吸引人,因為你可以在上面使用Python來直接和硬件進行對話。不過你仍然需要清楚使用Python這種運行于操作系統層之上的高級語言的局限性。在時效標準嚴苛的情況下,在和硬件打交道時通常必需使用更低級的語言比如C語言來編寫代碼。不過好消息是,一旦你完成了編碼,可以很容易地創建C代碼的Python綁定。舉個例子,Raspberry Pi天氣狀況監控項目中使用的Adafruit DHT庫即是如此實現的。還有我想研究的Micropython也是這個領域令人激動的開發內容。

InfoQ:您提供的代碼兼容Python 2.7-3.3。為了讓代碼適用于盡可能多的受眾,這樣的選擇不難理解。有沒有出現這樣的情況,也許能幫上忙的功能只在Python 3.X上有?您怎么看Python 2.7/3.X之間的割裂?

這本書基本上只使用Python核心功能,我把領域相關工作移交給庫來處理。所以從這個意義上講,我沒有覺得自己被語言版本問題限制了。考慮到2.7/3.3之間的割裂,我贊成保持事情簡單,我對2.7版本挺滿意。

InfoQ:在腳本編寫語言中,Python是使用最廣泛的其中之一。然后,Go語言開始被視為 大型Python腳本的替代物 。您認為這個趨勢會持續下去嗎?Python是否還會像過去十年一樣,仍然是適用于解決中等到復雜項目的正確的編程語言選擇?

我還沒研究過Go語言,所以我沒有太多的發言權。因為有Google在背后支持它,我對Go持歡迎態度。我認為Python最大的魅力在于它的簡潔,這是我教Python 10年來最直接的感受。每天有越來越多的人開始學習編程,隨著超級廉價硬件比如售價5美元的Raspberry Pi Zero計算機的出現,我認為Python程序員會越來越多,而不是變少。

InfoQ:以您的經驗來看,近期Python新增的功能(異步/等待、類型注釋、異步IO、生成器等等)哪些能提高程序員的生產力?

在3.x里已經普遍使用生成器了,不過其它一些功能我認為程序員傾向于在他們有需要時才去使用,或者碰上某個特定的庫或框架要求使用時才會用到。作為經歷過一門復雜語言(C++)的過來人,Python對我的吸引力還是它體現出的簡單和簡潔。

《Python Playground》的 樣章下載

作者簡介

Mahesh Venkitachalam 是一名擁有20年編程經驗的軟件工程師。自八年級起,他對技術即充滿激情,他名下的電子學及編程主題的博客 electronut.in 廣受歡迎。

查看英文原文: No Starch Press' Python Playground Review and Q&A with the Author

來自: http://www.infoq.com/cn/articles/python-playground-review

 本文由用戶 jopen 自行上傳分享,僅供網友學習交流。所有權歸原作者,若您的權利被侵害,請聯系管理員。
 轉載本站原創文章,請注明出處,并保留原始鏈接、圖片水印。
 本站是一個以用戶分享為主的開源技術平臺,歡迎各類分享!