(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,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がいやでビスケットを作ったのか,理解していただけたであろうか.ここで説明したような,コンピュータの根本的な仕組みを,非常に少ない知識で直感的に理解してもらいたい.そのためには,コンピュータを最小限の機能に限定する必要があったのである.最初から,あるレイヤーのプログラミングに限定して,それをインタフェース的にやさしくすればよい,という考えとは根本から違うのである.
コンピュータを利用した研究の使い方の一つに,研究対象が理解できたかどうかをコンピュータでシミュレートしてみて,実物と同じような動きをするかどうかで判定する,というものがある.たとえば人工知能では,人間の知能が理解できたということはどういうことかを,人間と同じ知的行動がとれるコンピュータのプログラムが作れるかどうかで確認するという方法がとられた.対象を理解できなければプログラムは作れない.実行規則を与えると,コンピュータは黙々とそれにしたがって動き続ける.コンピュータの非常にすぐれた能力である.
覚えたことは他人に教えることができて,初めてちゃんと理解できたことが確認できるが,コンピュータほど正直で教え方の優劣がはっきりと現れる生徒はない.コンピュータに教えてみよう.自分の理解が正しかったか,何が足りないのかすぐにわかる.
デジタル教材の筆頭はプログラミングであると断言したい.教えたい側が狙って味付け良く作った教材でも,馬車馬のようにして無理やり脳に入れさせるドリル問題でもない.それらは,コンピュータの本当の能力を全然活用していない.プログラミングで,自らの理解を確認する.どんな科目にも使えるだろう.基本的な能力なのである.