eToysは従来型アルゴリズムを作らせる気がないのではなかろうかという深読み

を受けて、いろいろと。
id:propellaさんにまた奥が深い症候群ですよ(http://d.hatena.ne.jp/Florian/20051031)と怒られそうな気はしますが……。
SqueakのeToysという環境は結構好きです。そもそも、嫌いだからこういう話をしているわけではないという前提で読んでください。


以前、Squeakのカリキュラム検討会というイベントがありました。基本的には現場の方と、研究者の方が集まって、実際に現場向けのカリキュラムを作ろうというイベントでした。
ここに、教育現場とは言ってもSqueakを使って教育できるような場所はほとんどない Florian も、非常に興味を抱いて参加しました。
ひとつには、コンピュータを用いた初等教育に非常に興味があったという事、もう一つは、OLPCによる世界の変革にどんな手段がとれるだろうかという事。まぁ、OLPCの実現する教育という環境自体は、結局あまり関係なかったのですが(^^;)、それでも門外漢なりにいろいろ考えて物事を見ていました。
この中でいくつか実際の教材が作られたのですが、それに一つ、こんなものがありました。

  • 画面に迷路を書いておく
  • 迷路のうえに、軌跡を乗せられるようなタートルをおく。
  • このタートルを使って、1回の実行で迷路を抜けるスクリプトを書け

小学生向けの教材なので、なにもマイクロマウスを作れと言う課題ではありません。ミソは、1回の実行で、というところで、実際には

  • 上を向く
  • 何歩か進む
  • 右を向く
  • 何歩か進む

……というのをひたすらつなげていくスクリプトを作らせて、あらかじめどういう手順で進めばゴールに着くはずかという方法を考えさせると言う問題です。
この問題の到達目標としては、

  • 手順を踏んで何らかの目的を実現する
  • 手順は可換性が無く、順番を変えると答えも変わってくる事を気づかせる

といったところを狙っている、とのことでした。


これがですね、わたしにはどうにもeToysの教育になってない、ないしはeToysでこれをさせ始めると、とたんにeToysのカベに生徒が気づいちゃう気がするのです。
もちろん、eToysだって、手順を踏んでスクリプトを実行させるというアルゴリズミック(と、その検討会では呼んでいました)な発想は必要になります。
たとえば、進んでから回すのと、回してから進むのでは、明らかに結果が異なってきます。これに条件テストが絡み始めるとテストの前かあとか、ハイかイイエかでも露骨に違いがでるでしょう。スクリプト自体の実行の基本は並列にチクタクだとしても、一つ一つのフレーズは逐次実行されます。
でも、eToysは、並列にチクタクされることを大前提にした環境ですので、あまり実行順に重きを置いたスクリプトは重宝されません。それどころか、できるようであれば、フレーズ間に可換性のあるスクリプトならば別のスクリプトに分けて同時に動かした方が問題がすっきりします。杉並区和田小の先生が、二次元空間になれていない小学生に対し、x,yそれぞれの軸のスクリプトを独立させて、同時に動かすなんて事をしていたのは、まさにこれです。
また、先ほど例に挙げた、回転と進むの実行順に関しても、実際には巨視的にみるとあんまり違いはありません。なにせ、eToysは特定回数で実行を止めるという機構が言語としては備わっておらず、それどころかループという考え方すらもないのです*1


これらの実装からおぼろげながら読みとれるのは、基本コンセプトとして以下になります。

  • オブジェクトに対する指示以外の操作は行わない
  • オブジェクトの持つ機能は、微少時間ΔTに行われるものとして考える
  • ΔT内の動作は、並列して行われるものとする
    • だから、動作には順序を持たず、操作自体を分離しても同じものとして考えられる
  • ΔT内の動作は基本的に状態を持たない。
    • 状態が変わると言うことは、つまりオブジェクト自体の性質が変わったとして見なす

どこまで当たっているかは判りません。特に最後のなんか、実際そういう使い方をしている人がいるかどうかも怪しいです。
でも、複数のオブジェクトが並列して動くことが基本で、オブジェクトの性質(ここを、スクリプトと呼んでもいいかも)を協調動作させて何かを実現させたいというプログラミングパラダイムは確かにあると思います。
このパラダイムの上でのプログラムは、少なくとも、手続き型言語における狭い意味でのアルゴリズムというところとは、結構かけ離れたところにあると思えるのです。


今後のコンピュータの方向がどの辺りなのかはわたしには判りません。ただ、今のコンピュータの基本構造がフォン・ノイマン型のアーキティクチャであり、そのプログラミング環境が、フォン・ノイマン型アーキティクチャに最適化されていることは確かです。
そういう意味ではeToysのプログラミングパラダイムフォン・ノイマン型コンピュータには最適化されていないと思います。なので、これを使って従来のプログラミングを学習したりするのは、実はあんまりメリット無いんじゃ無かろうか、ついでにいうと、従来型のプログラミングの学習自体にも実はあんまりメリット無いかもしれないとまで考えているのでした。
重要なことは、コンピュータを思考の道具として使うことであり、思考自体が従来型のプログラミング環境に依存したアルゴリズムである必要も無いよなぁ、とも考えている今日この頃です*2

*1:OLPC eToysには新設されました。個人的にはショックを受けました

*2:だから、パパートのマインドストームが提示していた何かにLoop n timesで近づいたという思想には、あんまり賛成できない