亞馬遜書評——《程式碼本色:用程式設計模擬自然系統》

毛倩倩發表於2014-09-29

原版書名: The Nature of Code: Simulating Natural Systems with Processing
原作者: Daniel Shiffman

Processing是一個為電子藝術、新媒體藝術和視覺設計社群打造的開源程式語言和整合開發環境,旨在通過視覺反饋為使用者提供即時結果,使非專業程式設計人員開始程式設計,也非常適合用於在視覺化環境中教授計算機程式設計基礎知識。它構建於Java語言之上,但語法更為簡單,使用圖形化的程式設計模型。今天,成千上萬的學生、藝術家、設計師、研究人員和業餘愛好者在使用Processing進行學習、原型設計和產品開發。

Daniel Shiffman在紐約大學Tisch藝術學院擔任助理藝術教授,具有耶魯大學數學與哲學專業學士學位,以及ITP的碩士學位。一直以來,Shiffman為開源程式語言和環境Processing開發教程、示例和程式庫,另著有Learning Processing: A Beginner's Guide to Programming Images, Animation, and Interaction。更多資訊請訪問shiffman.net和natureofcode.com。

-------------------------------------------讀者書評-----------------------------------------

(1)很多程式設計書讀起來味同嚼蠟,大多數的程式設計課程同樣枯燥無趣。這本書卻是趣味橫生。每一章都快速全面地介紹一個有趣主題,而這些主題介紹得還相當深入。基因演算法、神經網路,等等,哇!這些主題通常一個就需要至少一本書的篇幅來講解。本書給出了我目前所知最深入淺出的數學解釋。

我從事程式設計已20餘年,讀過許多“難以下嚥”的計算書。我無法確切說出這本書如何與眾不同。就好像這本書寫成後,作者將所有令人困惑的內容都去除,然後得到我們最終看到的版本。如果讓我描述這本書具有的優點,聽起來一定會像是廣告辭令,因此我只能說說這本書不具備哪些特徵。這本書不迂腐、不學術、不令人困惑,也不故弄玄虛。書中的示例都非常有趣,甚至稱得上“炫酷”。而計算機書中的示例通常都沒什麼意思,也很難給人留下印象。

(2)2012年春天,我在NYU ITP讀研究生時上過Daniel Shiffman的Nature of Code課,並漸進式學習了這本書中的幾乎全部內容,而這本書更是令人驚歎。我會向任何對運動、物理、可程式設計藝術、遊戲等感興趣的人強烈推薦這本書。Shiffman是一位優秀的教師,能以簡單直觀的方式介紹Processing語言背後的概念,頗具個人風格,這本書就是他這一能力的體現。這本書有很多線上輔助資料和精彩演示。封面還是粉紅色的……超美。總之,這本書絕對值得一讀,所有藝術家/設計師/碼農的書架上都應該有一本!

(3)這本書探討如何使用Processing語言進行編碼以模擬自然界的問題,使用物理程式庫(如JBox2D)、細胞自動機、群集和跟隨行為,以及神經網路,介紹真實世界的特徵。雖然有些主題頗為深奧,但Shiffman講解得非常清晰,解釋了基本概念,用程式碼段和完整的草圖帶領讀者輕鬆學習每個主題。書中各章有專門的習題,還有一個貫穿全書的整體專案供讀者練習和思考。這不是一本寫給初學者的書(初學者請閱讀Learning Processing),具有Processing使用經驗的程式設計人員可以輕鬆閱讀並從中受益。

Processing不是遊戲程式設計的理想平臺,但這本書前四章內容提供了堅實的物理學背景知識,可以用在任何程式語言中;關於物理程式庫的章節解釋瞭如何使用物理引擎,例如著名遊戲“憤怒的小鳥”使用的JBox2D物理引擎,對有志於遊戲開發的程式設計者會很有幫助。同樣,細胞自動機和動物行為的相關章節會對機器人領域的程式設計者非常有用。

這本書應該非常適合用在高中物理課中,學生可以很快學會並應用萬有引力、施力和牛頓物理學原理到自己的計算機模擬中。書中使用的Processing語言是免費的,而且這本書自帶的程式碼示例文件完備,非常實用。為讀者提供的練習並非都有答案,但是書中提供了足夠的示例來鼓勵讀者進一步進行探索。

我有七本關於Processing的書(揭祕:我只買了本書早期的PDF版本),每一本的側重點都不同,因而也適用於不同的讀者。這本書關注真實世界的物理特徵,為初學者和有經驗的程式設計師都提供了堅實的基礎知識。這本書寫得很好,非常實用,是不斷增多的Processing參考書中很有價值的一本。

(4)很久很久以前,我在Director中用Lingo做Shockwave遊戲程式設計。那時,我經常在深夜花費大量時間,上網搜尋關於"轉動慣量"之類的文章,最後寫出的程式碼經常是超級繁瑣而且缺陷很多。

而在閱讀這本書五分鐘之後,我得到的“啊,原來應該這麼實現”的頓悟,比當初五年的鑽研中得到的還要多!

這是一本很好的書。作者僅以牛頓物理學的理解為基礎,逐步擴充套件到更為複雜的內容,不徐不疾,娓娓道來,使讀者既可以快速掌握資訊,又能充分理解核心原理。書中提供了很好的示例,而且示例在之前課程的基礎上進行擴充套件,產生越來越精密的行為和程式碼,對書中內容的講解有很大幫助。

雖然任何稍微具備中學數學、物理學和麵向物件程式設計知識的人都能夠理解這本書,但它並不是針對初學者的。不過,我也不認為這本書是針對專家的(我對此書略感失望的是,作者沒有向讀者逐步介紹汽車的建模:車輪的角動量、扭矩、重心等。他的解釋就差那麼一點點了!)。這本書覆蓋了很多面向中級讀者的內容,如果你對自然力和行為的建模感興趣,閱讀此書會有所收穫。

