ビスケットのあれこれ

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

プログラミング教育の先

2016-06-08 13:18:20 | 1
個人に対するプログラミング教育のモチベーションは,他人よりも人生において優位にたちたい・幸せになりたいということでしょうから,それはそれでどんな理由でもよいと思います.大事なことです.

それに対して,義務教育でのプログラミング教育の意味はまったく違ってます.義務教育のきちんとした定義はあるんでしょうが,僕が一番大事だと思っているのは,社会全体での共通理解を底上げする,ということです.ついでに,僕自身ずっと言っているのは,これは子供の教育だけの話ではないですよ.大人もちゃんと理解しておいてほしいことですよ,ということです.社会全体での共通理解の底上げが大事です.

たとえば,先日起きた人工衛星の「ひとみ」の事故の話です.

http://jbpress.ismedia.jp/articles/-/46999


この記事では,もはやものづくりそのものの考え方が古くなっているということが書かれています.この人工衛星の製作にあたった方々はみなさん理工系でコンピュータを普段から活用されていらっしゃるのでしょう.そんな方々でも,コンピュータのさらに専門的なことに関しては認識を誤ってしまうのです.彼ら自身が新しいコンピュータ(たとえば,100万台で一部が壊れても動くといった)に対する理解を深めなければいろいろと立ち行かなくなってきているのです.これは拡張すると,社会全体が古いコンピュータへの認識のままだと,日本の将来は本当にやばい.子供達の未来を考えるなんてこと自体が無意味になってしまうかもしれません.

いま,プログラミング教育というと,コンピュータを自分で動かす経験という点に重点を置いています.導入はそれでもいいですが,最終的に社会全体にどんな共通認識を持ってもらいたいか.これはいろんな意見があると思います.僕もその一部しか思いつきませんが,書いてみます.

1)分量が半端ないこと.

コンピュータが高速で,大容量ということは知識としては知っていますが,それが本当にどれくらいすごい高速で,どれくらい大容量かということを数字じゃなくて体で知ってほしい.数字だとゼロが10個増えただけで実感できません.僕は昔,自分のパソコンのメモリーが16kBだったのを32kBに拡張したとき,メモリーを順番に画面に流して見ててすごい時間がかかったのを今でも覚えています.たった32kBですよ.メモリーってすごい広いんだと思ってました.これが年々増えていて,いまはその時の100万倍ですよね.物としてあればある種の恐怖を感じられたりしますが,コンピュータは見えないので何も感じられらないのです.

2)脆弱なこと.

人間だと,同じ作業を繰り返された時途中で気づいて,なにか反応します.手順をまとめたり入れ替えたり,その作業をより効率よくする方法を考えたりします.人間はそういうメタ的な視点を持っているので,計算能力や記憶能力が貧弱でもすごいことができるのです.コンピュータは真逆で,言われた通りどんなことでも疑問を感じずに黙々とやります.それが利点でもありますが,アクシデントに全く対応できません.もちろんソフトウェアですからあらかじめ想定できるアクシデントがわかっていれば,そう動くように作れば動くのですが.未知のアクシデントには対応できません.そして本当に頭の悪い動きを繰り返して自分が壊れちゃうのです.

この1)と2)を合わせて「コンピュータはバカだけどすごい」ということになります.

こんなことは,専門家だけがやればよいではないし,知識として知っていれば良いのでもダメです.たとえば,横幅50cmの板の上をまっすぐ3m歩くというのを考えましょう.こんなの楽勝ですよね.ところが,この板が地上50mにあったらどうでしょうか.いまは無風なので,地面に板を置いたのと同じくらい安全に渡れます.でもこの板を渡れと言われて渡れますか?10万円あげるからと言われたらやる人がいるかもしれませんね.なぜ,この板の上を渡るのは怖いのでしょうか?それは高さに対する直感があって,落ちたら死ぬというのが,感覚としてしみ込んでいるからでしょう.遺伝子なのか経験なのか.これからのコンピュータとうまく付き合って行くのは,この「落ちたら死ぬ」的な感覚をコンピュータに対しても持たなければならないのだと思います.

3)情報の複製の怖さ.
ある情報を二つに複製するプログラムがあったとします.一度動かすと情報が二つになります.これをたくさんのコンピュータで動かした時,その情報は一気に広がります.ビスケットの「感染」のデモで説明していることですね.最初はゆっくり増えますが,途中からすごい勢いで増えてゆきます.このような指数関数的な現象は自然界にもあるのですが,人間にはその直感はありません.これがコンピュータウィルスの拡散の速さでもあるし,バズることの広がりの原理でもあります.

4)コンピュータの上にコンピュータを作れる
プログラミング言語を新しく作るというのは,コンピュータの上に新しい(ある種の理想の)コンピュータを作るということでもあります.たとえば,機械語とかC言語ではポインタが大活躍します.メモリーには数字による番地が付けられていて,メモリーに格納されているいろんな大きさのデータをその先頭の番地で代表して参照するという仕組みです.この素晴らしい仕組みのおかげで複雑なデータを扱うことができるようになりました.その番地によるメモリーとポインタというのはコンピュータハードウェアの動作そのものですから動く効率はすごく高いのですが,一方でプログラムの上でのミスもやまのようにありました.それに対して,LISPからスタートした言語ではメモリーとポインタをプログラムから見えなくして,ポインタ操作の間違えの元が起きないようにしたわけですね.こんな感じで,よりよい「計算する機械」を作るためにプログラミング言語はどんどん進化してます.それは,理想のコンピュータとはなにか,ということを追求する行為でもあります.僕はこんな細かい話まで,社会全体での共通理解を求めてはいませんが,その大元の考えである「コンピュータの上にコンピュータを作れる」ということだけは知ってほしいと思っています.シリコンチップの発明がコンピュータをここまで凄くしてきた片方の理由だとすると,このコンピュータの上にコンピュータを作れる,別の言い方をするとプログラミング言語の階層,という発明が,膨大で複雑なプログラミングを可能にした理由です.たとえば「核分裂」というのをどれくらいの人が知っているかわかりませんが,それと同じくらい重要な考え方だと思います.

プログラミング教育の先というのは,こういったコンピュータを中心とした社会の原理を知識としてではなく,体験として,体で怖さと凄さを感じられるようにすべきということです.


最新の画像もっと見る

コメントを投稿