vol.12報告(1/2)―小飼弾「PerlってLISPだったの!?」その衝撃も学生時代の出会いから

@dankogaiこんにちは、USP MAGAZINEまつうらです。今年も新年度を迎えましたが、皆様いかがお過ごしでしょうか。私はあまり実感がないんですよね。新人と呼ばれたのもだいぶ昔ですし、どこか別の部署に異動して新しい人や環境と出会う……などということもなく、思えば平凡な日々になってしまっております。

しかし、今回のTechLION vol.12は、そんなふうにしてある意味日々に対する感覚の鈍っていた私などにとっては、ちょっとハッとするトークが聴けた回でした。テーマは「出会い」なのですが、よくあるミーハーなものを想像していたとしたら大変に勿体ない!そこはやはりTechLION、深いです。深いうえに、語られる出会いエピソードもエンジニアならではのオチがついているという……。

さて、前置きはこれくらいにして、今回もレポートをご覧ください。まずは前半戦の様子から。尚、当日の録画(1部2部3部エンディング)も視聴可ですので、併せてご覧ください。(撮影協力:日本仮想化技術様)

■第一部 獅子王たちの夕べ(小飼弾氏)

小飼弾さん第一部はメインゲストを迎えて大いに語ってもらうセッションですが、本日のメインゲストはダンコーガイこと小飼弾さん。Perlの雄、また404 Blog Not Foundを運営するアルファブロガーとしても知られ、そして名前に負けない弾丸トークの主。

今回のトークに明確なタイトルは付けられませんでしたが、全体を通してのキーワードは「出会い」、そしてもう一つ、意外かもしれませんがコンピューター言語“LISP”だったように思います。

以下、弾さんの発言を要約してレポートします……

社会人は、出会いがお膳立てされない

「出会い」というテーマをいただいたんですけども、今日は新社会人の方ってどれくらいいらっしゃいますか?……あれ、意外と少ないですね。実は今日温めてきたのは、「社会人と学生の一番の違いはどこか」ということで、それは「社会人は、出会いをお膳立てしてもらえない」という話なんです。

学生の頃だと例えばクラス替えとかで新しい人と出会ったりします。そうやって出会いを演出されているんですが、そうであることに気付かない程、学生というのはたくさんの出会いをお膳立てされているんですね。でもそういった出会いというのは、何も「人と人との出会い」だけじゃないというのが今日の本題です。

あなたはどこで出会った?今使っているその言語に

Fizz Buzz with Perl6
Perl6で”Fizz Buzz”を解く(右はRuby2.0による結果がまだ残っている)

それじゃここで、有名なFizz Buzzをやってみましょう。入社試験とかではこの「Fizz Buzzが2分以内で書けないとプログラマーとして失格」みたいですけど、まぁそれは置いといて……。

まずはPostScriptで……。はい、PostScriptでプログラム書いてる人は?……あれ、いませんか。じゃあメジャーどころのRuby 2.0でやってみましょう。……えーとそれから、僕はPerlの人として紹介されるみたいなので、じゃあ今度はPerl6で。……あとはPython 3.2。で、それからCで……、Brainf*ckで……

……と、数ある言語のほんの一部を紹介しましたが、じゃああなたは、今使っている言語とどこで出会いましたか?会場の方に何人か聞いてみましょう。

観戦者Aさん「大学1,2年の頃、JavaCに、プログラミングとは何ぞやという状態で出会いました。それで今は、それらで仕事してます」

者Bさん「会社に入る前に自習しておこうと、本屋でJava入門という本を見つけたのが言語との出会いでした」

者Cさん(実はスタッフ)「今仕事で使うのはCPythonAWKシェルスクリプトですが、初めてはC++Pascalで、大学一年の時に触りました」

者Dさん「出会ったのはC言語。大学院生の頃に石田晴久先生の『UNIX入門』を読みながらVAX 11/730を、まだ助手だった村井純という人に弄らせてもらっていました。その前はFortranとか、メインフレームのVOS3系のコマンドプロシージャとか」

観覧者Eことmasuidriveさんうーん、なるほど。もう一例いってみましょうかね。ではこの中に「私の触った言語にはevalがある」という人はいませんか?

者E(実はvol.10ゲストmasuidrive)さん「僕はMSXZ80 アセンブリです。あれはバイトコードをプログラム内に置いておけばevalができます。メモリが64KBと少ないから、そうやって自己書き換えしないと規模の大きいアプリが書けなかったんで……」

