BT

最新技術を追い求めるデベロッパのための情報コミュニティ

寄稿

Topics

地域を選ぶ

InfoQ ホームページ ニュース あなたは本当に、他の言語を学ぶべきなのか?

あなたは本当に、他の言語を学ぶべきなのか?

ブロガーのGustavo Duarteは、新しいプログラミング言語を学習するのはしばしば時間の無駄である(source)、と言う呪いの言葉を吐いた。彼は最初、自分の投稿に"新しい言語は有害だと思われる"と言う、Dijkstaがgotoについて述べた古典的な文章をもじった(source)題名を付けていた。しかし彼は反応を受けた後に少しトーンダウンし、今では"言語を中途半端にかじる事は無駄が多いと思われる"と言う題名になっている。

新しいプログラミング言語を学ぶのは、プロフェッショナルなプログラマにとってはしばしば時間の無駄です。それは楽しい時間の無駄(例えば趣味)かもしれません。しかし、それでもなお無駄なのです。もしあなたがそれを遊びで行うなら素晴らしい事ですが、得にはなりません。この指摘は、優れたプログラマの間では異端の説だとされるでしょう: 非常に素晴らしい教えを説いてくれるプラグマティック・プログラマでさえも、我々は毎年新しいプログラミング言語を学ぶべきだと示唆しています。ばかげたことです。

彼はまた、なぜそれが無駄な事だと考えるかについて説明している。

新しい言語を学ぶのは、"あなたの考えを広げ"、"より良いプログラマ"にする、と言う理屈です。この種の議論の上では、我々はみなLSD(幻覚剤)をキメているに違いありません(ダメですよ)。現実的には、新しい言語を学ぶことはひどいビジネスです。その努力のほとんどが、投資した時間に対して得られるわずかなリターンとともに、価値の低いタスクに費やされます。

Gustavoは、「新しい言語を学ぶ事は、のこぎりの刃を研ぐのに似ている」(source)と言うScott Hanselmanの例えを批判した。Scottは言った。

今年、私はRubyを学んでいます。それは、私のチームがRubyに移行する事を意味しているのでしょうか?恐らくそうではありません。しかしそれが意味するところは、私はのこぎりの刃を研いでいると信じているからこそ、今年Rubyを学んでいると言う事です。あなたはのこぎりの刃を研ぐには忙しすぎるかも知れません、しかし私は - あなたがどんなブランドや種類ののこぎりを使っているかに関わらず - あなたにそれをおすすめします。違う種類ののこぎりでも、うまく木を切れるものがあるものがある、と覚えておくためです。恐らく、それらはあなたの知らない何かを知っています。

Gustavoは、それがうまくいくとは信じていない。

Scott Hanselmanは、新しい言語を学ぶ事はあなたののこぎりを研ぐ事だ、と主張しています。しかし私はそれを、切れ味が悪くて新しい、ピカピカののこぎりと遊んでいる間に、中途半端に磨かれたのこぎりを放っておく事だと思っています。その先行投資のコストは、どちらにしても無駄になっています。3つのよく切れるのこぎりの方が、そこそこの切れ味を持つ8つののこぎりよりも優れています。ツールボックスに加えた新しい言語によって、あなたはどの言語を使っても圧倒的な生産性を上げる事ができなくなります。

これはWeb全体に議論を巻き起こした。

最も興味深いコメントは、LispエバンジェリストPaul Graham(source)のサイト「yCombinator」の一部である、Hacker's news(source)で発言されたものだったた。Scott Schneider(source)は、コメントを以下のような言葉で始めている。

私が考えるに、彼の仮定では全ての言語は同じコンセプトを持っており、"文法や構文上の主義"が違うだけである、と言っているようです。しかしこのアドバイスのポイントは、異なるプログラミングのパラダイムに自身をさらすため、より多くのプログラミング言語を学ぶ、と言う事にあると私は考えています。そしてこれを行うために、あなたは言語間の微妙な差異のエキスパートになるべきだ、とは私は考えていません。しかしあなたにとって必要なのは、新しい方法で物事を考えるのに慣れる事なのです。

