Hatena::ブログ(Diary)

naoyaのはてなダイアリー

May 18, 2005

僕やはてながPerlを選ぶ理由

ご存知の通り、はてなのシステムはほぼすべてPerlで書かれています。そもそも僕がはてなに入った一つの理由に、僕が一番得意とする言語であるPerlを使ってシステムを構築していたという点があったりします。

世の中にはたくさんのプログラミング言語があります。Perl、Java、Ruby、PHP、Python、C、C++、lisp、Smalltalk、Cobol...数え上げたらキリがありません。そして、プログラマはかならずと言っていいほど、どれかひとつ以上の言語を愛しています。好き、ではなく愛しているのです。

自分が愛しているものを批判されると感情的になりやすいのは人の常、プログラミング言語の差異に関する議論は炎上しがちで、よく宗教戦争だなんて言われたりもします。その中で、言語なんてどれも一緒だなんていう乱暴なまとめがされることもよくあったりします。

しかし、何年かプログラマというものを経験して、はっきりわかったことがあります。プログラミング言語がどれも一緒だなんていうことは間違っているということです。そして僕は、数ある選択肢の中から Perl というプログラミング言語を選択しました。

C言語、Java や Ruby、Python などに触れたこともあります。こと Java に関しては、昨今のウェブアプリケーション開発のベストプラクティスと言われていることもあり、書籍も結構な数を読んだし、それである程度の物を開発した経験もあり資格を持っていたりもします。それでもなお Perl という言語に拘るのは、大きな違いがあると認識して、自分に最適なものはこれだと確信しているからです。

ハッカーと画家 コンピュータ時代の創造者たち』の著者であり天才的なハッカーであるポール・グラハムはその書籍の中で静的型付けの言語とそうでない言語を比較しながらこんなことを書いています。

自分(ポール・グラハム)は大学で、プログラムは紙の上で完全に理解しなければいけないと学んだけれど、それは無理だった。おもむろにめちゃくちゃなコードを書き始めて、それを次第に形にしていくというやり方が好きだとあります。「デバッグとは書き間違いや見逃しを捕まえる最終段階の工程だと教わったけれど、実際に私がやっていたのは、プログラミングそのものがデバッグという具合だった。」と。

それと同時に、当初ポール・グラハムは、自分が世間一般で良いとされている方法論で物を作ることができないことに引け目すら感じていたのだともあります。

実は、このポール・グラハムが感じていた引け目というのと同じ類ものを、僕もずっと感じ続けていました。僕がこれまで読んできた多くの技術書には、プログラミングは詳細に設計された設計書を実際の形に落とし込むための手段に過ぎないとか、オブジェクト指向開発においてはコーディング作業は全体の中で占める20%の作業にも満たないとか、そんなことが書いてありました。一時はそれを正しいと思って、実践しようと思い試行錯誤を試みたものでした。

でもなんだかうまくできませんでした。僕がプログラミング言語を使わずに考え出したソフトウェアというのは、綺麗に設計されているようで、実際に作り出してみるとまったくその通りにいかない。あそこがおかしい、ここがおかしい。紙の上の設計に後戻りしては設計書の間違いを訂正するのです。なんでだろう、本にあったとうりにやっているのに! そのときは、僕にはソフトウェアを綺麗に設計する才能がないんだろうと思い込んでいました。

しかし、経験を積んでいく中で、そのやり方が自分に向いていないこと、自分に向いてるのはプログラミング言語を使いながらプログラムを考えることだというのが分かってきました。また、プログラミングをしている最中により良いアイディアが思い浮かぶということが何度もあり、次第にそれはプログラミングをしているからこそ思いつくことなのだということもよく分かってきました。紙の上では決して思いつかないようなアイディアが、プログラミング作業を通じて驚くほど自然に生まれてくるのです。

でも世間一般的には、それは間違ったやり方なんだろうなと思い、引け目を感じていました。

もうひとつ僕が引け目を感じていた原因として、ソフトウェア工学というものを学んだことがないというのもありました。僕は大学で物理を専攻していたこともあって、いわゆるソフトウェア開発の方法論やアルゴリズムといったものをまともに勉強したことがありません。

