レポート

PHPの生みの親,ラスマス・ラードフ氏インタビュー

この記事を読むのに必要な時間:およそ 15.5 分

Minecraftとプログラミング教育

―――― いえ,それはそれで興味深いです。次の質問よろしいですか。余暇はどんなふうに過ごしているのですか?

ラスマス:うーん,たいていは旅行ですね。それもほとんどはカンファレンスに出るためなんですが。家にいるときはもちろん,なるべく息子と一緒に過ごすようにしています。あとはとにかく読書して,遊んで,新しいテクノロジーの情報を集めています。

―――― 息子さんは今おいくつなんですか?

ラスマス:13です。ええと,13「歳」ですね。何か私が知っているものに興味を持ち始めたら,教えてやるようにしています。たとえば,息子はいまMinecraftに夢中です。今どきの13歳はみんなそうなんでしょうね。あるときMinecraftのプラグインの書き方を知りたがったので,まずJavaの概念から説明しました。本を一冊ひととおり一緒に読んでから,MinecraftプラグインをJavaで書くための解説書をあげましたよ。

―――― PHPじゃなくて?

ラスマス:MinecraftはJavaで書かれてるでしょう。

―――― ええ,ただ「PHPの父」が息子に教える言語としては意外だと思いまして。

ラスマス:いやいや,この場合,目的は子どもにプログラミング言語を教えることじゃないので。あくまで,子どもが興味をもった課題に自分で取り組めるようにするためですから。Minecraftのプラグインを自分で書いてみたいというなら,これを使ってこうやるんだよ,と教えるまでです。もし息子にいきなり「今日はJavaを勉強しよう」と言っていたら,3分で飽きられていたでしょう。でもあのときは,息子のほうからやってきて,Minecraftでこういうことをしたいからプラグインが書けるようになりたい,と言ったんです。私はこう答えました。よし分かった,ここに本がある,必要な知識は全部これに書いてある。これが全部分かるようになったら,プラグインが書けるぞ,と。

―――― 目的ありきですね。

ラスマス:まさしく。子どもに物を教えるときは目的ありきであるべきなんですよ。息子は今,学校のプロジェクトで遠足旅行のWebサイトを作っていて,ほんとはPHPを使ってはいけないらしいんですが,すこし教えてやりました。そのとき息子はやりたいことをどう実現するか,方法を探して悩んでいたんです。ここに表示する情報を,こっちから引っぱってくることができたら,全部のページにいちいち同じコードを書かなくていいのにな,と。それで私はPHPのコンセプトについてすこし話しました。あとは時間の問題です。次に息子が興味を持ったことにPHPがまた役立ちそうなら,そのときは喜んで教えるつもりです。

でも,あえてプログラミングをやれとは勧めないようにしてるんですよ。むしろ,外で遊んだりサッカーをしたり自転車に乗ったり,とにかく戸外で過ごすことを勧めています。あんまり私に似てるんでね。まあ2年も経たないうちに,四六時中コンピュータにかじりつくようになるでしょう。ただ,それまではすこしでも外に出て普通の人間らしい生活を体験させておいてやりたいんですよね。ギークの血は争えないとしても。いずれそうなるのは間違いないので,わざわざそそのかすまでもないんですよ。本当に,ギークになるために生まれてきたような子なので。

―――― 最近はコンピュータ教育のあり方について議論が起きていますよね。プログラミングを義務教育に取り入れるべきだという人もいますが,他にも様々な意見が出ています。ラスマスさんとしてはどう思いますか。プログラミングは義務教育化すべきでしょうか?

ラスマス:そう思います。

―――― 学校で教えるべきだと?

ラスマス:少なくとも概念ぐらいは。プログラミングとは,つきつめれば論理的に思考することです。その論理をどういう構文で記述するかはあまり重要ではない。外国語を習うようなもので,一つの言語しか知らないのでは不自由なだけです。3つか4つ覚えれば,概念を他の言語で言い直すのがぐっと簡単になってくる。いつもそうとは限りませんが,たいていは。たとえばうちの子は学校の授業でRacketを使っていますが,Racketは一種のLispです。それで関数型プログラミングをすこし覚えた。Pythonをかじっていた時期もありましたが,今はJavaです。もちろんMinecraftのためにね。あとMITが開発したScratchというビジュアル言語がありますが,あれにかけてはエキスパートです。6歳ぐらいから使ってましたからね,たいていのものは作れます。

