プログラミング言語はいろんな種類があるけれど,ビスケットはその中のどういう位置づけのものなのか.
プログラミング言語を大きく分けると,手続き型と宣言型に分かれる.この二つの大きな違いは,時間軸.手続き型はコンピュータの計算の手順を順番に指示し,宣言型は処理の順番ではなくて,違う関係性で並べる.たとえば,宣言型言語の一つに関数型言語があるが,これは計算のデータの流れに注目して並べ,実際にどういう順序で計算がおこなわれるかは問わない.論理型言語というのも宣言型言語のひとつだが,こちらはデータの流れも記述しない.データの関係性だけ記述する.ビスケットはこれらの中では,論理型言語に最も似ているのだけれど,さらに狭く,ビスケットが記述しているのは「具体例の変化」という関係(before と after)だけである.
ユーザインタフェースの研究で,実例による操作指示というのがある.たとえば,「ファイルを開いて,印刷して,閉じて,印刷済みフォルダに入れる」という操作を人間が2,3回繰り返してやってみて,残りはコンピュータが自動的に真似をして実行する,といったものである.研究としても一時期流行ったのだが.これをプログラミングとみなして,実例によるプログラミングという研究も流行った.ビスケットはこれにも非常に近い.
しかし,違うのは,ビスケットでは,絵の動き方をマウスでドラッグしてコンピュータに教える,ということを直接教えているのではなく,絵がどう変化するか,ということを,変化の具体例を使って教えてあげているのである.動作は,複数用意された変化の具体例に対して,適当にその変化っぽいことを連続して適用する,ということをやっている.その結果,たまたまアニメーションに見えているだけで,やっていることは単純なのである.複雑な変化を書けば,プログラミングしているようにみなせるということでもある.
ビスケットが子どもに受ける理由を考えてみると,抽象化を早くから求めない,ということなのではないだろうか.
たとえば,ダンスを教えることを考えてみよう.「1拍目で右手を上げて,2拍目で左手を上げて」こういう言葉でダンスを説明するのが普通のプログラ ミングである.それに対して,「私の踊っているのを見て真似して」というのが具体例によるプログラミングである.1曲を全部教えるのでは曲の長さが変わっ たりしたら対応できなくなるので,たとえば「このフレーズがきたらここで手をたたく」といったルールで覚えることで,曲がどんなに繰り返して長くなってもちゃん と踊れるようになる.こういう省力化を行うとプログラミングになってくるが,このとき,いちいち言葉で「ここで手をたたく」,なんて教えないで,真似して踊ってい るうちに,「ああ,このフレーズで手をたたけばいいんだな」と自然とわかってくる.こういう実例だけで規則を伝えるのがビスケットでやっているプログラミングなのである.
普通のプログラミング言語では,かなり最初の段階で抽象化が求められる.scratchでも実際に動くもの(猫の絵)に対して,それを動かすための命令(ブロック)を並べるという作業が一番最初に来る.ブロックと猫は別モノである.猫という具体的なものに対して,ブロックという動き方を抽象化したものを並べて動かしている.2つの概念を分けて理解する必要がある.
普通のプログラミング言語しか知らない人は,プログラミングに抽象化は必須だと思っているかもしれない.しかし,ビスケットをはじめ,ユーザインタフェースやビジュアルプログラミングの研究では抽象化をしなくても,動作を指示することができるのだ,ということを示している.
ここで,やはり,なぜプログラミングを教える必要があるか,という大問題に立ち返る必要がある.プログラミングを教える理由が,「抽象的な指示によってものを動かすことを理解させる」ことだとすると,ビスケットはその用途には向いていない.ビスケットが「本当のプログラミングではない」と思っている人たちは,たぶん,この考えである.
もちろんそれは大事だと思うけれど,そんなハードルを上げなくても,もっと直接的にプログラミングを教えられるよ,というのがビスケットの主張である.
ビスケットのプログラミングでは,最初に実例を少しだけ与えて,動作させてみる.その動作で気に入らないところがあったときは,気に入らない特殊ケースをうまく示すような具体例を取り出して,追加の変化を教えてあげる.それが,うまく教えられれば,その変化がうまく一般化されるのだが.その例が強すぎると,過度に変化を適用しすぎて,前の動作よりも悪化してしまうこともある.こういう作業を繰り返して,自分のやりたいことを少しずつ形にしてゆく.このプログラムが出来上がってゆく過程が,ビスケットと普通のプログラミングとで全然変わらない.だからビスケットでいいのである.
本当なら,ちゃんと実験で証明する必要があると思うが,ビスケットで遊んでいると,少しずつ抽象的なものの考え方ができるようになってくるのではないかと思っている.そういう考え方ができないと,ちょっと複雑なものは作れないからである.複雑なものに挑戦しようと思えば,抽象的なレイヤでのきちんとした設計が必要なのは,どんなツールを使ったとしても同じである.
ビスケットのキャッチコピー「コンピュータを粘土にしよう」というのは,抽象的な世界を使わなくても,具体的な世界だけでプログラミングができるのだよ,という意味でもあったのでした.