MAGAZINEガジェット通信を≫@getnewsfeedさんをフォロー-なぜいま超絶技巧プログラミングなのか──遠藤さんの著書、『あなたの知らない超絶技巧プログラミングの世界』(技術評論社)は実用性を追求するだけでは出会えない、ちょっぴり不思議なプログラミングの世界で一緒に遊びに行きましょうというのがテーマです。この本を、なぜお書きになったのか聞かせてください。遠藤:単に面白いからとしか言いようがなくて。いろんなとこで公開やデモをしていたら技術評論社の編集さんの目に止まって、まあ書いたというところですね。まつもと:最初に、この手のプログラムを書いたのはいつ?遠藤:2008年の頭ぐらいですね、確か。増井:まだ7年ぐらい前?もっと前からやっているのかと思っていました。まつもと:その時はもう就職していました?遠藤:してました。RubyKaigiに関わるか関わらないか、ちょうどそのぐらいですね。Contest)とか、関連する話はもちろん知っていて、Quine(クワイン)の書き方も、学生のころにWebの情報を見て、まねするということはやっていました。そんなにいっぱい書くとは思わなかったですけど。まつもと:IOCCCを知っていたということは、参加しようと思ったとか?遠藤:僕が知った頃って、IOCCCの断絶期間というか、全然開催されていない期間だったので、もう終わったと思っていたんですよ。あるんだったらやりたいなと思っていたけど、もう、参加できない状態だった。その後、復活したので、それからやりだしたという感じですね。増井:普通の人は、IOCCCを知らないですよね。「故意に難解なC言語のプログラムを書き、その読みにくさと複雑さを競うというハッカーの奇祭」とWikipediaにはあります。いうと、僕はPerlでやるイメージが強いですけどね。まつもと:そこをCでやるの。遠藤:IOCCCはPerlより前、1984年からありますから。まつもと:Perlは、1986年だもんね。遠藤:そうそう、ラリー・ウォール(Perl開発者)は2度ほど優勝していますよ。まつもと:さすがラリー・ウォール。遠藤:その時はPatchの作者として知られていた。Perlはまだ出ていなかったので。まつもと:Patchとか、rnとかを作った人として認識されてたね。受賞時の選評に「rnとPatchの作者がわれわれに面白いプログラムを届けてくれた」みたいなコメントが載っていますね。Dvorakキーボードのシミュレーターと、ローマ数字の計算機ですね、確か。まつもとさんもやってくださいよ(笑)。まつもと:その手の脳みそがなくて。いや、多分ね訓練だと思うんだよね、プログラミングって。ピアノと一緒で、慣れてくると楽譜見ながら、よそ見しながら、歌いながらでも弾けるようになる。最初の人は、指の筋肉を1個ずつ動かさないといけないので、すごい労力がかかる。これはとてもできないって諦める。私も諦めたことあるんだけど。遠藤:それはある意味、この本書いた理由でもありますね。誰でもQuineは書けます、間違いなく。結果だけ見ると、何だこれ、絶対できないと思ってしまうと思うんですけど、ちゃんと段階を追っていけば、わかると思います。仕事で役に立たないプログラムもある──この本の内容と本業のお仕事とは、何か関係ありますか?遠藤:全く関係ないです。言えばですね、会社の仕事って、やっぱり、利益を求められる。「利益が出ることを考えろ」みたいなことは常に言われ続けるじゃないですか。ところが、そういうことを常に言われていると、趣味の時間ぐらいは全然役に立たないことを考えたいと思うようになる。その反発心みたいなのが執筆のきっかけの一つってのはあると思いますね。増井:仕事で役に立たないからこそ意味がある?遠藤:ですね。まつもと:そうなんだ(笑)。そもそも、「役に立つ」って何だろうね。クイズとか、知恵の輪とかってすごい得意な人がいるわけですけど、それには当然、積み上げなくちゃいけない知識とか、あるいは、早く答えるための技能であるとか、そういうのも当然あるわけですね。それ、何の役に立つのって突っ込んじゃうと、かなり辛いものがある。超絶技巧もそこに近いところがある。役に立たないといっても、脳の訓練にはなる。遠藤:脳の訓練にはなるし。あとですね、圧縮とかエンコードとか、そういう聞いたことあるけど、なかなか自分でやることがないなって思うような話を、結構超実践的にさわるきっかけにはなるんですよ。増井:普通、ベクトルが逆ですからね。プログラマは常に読みやすく書けと仕事では言われるのに、これはどれだけ読みにくくするか、という......。遠藤:難読化ですね、IOCCCは。最初、本当に難読という方向でしたけど、最近は難読というよりは、何か面白いプログラムが評価されるという感じですけれどね。ラリー・ウォールとかは、当時はマクロを使って、とにかく読みにくいプログラムを書いたという感じですけど、多分今出してもあれは通らないですね。増井:イメージ的には、料理されて食べてみるとおいしいんだけど、何でできているかわからないものが評価されるってことですか。うまく作れる人はそれで普通の料理も作れるんだけど、ぱっと見で、これ何でできてるかわかんない料理を作っているようなイメージに近い。まつもと:そんな感じだよね。増井:普通はわかりやすいコードを書くことが評価されるのに、ここではそうではない。遠藤:それを解読するのが、IOCCCの一つの楽しみ方ですから。増井:やっぱり、プリンで醤油を割ると、ウニ味になるみたいな。いうイメージに近いですね。それ見つけた人はすごいなと思うけど、仕事では役に立たない。まつもと:醬油とプリンのウニをお店で出すわけにはいかないもんね。増井:しかし、頭を柔軟にすることには役には立つ。遠藤:やあ、みんないいこといってくれて嬉しい(笑)。自分では、そのあたりを説明するのが苦手で。まつもと:私もここ20年ずっと、なぜRubyを作ったんですかって聞かれてますけど、うまく答えられない(笑)。増井:僕なんか、なぜお風呂でコードを書くんですかって聞かれる。まつもと:たしかにその理由は、言語化できない気がする(笑)。増井:あれはあれで、浮力があるんで、腰が楽っていうのがありますね(笑)。──まつもとさんは、本書に寄せての文章で、プログラム界の大サーカスを、自分は観客として楽しもうと書かれています。まつもと:はい、もう見て楽しむ感じで。サーカス団の一員には、とてもなれないから(笑)。遠藤さんの作品って、子供に見せると受けがいいんですよね。これをこうやってやると、クリスマスツリーから音が鳴るんだとか。すごい受けがよくてですね。僕のレベルでもびっくりするぐらいだから、子供にとってはまさに魔法。遠藤:そんな使われ方をしていたのか、ありがとうございます。増井:グラフィカルですしね、ソースコードが。まつもと:そう、きらきらして。遠藤:プログラムが芸術としてきれいだというのが理解できるのは、やっぱりプログラマだけなんじゃないかと思うんですよ。まつもと:ハイコンテクストの文化ではありますよね。遠藤:コンテクストがないと一般の人に見せても、この字の羅列は何?という感じで終わってしまう。まつもと:これがさ、自分と同じプログラムを生成するんだよ、とか言われても、はあ?って(笑)。技量がないとアートじゃない。増井:僕は基本的に役に立つプログラムが好きなんです。自分の趣味で作るものも、基本的に役に立つもの以外あまり作らないので。超絶技巧はそれとは全く違う方向だし、かつゲームでもないっていうのは面白いと思った。それと僕、一時プレステのゲームを作ったりしてたときに、やっぱりデータの難読化とかしなきゃならなくて、あえてややこしいものを書いていたことはあるんです。その部分だけが切り出されて、エッセンスだけで一つのプログラムになるというのは、想像しませんでしたね。職業から入った人は、何にしろプログラムって何かの作業を便利にするものってイメージが強い気がするんです。この本は、パズルのようにそのプログラムを書くこと自体に意義があると言っている。実行結果に意味を持たないプログラムって、あまり普通のプログラマは書くことがなくて、そういう方向性があることすら気づかない。押し入れの中に超絶技巧を凝らした柱があるんだけれど、それは普通の人は気づかない、みたいな。まつもと:まあ、ちょっとアートの方向だよね。遠藤:まあ、これをアートと言っていいのかどうかっていうのは、ちょっと。まつもと:いいと思うけど。遠藤:技術とアートの違いは、いまだによくわからないですね。これをアートだと主張したことも1回もないし。増井:アートだって、結構、技術をベースに成り立っているわけじゃないですか。まつもと:技量がないとアートじゃない。