AI时代还要学Processing吗?从AI Coding协作看创意编程的价值
这学期第三堂创意编程课刚结束一个做视觉设计的同学就堵住我老师你说我现在背这些 Processing 语法还有意义吗我拿最近特别火的 AI 编程工具试了一下输入“给我写一个粒子跟随鼠标的 Processing 程序”几秒钟它就把能跑的代码吐出来了连注释都写得比我规范。她说完这话教室里一半人跟着点头。我太理解这种焦虑了——AI Coding 看起来就像一群不知疲倦的实习生你嘴皮子一动它就能把活干完。那亲自学 Processing 到底还有没有必要我的答案不止是“有必要”更准确地说是越早把 Processing 认真学会你在 AI 时代吃到红利的速度就越快。为什么因为这个结论不是替编程语言辩护而是我观察了大量会写代码的人和只会念咒语让 AI 写代码的人之后得出来的。这篇我就拿“AI Coding Processing”这个组合把我看家的一点经验全写出来顺便把我自己踩过的坑也一并交代了。1. AI Coding 到底能不能替你把 Processing 写完1.1 实测让 AI 画一棵会动的树先说个真实测试。我拿一套开源 AI 编程工具让它在 Processing 里实现一个经典的分形树要求是“树枝要自然一点带一点随机感树冠要有疏密变化”。AI 几秒钟就给了一版完整代码结构清晰递归也写得像模像样。我把代码粘进 Processing一跑能出树但问题来了它所谓的“随机感”用的是random(-0.3, 0.3)直接加到旋转角度上画面抖得跟触电一样疏密变化完全没有整棵树看起来就像一把炸开的海胆。我继续追问它“能不能让树枝变得更平滑、更有机”它给出的方案是把 random 换成噪声但换完之后又出现另一个问题它把所有分支都绑到同一个噪声值上结果整棵树的形态在每一帧同步扭动看起来不像植物像一条条触手在蠕动。这时候我才意识到它不是在“设计一棵树”它只是在拼装一个看起来差不多的套路。这个测试不是想证明 AI 没用。恰恰相反如果我要在一个小时内做出十棵备选树的草稿AI 这种生成速度非常有价值。但从“一棵能跑的树”到“一棵你想盯上十分钟的树”中间隔着巨大的审美判断。AI 能理解“分形树”这个词的统计特征但它完全不理解“疏密变化”在你眼里到底是怎样一种视觉节奏。1.2 它缺的不是代码能力是“画面反馈闭环”我后来跟不少做 AI 编程方向的朋友聊过大家有一个共识现在的 AI Coding 本质上是一个“文本到代码”的统计模型。你给它一段描述它根据海量代码库学到的分布预测出最像样的代码片段。问题在于这个过程中间没有“画面”这个东西。什么意思你写 Processing 的时候真正的创作循环是这样的你有一个想法把它翻译成代码运行眼睛看到画面大脑判断“不对这里太空了那里的颜色太跳了”然后修改代码再运行反复逼近你脑海里的目标。这个循环里最重要的不是写代码而是“看到画面之后做出修改决策”。AI 写代码完全没有这后半截。它生成完代码就结束了它自己看不到画面也无法根据画面反馈去修。你可以把报错信息丢给它让它改但报错只是“程序层面的错误”它判断不了“这个地方视觉上不好看”这种感知层面的问题。所以你会发现一个很有意思的现象AI 写出的 Processing 程序语法错误很少但审美错误极多——圆的位置卡在正中间、颜色配得刺眼、粒子运动像纸片一样飘这些问题代码能跑但画面恶心得要命。很多新手拿 AI 生成代码之后第一反应是“好厉害”第二反应是“怎么改都不对劲”。原因就在这里你缺的不是生成代码的能力缺的是判断“什么才算对”的能力。而这个能力恰恰是学 Processing 最该练的东西。2. 学 Processing学的是“用算法看世界”的方式2.1 创意编程的内核从模糊想法到明确规则Processing 是当年 MIT 媒体实验室的 Ben Fry 和 Casey Reas 做出来的本意就是给视觉设计师、艺术家一个低门槛的工具让他们不用被 C 或 Java 的底层细节劝退。它最了不起的地方不是 API 多好用而是它逼你用一种全新的方式思考视觉。举个例子你想画一千个跟着鼠标走的小点。用手一笔一笔画不可能用 AI 生成一段代码倒是很快但如果你自己写过你会知道这背后真正有趣的事你要思考每个点怎么感知到鼠标位置怎么移动怎么避免它们全部叠成一坨怎么让它们有前后层次。你会发现你其实是在为“群体的运动”写一条规则。这条规则一旦写出来一千个点、一万个点全都按它行动你只负责调整系数。这种“从模糊想法到明确规则”的翻译能力才是最值钱的。AI 可以把规则翻译成代码但前提是你得先懂得如何把想法拆成规则。拆不出来的时候你连提问都问不清楚。我跟很多设计师同学说过一句话AI Coding 时代最可怕的能力短板不是不会写代码而是说不清楚你到底想要什么。2.2 审美与手感AI 还没学会再往深一点说Processing 教你的不只是规则还有一种对参数的敏感度。同一个粒子系统加速度常数从 0.01 改成 0.02画面气质完全不一样前者像雪花缓缓飘落后者像沙尘暴扑面而来。这种手感只有亲手调过才知道。你调过你的脑子里就会形成一种“参数直觉”没调过你面对 AI 生成的那堆0.01、0.02、radians(30)就是一堆数字完全不知道动哪里。现在的 AI 确实能帮你省掉记 API 的功夫但它替代不了这个“调参-观察-感受”的过程。原因是审美好的作品往往不是算出来的是一次次被画面反馈“喂”出来的。AI 有海量知识但它没有站在你的作品前盯着屏幕看了两个小时那种经验它不知道“这个颜色让你有点想哭”是什么感觉。代码能自动生成情绪不能。这也是为什么那些只会“复制粘贴 AI 代码”的人做出来的东西总有一种说不出的塑料感。不是代码不对是他们没有在作品上留下自己的判断。而学 Processing就是在训练你建立一套属于你自己的审美反馈系统。3. 把 AI 当成队友Processing 学习中的 AI 协作姿势3.1 以“Processing non-unicode truetype font”报错为例聊完理念说点实操。Processing 新手经常碰见一个诡异报错Processing non-unicode truetype font。这个报错光看名字就能劝退一半人我第一次遇到也懵了但后来发现它其实是一个送分题。简单说Processing 在加载某种字体时要求这个字体文件必须带有标准的 Unicode 编码表。某些从老网站下载的 ttf 字体为了压缩体积只保留了英文字符的编码中文、日文这些 Unicode 字符它压根不认。你非要用它显示中文Processing 就甩出这句 non-unicode 的报错。以前我处理这个问题得手动打开字体文件查看属性或者换字体反复试。现在我会直接把报错信息丢给 AI问它“Processing non-unicode truetype font 是什么原因怎么修”AI 会给出一个标准答案检查字体是不是标准 Unicode TTF或者干脆别加载外部字体文件改用系统字体。这些信息当然有用但关键坑在后面AI 不知道你的电脑里到底装了哪些字体它给了一个叫Microsoft YaHei的示例你复制进去如果系统里没这个字体名照样跑不起来。所以正确姿势是先自己写一行PFont.list()把系统可用字体列出来确认你机器上的中文字体到底叫什么名字再告诉 AI让它基于这个真实名字给你生成代码。整个流程变成“你负责确认环境AI 负责查方案”。这个过程看着只是技术操作其实背后是一种很重要的能力知道 AI 的边界在哪里知道哪些信息必须自己确认、不能偷懒。3.2 提问的三层境界与“AI 答题思路”我经常给学生讲用 AI 辅助学 Processing核心不是背咒语而是掌握“AI 答题思路”。同样是遇到一个问题人的问法不同得到的收获天差地别。我见过三种典型的问法。第一种是“给我一段粒子系统的代码”这种问法最省事但除了得到一段代码你什么也没学会。代码跑起来像魔法跑不起来你更慌。第二种是“我想做粒子跟随鼠标的效果目前卡在鼠标坐标映射上这是我现在的代码和报错请帮我找原因”这种问法已经是在和 AI 协作排查问题了你能从对话里学到排查路径。第三种是“我用 ArrayList 存粒子移除时为什么偶尔报并发错误请比较 Iterator 和直接 remove 的差别并结合我的代码给出优化”这就完全是开发者之间切磋专业问题了。这三种问法对应的其实是三种学习深度抄作业、学思路、做判断。AI Coding 变强之后抄作业变得越来越容易但“学思路”和“做判断”反而更稀缺了。你自己得先读得懂问题才可能提出高质量的问题。Processing 恰好是所有编程语言里最适合练这件事的因为它反馈极端直接——你有一个想法写几行代码立刻就有画面砸在你脸上。这种高密度的“想法-代码-画面”循环是训练提问能力的最佳场地。4. 零基础也能跑通的实战路线Processing AI 一起用4.1 保底 API 清单先把坐标系和 draw 循环啃下来如果你完全零基础别急着天天问 AI。先花两个小时把下面这堆东西亲手敲一遍敲完你就会发现后面的路突然顺畅了。第一是设置窗口和主循环size()、setup()、draw()。记住一个类比setup()是搭台子只跑一次draw()是表演默认每秒钟跑六十次。你只需要记住所有会动的东西都得放在draw()里。第二是基本绘制background()、stroke()、fill()、ellipse()、rect()、line()。这些不用背用到时查一查就记住了。真正要紧的是坐标系Processing 的坐标原点在窗口左上角x 向右增大y 向下增大。很多新手画东西位置总是不对八成是把屏幕坐标当成数学坐标了。第三是交互和动画的三件套mouseX、mouseY、map()。map()的用途是把你关心的数值范围映射到另一个范围比如把鼠标位置从 0~800 映射到颜色值 0~255这样移动鼠标就能不停变色。它是创意编程里最常用的函数之一。第四是变换三兄弟pushMatrix()、popMatrix()、translate()。你只要记住把变化包在 push 和 pop 之间就不会影响画布上其他元素。树的递归、粒子的旋转、画面整体移动全都靠它们。我建议你把这些 API 用一个下午的时间自己喂给 AI 看让 AI 解释每个函数的作用再让它给你出几个填空练习你把自己的答案发过去批改。注意重点不是“背会”而是搞懂这些函数在屏幕上到底做了什么。这一步 AI 能帮上很大的忙因为它能快速生成无数个微型示例让你直观看到参数变化对画面的影响。4.2 一个可以直接抄的小案例调出一棵你审美里的树下面这个例子是我给零基础学生的第二节课作业。它不难但信息量很足递归、随机种子、画布变换、参数调节一次全碰上。float seed 0; void setup() { size(800, 600); noLoop(); } void draw() { background(20, 20, 30); translate(width / 2, height); randomSeed((long) seed); strokeCap(ROUND); branch(130, 0); } void mousePressed() { seed random(1000); redraw(); } void branch(float len, int depth) { if (depth 9 || len 2) return; strokeWeight(map(len, 2, 130, 1, 12)); stroke(map(len, 2, 130, 200, 80), 180 - depth * 8, 150); line(0, 0, 0, -len); translate(0, -len); pushMatrix(); rotate(radians(random(15, 35))); branch(len * random(0.6, 0.75), depth 1); popMatrix(); pushMatrix(); rotate(radians(-random(15, 35))); branch(len * random(0.55, 0.7), depth 1); popMatrix(); }把这段代码粘到 Processing 里运行点一下鼠标就会重新长一棵随机树。你现在可以试着不去问 AI自己改里面几个关键参数感受一下把random(15, 35)改成random(10, 20)树会变得更集中、更像冬天掉光叶子的枝干把len * random(0.6, 0.75)改成len * random(0.7, 0.8)树会变得更高更瘦把stroke()里的三个数值调一调整棵树的气质立刻就不一样了。这个过程里 AI 能帮你什么你可以让它解释randomSeed()为什么要放在draw()里而不是setup()也可以让它解释为什么递归里要先translate再rotate。但有一点 AI 帮不了你坐在这里一遍遍地按鼠标感受“哦原来这个参数影响的是树枝展开的密实程度”。这种经验是你的私有财产AI 再强也拿不走。4.3 学习路线和 AI 角色四周计划如果你真决定把 Processing 当一段正经事来学我建议你按下面这个节奏走。不要贪快每一步都做一个小作品。阶段主要任务AI 在其中应该干什么第 1 周画形状、颜色、坐标系完成一个“程序化海报”解释 API、生成参数变化示例第 2 周用 mouseX / mouseY / map 做交互完成一个鼠标跟随游戏排查坐标错乱、理解 map 逻辑第 3 周数组与 ArrayList做最简单的粒子系统帮写粒子类框架并解释为什么要用对象第 4 周递归与分形完成一棵树或一个蕨类植物比较递归/迭代差异出改题练习每个阶段结束都拿 AI 做个“答辩”让 AI 随机抽你三个问题比如“为什么粒子要从 ArrayList 里移除时容易报错”“map 的第三个和第四个参数到底在映射什么”你得当场讲清楚。如果讲不清楚回头重新看代码。这套方法我用了两年效果比看十遍教程都实在。4.4 避坑清单给 AI 协作时的四条检查最后给你一份快速检查表都是我实际踩过或者看学生踩过的坑。症状常见原因处理办法中文注释乱码文件编码不是 UTF-8编辑器里统一改成 UTF-8或干脆注释用英文代码能跑但一卡一卡每帧都在new大量对象用对象池或复用数组别在 draw 里疯狂创建坐标总是不对混淆屏幕坐标系与数学坐标系记住原点在左上角y 轴向下用 println 辅助观察报错 non-unicode truetype font字体文件没有 Unicode 编码换用系统字体或先用 PFont.list() 查看真实字体名AI 生成的代码看不懂跳过了手动理解直接复制给自己立规矩每一行都要能口头讲一遍这张表你可以截图存着但说实话表格里每一条背后都是一次实打实的崩溃体验。你自己经历过一次比什么表都管用。5. 最后说点我的真实感受我带创意编程这几年见过太多“没写过一行代码”的设计师、插画师、音乐人最后靠 Processing 做出了让人眼前一亮的作品。他们最大的共性不是天赋而是能在一次次画面反馈里沉淀出自己的审美判断。AI Coding 越来越强是事实但创作这件事永远是那个对画面有感觉的人在负责按下确认键。所以我特别想告诉你看到 AI 能写代码不用慌。它把你从背 API 和查语法里解放出来你要做的不是和它比赛写代码而是把省下来的时间拿去逛美术馆、去看一株植物怎么生长、去琢磨一个情绪到底该用什么颜色表达。这些才是 Processing 真正教你的东西。我在实际教学里还有一个私藏习惯每完成一个小作品就在代码开头写一句注释记下自己当时为什么选这个参数。回看的时候那些注释比代码本身珍贵得多。