プログラミング
ペイントブラシでプログラミング:鉛筆ではなく
Program with Paint Brushes, Not Pencils (blog.pickcode.io)
要約
この記事は、AI時代におけるプログラミング教育のあり方について論じています。かつてはPythonのPaintBrushクラスのような抽象化が学生の創造性を刺激しましたが、現在ではLLMが容易にコードを生成できるため、教育者はより高レベルな抽象化や創造的な課題を提供する必要があると主張しています。これにより、学生はAIに頼らず、プログラミング自体に価値を見出すようになると提案しています。
全文翻訳
2022年、まだ高校でCSを教えていた頃、私は生徒たちのためにPaintBrushというPythonクラスを書きました。これは日曜日の午後にラップトップとコーヒー1杯で20〜30分で書けました。今日では、そのコードはClaudeによって20〜30秒で書けるでしょう。
2022年の私の目標は、生徒たちがコードで視覚的で楽しいことをできるようなレッスンでモチベーションを高めることでした。今日、この種のレッスンは同じ目的を果たし、さらに別の目的にも役立ちます。LLMが簡単にコードを生成できる場合でも、生徒に手書きでコードを書くモチベーションを与えることができます。
具体的に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オブジェクトは、CS教育の歴史で非常に馴染み深いturtleクラスとは異なる方法で動作し、生徒が平面上の特定の座標間に線を描画できるようにします。
PaintBrushクラスは生徒にとっての抽象化です。以下は、PaintBrushの基本を一緒にレビューした後、生徒に与えた指示です。
2022年、生徒たちは他に選択肢がなかったため、このコードを手書きしました。私の仮説は、2026年には、このレッスンで生徒が手書きでコードを書く可能性が高くなるということです。なぜなら、具体的な結果を容易に得られるからです。
レッスンが反復的で、退屈で、過度に指示的である場合、学生がAIでコードを生成することを責めることはできません。「掛け算表を印刷するループを書いてください」という課題は、「私たちが知っている概念を使って絵に1000行を追加できますか?」という課題とは異なる学生のエンゲージメントを生むはずです。
PaintBrushレッスンの詳細は、全体的なコンセプトほど重要ではありません。プログラミングは創造的表現のためのツールであり、高レベルの抽象化により、学生はさまざまな方法でプログラミングに関わることができます。アートクラスのprint文が鉛筆だとすれば、PaintBrushのような抽象化は、まさにペイントブラシです。
ここでいうPaintBrushは、「ペイントブラシ」である点でユニークではありません。Turtle、Processing、Pygameはいずれもこの種の抽象化です。しかし、個々の抽象化は、生徒にとって長くは興味を引くものではありません。12回目のturtleの描画は、最初や2回目の描画と同じような興奮をもたらしません。
教師がLLMを使って新しい抽象化を生成できる速度のおかげで、私たちは既存のメニューから選ぶだけにとどまる必要はありません。音楽、データ可視化、写真フィルター、ゲーム、ビデオなどを作成できるコードを書くことができます。
適切な抽象化があれば、AIをショートカットとして使用せずに、学生にコード自体と対話させることができると信じています。LLMが彼らのコードをより速く生成できるかどうかは関係ありません。プログラミングを学ぶことは、学生が真に自分の作品を作成する際に、自己効力感と誇りを育むことです。学生がそれを見るのを助けるために、私たちが利用できるあらゆるツールが必要です。
2026年8月 更新
Pickcodeは夏の間素晴らしい時間を過ごしました。CSTAニューオーリンズでコミュニティの皆さんとお会いできて楽しかったですし、プラットフォームの改善に多くの時間を費やすことができました。新学期が近づいており、私たちはCSTA 2026 Recap
今週のCSTAカンファレンスはとても楽しかったです。いくつかのハイライト:
* コミュニティの先生方とのチャット
* 他社の友人との再会
* ニューオーリンズのあらゆる試みにもかかわらず、私の甲殻類アレルギーを引き起こさなかったこと
* クロシェ編み(!)
2025年のカンファレンスの終わりに、Devorah ZamanskyはBlanket Statementについて説明しました。
2026年6月 更新
夏を楽しんでください!素晴らしい学年度を過ごしました。皆さんもそうであることを願っています。CSTAでお会いしましょう!7月13日から15日までニューオーリンズで開催されるCSTA年次カンファレンスに参加します。ブース400に立ち寄ってください。無料のミントとPickcodeステッカーを用意しており、Blanketを主催しています。
2025-2026年 年間レビュー
今週、私たちは学生がPickcodeを使用する3回目の学年度を終えようとしており、数字を見るのに良い時期です!まず、今年27,000人の新規ユーザーがプラットフォームに登録し、総ユーザー数は47,500人になりました。これらのユーザーは280以上の...