用画笔编程,而非铅笔
摘要
这篇博客文章介绍了一个Python PaintBrush类,用于视觉化教学编码,并讨论了像Claude这样的LLMs如何能快速生成此类代码,强调了手写代码在学习中的价值。
暂无内容
查看缓存全文
缓存时间: 2026/08/16 06:41
# 用画笔编程,而非铅笔
来源:https://blog.pickcode.io/program-with-paint-brushes-not-pencils/
用画笔编程,而非铅笔这幅画作由一个15行的Python程序创作于2022年,当时我仍在高中教授计算机科学。我为学生编写了一个名为`PaintBrush`的Python类供他们使用。那个周日下午,只用了笔记本电脑和一杯咖啡,我花了20-30分钟完成这个类。而今天,Claude在20-30秒内就能写出同样的代码。
2022年,我的目标是通过一堂课激发学生的兴趣——他们的代码能完成一些视觉化且有趣的任务。如今,这类课程依然能实现这一目标,并且还能帮助实现另一个目标:激励学生亲手编写代码,即使大型语言模型可以轻松代劳。
让我们具体看看`PaintBrush`课程是如何运作的。
```
import turtle
import random
class PaintBrush():
def __init__(self):
self.t = turtle.Turtle()
self.t.color("black")
self.t.width(3)
self.t.speed(6)
self.t.hideturtle()
self.randomness = 0
def line(self, x1, y1, x2, y2):
self.t.penup()
def get_delta():
return random.randint(-self.randomness * 5, self.randomness * 5)
self.t.goto(x1 + get_delta(), y1 + get_delta())
self.t.pendown()
self.t.goto(x2 + get_delta(), y2 + get_delta())
def setrandomness(self, amount):
self.randomness = amount
def setcolor(self, color):
self.t.color(color)
def setwidth(self, width):
self.t.width(width)
```
有了这个类,学生可以编写如下代码:
```
from paint import PaintBrush
brush = PaintBrush()
# 绘制字母C
brush.setrandomness(0)
brush.setwidth(10)
brush.line(-50, 100, -100, 100)
brush.line(-100, 100, -100, 0)
brush.line(-100, 0, -50, 0)
```
`PaintBrush`对象的工作方式与计算机教学历史中广为人知的`turtle`类不同,它允许学生在平面内特定坐标间绘制线条。`PaintBrush`类对学生而言是一种*抽象*。
在我们一起复习了`PaintBrush`的基础知识后,我给学生布置了以下说明任务:
2022年,学生亲手编写这些代码,因为别无选择。我的假设是,到2026年,学生会更倾向于为这节课亲手编写代码,因为生成有形结果是如此轻松。
如果课程内容重复、枯燥或过度规范化,我不会责怪学生用AI生成代码。“写一个打印乘法表的循环”与“能否用我们学过的概念在你的画作中画1000条线?”相比,应该会激发学生不同的参与度。
`PaintBrush`课程的具体细节不如整体概念重要。编程是创造性表达的工具,而高级抽象让学生能以不同方式参与编程。如果说打印语句是美术课的铅笔,那么像`PaintBrush`这样的抽象就是——画笔。
这里的`PaintBrush`并非唯一的“画笔”。`Turtle`、`processing`和`pygame`都属于此类抽象工具。然而,任何单一抽象都无法长时间吸引学生的兴趣。你的第十二幅海龟图画,不会像第一幅或第二幅那样令人兴奋。
由于教师可以借助LLM快速生成新的抽象,我们不必局限于现有的选项。我们可以编写代码,让学生轻松创作音乐、数据可视化、照片滤镜、游戏、视频等。
通过合适的抽象,我相信我们能说服学生与代码本身互动,而不必使用AI作为捷径。即使LLM可以更快地生成他们的代码,这也不重要。编程学习在于培养学生的自我效能感和自豪感——当他们创作出真正属于自己的作品时。我们需要尽一切可能帮助学生看到这一点。
相似文章
Show HN: Build with Python – 一门让你的代码「画」出作品的入门课程
Scimigo 推出了「Build with Python」入门课程,学习者通过在画布上绘图来编写自己的第一个 Python 程序,涵盖函数调用、变量、循环和点击事件等内容,用于制作机器人、图案和交互式绘图。
训练AI用代码绘画
一个利用强化学习训练语言模型通过编写可编辑代码生成图像的研究项目,针对创意任务中的奖励函数和系统提示演进挑战提出了解决方案。
@pablostanley:制作了一个像素艺术工具,每个像素都是代码而非位图。尝试一下 → http://newt.sh
由 @pablostanley 创建的像素艺术工具,每个像素通过代码而非光栅图形来表示。
使用 TRL 和 OpenEnv 训练编码模型绘制水彩画
本文详细介绍了一个使用 TRL 和 OpenEnv 训练编码模型生成水彩艺术作品的开源复现项目,完整的流程成果已发布于 Hugging Face,以确保可复现性。
用高斯泼溅作画
作者描述了一个交互式绘画工具的开发过程,该工具利用图像的边缘信息来引导二维高斯泼溅作为笔刷笔触,避免了缓慢的梯度下降方法,并产生类似绘画的效果。