ビスケットのあれこれ

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

プログラミングは何を学んだことになるのか

2013-12-01 03:55:54 | 1
いろんな方々に「プログラミングは子供の頃から学んだ方がいいですよ」ということを説いているのですけども,いつも聞かれるのが「これをやったら何を学んだことになるの?」という質問です.

良くある答えは「プログラミングをやると論理的な思考が育ちます」なんだけれど,それはもちろん育つでしょうけど,それだけじゃないよね.

まったく説明を止めちゃって「これからは,読み書きプログラミングだ」というかけ声も良く聞きます.これもわかるやつにしかわからない,合い言葉みたいなもので.わからない人を説得する役目にはなっていません.同じように,「他の国ではやられているんですよ」的なのも,外国の物なら無条件でOKな思想を持った人以外は,説得できないです.日本は,海外では一切やっていないようなことでも,いまだにまだやっている国ですから,その作戦はダメなんです.

今日は,もう3年になるのかな.ビスケットをやらせて頂いている,児童館での活動を見学に行ってきました.やらせて頂いているというのは,向こうからぜひやってくれ,というよりは,こちらからぜひやらせてください,というお願いに対して,「よくわからんけど,信用するよ」っていう信頼関係だけです.館長は,PTAや先生に色々と宣伝をしてくださっているそうだけれども,なかなか伝わらないそうで.それで,今日,僕が行ったときに,館長から「プログラミングをやると何を学んだことになるのですか」という,もう直球の質問を頂いたわけです.

この質問に,きっちり答えられなければ,隅々には広がりません.僕が熱く語って「じゃあ信用するよ」というレベルではダメで,それを聞いた人がその人の言葉で他人に説明できなければいけません.

この質問がなぜ難しいのか,というのはずっと考えていて,原因の一つは,コンピュータが特異な発明だった,ということなんだろうと思ってます.

他の山のようにある発明は,何かの差分で説明できます.写真は絵画の差分,自動車は馬車の差分で説明すれば,なんとなくわかります.ところが,コンピュータには前身となる発明が無いのです.まったくこれまでにない新しいものなのです.

もう一つは,コンピュータのすごさが桁違いということです.自動車が馬車よりすごいと言ったって,100倍も速く走ったり,遠くに行けたりはしません.直感がついて行けるすごさというのはそんなレベルです.ところが,コンピュータのすごさで出てくる数字は億とか兆とか.もう,あまりにもすごくてなんだかわからないですよね.

つまり,「コンピュータは何か」を言葉で説明することは出来ない,ということです.あきらめてください.

ところが,近代文明というのは,言葉のおかげで発達できました.言葉による知識伝達というのは,先人の経験を言葉に短縮することで,先人の経験と同じ時間をかけずに先にすすめる,ということです.言葉が無ければ,毎回リセットされて,人生の長さだけしか進歩できません.この言葉による知識伝達があまりにも上手く行ったので,本当は言葉では伝達できない部分が捨てられてきました.それが職人の技だったりするわけですが.

コンピュータも言葉では説明できません.ある程度わかれば,その延長線は想像することができるので,言葉だけでもなんとかなるでしょう.だから,せめて入門の部分までは経験が必要です.

同じことは,料理や音楽にも言えると思います.全員が小学校でカレーライスくらいは調理すると思いますし,普通に生活してて,誰かが料理をしている様子は見ています.この人が一流シェフにならなくても,シェフへの道のりは大体想像できると思います.音楽も,全員がカスタネットやリコーダを演奏したことはあります.この延長線上にプロの音楽家の感動する曲がある,というのがわかります.

じゃあ,料理や音楽をやると何を学んだことになるのか,と聞かれてどう答えればいいのでしょうか.たぶん,どっちも論理的思考は身に付きますね.感性も豊かになる(これもいい加減な言葉ですが)でしょうし.他人を思いやる気持ちも育つと思います.当然,コミュニケーションもですね.それで,プログラミングもほぼ同じ,いろんな能力がつきます.

それに加えて,今日,参加してた小3の女の子が作ったゲームを見て,プログラミングならではの能力が確かにあるなと確信しました.

これは,まだ公開していないAndroidタブレット用のビスケットで作成したのですが,矢を飛ばしてハートに当てるというゲームです.

遊んでいる動画はこれです.
矢を長押しすると,前に進みます.うまくハートに当たればハートが大きくなります.3つのハートを大きくしてください.矢が爆弾に当たると失敗です.

実際に遊ぶには,これです.Flashが必要です.

メガネは

です.実に単純で,矢,ハート,爆弾それぞれが上に進むメガネ,矢を指で触ると前に進む,ハートに矢が当たったとき,爆弾に矢が当たったとき,という6つのメガネだけでできています.必要十分な数ですね.

このゲームのミソは,勝ちだけじゃなくて負けの要素を作っているというところです.しかも,そのバランスがちょうど良くて,矢を押している間だけ前に進む,という仕掛けで,色々と考えないと勝てないようになっており,格段に面白くなってます.僕が遊んでいる動画では,ハートは2つまでしか大きく出来ませんでしたが,慎重にやれば3つ全部ハートを大きくして,矢を生き残らせる大勝利ができるのでしょうね.

ゲームの作り方を教える際に,発射台から弾が出る,という題材を使うことはあります.この場合発射台を押した瞬間に弾が飛び出すので,弾を飛ばすタイミングだけのゲームになります.ところが,このゲームでは,指で押している間,矢が飛ぶとなっているため,コントロールの要素が複雑になり,パズル的な要素まで含まれるようになっています.指を離している間は,矢も上にすすむので,3種類の絵の動き方の速度の比が関係してこのパズルをいっそう難しくしています.ハートより爆弾の動きの方が速いのもにくいです.

このゲームの面白さを言葉で説明するとこんなに大変ですね.ゲームをやってみるとすぐにわかりますが.こんなことが,偶然にできたのかもしれませんが,自分で遊んでどういうバランスが良いのか試行錯誤した結果であることは違いないです.彼女は言葉でこのような説明はできないかもしれません.しかし,面白いゲームをつくるとはどういうことかを直感で理解していることは確かです.他の子はテクニックとしてすごいゲームはありましたが,同学年でちゃんと負けが入っているのは結構少ないです.バランスまでよいのは,かなり少ないです.僕がこうやってわざわざ取り上げて細かく解説するから,他の子のゲームとは違って見えますが,とりあげなければ,絵もそんなに凝ったものではないので,見過ごされるかもしれませんね.

ちなみに,この子は,小1のときからビスケットで遊んでくれて,先輩たちの作ったゲームで遊ぶことはありましたが,自分でゲームを作ったのは小3になってからですね.年に数回ずつやってます.

プログラミングができると,このように面白いゲームとは何か,という(言葉ではない)理解にも迫れました.たまたま,ゲームということで説明しましたけど,プログラミングの対象が違えば,そこには別の何かがあります.その応用範囲の広さが,プログラミングのすごいところです.それも知っている人だけが知っていることですよね.