ビスケットは変わっているプログラミング言語ですから,ビスケットでどういうプログラムが作れるのかというのはまだ完全にはわかっていません.発明されてから12年で,中身も全然進化していないのに,最近になっても,これまで思いつかなかったプログラムが見つかったりします.
これはビスケットによるソートのプログラムです.
ソートというのは,数の小さい順に並べ替えるというもので,例えばWebの画面で表が出てきたとき,項目の横に三角が表示されていてそれを押すと,金額の安い順とか,駅に近い順に表を並べ替えてくれる,その中で動いている仕掛けです.
ここでは,1から4までの数字を小さい順に並べ替えています.右の方が数が大きくなります.ビスケットは数を知りませんからまずは1から4までの絵を書きます.数字じゃなくてもよくて,何か順番がついているものならどんな絵でも構いません.たとえば,ネズミ,ネコ,ライオン,ゾウという強いもの順(大きいもの順)というのでもよいです.ただしジャンケンのように強さが1周してしまうものはダメです.なので,ゾウはネズミに弱いという童話的なルールは無しです.
ここでのメガネは非常に面白いのですが,「間違っている場合を直す」という方針で作られています.一番上のメガネは,2の右に1があれば,1と2を入れ替える.となっています.残りもメガネも全て,間違った置き方をしていたら,絵を入れ替えてます.
たったこれだけですが,動きはこのようになります.
動画
説明らしい説明もないのですが,ビスケットは絵の並びの中から,間違った並びを見つけては,その順序を入れ替える,ということをひたすら続けてます.どこから入れ替わるかはビスケットがどのように動いているかで決まるのでわかりません.
さて,これはプログラムと呼んでよいのでしょうか.何か普通のプログラムと違いますよね.ソートというといろんなアルゴリズムがあって,そのアルゴリズムを表現したのがプログラムで,というのが普通に習うのかもしれませんが,アルゴリズムっぽいものはまったくありません.でも,ビスケットはちゃんと数を並べ替えてくれてます.
これって,プログラムの仕様を書いてあるだけですよね.数の大小の定義と言ってもいいです.仕様を書いたらそのまま動いてしまったということです.
実はここに,プログラミング言語の未来というか,僕がプログラミング言語の研究を始めた20数年前に見ていた研究者の夢「未来のプログラミング言語」がチラッと見えています.
当時の夢というのは,こういうものです.
もう,アルゴリズムのようなプログラムを人間が記述するのは止めよう.人間は,コンピュータにどう動いて欲しいかを考えるのではなくて,コンピュータに何をやって欲しいかだけを考えよう.動き方はコンピュータが勝手に考えてくれる.未来のプログラミング言語は,何をやって欲しいかを伝えれば動いてくれるようなものになるだろう.
そういう未来のプログラミング言語を作るのが僕らの夢だったわけですが,世の中のプログラミング言語の進化というのは,あまりそっちの方には進まなくて,人間が巨大なプログラムをエラーが少なく書きやすくなる,という方向になってしまいましたね.それでも,少しずつですが進化してきていると思いますよ.たとえば,江木君の Egison がとても嬉しい発明です.
ちなみに,専門的な話をすると,ビスケットの動作は,配列の隣り合った数を比較して入れ替える,というのをランダムに全部の要素で実行しているだけですから,見方によってはとても仕様を書いて実行しているとは言えません.これらのメガネから自動的にクイックソートを誕生させれば嬉しいですが,そこまですごい話ではないです.つまり,仕様を記述してバカな効率でよければ動かすのはなんとかなる.すごい効率にはならない.そんなレベルです.
進化は遅いとは言え,さすがに今の子供達が大人になる頃には,この夢は叶っているんじゃないのかとは思うのです.
今のプログラミング教育のブームとか,中学の技術でやっているプログラミングとか,「どう動かす」を訓練することにフォーカスが当たっていますが,それは実に古い「プログラミング言語観」に囚われていると言えます.
「どう動かす」というスキルは,すごいプロフェッショナルであれば生き残ると思いますが,ほとんどはコンピュータに置き換わってしまうのではないでしょうか.並みのプログラマーは不要になってしまう.だって,未来には仕様を入れれば動いてしまうプログラム言語ができるんですよ.
しかし「何をやって欲しい」の部分はコンピュータには置き換えられない.そういう人を育てるべきではないでしょうか.
これはビスケットによるソートのプログラムです.
ソートというのは,数の小さい順に並べ替えるというもので,例えばWebの画面で表が出てきたとき,項目の横に三角が表示されていてそれを押すと,金額の安い順とか,駅に近い順に表を並べ替えてくれる,その中で動いている仕掛けです.
ここでは,1から4までの数字を小さい順に並べ替えています.右の方が数が大きくなります.ビスケットは数を知りませんからまずは1から4までの絵を書きます.数字じゃなくてもよくて,何か順番がついているものならどんな絵でも構いません.たとえば,ネズミ,ネコ,ライオン,ゾウという強いもの順(大きいもの順)というのでもよいです.ただしジャンケンのように強さが1周してしまうものはダメです.なので,ゾウはネズミに弱いという童話的なルールは無しです.
ここでのメガネは非常に面白いのですが,「間違っている場合を直す」という方針で作られています.一番上のメガネは,2の右に1があれば,1と2を入れ替える.となっています.残りもメガネも全て,間違った置き方をしていたら,絵を入れ替えてます.
たったこれだけですが,動きはこのようになります.
動画
説明らしい説明もないのですが,ビスケットは絵の並びの中から,間違った並びを見つけては,その順序を入れ替える,ということをひたすら続けてます.どこから入れ替わるかはビスケットがどのように動いているかで決まるのでわかりません.
さて,これはプログラムと呼んでよいのでしょうか.何か普通のプログラムと違いますよね.ソートというといろんなアルゴリズムがあって,そのアルゴリズムを表現したのがプログラムで,というのが普通に習うのかもしれませんが,アルゴリズムっぽいものはまったくありません.でも,ビスケットはちゃんと数を並べ替えてくれてます.
これって,プログラムの仕様を書いてあるだけですよね.数の大小の定義と言ってもいいです.仕様を書いたらそのまま動いてしまったということです.
実はここに,プログラミング言語の未来というか,僕がプログラミング言語の研究を始めた20数年前に見ていた研究者の夢「未来のプログラミング言語」がチラッと見えています.
当時の夢というのは,こういうものです.
もう,アルゴリズムのようなプログラムを人間が記述するのは止めよう.人間は,コンピュータにどう動いて欲しいかを考えるのではなくて,コンピュータに何をやって欲しいかだけを考えよう.動き方はコンピュータが勝手に考えてくれる.未来のプログラミング言語は,何をやって欲しいかを伝えれば動いてくれるようなものになるだろう.
そういう未来のプログラミング言語を作るのが僕らの夢だったわけですが,世の中のプログラミング言語の進化というのは,あまりそっちの方には進まなくて,人間が巨大なプログラムをエラーが少なく書きやすくなる,という方向になってしまいましたね.それでも,少しずつですが進化してきていると思いますよ.たとえば,江木君の Egison がとても嬉しい発明です.
ちなみに,専門的な話をすると,ビスケットの動作は,配列の隣り合った数を比較して入れ替える,というのをランダムに全部の要素で実行しているだけですから,見方によってはとても仕様を書いて実行しているとは言えません.これらのメガネから自動的にクイックソートを誕生させれば嬉しいですが,そこまですごい話ではないです.つまり,仕様を記述してバカな効率でよければ動かすのはなんとかなる.すごい効率にはならない.そんなレベルです.
進化は遅いとは言え,さすがに今の子供達が大人になる頃には,この夢は叶っているんじゃないのかとは思うのです.
今のプログラミング教育のブームとか,中学の技術でやっているプログラミングとか,「どう動かす」を訓練することにフォーカスが当たっていますが,それは実に古い「プログラミング言語観」に囚われていると言えます.
「どう動かす」というスキルは,すごいプロフェッショナルであれば生き残ると思いますが,ほとんどはコンピュータに置き換わってしまうのではないでしょうか.並みのプログラマーは不要になってしまう.だって,未来には仕様を入れれば動いてしまうプログラム言語ができるんですよ.
しかし「何をやって欲しい」の部分はコンピュータには置き換えられない.そういう人を育てるべきではないでしょうか.
※コメント投稿者のブログIDはブログ作成者のみに通知されます