結城浩
2004年7月4日
食卓で仕事をしていると、長男が話しかけてくる。
長男「ねえ、お父さん。お父さんはどんな言語を使っているの?」
私「そうだね、主に使っているのはC, Java, それにPerlかな。」
長男「どんな風に違うの?」
私「世界で一番使われているプログラミング言語はC言語だと思う。動作が速い。けれどもデバッグは難しい。」
長男「ふうん。どうして。」
私「一番大きいのはメモリの管理だろうね。メモリを使う。使い終わったら「もう使いません」と言わなければならない。メモリの解放だ。これを忘れるとバグになる。」
長男「ふむ。」
私「Javaは最近生まれた言語だ。動作はCよりは遅い。でもデバッグはずっと楽だ。」
長男「どうして?」
私「Javaは使わなくなったメモリを自動的に解放してくれるからだ。」
長男「なるほど。」
私「iアプリって聞いたことあるかな。それからアプレットとか。それらはJavaで書かれている。」
長男「ふうん。Perlは?」
私「Perlも使わなくなったメモリを自動的に解放してくれる。とても使いやすい言語だ。でもちょっと癖があるので、使いにくいと感じる人もいる。」
長男「ねえ、いろんな言語を混ぜて使うことってできるのかな。」
私「それはとてもよい質問だ。難しいときもあるけれど、技術的にはできる。」
長男「前半部分をCで書いて、後半部分をJavaで書くとか?」
私「普通はそういう風にはしない。全体はJavaで書いておいて、スピードを必要とするところだけCで書いたりする。」
長男「どうして?」
私「そうすることで、両方の言語のメリットを生かすことができるからだ。スピードを必要とするところをCで書けば、高速になる。一方、スピードを必要としないところをJavaで書けばデバッグが楽になる。」
長男「なるほどね。ねえ、お父さんのWikiって何で書いているの?」
私「Perlだよ。」
長男「だいたい何行ぐらい?」
私「ちょっと待って。この間あなたに見せたのは大体1300行くらいかな。でも、機能がずっと少なくてよいなら、200行もあれば書ける。」
長男「ゲームをするときって、あまり考えないでプレイするよね。」
私「考えない、っていうのは?」
長男「だから、このプログラムはいったい何行ぐらいで書かれているかな、なんて考えないよね。」
私「そうだね。」
長男「意外なところに行数がかかっているんだろうね。スライムがちょっと動くだけでも大変なんでしょう?」
私「そうだね。そこは考えどころだ。すべてのキャラクタの動きを全部別々にプログラミングしていると、たいへんなことになる。」
長男「うん。」
私「だから、共通部分を見つけ出すんだ。スライムが進む。ロボットが進む。人間が進む。魔法使いが進む。それらは全部「進む」という点は共通だ。でも動き方が少しずつ違う。スライムはどろっと進む。ロボットはカクカクっと進むかもしれない。」
長男「人間はすたすた。魔法使いはひきずるように?」
私「もしかしたら空を飛ぶかも。そのように「共通なところは何か」「違うところは何か」を考えてプログラミングする。共通なところは全部共通なプログラムにする。」
長男「ふうん。難しいもんだね。たいへんなんだ。」
私「そう。とても難しい。だからみんなお金を払ってゲームを買うんだ。」
長男「そうか。」
私「自分が表現したいものをどのようにプログラムとして書くか。それはとても難しい。でも、とてもおもしろいんだよ。」
長男「ふうん。」