本书作者就是开源编程语言Processing的创作者,因此本书是学习Processing的权威教程。
本书介绍了可视化艺术中的计算机编程概念,对Processing做了非常详尽的阐述。学生、艺术家、设计师、建筑师、研究者,以及任何想通过编程实现绘画、动画和互动的人都可以使用它。本书的大部分章节是短小的单元,介绍了Processing的语法和基本概念(变量、函数、面向对象编程),涵盖了与软件相关的图像处理、绘制,给出了大量简短的原型程序,并配以相应的过程图像与注释。本书还有一些访谈文章,与动画制作、表演、产品原型等领域的几位创作者们讨论了与他们作品相关的话题。Processing软件以及书中的所有代码均可以在网站上下载,并可以在这些代码的基础上做进一步的开发。
本书第1版出版于2013年,面世后受到了行业内广泛关注和好评。第2版在第1版的基础上,根据Processing语言的发展和应用环境的变化,进行了整合与提炼,让读者更有效率地学习Processing。
Processing语言的创始人Casey Reas 和 Ben Fry关于Processing语言的经典作品。
王学昭:英语和西班牙语翻译,主要从事翻译及翻译项目管理工作。
刘端阳:莫比嗨客公司创始人兼CEO,国际资深创客。12岁入选中国科学技术大学少年班,获清华大学硕士学位、美国斯坦福大学博士学位。
弓箭峰:开源爱好者,多年大数据和区块链从业经验,专注于数据众包策略研究、深度学习模型数据采集与标定方案咨询及优化。
前言
本书写作的目的是介绍与视觉艺术语境相关的计算机编程概念。它面向的是理解计算机的读者——他们对于通过编程创建互动的视觉作品很感兴趣,但是经验甚少。我们十分惊讶软件竟然拥有成为交流和表达媒介的潜力,同时希望此书能使更多的人看到软件的力量。
Processing 是10 余年来相关软件开发和教学经验的成果。书中阐述的想法已经在课堂、计算机实验室、艺术与设计学校、艺术机构等地方得到验证。作者在加利福尼亚大学洛杉矶分校(UCLA)、艾丽维尔交互设计学院(the Interaction Design Institute Ivrea)、哈佛大学及卡耐基·梅隆大学教授过相关课程,并且在全球各地就此话题举办过无数次研讨课及讲座。本书的内容在学生和教育界同仁慷慨反馈的帮助下,不断改进。精简后的课程在此以书本的形式得到展现,期望将这份结果贡献给更大、更多样化的社区。
本书内容
本书讲解了四个方面的内容。大部分章节是一个个小单元,讨论软件中的特定元素以及它们与艺术设计的关系。这些单元介绍软件的语法及概念,诸如变量、函数以及面向对象编程。这些章节主要配以简短、原型化的实例,附上运行时的图像及解释。对于动画、性能及安装设计等高级专业设计项目,本书是以创作者访谈的形式展现的。“附录”提供了参考文献列表以及更多涉及技术领域话题的解释。“相关媒介”部分则提供了相关话题的补充材料。书中使用的术语在“词汇表”中定义。
本书提供了很多Processing 语言的示例程序,该语言是由作者开发的。Processing是一个免费、开源的编程语言及编程环境,供学生、艺术家、设计师、建筑师、研究者、爱好者们学习和制作原型,并进行产品开发。艺术家和设计师们不断完善Processing,使其可以替代同类的付费软件工具。这个项目将编程语言、开发环境以及教学方法论整合成为用于学习和研究的体系。该软件学习起来并不难,用户很容易从初学者进阶为高级程序员。Processing 语言也为用户未来的学习奠定了良好基础,因为其技术部分以及书中介绍的高级编程概念同样适用于其他编程语言,尤其是那些在艺术领域被频繁使用的编程语言。
书中的大部分示例都采用最简洁的视觉风格,但这并不表示Processing 只能制作出此类风格的作品,而是因为作者希望代码可以尽量精简。我们希望简单的代码示例可以激发读者在此基础上扩展自己独特的视觉语言。
如何阅读本书
如果想通过本书学习编程知识,仅靠阅读文字是远远不够的,必须运行、修改书中的代码,并与之交互。正如不进厨房学不会做菜,不亲自写代码是不可能学会编程的。许多示例只有在使用鼠标与键盘看到实际的运行结果后才能被充分理解。
Processing 软件以及书中所有的代码都可以下载并且供研究使用。Processing 软件可以从www.processing.org/download 上下载,而示例则可以从www.processing.org/handbook上获取。
代码、图表及图像可以辅助理解文本。由于本书面向的是关注视觉效果的人,因此我们假定你会像阅读文字一样仔细阅览图表和图像。字体以及视觉的转换是辅助阅读的。文本中的代码元素以等宽字体表示,以示差别。每段代码都以数字编号,方便检索。这些编号都在页面右侧每个示例的第一行。编号“15-02”指向“15 顶点”的第2 个示例。许多示例在修改变量的值后运行结果截然不同。如果在图片的左侧有数字,则表示该图片是使用这些数字生成的。
关于我们——Casey
从孩童时代起我便接触计算机。我在家中的Apple IIe 上玩游戏,并用BASIC和LOGO 语言编写小程序。尽管花了很多年不断探索和测试,但我更喜欢画画,因此对计算机的兴趣逐渐褪去。20 世纪90 年代早期,我在辛辛那提大学(University of Cincinnati)学设计,在一年级时开始使用Adobe 公司的Photoshop 和Illustrator,但是直到三年级我才被允许在设计课上使用它们。开始的两年时间全部用于训练自己通过眼和手构造视觉结构和意义表达。我花了大量精力学习用铅笔绘制图标和字母,并用Plaka 这种亚光的黑颜料上色。这其实是很繁重的体力劳动。为了得到一张满意的图画,通常会耗费上百页的草图。后来我开始将精力放在印刷品上,如书本、杂志及信息图表。在这些作品中我使用了软件作为概念构思与最终的书面结果之间的过渡工具。
后来,我从制作印刷媒体转到了制作软件上。当多媒体CD-ROM 出现时,我使用这种媒介将我的兴趣与声音、视频、图像、信息设计相结合。随着20 世纪90 年代中期互联网的崛起,我开始专注于构建大型的、基于数据库集成的网站。我的工作对象从纸张迁移到屏幕,从静态的网格和信息层级进化为动态的、分辨率和结构皆可变的模块化系统。而我关注的重点亦从材料和静态构成的细节转变为运动与响应的细节,我专注于构建实时流程以生成表单、定义行为以及调解交互。为了在更高的层面追求这种兴趣,我意识到必须学会编程。在孩童时期用计算机娱乐,以及多年使用它们进行专业工作之后,我走向了一条新的道路。
1997 年,我遇到John Maeda,他向我介绍了麻省理工学院美学与运算小组的实验性软件作品。他的学生们通过组合传统艺术理念与计算机科学,创建了一种新的作品形式。当体验到这个作品时,我知道自己有新方向了。于是在1998 年我开始认真地学习计算机编程,第二年成了麻省理工学院的研究生。当我从软件的消费者转变成软件的生产者时,我的人生发生了变化。我拓展了自己的技术视野,将它与文化和艺术史联系起来。
当时作为麻省理工学院媒体实验室的研究生,我接触到一种结合多种研究领域技能的个人文化。人们的共同特点是计算机技能,同时各自拥有其他学科背景,包括建筑、艺术、数学、设计以及音乐。在那时,很少有软件能同时具备高级的编程语言与创建精美图像的能力,所以我的麻省理工学院的前辈和同仁们创建了自己的软件以满足其独特的需求。在这个过程中,一种独特的文化出现了,它将视觉文化的知识和计算机科学的知识融合在一起。因为想把这种信息带给技术领域以及学院之外的人,所以过去10 余年我一直致力于Processing 开发。我希望这本书能够作为催化剂,借此进一步提升艺术圈的软件素养。
关于我们——Ben
我总是喜欢拆卸物件弄清楚它们的工作原理。一开始我喜欢拆解家里的电器,比较它们内部的组件,找出相同的组件。后来拆装完电话机和收音机,我开始把方向转移到软件上。计算机为我提供了无穷的未知空间,就好像那里面有无数等待拆卸的电话机。借由一本被描述为“IBM BASIC by Microsoft”的焦黄色活页本,父亲教会了我for 循环,我也逐渐开始自学编程——大多数时候通过阅读他人的代码,不时加以修改以实现其他功能。经过一段时间的学习以后,对从头开始编写软件我也驾轻就熟了。
我对图形设计格外感兴趣,对字体、排版与样式设计也很好奇。我的一位亲戚开了一家设计公司,我觉得那里的工作简直是世界上最有趣的工作。后来我申请到了设计学校的录取通知书,想要学习用户界面设计,或者创建“互动的多媒体CD-ROM”,这可以说是同时满足我这两个兴趣的唯一途径。就读于设计学校对我意义重大,因为它教会了我思考和创造的方法,而这些方法在别处也适用,比如在我热爱的软件领域。
1997 年,也就是我本科阶段的最后一年,John Maeda 在我们的编程课上进行了演讲。他演讲的内容把我们都惊呆了,当时在后排,我的一位朋友一边看一边喃喃自语:“哇,慢点,慢点……”在演讲中,我终于看到了设计与计算的交集,在此之前从未如此想象过。这是截然不同的观点,既不像普通的制作工具这么平淡无奇,又不像构造界面那样让人意犹未尽。一年后,我有幸在麻省理工学院与John Maeda一起工作。
在媒体实验室与John 共事的6 年期间,教育学是一个永恒的主题。我、Casey以及其他学生参与了Design By Numbers 项目,这个项目使我们在如何教设计师计算的问题上获益良多,同时我们也获得了大量真实需求的反馈。当时,我们有一个尚处于“草创”阶段的项目,Casey 和我发现了两者的相似之处,于是我们开始讨论如何衔接这两者,最终开发出Processing。
我们希望Processing 可以包含大量代码,供阅读、修改及测试——这其实就是我自己学习编程的过程。但是更重要的是这个社区是围绕着这个项目开展的,社区成员乐于分享代码,帮助他人解决问题。同样的,Processing 本身的代码也是开源的,对我而言,这是对上一代开发者的回报,因为他们分享自己的代码,并解答了我的问题。
就该项目而言,我的个人目标之一是帮助设计师们掌控自己的工具。自从桌面出版(desktop publishing)在20 世纪80 年代中期推动设计的发展以来,已经过去30 多年了,我们早就需要更多的创新。随着设计师可以使用的工具越来越多,编码和编写脚本已经开始填补设计师心中所思与他们购买的软件的能力之间的差距了。
尽管大多数Processing 用户只会将它应用在自己的工作中,但是我希望Processing将促进设计师创造出新颖的设计工具,而不再依赖软件公司与计算机科学家创造。
致谢
本书是我们对视觉设计与软件超过20 年的研究成果。John Maeda 是对Processing和本书的问世贡献最多的人。作为麻省理工学院媒体实验室美学与运算小组(ACG)的顾问,他的指点以及在Design By Numbers 项目中的创新是这里所展现的理念的基石。1999—2004 年,Processing 的发展也得到了ACG 的研究生们极大的帮助。我们感谢合作者Peter Cho、Elise Co、Megan Galbraith、Simon Greenwold、Omar Khan、Axel Kilian、Reed Kram、Golan Levin、Justin Manor、Nikita Pashenkov、Jared Schiffman、David Small 及Tom White。同时,我们要感谢ACG 以及视觉语言工作坊(Visual Language Workshop)的前辈所做出的贡献。
Processing 诞生于麻省理工学院,但它的成长离不开其他院校的支持,包括加利福尼亚大学洛杉矶分校(UCLA)、艾丽维尔交互设计学院、博德研究所(the Broad Institute)以及卡耐基·梅隆大学。Casey 在UCLA 及艾丽维尔交互设计学院的同事为本书许多想法的不断演化提供了环境。感谢UCLA 的教员Rebecca Allen、Mark Hansen、Erkki Huhtamo、Robert Israel、Willem Henri Lucas、Peter Lunenfeld、Rebeca Mendez、Vasa Mihich、Christian Moeller、Jennifer Steinkamp、Eddo Stern 及Victoria
Vesna。感谢艾丽维尔交互设计学院的教员及创始人Gillian Crampton-Smith、Andrew Davidson、Dag Svanaes、Walter Aprile、Michael Kieslinger、Stefano Mirti、Jan-Christoph Zoels、Massimo Banzi、Nathan Shedroff、Bill Moggridge、John Thackara 及Bill Verplank。
我们还要感谢博德研究所的教员Eric Lander,他资助了Ben Fry 的可视化研究,其中很大一部分也是基于Processing 的。
本书的想法和结构在近10 年的授课过程中得到不断改善,授课的学校包括UCLA、卡耐基·梅隆大学、艾丽维尔交互设计学院、麻省理工学院及哈佛大学。我们尤其感谢Casey 的DESMA 28 班、152A 班及152B 班上的学生所贡献的想法、努力和热情。Casey 在UCLA 的研究生Gottfried Haider、Rhazes Spell、Eric Parren、Lauren McCarthy、David Wicks、Pete Hawkes、Andres Colubri、Michael Kontopoulos、Christo Allegra、Tyler Adams、Aaron Siegel、Tatsuya Saito、Krister Olsson、Aaron Koblin、
John Houck、Zai Chang,以及Andrew Hieronomi 提供了珍贵的回馈。
Processing 最初以工作坊的形式介绍给学生。我们尤其感谢在2001 年及2002 年第一批尝试这款软件的学院,包括武藏野美术大学(日本东京)、国立高等工业设计学院(法国巴黎)、HyperWerk 后工业设计学院(瑞士巴塞尔)以及皇家音乐学院(荷兰海牙)。许多大学都将Processing 融入课程中,我们感谢这些先锋教育者及学生。
因为人数众多,无法在此一一列举。特别感谢纽约大学的交互式通信项目(Interactive Telecommunication Program,ITP),尤其感谢Dan O’Sullivan、 Josh Nimoy、Tom Igoe、Josh Nimoy、Amit Pitaru 及Dan Shiffman 在早期的采纳和推广。
Processing 软件是社区共同努力的成果。在过去的10 年中,通过不断的交流,软件日趋完善。而本书以及Processing 的目标也根据大家的宝贵建议和讨论有所调整。2.0 版本的发布与下列诸位的贡献密不可分:Andres Colubri、Dan Shiffman、Florian Jenett、Elie Zananiri、Patrick Hebron、Peter Kalauskas、David Wicks、Scott Murray、
Philippe Lhoste、Cedric Kiefer、Filip Visnjic,以及Jer Thorp。
本书无法列出所有协作者以及贡献者的名单,在此仅列出该软件的核心贡献者,他们是Andreas Schlegel、Jonathan Feinberg、Chris Lonnen、 Eric Jordan、Simon
Greenwold、Karsten Schmidt、Ariel Malka、Martin Gomez、Mikkel Crone Koser、Koen Mostert、Timothy Mohn、Dan Mosedale、Jacob Schwartz、Sami Arola 以及Dan Haskovec。
本书的文字内容经过了无数次的重写和重新设计。我们亏欠Shannon Hunt 太多了,他阅读并编辑了本书的初稿,同时审校了终稿。Karsten Schmidt 和Larry Cuba 阅读了早期章节,并提供了反馈。Tom Igoe 和David Cuartielles 提供了关于电子器件扩展的重要反馈。Rajorshi Ghosh 和Mary Huang 在本书第1 版的编辑中提供了极大的帮助。Anna Reutinger、Philip Scott 和Cindy Chi 直接帮助了第2 版的编辑。Chandler McWilliams 对本书第1 版的手稿内容进行了全面的技术评阅。Gottfried Haider 详细审阅并提升了第2 版手稿的内容质量。第2 版中添加的3D 绘画章节源自第1 版中Simon Greenwold 的3D 扩展章节部分。
与MIT 出版社员工们共事的日子十分快乐,感谢他们对本书的辛勤付出。Doug Sery 指导我们整个出版的每个环节,使本书的出版成为可能。感谢在第1 版出版过程中Katherine Almeida 以及编辑同事的细心修正;感谢Terry Lamoureux 和Jennifer Flint 在编辑中展现的智慧。匿名读者对初稿的评论具有极大的价值,他们帮助精简了本书的结构。我们感谢Doug Sery、Katherine Almeida、Susan Buckley 及Mary Reilly对第2 版持续的支持。
我们感谢许多做出贡献的艺术家和作者。他们花费了大量时间,本书因他们参与而更有价值。
最重要的是,Casey 要感谢Cait、Ava、Julian、Molly、Bob 以及Deanna。Ben要感谢Shannon、Augusta、Chief、Rose、Mimi、Jamie、Leif、Erika 以及Josh。