言語をめぐる論争

From The Joel on Software Translation Project

Jump to: navigation, search

Joel Spolsky / 青木靖 訳
2006年9月1日 金曜


旧知の友人がメールで質問をしてきた。

「Webサーバ上に構築するエンタープライズアプリケーションを作るためのテクノロジーについて、基本的な疑問がある。君の考えを聞きたい・・・」

「君だったら、.NETとJ2EEで、どちらを選ぶ?」

「Webサーバは何を使うべきだろう(Apache、IIS、その他)? その理由は?」

「どのWeb開発言語がいいだろう(ASP.NET、Ruby、Ruby on Rails、Java、Python、その他)? その理由は?」

「君の会社では何を使っているの? その理由は?」

ああ、素晴らしい質問だ。答えるのが不可能で、しかも簡単に答えられる!

すまない、なぞなぞみたいな言い方はやめよう。しばらく前のことだが、私は「プログラミングにおけるロード・パーマストン問題」という文章を書いた。.NETとかJavaみたいなプログラミングの世界はあまりに大きく複雑で、それが自分のニーズを満たせる優れたものであるかどうかを、手遅れになるまで言い当てることができないのだとその中で主張した。特にC#/.NET/IISのセットと、Java/J2EE/Apache/Solarisのセットと、PHP/Apache/Linuxのセットの間の議論は何年も続いていて、正しい答えを見つけられる見込みもない。これらのプラットフォームには長所やら短所やらがあまりにたくさんあって、それぞれのプラットフォームの支持者が議論に議論を重ねても全然真実に近づかないのだ。しかしその議論がものすごく楽しいだろうことは間違いない。

複数のプラットフォームで深い経験を積んでいる誰かを見つけて、その人に聞けばいいんじゃないかと思うかもしれない。そういう人というのはあまりいないものだ。私が確かに言えることは2つある。

  1. 世界中の人々が、.NET、Java、PHPを使ってひっきりなしにWebアプリケーションを作り続けている。彼らの誰も、テクノロジーの選択の故には失敗していない。
  2. これらの環境は大きく複雑なものであり、あなたの選ぶ環境での開発を本格的にやった経験があるアーキテクトが少なくとも1人必要となる。そうでなければ間違ったやり方をすることになり、ぐちゃぐちゃになって作り直す羽目になるだろう。

去年の夏、インターンたちにCopilotを作らせたとき、私たちは新しく書くコードにどの言語を使うか決める必要があった。新しいプロジェクトでは、通常どのテクノロジーを使うか評価する期間が長く取られて、多くの議論が交わされ、中にはいかれた人間がいて、SqueakLispOCamlそのほかの言語を評価して長い時間を無駄にする。これらの言語はまったく本当にすばらしいプログラミング言語で、賞賛に値するものなのだが、ただWebソフトウェアを開発しようというときに必要となる巨大なエコシステムを持っていないのだ。そういう議論をするのはすごく楽しいにしても、まったくのところ時間の無駄だ。結論としては、どれも同じくらい成功の見込みのあるプラットフォームが3個と半分あり(C#、Java、PHP、それにPythonが半分)、それからほぼ間違いなく大失敗して変更もままならなくなるプラットフォームが数限りなくあり(Lisp、Cで書くISAPI DLL、Perl)、そして陪審員がまだ現れていないのになぜ自分の職を危険にさらすリスクを負うのかわからないプラットフォームかいくつかある(Ruby on Rails)。あなた方が私のことをつるし上げる前に言っておくと、Rubyはすばらしい言語で、Rubyでアプリケーションを開発したら楽しいだろうと思うし、とくにあなたのやろうとしているのがミッションクリティカルではないならすごく楽しいだろうことは間違いないが、しかし重要なビジネスアプリケーションということであれば、Ruby on Railsによる大きなミッションクリティカルなWebシステムの構築例が世界的にもあまりないことを認識しておく必要がある。あなたがスケーラビリティの問題や、古いレガシー何とかとのインタフェースの問題や、コードを理解できるプログラマを探すといった問題にぶち当たることにならないか、私にはなんとも言えない。Ruby on Railsというのは楽しい選択であり、37 Signalsが魅力的なRuby on Railsアプリケーションを作って大もうけしている話も聞いてはいるが、少なくともあと何年かは安全な選択肢ではない。私個人としてRubyを怖く思うのは、(1) Unicodeに対する強い反感を示していることと、(2) 遅いことが知られていることで、次のMySpaceを作ったとしたら、.NETでやっている連中の5倍の金物を買うことになるだろう。そういったことはやがて修正されるかもしれないが、現時点では、寮の部屋で2人ではじめるスタートアップや卒論のプロジェクトをRubyに賭けることはできても、誰かが解雇されることになるエンタープライズプロジェクトには適さない。Pythonが半分OKだというのは境界線上にあるからで、「興味深い」選択肢から「安全な」選択肢へと移行しつつある。

そう、ポールがLispでアプリケーションを作り、そしてLispでアプリケーションを書いたがために何百万ドルも儲けたと話しているのは知っているが、正直なところその話をかつて真に受けた人間は2人しかおらず、そのあと全部書き直すことになったから、彼らも同じ過ちを繰り返すことはないだろう。

最先端であるかどうかは別に問題でない大きなエンタープライズ向けシステムでは、安全な選択はC#、Java、PHP、Pythonであり、それはこれらの言語でクリティカルなビジネスアプリケーションを構築している人たちが山ほどいるからで、何か問題があったとしても、致命的な問題にはならないのだ。

C#、Java、PHP、Pythonの中のどれを選んだらいいのだろう? 本当にある違いというのは、あなたがより良く知っているのがどれかということだ。Javaでいくつもの大きなシステム構築に成功しているJavaのグルがあなたのチームにいるのなら、C#よりもJavaで成功する可能性がずっと高いが、それはJavaがより優れた言語だからではなく(Javaの方が劣るが、その違いは問題になるほど大きなものではない)、彼がより詳しいからなのだ。

結局私たちは単にC#とASP.NETで開発するようにとインターンたちに指示した。CopilotのWebサイトの部分を作ったインターンは、ASP.NETでの経験を十分積んでいて、避けるべきことがなにか知っており(viewstateとか)、1つのページに2つの<form>を入れることを不可能にする罠も避け、そうして見事な仕事をしてASP.NETのコードをはじめから正しく構築し、後でトラブルになるようなことがなかった。これで良かったことが何かというと、プログラミング言語の長所短所について実りのない議論をして時間を無駄にすることがなかったということだ。

最後に、私たちの使っているものということで言うと、Copilotは今言ったとおりC#とASP.NETで書かれているが、Windowsクライアントの部分はC++で書かれている。私たちの古いインハウスのコードはVBScriptで書かれており、新しいインハウスのコードはC#で書かれている。FogBugzは、クロージャとラムダとRailsのようなアクティブレコードを持つ先進的なBasicの関数プログラミング的方言であるWasabiで書かれていて、これはVBScript、JavaScript、PHP4/PHP5へとコンパイルされる。WasabiはFog Creekでももっとも優れた開発者が作ったインハウスの言語で、FogBugz開発のために最適化してある。Wasabi自体はC#で書かれている。


(オリジナル: Language Wars)

戻る

Personal tools