多角形を教えるためのプログラミング言語

小学校でのプログラミング教育必須化の流れで,文科省が示した一つの例が算数で多角形を教える際にプログラミングで教える,ということでした.なぜプログラミングが使えるのかというと,複数の同じ長さの線分が同じ角度で交わっている状態を作図するのが,定規,分度器を使うよりも簡単だから,ということだそうです.とても合理的だと思います.

ところが,スクラッチが採用しているタートルグラフィックという描画ライブラリーをそのまま使うと,2つの線分が交わる角度を指令するためには,内角ではなくて外角を使わなければなりません.そして外角というのはこの段階ではまだ習っていないためにここで問題が生じます.

まだ習っていない概念を使ってまで,プログラミングで多角形を教えるのか.

ここで意見が分かれるわけです.習っていなくてもいいからやっちゃえ派といやいや慎重にやろうよ派です.

みんなどれだけパパートというか,スクラッチを神様扱いするんでしょうか.合わないなら作っちゃえという発想に行かないのでしょうか?もちろんコンピュータの専門家じゃないなら,そもそも作れるという発想に至らないから難しいとは思いますが,専門家(と称している人たち)でさえも,同じ議論に加わっていて,僕は悲しすぎます.

外角ではなくて内角を使うようなものを作ればよいんだと思います.亀が前に進むんじゃなくて後ろ向きに進めば内角でよくなります.線を引いた後180度回転もします.すでに亀じゃなくなるので,これを教えやすくするには,こういう挙動が自然に感じられるメタファが必要になりますね.

なんかないか考えていたのですが,やっぱりそもそも作図の指示を命令の列で表現するということ自体が結構難しい課題なので,何かを命令で動かすことで線を引くという低次元の概念から離れて,2本の線が何度で交差する,という少し高次な言い方をする方が今風じゃないかという気がしました.大事なのは正確に繰り返すことだけなのです.線が交差する状態を命令の列で表現することは求められていないのです.ならばビスケットです.

ビスケットで作った例はこれです.ただし,最近は研究が進んで,メガネが一つだけでもいいんじゃないかということになりました.それは.
です.1本の直線があったら,その先にもう一本直線を追加する,という意味です.

ちょっと話が脱線しますが,このメガネは同じ場所に何本もの線を重ねて生成するので,10本線を生成したところで止まります.10回繰り返すと実は画面上には1024本の直線が生成されています(2の10乗だから)が,正確に同じ場所に重なっているので1本にしか見えません.ビスケットのリミッターは1000なのでそこで生成が止まります.それで,上で紹介したページでは線が2本重なると1本に減るというメガネを追加して,何角形でも作れるようにしました.でも難しい話のでとりあえず10角形まででよければ,メガネ一つで十分です.

ここでもう一つの欠点があります.それは2つの直線が交差する角度がよくわからないということです(そもそも,ビスケットの手書きの線なので直線じゃないというのも欠点といえば欠点ですが).

それで,新しい言語になります.それはメガネのような構文は使いますけど,ビスケットとは動作が若干異なるので,新しい言語という扱いになります.

1)指定した長さの直線が簡単に作れる.

2)2本の直線が交差する角度を簡単に指定できる.

3)正確に同じ位置に2本の直線が重なった場合は削除する.

これだけでいいです.これで,上のメガネのようなインタフェースで繰り返し動くということを示してもいいですし,繰り返す回数を指定したければ,メガネに数字を入れられるようにしてもいいかもしれません.その辺りの拡張の加減は,この言語を多角形の描画だけに使うのか,それとも他の図形の学習全般でも使えるようにするのかで変わってくると思います.多角形だけだったらシンプルになるし,汎用性を持たせればそれだけいろいろと複雑になるでしょう.

僕は,ビスケットが普及することを狙っているので,ビスケットの亜種というか,ビスケットの新しい動作モードとして上の機能を実装するように思います.他の授業でビスケットを習っていれば,子供達は即使えるだろうということです.

こうしたとき,僕が予想するのは,プログラミング教育な人たちの支持はあまり得られないだろうなということです.その代わり,算数教育の人たちからの支持は得られると思っています.実際にこのデモを文科省の算数の人に見せた時は面白がってくれました.

なぜ,プログラミング教育な人たちの支持は得られないんじゃないかというと,その人たちの目標が多角形を教えやすくすることではなくて,面倒な手順が分かる子供を育てたいからです.

実はもっと深い議論が隠されています.プログラミング教育という言い方をすると曖昧になるので,「コンピュータのプログラミング可能という性質を教育に活かす」という課題に対して,「従来の面倒なままのプログラミングを頑張って教える」という派と「プログラミング可能という性質をテクノロジーを使って簡単にしてそれを教育に利用する」という派です.昔は全員が後者だったはずなんですが,プログラミング言語のテクノロジーが30年くらい止まっているので(その進化を無視する人が多いせいですが),前者の中の「頑張って教える」という部分問題に注力しすぎているからなんでしょうね.あと「頑張って教える方」が教育者としては魅力的ですよね.

シェアする

  • このエントリーをはてなブックマークに追加

フォローする