计算艺术中的创意编程
作者:李欣麟  来源:中国艺术报

  美国宾夕法尼亚大学推出世界上第一台数字计算机之后,处理数字和文本信息的第一台商用电脑也在1951年被授予专利。当时的科研中心主要致力于对计算机技术的研究和实验,涉及音乐、艺术等相关领域的凤毛麟角。幕后的研究人员作为科学家,对艺术的兴趣是非职业化的。因此,早期产生的计算机艺术包含的审美标准并不完善。

  编程介入艺术创作可以追溯到20世纪60年代的贝尔实验室,当时美国的迈克尔·诺尔和德国的佛里德耐克、格奥尔尼斯等都是计算机艺术的先驱,有着深厚的工学背景。艺术与科技,对于大多数人来说可能是对立的,科技以数据为主要驱动,艺术则是情感驱动。科技以技术见长,而艺术通常被认为以主观表达见长。把两者紧密地结合起来,建立一套非科学家使用的编程语言,就变得非常有价值。

  早在13世纪初,人们就已经开始探索可编程“器件”。第一次工业革命时期的法国发明家约瑟夫·玛丽·雅卡尔用打孔卡为一台织布机编写指令,在挂毯上织出了“hello,world”(“你好,世界”)字样。1842年,程序员的鼻祖英国阿达·洛芙莱斯写下世界上第一个程序。二战期间,图灵发明了世间一切程序语言的最终形态——图灵机,之后的编程语言发展从FORTRAN和LISP,开始进入BASIC时代(一个为非计算机科学家设计的非结构化程序语言)。1972年,丹尼斯·里奇发明了C语言。阿兰·科尔默罗设计了逻辑编程语言Prolog。1983年,比雅尼·斯特劳斯特鲁普创造了C++语言。1995年,詹姆斯·高斯林发明Java。1996年,布兰登·艾克发明Java Script。时至今日,世界上又相继开发出了很多提供给非程序员进行编程学习的语言,如2001年,美国麻省理工学院媒体实验室的卡西·瑞斯和本杰明·弗莱在Java语言的基础上,建立Processing语言。以及后来以Processing为基础的Javascript框架p5.js。2005年,美国帕森斯设计学院教师扎卡里·利伯曼在C++的基础上,建立了开源语言open-Frameworks。这些编程语言的开发,让艺术家们也可以使用其简化的语法和图形编程模型来创作。使用这些语言进行创意编程,成为这个时代设计和艺术发展的一个风向标。

  艺术与创意编程

  现如今,大多数艺术家已经开始运用数码科技,计算机成为比较普遍的创作媒介。而它并非私有的作品媒介,一部分艺术家不愿意受到Adobe Flash、 Ps、AE等软件的限制,开始摆脱视觉形式的表象,触及底层代码的规则。

  计算机编程语言的本质是一种思考问题的逻辑过程与方式,而艺术创造力则是人们看到问题和处理问题过程的描述,以及对个人情感的表现。程序设计语言也能够作为一种设计工具成就艺术,将艺术设计和电脑技术融合,不仅扩大了艺术表达的可能性,还使艺术家在更宽广的层面上实现创意和情感的双向传递。通过设计与程序相结合去处理传统人力无法解决的艺术问题,进而创造出更多形式的作品,乃至科学发明。在代码的世界中,编程语言纷繁复杂。传统印象中创意编程是一种科学,而实际上它更像是一种设计、一门艺术。基于计算的艺术创作不再需要依靠身体,将整个制作流程扩展至除了双手之外的所有领域,从而诞生出一种全新的艺术形式,即利用程序改造真实环境,使得“虚拟空间”与“现实空间”相互交叠,用有趣和充满创造力的方法去生成动态,用新的创作手段、新的算法和程序创造新颖独到的艺术作品,同时利用技术为内容的阐释提供了全新的机会。

  创作者与编程环境

  在常规设计或构思艺术创作手法时,可以将计算机程序考虑其中。一般的设计流程是静态而可控的,其最终成果也是可预见的。一旦加入计算思维,我们的角色更像是艺术活动的策划者,如果能够制订出某些原则、完成一些设计、组织观众,结果可能永远都是人们无法预见的,设计过程中的多线性思考方式已逐渐被非线性思维所代替。当利用计算机编程语言的生成设计时,创作活动已不再是自上而下的指令行为,而是将越来越多的不确定因素随机释放给终端参与者。设计师和艺术家的绝对权力已经不在,取而代之的是创作者和参与者之间复杂的关系。

  工具与方法解读

  目前,创意编程领域中包含文本式编程语言与节点式编程语言两种形式。节点式编程语言是一种视觉化的程序设计语言,可以通过将组件拖动到画布上来创建程序。文本式编程语言是一种开源编程语言,使用已经被简化的语法和指令窗口。创作者通过计算机制定各种逻辑法则,构造一种带有独立性(或者半自主性)的体系。该模式能够遵从并按照艺术家的意愿,获得一些具有独特质感的生成物。由于受到专业、学习背景、思考方式等影响,方法十分多样化。

  在着手“编码”前,可以先“量化”创意,将想法拆解为若干并行的功能模块,再把每个模块分成一系列具体的步骤流程。若缺少专业计算机背景,可以通过绘制流程图辅助逻辑思维。在流程图设计中,能反映出不同结构类型、模块间的工作流方向、输入输出等。通过“1.想法、2.设计实现流程、3.发现逻辑漏洞、4.改进”这一流程对逻辑思维进反复检验。另外,在作品创作之前选择一些算法或几何模型做发散性的研发工作,探索它们具备的一些特征在视觉呈现上的各种可能,这些研发工作的成果最终会成为创作“储备”,在遇到适当的主题时可以选择性地使用。

  作品创作时除了算法本身,还需要学习更多关于数据、物理等的跨领域知识。在涉猎非己专业知识时,遭遇各种壁垒和瓶颈是必然的。投入大量时间和精力、独立克服困难、积累实践经验,是创意编程时应该具备的精神。

  (作者系苏州大学艺术学院讲师,本文系江苏省高校哲学社会科学研究课题“基于计算设计的动态汉字涵义表达研究”[2022SJYB1431]阶段性成果)