THE長文日記

長文とか短文とかのクレームは一切受け付けません

プログラムはもっと簡単にできる

 今週末から品川女子学院でMOONBlockによるプログラミングの授業がスタートします。


 僕にとって画期的なのは、この授業は初めて、僕やUEIの他の社員が全く関わらない形で、品女の先生方だけで行われること。そしてその先生方が、そもそもプログラミングに関する知識を殆ど持っていないということです。


 プログラミングはここまで簡単になったのです。


 授業の中では、簡単なゲーム、少し複雑なシューティングゲーム、チャットなどの作り方を順番に解説していくそうです。

http://gyazo.com/f8ccd0e678edb114d92b28966e66f73b.png

 今日はゲンロンカフェで、東浩紀さんとひさしぶりにトークライブをやったんだけど、東さんが「感情移入する対象をもっと簡単に定義できないと子どもにはMOONBlockのプログラミングを理解するのが難しい」という鋭い知見を披露し、「お、それってすげーな」と素直に思ったわけです。


 東さんがいうには「まず、当たり判定が敵だろうが味方だろうが等価である、という前提を部外者は理解できない」という話をします。


 僕は「仕様書を書くようにブロックを並べるとプログラムができる」というものをMOONBlockと定義していたのですが、東さんはそれをさらに勧めて「物語の設定を記述するとゲームが完成する」ようにすべきだというのです。


 たとえばMOONBlockでシューティングゲームを作ろうとする場合、典型的には以下のようにブロックを並べます。

http://gyazo.com/1659ea3cbb9368eb1f151075b11bc417.png


 これはプログラミングという視点でみれば全く正しい定義です。

 MOONBlockは仕様書というか、クラス定義を書くとプログラムができあがる仕組みなのでこれはこれであってます。


 ところが東さんは、これを登場人物紹介のように書くべきだ、というのです。


 それはとても似ていますが、根本的に異なる思想です。


 前掲のプログラムでは、自機と敵機、弾は全て同列のオブジェクトとして扱い、当たり判定の細かな設定をすることで相互の関係性をハッキリさせています。


 しかしゲームにはそもそももともとの「文法」が存在するので、自機には「自機」というブロックなりタグなりでアノテーションをつければ、そこから自動的に「敵または敵の弾に当たると死ぬ」という性質が付与されるべきだというのです。

 同様に「敵」には「敵」というアノテーションを付けると、自動的にそれが敵として振る舞うようにすべきだと。


 正直この指摘は目からウロコでした。

 あまり過激にやると、自由度が奪われてしまうことになりますが、たしかにたかがシューティングゲームを作るのにここまで複雑なブロックを(それでもかなり簡単な方だとは思いますが)組ませる必要はありません。


 これはどういうことかというと、プログラミングはもっと簡単にできる、ということです。


 あまりおおっぴらに語ってはきませんでしたが、僕がenchantMOONやenchant.jsを一所懸命やろう、と思った原体験は小学生の頃にソフトバンクのOh!PCという雑誌に掲載されていた「ユーザーインターフェースの玉手箱」という連載でした。


 この連載は当時はまったく耳慣れなかった「ユーザーインターフェース」を中心的に扱いつつ、エキスパートシステムオブジェクト指向といった難解な話題をBASICのサンプルを交えながら楽しく解説してくれるものでした。


 そのなかで、オブジェクト指向によるゲームプログラミングという話が出てきて、これ、僕の記憶では80年代前半の記事ですから、相当先を行ってるというか、めちゃくちゃ最先端なんですけど、それをなんとBASICでオブジェクト指向インタープリターを作ってやってみよう、という過激な内容でした。


 そのとき僕はゲームの画面に登場する事物をオブジェクトと見立ててプログラミングするというパラダイムを初めて知ったのですが、その単純明快さに惚れてしまい、それ以来、オブジェクト指向に憧れて少年時代を過ごしたのでした。


 僕が実際にオブジェクト指向に触れることになるのは高校生まで待たなければならないのですが、そのパラダイム自体は僕がオブジェクト指向言語を手に入れるより前の段階で既にアセンブリ言語でのプログラミングなどにも応用していました。


 この連載、残念ながら本にもなってないし今となっては当時のOh!PCなんか探すのも大変なので非常に振り返るのが困難なのですが、本当にこの連載が僕は大好きで、夢にまで見るほどでした。


 「オブジェクト指向を使うとこんなに単純明快にプログラミングができるのか」という驚きは、JavaScriptという正真正銘オブジェクト指向言語を使って簡単にゲームプログラミングするための仕組みであるenchant.jsに惚れ込んだ最初の理由でもあります。



 MOONBlockも当然、そのような流れを組んで設計したのですがいかんせん、僕はまだまだ「プログラマー」の思考が抜けてなかったようです。


 東さんの指摘でまた「プログラミングを簡単にする」という僕のライフワークが新たな次元に引き上げられたような気がします。


 門外漢の人の指摘というのは大事です。

 しかも東さんの指摘はきちんと整理されているので僕も消化がしやすいのです。


 このような工夫を取り入れることで、もしかすると簡単なシューティングゲームを今の半分以下のブロックで実現できるようになるかもしれません。


 それって普通に考えて凄いことです。


 だってシューティングゲームのプログラミングって、昔は本一冊まるごと使って解説するようなものだったんですよ。


 それが一画面に収まるように説明できる。

 技術の進歩って恐ろしいです。



 今日のニコ生はまあ岡田斗司夫さん問題とかで最初は大きく脱線しつつも、最後は非常に濃厚で面白い内容になったのではないかと思います。


 やっぱ東さんすごいなあ