おいおい!そっちの方に来たかよぉぉぉー! まぁそれはそうだなぁ……。BASICもPEEKとPOKE命令だけ使って実質アセンブリでできるし……って、こんなに変態ばかりが観客だなんて聞いてないぞ(笑)

僕の言語との出会い

ブライアン・ハーヴェイ氏のWebページ
学生時代に授業を履修していたというブライアン・ハーヴェイ氏のWebページ

なんでこんな質問したかっていうと、「果たして僕は、学校に通ってなかったらこういうものと出会えただろうか?」って思うんです。学生の頃、ブライアン・ハーヴェイという先生の下でSchemeというLISPの方言を習ったんですけど、それに出会わなかったら僕は今「PHP最高」とか言ってたんじゃないかなぁ。

僕は元々コンピューターサイエンス専攻じゃなかったんですよ。最初の専攻は生化学だったんですけど、あまりにもつまらなくて文句言ったんです。そしたら「じゃあお前、こっち来い」って言われて習ったのがさっきのあれで……。そこではCアセンブリをやらされて、最後はMIPSのエミュレーターを書かされたんです。このクラスも今はPythonになってしまったのが残念なんですけど……

何が残念って、こういう言語に外で出会う機会ってあんまりないと思うんですよね。こういっちゃ何ですけど、PythonPerlあたりって、特にコンピューターサイエンスを習おうと思わなくても出会えると思うんですよね。つまり出会いを演出されなくてもわりと自然に使う言語なんですよ。

結局、僕に言語との出会いを演出したのは大学だった

僕の仕事は、言語の美しさがどうのこうのとか重要ではなくて、純粋に仕事をやっつけられればよかったんです。それで気が付いた頃にはPerlで仕事してたんですが、最初にPerl5を見た時はビックリしましたよ。「なんだこの矢印は。なんだよ”use strict”って。フザケんな!」と。

ところが、チャーチ数をPerlで書けるということを知って、Perlが単なるお仕事やっつけ言語じゃないかも、って気が付かされたんです。「待てよ、PerlってLISPだったの!?」くらいの衝撃でした。ちなみに、Jcode.pmは仕事やっつけ言語として使っている時に、作ったものだったんですけどね。それでその頃堀江さんに襟首掴まれてオン・ザ・エッヂで仕事したりで……。

だから今振り返っても、実は出会いを演出してくれたのって大学だったんです。その頃にあのカッコだらけのヘンな言語(=LISP)に出会わなければ、こういった話というのも無かったんじゃないかなって思うんです。ホント、大人になってから純粋に「出会う」っていうのは難しいんですよね。皆さんも薄々感じているとは思うんですが、それはむしろキツいんですね。社会人の今から、まるで別のパラダイムの言語に出会うというのは本当に難しいことで。もちろん大人になってからも出会いというのはあるんですけど、もう学校とか親戚とかがお膳立てしてくれはしないので自分で積極的に出会いにいかないといけないんです。

「機会」というものを逃さないで!

Haskell Tシャツ
この日、弾さんが着ていたTシャツはHaskellだった

僕が今着てるTシャツはHaskellなんですけど、僕はオードリー・タングという友人に紹介されて知り、感銘を受けました。LISPも一応関数型言語なんですけど、スペシャルフォームっていうある意味ズルい仕組みでifやforを実現してたんです。遅延評価の概念を実装すればそんなもの要らないことはわかってたのにLISPはそれを長年サボってて……。でもHaskellはそれを本気で実装し、きっちりした関数型言語になってたんです。これはLISPをマジメに勉強していた人ほど衝撃的だと思います。こういった言語も今なら気の利いた学校へ行けば教えてくれるでしょうけど、社会人になると例え見知っても、感銘を受け、つまり真の意味で出会える機会なんてホントにないんですよ。

というわけで、今日は新社会人の方々に、「機会というものを逃さないでくださいよ」って言って、オチをつけるつもりだったんですが……。今日の皆さんは既に相当ご存知ですね(笑)

◇ ◇ ◇

小飼弾さん、ありがとうございました。新社会人じゃありませんが、私にもそのメッセージ、響きました。毎年この時期、街中で卒業生や新入生を見かける度、「あの頃はいろんなイベントがあったけど、社会人になってしまえば以後そういうのが途端に減ってしまって寂しいものだ」なんて思ってました。が、「寂しい」などと言ってないで、私も積極的に機会を見つけに行かなきゃ、と、トークを聴いて思いました。

さて、この後は2組のITカップルを迎えての後半戦へと移るのですが、そのレポートはまた次回に……。どうぞご期待ください。