(5)我是一名從業兩年的遊戲設計師。

雖然我在大學上過遊戲設計課程,而後也一直在接觸程式碼,但一直沒有掌握到能夠應用的程度。我總是覺得遊戲設計過於抽象,由於只在較高的層次上使用,我始終無法理解底層的基礎。

這本書的妙處便在於此。它從自然界取例,解釋了基礎知識。這個假期我閱讀了這本書,練習其中的示例,已經取得了很大進展。我不僅向想學習編碼的人推薦這本書,還要向希望理解我們周遭自然規則和機制的人強力推薦這本書。

(6)這本書從開篇就吸引了我,我對它真是愛不釋手!真希望我年輕的時候有這樣的程式設計書。我認為迄今為止這本書最為完美地展示瞭如何用程式碼模擬自然界的隨機性。這本書使用Processing語言,很好地對程式設計進行了介紹,但這些程式設計知識同樣適用於其他語言。書中給出了大量示例,並進行了詳盡的闡釋,有別於其他圖書。這本書既不過於技術,也不過於簡單。我很高興購買了這本書,相信你也絕不會失望的!

(7)我最初在Vimeo上觀看Shiffman的教學視訊。我打算為應用商店開發遊戲,到現在已經進行了多年的開發工作,並面向iPhone大概開發了兩年。這本書使用指令碼語言Processing展開概念介紹。我把這本書中講授的概念都轉換成了Objective-C和C++語言。這本書寫得很好。不過,如果你直接翻閱本書覺得內容過於艱深,不由望而卻步,可以結合Shiffman在Vimeo上的視訊進行閱讀,就會覺得很棒。辛苦了,幹得好!我實現了你介紹的過程,以此作為基礎,將自然界的美轉換到電腦螢幕上,並樂在其中。

(8)這本書就如何模擬各種自然過程給出了豐富有趣又實用的內容,例如:樹木發枝、自然選擇、智慧體在各自的環境中的移動,等等。這本書強調如何創造悅目而有趣的應用程式,又不讓你時刻糾纏於具體的物理細節。作為一個生物學家,我覺得這本書非常適合作為本科生的生物學計算機模擬課程的教材。Processing是一門有趣的語言,這本書則讓學習(如物件導向程式設計的概念)變得輕鬆愉悅。

我幾年前學過Processing和Java,並用這本書學習C++。書中的概念很容易轉換到任何程式語言,當然如果有一個好的繪圖框架實現起來會更加容易。我自己用的是很棒的Cinder框架(libcinder.org)。我轉換了書中大部分的示例。關於C++程式碼的資訊位於:

(追加:抱歉評論中無法使用連結。請訪問bitbucket,搜尋“cindernoc”,你應該可以找到C++程式碼樣例,以及一個wiki地址,其中包含了樣例的概述。)

(9)我一直在一門程式設計入門課程中將Shiffman的Learning Processing作為教材使用……這門課是向電腦科學和軟體工程專業的學生教授Java。Processing已證明是介紹和向Java轉換的有效方式。事實證明,Learning Processing是教授Processing的極佳工具。

這本書則更進一步,精心組織且涵蓋了深層次的主題,例如向量、分形和細胞自動機。我不會向初學者推薦這本書(雖然初學者努努力也能讀懂)。我認為如果你具有Processing程式設計經驗,至少較擅長數學,理解這本書會容易很多。別誤會……要閱讀這本書,你並不需要是數學大拿, Shiffman會介紹必要的數學知識,以真正幫助讀者“領悟”程式設計概念。

另外:Shiffman為這本書建的網站(natureofcode.com)非常值得一去。你可以更好地瞭解他是如何出版和發行這本書的。Shiffman為此做出的努力令人欽佩。

如果有人請我推薦Processing書,我以前通常會推薦Shiffman的Learning Processing。而現在,我會推薦兩本書……Shiffman的Processing書都是我的最愛!

(10)我對這本書很滿意,因為它逐步介紹了我感興趣的主題:智慧體程式設計、模擬程式設計、自然效果、分形,等等,內容超出我的預期。

(11)我非常喜歡讀這本書,因為它和其他大部分程式設計書(即語法、內建類、方法等)不同,它包含示例,非常適合作為基礎,進一步做出很酷的東西;而且介紹的都是如何用程式碼重建你在真實世界中看到的東西。

如果你稍有程式設計經驗(瞭解Java/C#中使用的C風格語法,理解類和函式的概念),就可以閱讀這本書,就算以前沒用過Processing也沒關係。

這本書很好地解釋了速度、加速度以及位置的相互關係,又不枯燥,也適合幫助學生了解物理學和向量。

如果你想知道它和什麼書類似,我覺得很像那套詳細介紹如何熟悉新軟體或新工具的Make系列叢書,但是這本書的程度比較中等。我非常希望這本書能引發更多類似的書出版,也希望這本書能出一個更高階的續篇。

(12)一本從圖形化視角介紹重要計算機概念的有趣的書。對圖形和視覺化領域的初學者和中級程式設計師是一本很好的參考書。

(13)適合Processing初學者和物理學愛好者的好書。有許多章節和新模組可學。我很滿意。

(14)寫得很好。我原以為自己會時不時讀上一點,結果一翻開就難以釋手。我覺得讀者應該對物件導向程式設計有所瞭解。你不需要會Processing語言,也不需要很深的Java知識,但是瞭解Java對閱讀此書會有幫助。我認為要閱讀書中的程式碼示例,懂程式設計和麵向物件就夠了。

相關文章