ビスケットのあれこれ

ビジュアル言語ビスケット(Viscuit)に関するあれこれを書いてゆきます.

ビスケットに算数を教える(2)

2011-06-09 23:55:36 | 1
(1)の続き.(1)から読んでください.

用意する数は

1,2,4,8,16,...

である.

1と1で2
2と2で4
4と4で8
8と8で16

たったこれだけでよい.-1は

1と-1で0
2と-1で1
4と-1で2と1
8と-1で4と2と1
16と-1で8と4と2と1

である.
もうお分かりのように,2進数である.

2進数は部品の数とメガネの数を減らすことに実に有効である.これは,なぜコンピュータが2進数で動いているかという説明でもある.部品やメガネの数が少ないということは,たとえば足し算を電子回路で計算させようと思ったときに,2進数であれば,少ない回路で作れるということでもある(もちろん,他にもいろんな理由が積み重なって2進数が使われているのだけれど).

この後,本当の算数では桁の概念が必要になる.桁を変えて数を表す方法の発明で,数字の種類を減らすことに成功できた.これをやりたい.

ビスケットは配置に関してあいまいでいい加減な処理をしているため,桁をビスケットで表現するのはちょっと難しい.ビスケットからあいまい性を排除して厳密に動く図形書き換え言語を作れば(実はこっちの方が作るのは全然簡単)桁を正確に表現することができる.そうなると,1,2,4などという部品も必要なく,みんながよく知っている0と1の二つの部品だけで作ることができるだろう.


なぜ,プログラムにはバグやエラーがあるのか.

(1)の10進法を使った例に戻るが,たとえば,この計算のプログラムでのバグといえば,
「3と4が重なると5と1になる」といったようなものであろう(本当は5と2にならなきゃダメ).なんで,これがバグなのか.

たまたま,ここでは部品として数字の絵を使った.数字というのは僕らはすでにどういう性質のものかを良く知っている.だから僕らが知っている意味と違う動きをするものは間違えだと思ってしまう.ここで,このプログラムで数字の代わりに,ハートや三角といった記号を部品として,まったく同じものを作ったとしたらどうなるだろう.

ハートと三角が重なると台形になる.
台形と丸が重なるとダイヤになる.

こんな感じで.そのとき,上記のバグだと思っていた「3と4が重なると5と1になる」を図形に置き換えたものは,間違えに気づくだろうか.図形の価値の高い低いという順序関係はなんとなくわかるかもしれないが,数という,我々が知っている厳密な意味が直接わからなくなるため,3と4が重なると,5と1になっても,まあ価値の高い図形に変化しているから,あまり不思議にならない.

世の中のプログラムにおけるバグというのはそんなものなのである.見方を変えれば,バグではない.人間が勝手にいいような解釈をして,しかしそう動かなかっただけで,バグだなんてコンピュータ様に失礼だ.コンピュータは常に言われたとおりに動くだけ.だからビスケットにはバグはないと言ってもいいのである.


さて,一連の2つのブログ記事であるが.僕がなぜSqueakやScratchがいやでビスケットを作ったのか,理解していただけたであろうか.ここで説明したような,コンピュータの根本的な仕組みを,非常に少ない知識で直感的に理解してもらいたい.そのためには,コンピュータを最小限の機能に限定する必要があったのである.最初から,あるレイヤーのプログラミングに限定して,それをインタフェース的にやさしくすればよい,という考えとは根本から違うのである.

コンピュータを利用した研究の使い方の一つに,研究対象が理解できたかどうかをコンピュータでシミュレートしてみて,実物と同じような動きをするかどうかで判定する,というものがある.たとえば人工知能では,人間の知能が理解できたということはどういうことかを,人間と同じ知的行動がとれるコンピュータのプログラムが作れるかどうかで確認するという方法がとられた.対象を理解できなければプログラムは作れない.実行規則を与えると,コンピュータは黙々とそれにしたがって動き続ける.コンピュータの非常にすぐれた能力である.

覚えたことは他人に教えることができて,初めてちゃんと理解できたことが確認できるが,コンピュータほど正直で教え方の優劣がはっきりと現れる生徒はない.コンピュータに教えてみよう.自分の理解が正しかったか,何が足りないのかすぐにわかる.

