ReadWrite Japan

MTIzMDQ5NjY0MTUxMjU4NjM2_0

古いプログラミング言語がなくならない理由

2014.9.22 07:30 | Lauren Orsini | ReadWriteJapan編集部

私達は既に知ってるものを好む

今日よく知られているプログラミングの多くは、古い言語として取り上げられるに十分な歴史を持っている。PHPは20年、Pythonで23年、HTMLは21年で、RubyとJavaScriptは19年だ。Cなどは42年もの歴史がある。

誰もこの様な事になるとは思いもしなかっただろう。今でも出版されている、世界で最初のCの教本の共著者であるコンピューターサイエンティスト、ブライアン・カーニハンですらだ(C自体は同じ本の共著者であるデニス・リッチーによるものだ。彼は2011年に亡くなっている)。

「編集者とこの本を5000部売れたらなという話をしたのをなんとなく覚えている。もっといいものにも出来たが、学生が2014年になってもあの本を使っているなど考えもしなかったことだ」と、カーニハンは最近のインタビューで答えてくれた。

Cがあまりに長く使われていることから、グーグルが今でもCを使って解決する問題を効率的に処理するために、Goという新しい言語を作った。しかしいくら素晴らしいものであったとしても、それらがCに取って代わるということは、カーニハンにとっては考えにくいという。

「大抵の言語は死に絶えることはない。少なくともある一定のレベルまで受け入れられた言語は死に絶えない。今でもCは他の言語より特定の問題を解決するのに役立っており、無くなることはない」

自分が知ってる言語で書く

あるプログラミング言語が別のものより成功を収める事があるのはなぜだろう?それは開発者がそれを選ぶからだ。話として筋は通っているが、しかし開発者がそれを選ぶ理由自体はなんだろうかという考えた場合、少々話はややこしい。

アリ・ラブキンとレオ・メイェロビッチはプリンストン大とカリフォルニア大バークリー校で研究を行っており、この問いに対して2年かけて答えを出した。この件についての論文、プログラミング言語の選択における実証的分析では、20万以上のSourceforgeプロジェクトと、1.3万人のプログラマーからの投票の分析を行っている。

ではその主な発見とはなんだろうか?ほとんどの場合、プログラマは既に知っている言語を選択するということだ。

ラブキンはこう言う。「利用されている言語があるのは、我々がいつもそれを使っているからだ。例えば天文学者は昔からプログラミングにIDL(Interactive data Language)を使う。別にその言語が天文学の解析に最適な特徴があるからという理由ではなく、そのようにせざるを得ない理由があるからだ。既にその言語で書かれた資産があり、それを手放したくないのだ」

言い換えれば、言語はある意味、その認知度によって命脈を保っている。もちろんポピュラーな言語に変化がないというわけではない。ラブキンは現在のCはカーニハンが最初に書いた様なものとは異なり、恐らくコンパイルの互換性は完全ではないだろうと述べている。

ラブキンが言うには、「古いジョークに、エンジニアが今後30年間使われる言語は何かと聞かれて、分からないけどそれでもそれはFortranと呼ばれてるだろう、と答えたというのがある。息の長い言語は、70~80年代にデザインされたものと同じではない。多くの場合、人々は言語から何かを引くことはないが、足すことはある。そうすることで後方互換性は損なわれずに問題が修正されるからだ」という事だ。

後方互換性が保たれているという事は、その言語を使ってプログラムのアップデートを続けることが出来るという事のみならず、言語のアップデートがあった時でも昔書いた部分のソースを書き直さずに済むということだ。この昔に書かれた「レガシーコード」の存在により、言語はずっと残ることになる。そこに書かれたコードがある限り、その言語もついて回る。

PHP:長く使われている言語のケーススタディー

レガシーコードとは管理されなくなったソースコードによって書かれているプログラム、もしくはそのの一部の事を指す。ビジネスやエンジニアリングプロジェクトのキーとなる機能が、もはや誰も使っていない言語で書かれているような場合を想像してみよう。これらは今でもその機能を果たしており、それを新しい言語で書き直すのは困難であったり費用がかかりすぎたりするので、あくまでそこは変えず、プログラマに周りのコードが変更されても機能が果たせるよう面倒を見させる事になる。

登場してから数年しか経っていない言語ですら、こういったレガシーコードの問題を抱えている。PHPも例外ではない。PHPは、レガシーコードと現行のコードは明らかに異なっているが、それは大きな改善の結果だという意味で興味深い例である。

