Hatena::ブログ(Diary)

shi3zの長文日記 RSSフィード Twitter

2013-01-26

MITのミッチェル・レズニック教授が来日! そして小学生ハッカーに会った 18:24

 ミッチェル・レズニック教授は、MITメディアラボの重鎮で、子供用のプログラミング言語Scratchを開発したり、LEGOマインドストームを開発したりと、僕の好きなアイテムを常に作ってる人だ。シーモア・パパート氏の直弟子でもある。


 そのレズニック先生が、日本の子供達に楽しく優しく、Scratch 2.0を教えにやって来た。

 ということで、ちびっ子はもちろん、コンピュータ好きの人々まで三鷹の小学校に大集合。

https://fbcdn-sphotos-d-a.akamaihd.net/hphotos-ak-snc6/734985_10152109810165752_1076870260_n.jpg

 Scratch2.0では、スプライトを増殖させる「クローン」タイルや、ビデオカメラからの入力を認識して反応させるタイルが導入されたり、自分自身のカスタマイズタイルを作れるようになっていた。


 いやー、しかし、こりゃーなかなか凄いぞ。

 驚いたのは子供達で、「こんなことができるようになったよ」と言うと「エーーッ!スゴイ!早くやりたい!」と素直に反応する。


 彼らはScratchを一年くらいはやっていて、一通りのことはできるらしい。そこで新機能を見る度に「すごーい!僕もやりたい」となるわけだ。これは凄いね。素直に。


https://fbcdn-sphotos-c-a.akamaihd.net/hphotos-ak-snc7/482973_10152109810470752_1138604216_n.jpg


 そして「さあ、みんなもやってみよう!」と阿部さんが言うと、パーーッとそれぞれのPCに駆け寄って、夢中になってプログラミングしてる。凄いなあこの光景。なんかウルっとくるもの感じちゃうよ。


 しかしScratchが2.0になるまでクローン機能がなかったというのは意外だった。

 それってどういうことなんだろう?なにしろScratchの歴史は古い。そんな基本的な機能を入れてなかったということは、それなりの理由があるはずだ。


 阿部さんに聞いてみると、それは「キープシンプル」という考え方がScratchの根底にあったからだという。


 なるべく複雑なことはさせない。

 そのためにはインスタンスを動的に増やすような仕掛けは不要、というわけなのだ。

 凄く潔い割り切りだけど、これだとシューティングゲームとか作れないじゃん、と僕は思った。


 ところが


 「いやー、実はできる子はオセロとかシューティングゲームとか作ったりしてるんですよ」



 と阿部さんはニヤリ。

 えー!?配列も一次元配列しかないのにどうやってオセロを?

https://fbcdn-sphotos-e-a.akamaihd.net/hphotos-ak-prn1/555327_10152109810530752_1816954302_n.jpg

 

 すると驚愕。なんと8×8、計64個のスプライトを配置して、マスごとに別のプログラムを書いてる。

 やろうと思ったらどんな方法でもやっちまうのがイマドキの少年らしい。

https://fbcdn-sphotos-a-a.akamaihd.net/hphotos-ak-ash4/421601_10152109810555752_264129989_n.jpg


 同じ感じで、シューティングを作ったというので見せてもらうと、なんとタイトルが「ゼビウス」!!!タイトル画面見てよ。すごい完成度だから。


 すげー。なんていうか。21世紀の小学生がゼビウス作ってるというのが衝撃的。

 画面を見ると

https://fbcdn-sphotos-g-a.akamaihd.net/hphotos-ak-ash4/385219_10152109810535752_1144000513_n.jpg


 背景がスクロールしたりはしないが、ちゃんと空中物と地上物の撃ち分けができていた。

 ちなみにこれも、弾を連射するぶんだけスプライトを予め作ってあって、それを使い回しているのだと言う。


 これは本当に「教育用」として適してるのか?もっと効果的なプログラミング手法を学べるようにした方が良いのではないか?


 と訝ると、実は上級者の子はenchant.jsに挑戦しているのだという。


 「でも難しいらしいです。カッコが」


 なるほどなあ。やはりキータイピングがネックになるのか。

 確かに僕もBASICからCに行ったときにカッコの対応を確認するのをしばしば忘れていた。


 現在enchant.jsに挑戦中のmasaishiくんは、実はScratchの隠し機能を見つけてしまったのだと言う。


https://fbcdn-sphotos-b-a.akamaihd.net/hphotos-ak-prn1/36498_10152109810430752_1210501023_n.jpg


 「Scratchのロゴの、rの穴の部分をシフトキーを押しながらクリックするとSmalltalkモードに行くんですよ」


 なんじゃそりゃ。裏技すぎるだろ。

 それだけじゃない。masaishiくんは誰の助けも借りず、勝手にSmalltalkでScratchの内部構造を把握し、どんどんハックして「Masa Scratch」という別バージョンを作り上げていた!ハッカー過ぎる。

https://fbcdn-sphotos-f-a.akamaihd.net/hphotos-ak-prn1/150909_10152109810605752_227256819_n.jpg

 Masa Scratchには、例えばメッシュという、通信ゲームを作るための機能が追加されていたり、「ジャンプ」という、もともとは入っていないビヘイビアタイルが追加されていたり、Webページへジャンプできたりする。


 特にこの「ジャンプ」タイルは、放物線運動まで再現したもので、Scratchを学ぶちびっ子たちの羨望の的らしいのだ。


https://fbcdn-sphotos-h-a.akamaihd.net/hphotos-ak-ash3/533722_10152109810650752_439015272_n.jpg


 Smalltalkの凄いところは、どんなプログラムも稼働中に内部を覗き、その場で変更することが出来るようになっているということだ。ちょっとJavaScriptに似てる。

 ただし、ソースのないコードは逆コンパイルされているので、変数名などは消えてしまって、t1、t2などのように意味のない連番が割り当てられる。


 ところが逆コンパイルでSmalltalkを知ったmasaishiくんは、この命名法こそがネイティブなのだ。

 だから彼は、変数名を平気でt1、t2のようにしてしまう。Smalltalkではひとつひとつのメソッドは短めに書かれていることが多いのでt1、t2でも充分意味を読み取れるようだ。


 それでもう、どんどん、Scratchという環境そのものを改造していく。Smalltalkの可能性は計り知れない。

 このさまをアラン・ケイが見たら、腰を抜かすのではないか。


 少なくとも「ニヤリ」くらいはするんじゃないかと思う。

 阿部さんのことだからとっくに報告済みなのだと思うけれども。

 僕がアラン・ケイに会えたのも、もともとは阿部さんが彼にenchantMOONを紹介してくださったからだ。

https://fbcdn-sphotos-f-a.akamaihd.net/hphotos-ak-prn1/544036_10152109810170752_1012183492_n.jpg 


 会場の都合などで月に一回程度の開催らしいけど、こういうイベントこそゲンロンカフェ(http://d.hatena.ne.jp/shi3z/20130126/1359149837)でもやっていけたらいいな。親子で学ぶプログラミング講座、とか、そんな感じの。


 今日はちょっとカルチャーショックを受けた感じだった。

 毎月やっているらしいのでまた行きたい