デジタル教材の筆頭はプログラミングであると断言したい.教えたい側が狙って味付け良く作った教材でも,馬車馬のようにして無理やり脳に入れさせるドリル問題でもない.それらは,コンピュータの本当の能力を全然活用していない.プログラミングで,自らの理解を確認する.どんな科目にも使えるだろう.基本的な能力なのである.

ビスケットに算数を教える(1)

2011-06-09 23:53:03 | 1
ビスケットで教えるではない,「に」である.


まずは,最強集団みどりっ子のAちゃんの作品.


左右の矢印で砲を動かし,1ボタンで弾がでる.当たると1点か3点の得点になる.重要なのはこの得点の絵が消えずにずっと残っているところ.残っているんだったら,たとえば1点と1点が重なると2点になるという計算するメガネを作ってもいい.

というわけで,この作品に触発されて僕が作ったルーレット


1ボタンでミサイルが出て,ルーレットに当たる場所によって点数が出る.出た点数が二つ重なると,その点数が合計されたものになる.たとえば1点と1点が重なると2点になるし,-1点が当たると減る.最終的に10点が作られると終わりである.数字は全部部品にしてあるわけでなく,-1,0,1,2,3,4,5と10を用意してある.

最初に,基本的なメガネだけを作った.1を足すのと,1を引くの.

1と1が重なると2になる.
1と2が重なると3になる.
1と3が重なると4になる.
1と4が重なると5になる.
-1と5が重なると4になる.
-1と4が重なると3になる.
-1と3が重なると2になる.
-1と2が重なると1になる.
-1と1が重なると0になる.
0は消える.
それから
5と5が重なると10になる.

一応,これだけでも動くはずだが,実際にやってみると,画面は2や3だらけになって,なかなか5が誕生しない.そこで,2や3の足し算も教えることにした.

2と3が重なると5になる.

答えが6,7,8,9になる計算もあるが,それは二つの部品で作ることにする.たとえば,
4と4が重なると5と3になる.
である.とにかく5ができないことには.5が二つできてやっと10ができる.

もちろん,ただできるだけじゃダメで,それらの数字が画面を動いていて,ぶつかったときにだけ反応するので,見てて楽しい.

めがねを見やすく並べなおしたのはこちら

(画面を縦長にすると,下の方のメガネが見える.数字が重なるのも見難いので,ずらして置いてある.なので数は重ならなくても,近づくだけで足される)

さて,ここで僕は何をやったことになるのだろうか.ビスケットに算数を教えたと言えないか.

ほとんどのコンピュータ,プログラミング言語には,最初から加算の方法は入っている.だからそれをわざわざ教える必要はない.しかし,もともとコンピュータというのはシリコンチップの上の電子の流れが沢山集まっているだけで,そいつらが加算を知っているわけではない.いろんな階層があるなかで,どこかで誰かが加算の方法を教えたからできるようになっているだけだ.

僕が普段から,口をすっぱくして言っていること.「コンピュータは便利な道具だからすごいんじゃなくて,何でも作れるからすごいんだ」というやつ.コンピュータの便利さ第一号が正確な計算だったわけだけど,ビスケットではその便利な計算がわざとできなくしてある.それは,何でも作れるということを直感で知るためのツールだから.足し算を作る楽しさを奪っちゃダメなんだ.そして,こうやって足し算は簡単にコンピュータに教えることができるのでした.

さて,算数の問題に戻ろう.6,7,8,9という数字が無かったために,ちょっと苦労した.じゃあ,これらの数字も加えてしまえばいいのだろうか.そうすると,メガネの数はもっと多く必要になる.数字の種類を増やせば増やすほど,それらの組み合わせのケースを考えなければならないため,2乗で増える.

僕が用意した,1,2,3,4,5,10という数はあんまり効率は良くなかった(沢山のメガネを必要としていた).では,逆にどういう数字を用意しておけば,もっと少ないメガネにできるだろうか.コンピュータの専門家ならすぐにわかることだが.すぐに教えたらもったいないので,次のブログに書く.