なぜいま超絶技巧プログラミングなのか
──遠藤さんの著書、『あなたの知らない超絶技巧プログラミングの世界』(技術評論社)は実用性を追求するだけでは出会えない、ちょっぴり不思議なプログラミングの世界で一緒に遊びに行きましょうというのがテーマです。まず、この本を、なぜお書きになったのか聞かせてください。
遠藤:単に面白いからとしか言いようがなくて。いろんなとこで公開やデモをしていたら技術評論社の編集さんの目に止まって、まあ書いたというところですね。
まつもと:最初に、この手のプログラムを書いたのはいつ?
遠藤:2008年の頭ぐらいですね、確か。
増井:まだ7年ぐらい前?もっと前からやっているのかと思っていました。
まつもと:その時はもう就職していました?
遠藤:してました。RubyKaigiに関わるか関わらないか、ちょうどそのぐらいですね。それより前から、IOCCC(The International Obfuscated C Code 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回もないし。
増井:アートだって、結構、技術をベースに成り立っているわけじゃないですか。
まつもと:技量がないとアートじゃない。ましてや技術でもない。
増井:そうそう。必ず何かの技量と技術があったうえで、アートは成り立っているので。これは、プログラミング言語って技術を使ったアートだと思いますけどね。
遠藤:この本の中でも、「作品」という言葉を、自分のプログラムに対して、なるべく使わないように避けて書いているんですよ。何か、ちょっと恐れ多いなって。
まつもと:なんと謙虚な(笑)。
増井:作品集ですよ、これは立派な。
遠藤:この本を書くとき画集とかちょっと調べはしました(笑)。作品が載っていて、それに対してデータシートが載っている。
いつ発表されたとか、キャンバスはどんな生地で、絵の具はどういうものを使っているとか。そこはちょっと真似して、コードサイズとか言語とか、データシートが付いています。
増井:そうなんだ。それでこういう項目があるんだ。それも、サイズの中に、全体バイト数だけじゃなくて、アルファベットが何バイト、数字が何バイトって。空白が何バイトとか、見たことないですよね、あんまり、本で。
まつもと:昔々のRubyの本に、付録に『展覧会の絵の”Hello, world!”』というおまけがついているのがあった。「Hello, world!」を出すというだけの動きを、何種類書けるかという本ね。
最初は printf(“Hello, world!”); って当たり前なんだけど、だんだん変なテクニックとか使っていて。それぞれ工夫の仕方がつけてあるわけ。
遠藤 :それ、何って本ですか。
まつもと:原信一郎さんが書いていたはず。初期のムックだと思うんで私の手元にも残ってない。
話が通じる奥さんがいたおかげで
── この本のもう一つの背景として、奥様の役割も大きいそうで。
遠藤:そうですね。アスキーアートもそうだし、挿絵も全部描いてもらっています。
まつもと:そうなんだ。
──奥様はデザイナー系なんですか。
遠藤:いやあ、プログラマですよ。絵も描けるけど、Rubyも使っています。だから、どういうコンセプトなのかは理解した上で、絵を描いてくれますね。
まつもと:話が通じる。
遠藤:そう。
増井:さすがプログラマ。
遠藤:Quine リレーとかで、100言語を経由して、元に戻ってくるプログラムとかを書いたときも、ウロボロスのアイデアを出してくれたのが妻だったりしますね。
あるいは、3章のほうの挿絵は全部止まっているんですが、4章はそれを発展する話なので、アニメーションがちょっと動くという。
増井:本当だ。細かいですね、芸が。
まつもと:なるほど。気がつかなかった(笑)。
増井:その細かさがプログラマっぽい感じがしますね。
遠藤:表紙の裏もウロボロスで描いています。
増井:これ、電子本にはないですね。やっぱり紙でも買わないと、ですね。
遠藤:そう、電子版にはない。実は、本書全体がQuineになっているんですよ。表紙から始まるプログラムが本文に続いて、最後のところが終わりのプログラムで、ここから全部、ヒアドキュメントになっているという。本全体がヒアドキュメントで、実行すると、Quineになると。
増井&まつもと:へぇ~そうなんだ!
⇒1月4日公開の座談会・第二弾「新たなプログラミング言語の創り方」に続く!
【超絶技巧初級テク】ソースコード中のデータを限界まで詰め込もう!
遠藤さんのように、超絶技巧テクニックを駆使したプログラミングを楽しんでみたい!という方のため、CodeIQ事務局では言語不問の初級問題をご用意しました。ぜひ、腕試ししてみてくださいね!
- 正解者の中から抽選で1名に、遠藤さん・まつもとさん・増井さんのサイン入り本をプレゼント!
- 締切:3月24日(木)AM10:00
- ⇒挑戦は、こちらから
ITエンジニアに読んでほしい!技術書・ビジネス書 大賞2016
翔泳社「ITエンジニア本大賞」とのコラボ問題。正解者の中から抽選で人気の技術本をプレゼント!
2016年1月17日23時59分までに挑戦していただいた正解者の中から、抽選で1名様に「ITエンジニアに読んでほしい!技術書・ビジネス書 大賞2016」で選ばれたプレゼン大会参加本(技術書部門)をすべてプレゼントします。
遠藤さんの著書、『あなたの知らない超絶技巧プログラミングの世界』(技術評論社)もCodeIQ推薦本として掲載されていますので、ぜひ清き一票を!
⇒ ☆☆挑戦は、こちらから!☆☆
- プレゼン大会参加本(技術書部門)は2016年2月上旬頃に発表予定
- ITエンジニアに読んでほしい!技術書・ビジネス書 大賞とは?