ビスケットファシリテータ講習の一つの目玉が僕の講義である「ビスケットによるコンピュータサイエンス入門」です.毎回少しずつバージョンアップして内容もこなれてきました.
神谷さんの記事でも少し紹介されてますし,今月中にはこの解説スライドをダウンロードできるようにしますが.総務省事業でやった5つの授業で毎回最後につけていたコンピュータの解説が小学生に対するコンピュータサイエンス入門です.
間違ったメガネで魚が下に沈むように作ったとします.これは人間ならみんな間違えだと気づくけれど,コンピュータにとってはプログラムの間違えはわからない,とか.一回作ったプログラムは何度でも使われるよとか.風邪の感染からものと情報の違いについて話したり.尺取り虫を頭としっぽをそろえてうごかして,人間だからちゃんと動いて見えるんだとか.綺麗な模様をつくらせて,コンピュータは正確に繰り返すから綺麗なんだとか.複雑なゲームを作った時,一つ一つのメガネは単純だけど組み合わせるから複雑な動きができるんだ,最初からコンピュータに複雑な動きが入っている訳ではない.という感じです.
で,ファシリテータ講習でやっているのはその次,中学生以上に対するコンピュータサイエンス入門という位置付けになります.これから受講される方のネタバレにならない程度に.
じゃんけんのシミュレーションを作ってもらって,意外な動きをさせたあとシミュレーションのすごさを実感してもらいます.この種明かしは,人間というのは先入観で判断を誤るけれど,シミュレーションでその先入観を修正できるんだという話.コンピュータは脳の拡張と言われる理由ですね.
ビスケットで二進法のプログラムから二進法電卓をつくります.同じやり方で十進法電卓を作ってみます.なぜコンピュータが二進法で動いているかというと,十進法よりもずっと簡単な計算だからです.簡単というのは回路が少なくて済んで,コストもやすくなるということでもあります.
コンピュータは単純な命令しか実行できなくて,その単純な命令を組み合わせるから複雑なことができるんだというのは説明しましたが,では一体どれくらい単純な命令しかないのかを身をもって体験してもらいます.トランプを使った数の並べ替えを二人ひと組でやってもらいます.人間がやるとあっという間に並べ替えられるトランプですがコンピュータがやるとなるととても大変なんですよ.
で,宴会芸として僕がトランプでクイックソートをやってみせます.さっきは5枚のカードで苦戦していたのに,13枚でも楽々とやれる方法です.
この後ビスケットで再帰的な木を描くプログラムを作ります.再帰という実に不思議な繰り返し方を体験してもらいます.そして,さっきのクイックソートとの関係性について解説をして,プログラミングが順次.条件分岐,繰り返し,だけじゃないんだという話をします.
朝,会場にきたときにワミーで遊んでもらっているんですが,その種明かしをします.僕がある説明をしてある形を作ってもらうのですが,同じ形を作ってもらうための説明には2通りの方法があるんだという話.ひとつは,ワミーを買うとついてくる作り方マニュアルのように手順で説明する方法.もう一つは規則を提示してその規則に従って組み立てているといつか形ができているという方法.出来上がりの形に対称性があるほど,規則が少なくて済みます.対称性がないと手順の方が楽です.この2つの説明の仕方の違いが,手続き型言語と宣言型言語の違い.別の言い方をすると手順で示すのか規則で示すのかということ.手順は料理とかで,規則は交通ルールとかです.でプログラミングが手順ばかり言われているので,規則によるプログラミングというのも結構いいという話をします.
規則型のプログラミングで面白い例として,つるかめ算をビスケットに解かせるというのをやります.その流れで,数の計算だけじゃなくて記号の計算というのも結構重要なんですよという話をします.
もう一つ面白い例として,テトリスを作ってもらいます.といっても全部作るだけの時間はないので,一つのブロックが生成されて下に落ちるところまで.どんどん積まれていくのがわかります.時間があるときはブロックが左右に動くとか回転するというのもつくります.最終的に80個くらいのメガネがあれば全部できるというところまで見積もって終わり.
ビスケットで作るテトリスで面白いのは「情報でものを作る」ということです.空白を示す絵が必要になるのですが,ものの世界ではものが有るか無いかは当たり前のことですが,情報の世界では当たり前じゃ無いので,ものがないというのも情報として示さなければならないということ.で,できたメガネをよく見ると左右で空白の数とブロックの数が必ず同じなんです.これはつまり質量保存則を守るように規則が作られているということです.ここがなんとも感慨深い.変な動きをしたときはこの点に注意してバグを探します.
テトリスがとてもよくできたゲームなのは,コンピュータからみると結構複雑な規則が必要なのに,人間からみると人間が得意なモノの世界のルールに従っているので,たとえばこの隙間にはこの形を回転させればピタッと入る,といったことが一瞬で判断できるからです.
最後に,ここまでコンピュータは単純な命令を組み合わせるからすごいことができて,組み合わせも100万個くらい必要なわけだけれど,どうやって人間が間違えないでそんなプログラムが作れるようになるのか,という秘密を話します.答えはプログラミング言語の発明ということなんですが,ビスケットの上で簡単なプログラミング言語を作ってもらいます.新しい言語ができると,今までの遊び方とはちがった遊びにモードが変わります.いままではメガネを作るのがビスケットの遊びだったのに,ビスケットでプログラミング言語をつくると,メガネを作ってしまってから(プログラミング言語ができた)が本番の遊びで,ステージにどうやって絵を並べるか(その新しいプログラミング言語の上でプログラムを作る)というのに変わっていく.
ビスケットはアクションスクリプトで作られているけれど,アクションスクリプトも違う言語で作られていて.そういうプログラミング言語の階層があって,一番下に機械語がある.コンピュータが速くなったことで,プログラミング言語の階層が高くなって,より人間に使いやすくなってきたんだ.ということです.
僕は今のコンピュータを支える2大発明の一つは半導体の集積回路の技術だとすると,もう一つがこのプログラミング言語の階層なんじゃないかと思っています.そういう話ですね.
また,テトリスの話にもどって,普通の言語で作ったテトリスのプログラムを見せます.ビスケットのテトリスと何が違うのかという話ですね.普通の言語でテトリスを作るには,変数を知ってて,二次元配列を知ってて,さらに線形代数もちょっと知らないといけない.そういう登らなきゃ無い段差がいくつかある.ビスケットだと,段差は無いけど,メガネの数が膨大なのでダラダラと作る必要がある.普通の言語だとプログラムは任意の形のブロックで動くように汎用に作られているのでブロックの形を追加するのは簡単だけれど,ビスケットの場合はその都度メガネを20個くらい追加しなきゃない.難しい概念を知らなくてもダラダラやれば作れるというのは素晴らしいことなんじゃないか.これは階段に対するバリアフリーのスロープのようなものと捉えると,プログラミングもこっちの方向もあるんじゃないか.こんなようなプログラミングの未来の話をします.
どうですか?これを2時間半でガーッとやるんですが.結構深い話だと思いませんか?僕が考えているコンピュータサイエンスはこういったものです.前半の部分はコンピュータの専門家なら誰もが知っていることですが,それを知らない人に説明するとなるとどう言葉にすればよいかわかりませんよね.この講習が現役のSEの方にも納得していただけるのはこういった面もあるからなのです.