ちょっと休憩がてら、ダラダラと etoys について書いてみます。etoys とはタイルと呼ばれる箱をマウスで動かしてプログラムを作る仕組みの事です。私たちの目標は、etoys を使ってもっと簡単に、楽しく、複雑なプログラムを組み立てられるようにする事です。一つの大きな問題は etoys が何なのかよく分かっていない事です。これは何事もはっきりと決め付ける事を好まないアランさんの性格から来るのかも知れないし、単なる私たちの怠慢なのかも知れないけど、例えば「etoys が簡単である」という性質一つとっても、何故簡単なのか?本当に簡単なのかについての議論はなされていません。ので、議論の仕方を書きます。
仮説
- 正しい指導があれば、小学生が 10分でプログラムを書く事が出来る。
- etoys では、ある規模以上のプログラムを書く事が難しい。
- アランさんによると、etoys が簡単な理由はタイプミスを気にする必要が無い点。
一つの必要な方向性は現在信じられている事柄について一つずつ帰納的に検証する事です。例えば小学生が10分でプログラムを書く事が出来るとは、具体的にどのレベルのプログラムなのか、ある規模とはどの程度なのか、タイプミスが本当に大きな影響を与えるのか?
もう一つの方向性は、etoys の持つ性質、マウスだけでプログラムを作る事から、どのような可能性があるのかを演繹的に導く事です。今日はこっちメイン。
etoys で強調される特徴は、マウスを使うと許された場所にしかタイルを配置する事が出来ないので、結果として文法エラーが起こらないという点があります。元々文法エラーが起こるのは、テキストとしてプログラムを記述しないといけない事から来る単なる技術的制約なので、最初からテキストを使わなければ回避出来る問題です。そう考えると、むしろテキストを経由せざるを得ない普通のプログラミング言語の方が特殊で、テキストを経由せず、プログラムの意味そのものを操作する etoys はより自然であるという見方も出来ます。
etoys の操作の対象が、普通のプログラム言語のようなテキストに投影されたプログラムの影では無く、プログラムそのものだとしたら、文法エラーを回避する以上の事が可能になります。あまり大きく取り上げられない型エラーの問題です。ユーザが全く型に煩わされる事なく型エラーを回避出来るというのは大きな利点です。
文法エラー、型エラーの次は意味エラーです。と言いたい所ですが、それではあまりにも難しすぎるのでエラーとは何かと言う事を書きます。操作とは対象を変更する事です。が、何もかも変更するのでは無くて、操作の前と後で変わらない性質があります。文法や型はその性質に相当します。意図せずある性質が変更されてしまう事をエラーと呼びます。
私たちが何かを組み立てる際には、変更されない性質について特に気を使う必要があります。例えば新しく買ってきたビデオデッキをテレビに繋ぐという操作を考えた時に、プラグを関係ない穴に突っ込んだり(型エラー) コードをハサミでちょん切ったり(文法エラー)しません。また、ちゃんと線が繋がってるのに画が出ないという事があります。これは意味エラーに相当するでしょう。
物理的な制約の無いプログラムでは、文法エラーから意味エラーまでの領域を etoys によって回避出来ると私は考えています。それに必要なのが、プログラムを幾何学の対象として捕らえる考え方です。
「幾何学は与えられた変換群に属する任意の変換で不変な図形の性質を研究する学問である」(クライン)
最初に挙げたスライドは、(私には一割も意味が分かりませんが) etoys にとって大変示唆に富んだ物だと思います。プログラムの不変性を研究し、エラーを回避する事によって、プログラミングもようやくビデオの接続と同じくらいの難しさに到達出来ます。etoys の持つ問題が、決して単なるドラッグアンドドロップの実装に留まらない事を分かって欲しくて書いてみました。