まあ息子の場合はちょっと手を広げすぎかもしれませんが,学校でコンピュータをどこまで教えるかは,生徒それぞれにあわせて変えるべきだと思うんですよ。必修なのは基本概念だけにして,もうすこし詳しく知りたがる子が出てきたときだけ,何を勉強したらいいか教える感じで。こういうのは結局,自力で学ぶものなんです。少なくとも文法はね。もしコンピュータ数学講座みたいなことをやるとしたら,基本的にはアルゴリズムの授業になるでしょう。問題を解く方法ですが,どちらかといえばコンピュータ向けの。

コンピュータが問題を解くのに優れているのは,人間が同じことをやったらずっと時間がかかるからです。たとえばHadoopは非常に興味深い方法でジョブを処理しています。もし誰かがHadoopを使うとこんなことができるんだよ,とさわりを教えてくれたらきっと楽しいでしょう。機械学習のコンセプトもまた面白いものです。そういう高度なコンピュータサイエンスは,教える価値が大変高いと思うのです。もちろん,何かしらプログラミング言語を使った実践も必要ですが,どの言語を選ぶかは人それぞれでいい。PHPであるべきだとは思いません。むしろ,もっと高レベルなもののほうがいいんじゃないかな。PHPは非常に実用主義な言語なので,とりあえず目的を達成するために作られた抜け道がたくさんあるんです。概念やアルゴリズムを記述する手段としては,それは必ずしも良いことではありません。

―――― なるほど。では,たとえば大学生向けの教育と,子ども向けの教育ではどのように内容を変えたらいいと思いますか?

ラスマス:ああ,あくまで子ども向けの話のつもりでした。その場合,必要なのは子どもが興味を持ったときに機会を逃さないことです。ただ観察して,何に興味を抱いたか見て声をかけるんです。「君がやりたいのはこういうことかな。それならここにツールがある。言語はここ,ライブラリはここ,フレームワークはここ。必要なものはこのサイトで生成できる」とね。ただ机に座らせて講義するだけでプログラムを教えられるとは思いません。少なくとも小さい子にはね。

―――― あくまでも自発的に学ばせる必要があるわけですね。

ラスマス:そして関心をさらに発展させる必要もあります。うちの子は以前,レゴのマインドストームのロボットをプログラミングして遊んでいました。マインドストームの面白いところは,ビジュアル言語でプログラミングできるけれども,裏では産業用ロボットを動かしているのと同じエンジンを使っているんです。だから私の友人のロボットエンジニアとうちの息子がロボットコントローラの概念について話をしたら,ちゃんとお互いに話が通じるんですよ。

息子が見慣れたGUIの裏には,友人が見慣れたロボットコントローラがあるからです。その友人というのは40代の男で,長年ロボットコントローラを見てきています。だからマインドストームのGUIインターフェイスの裏で実際にどういうコードが動いているか分かるし,マインドストームは実際に産業用に使われている言語をうまく抽象化したものなんです。

限られた機能しかない独自言語を作らなかったという点で,レゴは非常に賢明だったと思います。彼らはただ,フル機能の言語に見映えがよくて使いやすいインターフェイスをかぶせただけなんです。制約があるといえばあるんですが,それにぶつからなくても非常に高度で複雑なことができる。子どもにとっては制約なんてないようなものです。

私が初めてプログラミングを覚えた頃とは大違いですね。コンピュータを手に入れて,電源を入れたら,点滅するカーソルが出てきて,おしまい。文字通り「ベーシックな」BASICインタープリターと,点滅するカーソルがあるだけ。まだWindowsなんてなかった頃です。ほんとに何にも入ってない。ゲームも当然ない。あるのはただ,画面の隅っこでただチカチカ,チカチカ点滅するだけの,得体の知れないカーソルだけです。だからいやおうなしにプログラミングを始めることになる。プログラミング以外にできることがないので。テープドライブでも持っていれば別ですが,あいにく家にはなかった。私が使っていたのはVIC-20でした。いや,その前にちっちゃなTimex Sinclairがあった。

―――― 「シンクレア 1000」?

画像

膝の負傷と初めてのコンピューター

ラスマス:そうです。それが初めてのコンピュータだったので,プログラミングのやり方を覚える以外にすることがありませんでした。それで雑誌に載っているコードをそのとおりに打ちこむ。でもテープドライブも何もないから,保存はできない。だからプログラムを走らせたければその都度入力するしかなかった。

―――― 大変だ。よくコードを打ち込み続ける気になれましたね。

ラスマス:あの点滅するカーソルに,俺をどうにかしてみろって言われてる気がしたので。そもそものきっかけは,サッカーをしていて膝を痛めたことでした。水が溜まっているか何かで,膝を牽引しないといけないと言われました。詳しいことは忘れましたが,とにかく片脚を吊ったまま3週間寝ていなければなりませんでした。