アンディ・ガットマンズはPHP4が出てくるまでにスタンダードとなったZendエンジンの共同開発者である。ガットマンズとそのパートナーは元々PHP3を改良を目的としており、それが大きな成功を修めた事から、オリジナルのPHPの開発者であるラスマス・ラードフもプロジェクトに参加することとなった。その結果PHP4およびその後継にあたるPHP5が生まれた。

その結果、今日のPHPは元祖のものから大きく異なったものになっている。しかしながらガットマンズの見方では、昔のバージョンのPHPで書かれたレガシーコードは、この言語に対して昔からある偏見、例えばPHPはセキュリティホールだらけであるとか、スケールの大きいタスクに対応できないと言った点を未だ解決できないものにしているという。

関連記事:PHP、かつてWebで人気だった言語が下火になりつつある

「PHPを否定する人たちは、1998年の時点であった問題を槍玉に挙げており、現在の状況が分かっていない。PHPは今日ではとても成熟したエコシステムだ」と彼は言う。

彼にとってもっとも大事なことは人々に最新のバージョンを使うよう呼びかけることだという。「PHPは既に十分大きなコミュニティであり、大きなレガシーコードも抱えている。しかし一般的に言ってほとんどのコミュニティはPHP5、古いものでもPHP3を利用している」という。

問題はどのような言語であれユーザーが完全に最新バージョンにアップグレードする事は無いということだ。Pythonユーザーが2008年にでたPython3ではなく2000年にリリースされたPython2を利用しているのもこの為だ。既に6年経ったがグーグルの様な著名なユーザーですらまだアップデートしていない。理由は様々あるが、ユーザーはアップデートに対して用心深くなっている。

「どんな言語も無くなることはない。レガシーコードはいつまでも残り続けるものだ。書き直しは簡単に出来ることではなく、問題が起こってないのであれば変更はしないものだ」とラブキンはいう。

開発者は限られたリソースだ

もちろん開発者が面倒なメンテナンスのためだけに、レガシーコードの言語を選択することはない。ラブキン達は選択する言語の優先順位を決める上で、年齢はただの数字に過ぎないということを見出した。彼が言うには、

実にショッキングでかつ、重要だと思える点だが、サンプリングを行った人たちを年齢毎にグループ化し、それぞれに言語をいくつ知ってるか聞いてみた。
当初は知ってる言語数と年齢は共に上がっていくだろうと考えていたが、そうではなく、25歳と45歳で知ってる言語の数に大きな差は見られなかった。この結果は質問の方法を変えてみても変化はなく、言語を覚えるのに年齢は関係ないということがわかった。

言い換えると、古い言語にしがみついているベテラン開発者だけでなく、若手の開発者も古い言語を学び適応しているという事だ。その言語は興味深いライブラリや機能があるから、もしくは所属しているコミュニティの取り組みとしてその言語に対応することにしたからなど、様々な理由はあるだろう。

ラブキンによると、「プログラマの興味を引くものには限りがある。もしある言語が明らかな価値を提供できたとしたら、人々はそれを利用する。他人とコードや知識のやり取りをすることがあれば、お互いがその言語を知ることになる。例えば利用するライブラリがPythonでコミュニティ内のエキスパートがPythonの経験者の場合、そのコミュニティはPythonが幅を利かせるようになる」らしい。

コミュニティはその言語がどの様になるかについての大きなファクターである事が、研究で分かっている。例えばPythonとRubyのように、高レベル言語間で大きな違いが無い中、プログラマはある言語が他に対して優れている点を見出そうとする傾向がある。

「RailsがRubyで書かれなければならない理由はないが、それでも最初にRubyで書かれたのはコミュニティの影響があったからだろう。例えばObjective-Cが再び日の目を見たのはアップルのエンジニアチームがそれを利用する事にしたからだ。しかしこの言語でなければダメな理由は無かった」とラブキンはいう。

これら社会的影響およびレガシーコードの存在もあり、古い言語は今でも根強い慣習から利用されている。GoがCを凌駕する可能性はあるだろうか? 影響力のあるプロジェクトでGoを採用するべきだという話になれば、あるいは可能かも知れない。

「結局の所、言語自体というより、その言語を広めるのは誰かという問題なんだ」とラブキンは語っている。

トップ画像提供:Blake Patterson

この記事を読んだあなたにおすすめの記事

この記事を読んだあなたに
おすすめの記事