原版书名: 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对阅读此书会有帮助。我认为要阅读书中的代码示例,懂编程和面向对象就够了。