―――― 3週間も……。

ラスマス:やることもなく,ね。それで親が暇つぶしにと借りてきてくれたのが件のちっちゃなTimex Sinclairだったんです。あのカーソルがその場でひたすらチカチカ,チカチカ,チーカチカしてるのを眺めてたら,誰だってこいつをどうにかしてやるって気になりますよ。他にすることもなかったしね。それで,その点滅カーソルをどうしたら動かせるのか,試行錯誤し始めたんです。今にして思えば,それが出発点でした。

―――― 日本では当時,子どもがコンピュータに触れる最大の動機はゲームでした。

ラスマス:でしょうね。

―――― そう,ひたすらゲームやりたさで。

ラスマス:時代はずいぶん変わりました。今ではコンピュータを買うと,最初からなんでも入っていて,複雑すぎて子どもにはとても扱いきれない。しかし,当時のやつは,いったん使い方が分かれば,プロとまったく同じコードを書くことができた。とはいえ,命令セットはごく限られていて,メモリも1kしかなかった。たった1kでは,プロのプログラマーにどんなことができるのか分かるはずもありません。

―――― そうですね。

ラスマス:今どきのゲームの中には,エンジニア数百人がかりで3Dエンジンやらレンダリングやらを駆使して作ったものもあります。子どもにとって,プロが作るようなゲームはとうてい自分には作れないと思い知ることほど意欲を損なうものはありません。「これなら自分にもできるよ」と言えれば,おおいにやる気が出るのです。今では私にもゲームを書くなんてとても無理ですね,少なくとも市販品と比較できるようなレベルのものは。

10年前なら,Webで動くPHPがその代わりになったかもしれません。Webページのソースはいつだって見られますからね。今ではとてもシンプルとは言えないところまで進化してしまいましたが,10年前のWebはまだ見て分かる程度には単純だった。たとえば子どもがIBMのWebページを見て,これなら僕にもできるよ,と自分のWebページを作り,IBMのやつそっくりに動くようにして,友達に見せびらかすなんてこともできたでしょう。「これなら簡単だ,自分にもできる」と思える点で,PHPは子どもにとってBASICに代わるものになったかもしれません。とっつきやすくて,やろうと思えば自力でプロ並みに近いことができる。

JavaScriptは今では複雑になりすぎた。あまりにいろいろなものがありすぎて,12歳や13歳の子どもの手に負えるものではなくなってきています。今でもソースを見られるのはいいことですが,多くの機能が詰めこまれては陳腐化していってしまうので,JavaScriptというものが具体的に何をしているのか理解するのは難しい。

―――― リバースエンジニアリングでもしなくては分かりませんよね……。

ラスマス:ええ,非常に高機能になりすぎて,子どもが手を出せるものがどこにもなくなってきている。

―――― というと。

ラスマス:子どもが見て「これは面白い,僕にもできそうだ」と言えるものです。そういうものを我々は失いつつある。昔はそう,ゲームがその役割を果たしていました。昔のゲームには自分で作れそうだなと思えるものがいくつもありましたからね。コンピュータもまだ単純だったし。しかし,今では複雑になりすぎてしまった。Webも昔は見て真似できそうだと思えるぐらいに単純だった。それも複雑になりすぎてしまった。じゃあ今なら何がいいのか?

―――― Minecraftとか。

ラスマス:Minecraftも……まあそうですね。少なくとも取っかかりにはなる。うちの息子の場合みたいにね。しかし,Javaもときどき難しいところがありますからね。プラグインやら何やらを書こうとすると……。

―――― Sinclairに比べたらそうでしょう。

ラスマス:まあね(笑)しかし,そのうち息子がJVMをクラッシュさせて,「パパ,これはどうしてクラッシュするの」と聞きにくるときが来るでしょう。私の返事はきっとこうです。「うーん,すぐには分からないな。おまえが書いたコードには問題ないようだが,これでどうしてJVMがクラッシュするのかは調べてみないと」。まあ2日もあればJVMが機嫌を損ねた理由を突きとめられるでしょうが,大人でもすぐに分からない問題だと気づいた時点で息子はやる気をなくしてしまうでしょう。これは自分の手には負えそうもないというメッセージを受け取ってしまうからです。

だから今は,子どもの教育に使えるような「次の何か」が待望されているところだと思います。たとえば――バーチャルリアリティなんかはまだまだ始まったばかりの分野ですよね。もしかしたらそのへんに,子どもが自分の環境を簡単に作れるようなツールがあるかもしれない。あれでどんなことができるのか良く知らないので,断言はできませんが。

コメント

コメントの記入