AI写得出“对”代码,却写不出“对味”:Processing仍然值得学
前几天在我们的创意编程交流群里有人甩了一张AI生成的Processing效果图配文是“连这都能写了还学什么Processing”底下零零散散跟着几条附和。说真的那段生成流动线条的代码效果不差结构也像模像样如果只看那张截图确实会让人怀疑自己每天敲代码的意义。但我自己把那段代码在本地跑了一遍之后反而踏实了。我意识到AI Coding确实很强但它强在“写出能运行的代码”而不是“替你做出创作决策”。这里面的差别恰好就是Processing这门语言在今天依然值得一学的根本原因。这篇文章我想认真聊聊这件事——AI Coding越来越强我们还有没有必要学Processing如果你正在纠结要不要入坑或者已经入坑但时不时被“AI都能写了”的念头动摇我建议你花几分钟看完再自己做判断。1. 先别急着焦虑看看AI生成的Processing代码到底靠谱到什么程度1.1 我用AI跑了三个真实需求结果各不相同为了验证AI Coding对Processing的实际覆盖能力我特意挑了几个平时做创意编程时会遇到的典型需求做了测试而不是拿那些AI已经背熟的标准示例来测。第一个需求很常规——用柏林噪声生成一段流动的线条动画。这个AI完成得相当利落。noise()配合PVector做流场再用beginShape()画线结构清晰参数调整注释也写得明白跑出来的效果确实可以。第二个需求是鼠标交互的粒子系统粒子跟随鼠标移动并留下拖尾。AI也给出了一个可运行的方案虽然性能优化做得一般粒子多了会有明显卡顿但基础逻辑没问题。第三个需求就有点意思了。我让它做“一个模拟植物缓慢生长过程的动画要有呼吸感不能只是匀速伸长”。AI给出的方案很符合它的本质——把生长过程平均分配到每一帧加一点正弦波动的宽度变化。代码能跑效果也说得过去但那种“呼吸感”完全没有。我反复调整了参数最后发现问题的根源不在于参数而在于AI对“呼吸”这个抽象概念的理解方式太线性了。它知道sin()可以做平滑波动但对“植物生长”这件事的节奏感、随机性、偶发停顿这些微妙的东西它没有感知。1.2 AI能写出“对”的代码但很难写出“对味”的代码“对”和“对味”是两回事。对AI Coding来说“对”意味着语法正确、逻辑通顺、能跑出预设的效果。这个概念它掌握得越来越好因为代码的正确性是可以用编译器和运行结果来验证的。但“对味”是另一套评价标准。它涉及这个效果用多大的噪波尺度更像水波、粒子的衰减速率是快一点还是慢一点更有情绪、背景色用深灰还是纯黑让画面更成立。这些判断没有对错之分只有合不合适之分而且合适与否完全取决于你想表达什么。AI做不到这个判断因为它没有你想表达的东西。当我说“这段代码差点味道”的时候AI无法理解我到底在说什么。这是我在测试过程中得到的最重要的观察AI Coding的能力边界不在代码层而在意图层。它能帮你把手头的代码写得更好但它不知道你为什么要写这段代码。1.3 报错现场更说明问题AI是打补丁式的修复不是理解式的修复测试期间还发生了一个很典型的插曲。我让AI生成一段带文字展示的生成艺术画面需要加载一个中文TTF字体。AI给出的代码用了createFont()方法在Processing里这是很常规的做法。但运行的时候直接报了processing non-unicode truetype front这个错定位到原因是它给的方法签名用错了版本API——这其实是很多初学者都会踩的坑。我把报错信息原样丢回给AI让它修复它给出了一个改法把字体文件路径换成英文名再试一次。没法绕开问题的本质——在Processing 4.x中字体加载的方式和3.x有些调整createFont()的某些重载形式的处理需要额外指定Unicode支持参数。这件事让我特别有感触。AI确实能帮你解决报错但它的解决方式是“打补丁”——哪里疼医哪里试到不报错为止。而一个真正学过Processing的人修复这个问题的思路是首先理解这个报错是在说字体编码不支持然后意识到需要检查字体文件本身是否包含中文字形再确认API版本对应的正确加载方式最后可能还会去查一下createFont()和loadFont()在不同环境下的差异。这种理解式的修复AI目前给不了。如果你只是为了“跑出一个效果”AI完全够用。但如果你想“真正掌握这门工具”只靠AI问答案你会永远停留在补丁层对底层发生了什么一无所知。而这种理解恰恰是创意编程中最有价值的部分——因为创作中你会遇到太多无法描述的、无法穷举的、需要你从机理上去理解的问题。2. 学Processing学的从来不是语法而是一种“把画面变成逻辑”的思维2.1 语法三五年就会换一批但生成思维是十年不变的东西很多人对学Processing的误解在于觉得它是一门编程语言学的是noise()怎么用、PVector有哪些方法、beginShape()和endShape()怎么配对。这些确实要学但如果你只学这些那AI Coding确实可以替代你——因为这些知识是显性的是可以在文档里检索到的也是AI最擅长的领域。但Processing真正教你的是另一件事当你看到一个自然界的现象比如风吹过树叶时的摆动你怎么把这个现象拆解成可计算的特征是摆动的幅度在变小是摆动的频率不稳定还是每片树叶的相位有差异当你能把这些问题转化为参数、函数、变量之间的关系时你就获得了一种全新的看待世界的方式。这种方式和具体的语法无关。你用的是Processing还是p5.js是openFrameworks还是TouchDesigner甚至以后有没有更强大的新工具出现这套“把现象变成逻辑”的思维方式都不会过时。我在写这段的时候特意回想了一下过去几年Processing的语法确实变了不少但我拆解“风的摆动”的思考路径从第一次做彭摆实验到今天基本没变过。2.2 随机、噪声、向量AI能给你函数名但给不了你手感这几个概念是Processing的基石同时也是最能体现“手感”的地方。先说random()和noise()。初学者很容易把两者混为一谈但它们在创作中的角色完全不同。random()生成的是一帧一帧之间没有关联的随机数适合做离散的、跳跃的、活泼的效果。而noise()生成的是连续的、平滑的随机序列适合做自然的、流动的、有机的形态。这个区别不是学到的是练出来的——你需要在无数次调参中才能形成“这个效果应该用噪声而不是随机”的直觉。再说PVector的向量运算。向量加法、减法、归一化、点积这些概念AI可能比很多初学者都熟练。但真正创作的时候你知道什么时候该对向量做normalize()什么时候该用lerp()做插值什么时候需要计算两个向量的夹角来决定物体的转向方向这些细微的取舍就不是AI能替你决定的了。我做过一个实验同一段生成草地摇曳的程序让AI提供一个参数推荐范围然后我自己在推荐范围内调。AI推荐的变化范围是-0.02到0.02之间看起来合理但实际调出来的效果非常僵硬。后来我把范围扩大到-0.08到0.08再把噪声尺度调小草地的摇曳才真正活了起来。这不是说AI的参数推荐是错的而是说它推荐的通常是“平均正确”的但艺术创作需要的往往不是平均正确而是那个“过一点”或者“欠一点”的状态。2.3 创作循环中的实时反馈是AI无法替你做的那部分创意编程有一个非常独特的体验写一段代码跑一下看效果根据效果再改代码再跑。这个循环通常在几十秒到几分钟之间完成它的频率和直接程度是其他编程工作很难比拟的。这个循环本质上是一种与作品的对话。你给作品一个指令作品反馈给你一个视觉结果你观察这个结果形成新的判断然后给作品下一个指令。这个过程不需要一个清晰的、可描述的决策树很多时候靠的是“感觉不太对”和“方向对了”这种模糊的判断。AI Coding可以帮你加快这个循环的某个环节比如你某段语法忘了可以让它帮你补全你想把粒子数量从一千改成五千可以让它帮你检查有没有性能隐患。但循环的核心——那个在观察画面时产生的直觉判断以及判断后调整方向的感觉——这个部分AI无法替你完成。因为这个判断依赖你当时当刻的审美偏好、你对这个作品目标的模糊感知、甚至你当天的心情对创作方向的影响。这些维度太个人化太情境化AI没有办法也无从替你完成这一环。3. AI和Processing的真实分工哪些交给AI哪些必须亲手做3.1 适合交给AI的部分模板类代码、语法查漏、效果探测器讲了这么多AI的局限性并不意味着我否定AI Coding对Processing学习的价值。恰恰相反我认为AI用得好能明显提高学习效率和创作效率。关键是你得知道哪些能交哪些不能交。第一类适合交给AI的是模板类代码。比如你要做一个粒子系统基础框架——定义粒子类、设置位置和速度向量、更新位置并绘制——这类几十行就能写完、结构高度相似的底盘代码让AI生成完全没问题。你要在此基础上加自己的逻辑用AI搭底座是最省力的策略。第二类是语法查漏。Processing的API不算少一些细节比如beginShape()的不同模式参数、blendMode()各个枚举的含义差异不需要靠硬记。写的时候不确定直接把问题描述给AI它能给你准确的语法提示比翻文档更快。第三类我称之为“效果探测器”。当你脑子里有一个模糊的效果目标但不确定Processing能不能实现、用什么方式实现时可以先问AI要一个初步方案。比如“我想做一个无限循环的背景动画看起来像液体流动有什么思路”AI会给你几个方向你从中挑一个觉得最接近的去尝试验证。这个场景下AI扮演的是灵感助理的角色它不参与你的审美决策但能帮你扩展技术选项的范围。3.2 必须亲手练的部分审美判断、迭代决策、调试直觉如果说上面是AI能做的那下面这些你必须自己练。审美判断刚才聊过了。它依赖的是你看过多少作品、自己做过多少尝试、知道哪些效果看起来“廉价”哪些“高级”这种判断力只能靠积累没法靠API调用来替代。迭代决策是指在创作过程中你面对十个可能的方向怎么选出下一个要尝试的方向。AI能帮你快速犯错误但选择往哪个方向继续需要你对作品整体的把控力。做生成艺术的时候经常会出现一个小参数调整带来意想不到的效果你会惊喜地发现“原来这样也可以”。这种惊喜本身就是创作的乐趣也是支撑你做下去的动力。如果你全程都让AI跑这种偶然发现的快乐就和你无关了。调试直觉也值得一提。Processing运行时的报错提示有时不够明确图形不显示、画面是黑的、动画卡顿严重这类问题的排查往往需要你从多个角度怀疑是逻辑错了是绘制顺序不对是性能瓶颈还是有对象被垃圾回收了这种多角度排查的能力没法从AI问答中获得它需要在无数次调试中培养出一种“代码运行时的空间想象能力”。3.3 一个实际项目拆解AI帮了我什么我自己做了什么为了表达更具体一些我拆解一个前段时间做的生成艺术小项目来复盘AI在整个过程中的参与程度。项目目标是做一个“纸墨式的山水生成器”能生成类似水墨晕染效果的静态图每次运行结果不同。我先把需求基本构思好然后用AI帮我生成了初始版本的代码包括山体轮廓的生成、分层绘制逻辑、墨色由浓到淡的实现方式。这部分AI完成得很快整体框架半小时内就有了雏形。然后从雏形走向成品的过程中我开始了漫长的亲手调参山体的起伏是用noise()采样还是多个正弦波叠加最终选择了正弦波叠加因为噪声生成的轮廓太多毛刺让画面显得乱不够“纸墨”的气质。晕染的效果一开始用filter(BLUR)实现但整体太均匀没有手绘墨迹那种不规则的边缘。后来换成多层半透明椭圆叠加噪声扰动来模拟不同浓度墨水的边缘扩散。构图的疏密分配AI给的版本是均匀分布几个山体我改成了一边密集一边稀疏、留出大量空白的构图方式空出来放了一枚小小的朱砂印。回头看这个项目AI完成了大约三成的工作量——框架搭建、基础逻辑、性能优化建议。剩下七成是我在“画面感觉不对”和“这个方向对了”之间反复切换的过程中完成的。这不是说AI不能继续参与而是说到了那个阶段很多判断的根本说不清打字描述不出来你只能在视觉反馈中直接调整这时候AI反而有点碍手碍脚。4. 创意编程学习者现在该怎么安排学习路线几个务实的参考想法4.1 零基础入坑建议用AI当向导但不建议用它当拐杖如果你是刚接触Processing的纯零基础我的建议是完全可以利用AI来降低入门门槛。遇到不理解的语法直接问写的代码跑不出来了让AI帮你找bug这些都能让你更顺畅地度过最开始那段最容易被劝退的时期。AI对新手最大的价值其实是“不要让语法挫折感阻断你对创意编程的兴趣”。但有一点需要刻意控制不要让AI替你完成理解和思考。一个可行的办法是坚持自己动手把功能实现一遍。可以让AI把核心思路讲解清楚你理解后自己动手写一遍代码跑通了再对比AI的方案看自己的实现和AI推荐的实现有什么不同哪些地方AI做得更好哪些地方你的方式更适合你想做的效果。这个对比练习本质上就是在帮你建立代码鉴赏能力。另外一个特别建议不要因为AI能生成代码就看轻“从零手写”的练习。手写五十遍class Particle { ... }也许看起来很笨但这个过程会在你的身体里留下一种节奏感你会在某个瞬间突然意识到粒子的生命周期、位置更新、绘制这三件事是如何串联起整个系统的。这种身体记忆是看AI写一百遍代码也换不来的。4.2 有一定基础的创作者把AI当作放大器而不是替代品如果你已经有一定的Processing基础体验过自己从头写一个作品的成就感那你的处境其实是最有意思的。你不需要把AI当作威胁它可以成为你的放大器。具体来说AI帮你节省了写模板代码的时间省下来的时间可以用来做更多视觉实验。以前可能一个晚上只能尝试三个方向有了AI之后可以尝试十个方向以前可能要花大量时间查资料搞懂某个库的调用方法现在可以让AI先把可运行的版本给你你再在它的基础上去做更贴近你创作意图的修改。但我有一个比较深的体会当你可以轻松做十个方向之后反而更考验你的审美判断力。因为AI生成的效果如果没有经过挑选很容易落入某种“AI审美”——画面精致但没有性格。这时候你作为创作者的价值就体现出来了你能识别出哪个方向是有潜力的哪个方向只是一堆参数堆砌的漂亮垃圾你能把AI生成的底稿用你手绘、你调参、你构建画面语言的能力处理成带有个人识别度、有表达欲的作品。这个处理能力不是AI能给你的。4.3 我的个人选择与理由AI Coding时代我依然保持手写代码的习惯说到这里你大概能猜到我自己的选择。我现在的工作流中AI Coding参与了相当比例的前期框架生成和语法咨询但我的日常练习中依然保持了相当多手写Processing代码的习惯。每周我至少会用一个完整的晚上不依赖任何AI辅助从空白页面开始做一个很小的视觉实验哪怕只是一个简单的粒子路径动画或者一组颜色渐变的小练习。收获其实比各种工具周边产生的收益都直接。保持手写习惯让我对Processing的API变化保持敏感让我知道哪些效果需要什么样的计算成本也让我的审美直觉在反复的试错中得到训练。更重要的是手写的过程让我保有一种对创作过程的掌控感。在这个AI可以让任何人在几分钟内生成一段像模像样的代码的时代能明确感受到“这个效果是通过我的判断和选择实现的”这件事本身就在不断确认我作为创作者的定位。我的一个建议是如果你真的很喜爱创意编程这个领域可以试着在AI辅助的大环境中保持一块“不被打扰”的创作自留地。不用很大一个简单的动画练习就够关键是保持这种亲手实现、亲手拍板、亲手把它调试到满意的状态的能力。头脑中不断涌现的表达欲配上一双能独立实现想法的手才是这个AI遍地走的时代里最难被替代的东西。