そんなこともあって、思った物とか面白い物は作れるんだけど、コードを書いては試して書いては試してを繰り返してめちゃめちゃに進んでいく僕のやり方は人とは違うんだなあといつも感じていたのです。なので、僕が書いたモジュールの CVS のりビジョンは、やたらとリビジョンナンバーが進んでいたりするのです。作っては実際に動かして、壊して、というのをやたらといっぱいやるから。

そんな僕の物作りの過程においては、コンパイラにやたらと怒られたり、変数の型を気にしたり、変数に入れるオブジェクトが何者だったりするかをいちいち意識しなければならない静的型付けの言語は性に合わなかったんですね。一方で簡単なことは簡単に、難しいことでもそれなりにできる Perl という言語は、僕のやり方に合っていたし、なんとなく"Hackしている"という気分にも浸ることができたんです。

だってそうでしょう、"Hello, World!" を出力するのに、コマンドラインから一行書くだけで済む言語と、パッケージを選んでクラス用意して何行も書いてコンパイルして、やっと実行できる言語とで、作っては壊していくのに向いているのがどっちかなんてのは、さすがに書籍に頼らなくても分かるでしょう。

そんな感じで僕なりのやり方だけど間違ってるんだろうなあ...と思いながら悶々としていたのですが、優秀なハッカーのひとたちに会ったり、はてなでの開発を知ったら、なんとみんな同じようなことをしてたんですね。そんなわけで徐々にそれは間違ったことではないという風に考えられるようになりました。むしろ、いままで正しいと思っていた方法の方が間違いなんじゃないかと思うことすらあるほどです。

ポール・グラハムもこう言っています。*1

静的片付けは、私が大学で教わったようにプログラムするなら良い考え方だと思う。でも私の知るハッカーたちはそんなふうにはプログラムしない。私たちに必要なのは、落書きしたりぼかしたり塗りつぶしたりできる言語であって、型の紅茶茶碗を膝に置いて、落とさないようにバランスをとりながら、作法にうるさいコンパイラおばさんとお上品な会話をするような言語じゃない。(『ハッカーと画家』 第2章 ハッカーと画家 P.26 より)

近頃では、プログラミング言語売り場の棚にずらりと並んでいるのは、いつも決まって Java の本ですし、名著と言われるのはお上品な方法論を解説した分厚い書籍だったりします。別に Java がだめだと言っているわけではなく、僕も Java は素晴らしい言語だと思っています。Javaとその周辺の技術が市場やこの業界にもたらした数々の方法論の多くは、他の言語でも応用することができますし、その功績は非常に大きいと思います。

しかし、独創的なソフトウェアを"創りながら創る"という方法においては静的型付けの言語よりも動的型付けの言語の方が有利だと思うし、スーツを着て設計書を書いてからものを作るなんて作業は、今の僕には耐え難い作業です。もう後戻りはできなそうです。だから、賢そうなおじさんが(PerlやPHPなんかを使っていた会社がJavaを採用したなんていうニュースをみて)「Javaはいい」とか言っているのを見ると、「ほんとに分かって言ってるのかな」という一言が、いつも脳裏をかすめます。

これから先、Perl でアジャイルに物を作る会社が続々と増えるなんてことはあり得ないでしょう。でも、はてなという会社はそれが正しい方法論だと確信しているし、僕らは、頭でっかちの設計屋が何日もかけて設計するようなやり方よりも、よっぽど優れたやり方でやっていると思っています。

またハッカーと画家の話に戻りますが、ポール・グラハムがかつて全精力を注いだ Viaweb というベンチャー企業は、lisp を使ってウェブアプリケーションを作っていたそうです。多くのプログラマは、lisp でウェブアプリケーションだなんて奇妙なことをするよなあ、なんて思うはずです。しかし Viaweb という集団は、lisp によるアジャイル開発で他の大企業の何倍ものスピードで物を作ることを知っていたし、自分たちしか知らない正しい方法を、他の企業が鼻で笑っているという状況は競争社会においては非常に有利なことだったと振り返っています。

そんなわけで、はてなという会社はこれから先も僕らなりのやり方でやっていくし、たとえ周囲の人たちから笑われたとしても、それを曲げることはしなくてよいだろうな、と思うこのごろです。

ハッカーと画家 コンピュータ時代の創造者たち

ハッカーと画家 コンピュータ時代の創造者たち