有的人说编程是一种艺术,有的人说编程不足以作为艺术,但这两方似乎从未公开正式的当面辩论过。我只有一个人,无法公平的分成两边来辩论,所以今天不讲前人已有的各种理论,只尝试从道理上分析一下——编程是否是艺术。
为了分析编程是否是艺术,我们首先分析几种被广泛认可的艺术形式,寻找它们的共同特征。
绘画艺术是人类最早掌握的艺术形式之一,它从原始人对生活见闻的记录发展而来。人通过对现实事物的观察,在头脑中形成对现实事物的印象,而这种印象往往与现实事物存在差别,人的意识会让更加关注的部分在印象中更为突出,人也可能对观察到的多种事物在头脑中进行组合与演绎。然后,人将头脑中的印象绘制在通常是二维平面的载体上,在这一过程中人需要将自己神经元空间中存储的信息投影到二维平面空间中,并且由于二维平面的限制需要对图像进行“片元选择”,不同的人根据不同的习惯进行投影与选择,也就形成了不同的绘画风格。
当绘画艺术的载体被人观看时,观看者首先会由画面中的主次关系安排体会到作者头脑中对各种事物的观感。更进一步的,当观看者通过笔触、颜色等每一个细微的绘制选择来对载体进行观察时,将能反推到作者在做出这些选择时的所思所想,用艺术的说法就是“看到作者心灵的倒影,达到和作者灵魂的共鸣”。
绘画艺术由载体和绘画形式的不同,又派生出了雕塑、书法等艺术形式。
音乐艺术同样是最古老的艺术形式之一,其来源主要有三个方面,一是生物的精神和身体达到某种状态时的自然表现,比如哭泣、咆哮、呻吟;二是来自种群间进行信息传递使用的各种声音信号,如话语声、敲击物体发声等;三是来自对自然界声音的模仿,如风声、雨声、鸟鸣声等等。人在经历过某些发声场景后,根据记忆使用某种方式对这些声音及声音所代表的场景进行重现就是音乐艺术的雏形。
当音乐被收听者听到时,收听者的大脑中会出现和最初体验者类似的神经元连接方式,体会到和最初体验者类似的感受。这时收听者也可能会提取中这段音乐中自己感兴趣的旋律,再以这些旋律为材料构造新的音乐,这时的音乐逐渐断开了与现实场景的最初体验间的直接联系,但仍然保留着相对应的情感。
音乐可以包含器乐和声乐,而舞蹈艺术的形成方式也与音乐艺术相似。
文学艺术是人类的语言、文字发展到一定程度之后产生的艺术形式,其来源在于人类使用文字对现实世界情况的记录。作者根据自己的认知为世界表象下的情感与动机做出解释,这里的世界可能是现实中存在的事物,也可能是作者对现实中事物的某个方面的聚焦,也可能是作者根据现实和自己的知识虚构出的一个世界,之后,作者又可以根据对世界运行规律的解释,对世界的发展进行更进一步的推演。
读者在阅读文学作品时,可以根据自身的知识对作者传递来的世界和世界的规律进行“择其善者而从之,其不善者而改之”的处理,最终文学艺术在读者的大脑中以读者和作者的知识的混合体的形式持久化。
以文学艺术为基础,衍生出了戏剧、电影、动画等“可视的文学”艺术形式,其中戏剧、电影艺术中演员的知识和情感也一同经由艺术传递给了观看者,在观看者头脑中形成的是读者、演员、作者的知识混合体。另一方面,让文学作品的世界的细节或者发展方向根据读者的选择改变,又延伸出了“龙与地下城”式的游戏艺术。
提取几种被广泛接受的艺术形式的共同点,我们可以得出一个认识:艺术是关于“通过某种载体,在智慧生命间传递经过了个性化加工的感受与知识,并使智慧生命感到愉悦”的行为和方式的结合体。
让我们转回头来看编程。
从功能上讲,编程似乎和艺术一样可以在智慧生命间进行感受与知识的传递,我们详细划分一下和编程有关的知识传递:一是通过程序的运行效果传递,二是通过代码文本传递。
其中程序的运行效果传递,比如显示文字、声音、图像、控制机器做出动作等,与传统艺术中的文学、音乐、美术、舞蹈的界限非常模糊,无法完全视为由“编程艺术”本身产生,同时程序的运行效果的独特性往往由设计师或者美工创造,而效果背后的程序则可能由多种不同的编程方式实现,由此可见“程序运行产生的艺术效果”不直接由编程决定。
而代码的文本传递中,刨除注释和代码隐喻中属于文学艺术的部分后,剩下的只属于编程的部分与传统艺术形式相比:
相比于绘画、音乐这样不需要额外知识就可以体会的原始艺术,编程者必须掌握足够的相关知识才能理解编程创作;相比于同样需要额外知识才能体会的文学艺术,编程所需要的额外知识比起文字和语言更为抽象,在大部分人的日常生活中接触更少;相比于戏剧、电影等混合艺术,戏剧和电影的演员在参与表演时会努力让自己的情感与作者设计的情感统一,而编程中使用的各种库则为了支持尽量多的情况,追求所谓“天道无情”。
再来看“使智慧生命感到愉悦”这一艺术的特征,艺术的传递可以令接受到艺术的个体产生“自己比其他个体好”“自己被其他个体认可”“自己比之前变得更好”几种认识,从而让个体认为自身处在进化的优势位置感到愉悦。而代码的传递则更多的聚焦在传递的发起者“觉得自己很厉害”“想要让别人感觉自己很厉害”上面,多数情况下并不能让传递的接收者感到愉悦。
综合上述比较,我们可以得出一个初步的结论:编程和被广泛接受的艺术之间的差别大于被广泛接受的不同类型艺术之间的差别。
这样,也许我们可以得出结论——“编程不是艺术”,但另一方面,我们也难以完全否认“编程是一种新兴的、尚未被广泛接受的、特殊的艺术形式”,但这样的辩论就偏离到对“艺术”这个名词的定义分歧上了,我们要尽量避免这种“白马非马”的智力空耗。
也许一个更容易令人接受的结论是,正如拥有了栖身的洞穴人类才能进行绘画记录、拥有了大量个体组成的群落音乐才能传递、拥有了文字和纸张文学才能构造世界,艺术是人类进化的表现,编程则是人类进化的原因。
本文最早发布于https://github.com/ljzc002/ljzc002.github.io/blob/4c785aff7c7871cae3fbcf18254e4f5556336f02/%E7%BC%96%E7%A8%8B%E6%98%AF%E5%90%A6%E6%98%AF%E8%89%BA%E6%9C%AF
欢迎有不同看法的朋友留言讨论。