Steven Hazel(source)は続けて、

私は、ここでの重要なポイントは"どこまでやれば十分か"と言う事だと考えます。恐らくこの著者は、毎年新しい言語に切り替えると言う事に反論しているように見えますし、それに関しては私も馬鹿げた事だと賛成します。いくつかの新しい概念を学ぶ、と言う事がこの発想に繋がっている訳で、毎年新しい言語で重大なプログラムを書く、と言う事ではありません。私が新しい言語を採用するのは、それが実用的な選択肢であった場合のみです。

プログラミングに関する古典的な警句(source)の中でAlain Perilsによって記述された"プログラミングに関するあなたの考え方に影響を与えない言語は、知る価値がない"と言う文は、Eric Raymondの目に留まった事(source)でさらに広まった。

LISP は、それをモノにしたときのすばらしい悟り体験のために勉強しましょう。この体験は、その後の人生でよりよいプログラマーとなる手助けとなるはずです。たとえ、実際には LISP そのものをあまり使わなくても。(訳注:山形浩生氏を始めとする方々による日本語訳「ハッカーになろう」から引用)

この文章は"「ほげ言語」のパラドックス"(source)を生み出した、Paul Grahamによる人気記事"普通の奴らの上を行け"でも引用されている。その記事では、

ある年齢に達すると、プログラマーは自分から使う言語を変えることはほとんどなくなる。何の言語を使っていようと、これで十分だと思ってしまうのだ。(訳注:Shiro Kawai氏による日本語訳から引用)

「ほげ言語」のパラドックスは、人々は「パワフルだから」と言う理由で好みの言語を選択すると言う事を、誰もが知っていると言うセオリーを言い表したものである。彼らは、生産性のために機械語よりもCを選んだり、抽象化と生産性のためにCよりもJavaを選ぶ。彼らは他の言語について聞き及ぶ事ももちろんあるだろうが、彼らは"私の言語で解決できない問題など存在しない、他の言語を学ぶ理由などない"と感じるのだ。

あなたが理解している(流暢に操れる必要はありません)プログラミング言語が - と言うより言語のタイプが、あなたの考え方を方向付ける傾向がある。自然言語の研究者によれば、言語に存在しない単語(もしくは、単語のカテゴリ)があった場合、その単語が表現している概念について考えるのは難しくなる。Paul Grahamは、プログラミング言語についてもおおよそ同じ事が言えると述べている。

プログラムを生成するプログラムだって? いつそんなものが必要なんだ? そんなこと滅多にないよ、とCobolプログラマは言うだろう。いつでもさ、とLispプログラマは言うだろう。

では、あなたは新しい言語を学ぶのに時間を費やすべきなのだろうか、そうではないのだろうか?そして費やすべきだと決めたとしたら、最大の効果を得るためには、次の言語をどのように選べば良いのではないだろうか?

Googleにおける研究部門のディレクター、Peter Norvigは、10年かけて自分自身にプログラミングを教えなさい(source)と言う記事を書き、学ぶべき言語をどのように選ぶかについて明確なアドバイスを行っている。

最低でも、半ダースのプログラミング言語を学びましょう。そのうちに含めるべき言語の一つはクラスによる抽象化をサポートしている言語(JavaやC++のように)、一つは関数による抽象化をサポートし(LispやMLのように)、一つは構文上の抽象化を含み(Lispのように)、一つは宣言的な仕様をサポートし(PrologやC++のテンプレートのように)、一つはコルーチンをサポートし(IcomやSchemeのように)、一つは並列処理をサポートしている言語(Sisalのように)にしましょう。

では、あなたの意見はどうだろうか?あなたは新しい言語を学ぶだろうか?それともそれはあなたにとって時間の無駄だろうか?

原文はこちらです:http://www.infoq.com/news/2008/05/should-you-learn-languages

この記事に星をつける

おすすめ度
スタイル

BT