軽量言語)」でプログラミングする開発マンのブログこの広告は、90日以上更新していないブログに表示しています。Averages---ポール・グレアム氏は「普通のやつらの上を行け」(上記参照)というエッセイで、言語の選択の重要性(とLisp推し)を述べている。かんたんにまとめておくと、彼の会社は開発言語にLispを採用したため、ライバル会社よりも高速にWebサービスをリリースでき、商業的に成功したという話だ。Lispは難解だが強力な言語で、ハッカー御用達の言語とよく言われる。難解で習得者が非常に少ないため、使用しているライバル会社がほとんどなかったわけだ。Lispを採用するかどうかはともかく、言語の選択が重要であることについては、私は完全に同意する。これは当たり前のことを言ってるようで、意外とそうではない。「どの言語でも、たいして変わらない」という認識もけっこう根強くある。最初の学習言語は何が良いか?たとえばそう、これからプログラミングを学ぼうとする人がいるとしよう。その人が機械語を読み書きしようとする選択肢はありえない。挫折率は100%近いだろう。外国語を覚えようとするときに、くさび形文字のような人類初期の言語から覚えようとする人はまずいまい。グレアムのエッセイにもあるように間違っている。最初の学習言語として、機械語を支持する人はいないが、「アセンブラからやれ」という人はたまにいる。今どきアセンブラから入るのはつらいだろう。学生は国語の後に古文を学ぶのであって、古文から日本語を覚えようとするのは回り道だろう。英語を覚える前にラテン語から覚えようとするのも大変そうだ。してそんな不条理なことが起こるかといえば、コンピュータやプログラミングの分野は歴史が短いため、古代言語*1がまだ現役だからだ。私は昔ならC言語をすすめていただろう。最近ならJavaをすすめていただろう。今ならJavaScriptをおすすめしたい。推薦の理由としては、Webはもちろん、WSHなど使える場所が意外に多く、覚えたことがムダになりにくい。ほかの言語では難しくなりがちなGUIの実装も、HTMLだからかんたん。HTML5との組み合わせで注目が集まっており、将来性も十分だ。GoogleのV8エンジンの登場で、処理速度もLLの中ではダントツで早い。それから、実行環境(ブラウザ)がかんたんに用意できるのも、学習用言語としては大きい。新しい言語を習得するときに、開発環境の用意はストレスが溜まりやすいものだ。JavaScriptでなくてもよいが、習得者の人口が多い言語、とくにPHP、Ruby、Pythonなど、LL系の言語をおすすめする。逆にLLでない重量級言語、たとえばC++の学習コストは高い。できることもそのぶん多いが、最初はそのメリットを享受している実感が湧かない。やるとしても、後回しでよい。二番目の学習言語は戦略的に選択せよだれでも最初に学習する外国語は無条件に英語を選ぶだろう。いや、義務教育の中学校で英語を学ぶのだから、選択肢すら意識しなかっただろう。第二外国語は意識的に選択することだろう。マイナーな言語を選ぶ場合でも、それなりの理由があるだろう。目指すような人なら、なおさら重要なのは分かるだろう。中国語とスペイン語では、道が大きく分かれている。プログラミング言語もそれと同じである。二番目(以降)の学習言語は、戦略的に選択する必要がある。言語だけにこだわって成功するわけでもないが、それなりに考える必要はある。開発人生を有意義に過ごすためには。最初の言語は、無難なものがいい。外国語における英語のようなメジャーなものが良い。CやJavaやJavaScriptが良い。最初からLispだと挫折率が高い。二番目は主体的に選択すべきだ。二番目以降のLispは選択肢としてありうる。二番目の言語をばくぜんと選んでしまうと後悔する。最初に学ぶ言語がCなのは良いとして、つぎにC++を学ぶのは、順番からいって当たり前のようで、じつは複雑すぎておすすめしない。代わりのおすすめはLLだ。Cができればどれも難しくない。言語は開発効率に直結し、ひいては開発費用に影響してくる言語に貴賤はないが、向き不向きは確実にある。あらゆる分野で最強の言語を探すのは時間のムダだが、ある目的に最適の言語を探すことには意味がある。言語も道具であり、手段である。目的が何かに応じて、使う言語も決まってくるはずだ。職業プログラマの場合、採用や募集の際に言語を指定してくるから、重要なのは自明だ。私は同じことだと考える。個人であっても経営的視点がなくなるわけではないからだ。ソフト開発会社は、採用・募集時に言語を指定するのか。それは言語の選択が、たんなる机上の空論ではなく、開発効率や開発費用に関係してくるからだ。冒頭のグレアムの話だ。別の例を出すなら、GoogleのGo言語やDart、AppleのSwiftのように、企業が独自言語を作ることもある。JavaだってSunが、JavaScriptだってネットスケープが開発した。開発効率とまったく無関係であれば、営利企業がわざわざコストをかけて新言語を開発するわけがないだろう。開発言語によって、同じ機能を実装するのにも、要するステップ数が違い、要する人月が違い、よって開発コストが違ってくる。学習の難易度が採用のしやすさにつながり、人件費も異なってくる。これを逆の視点で見ればとうぜん、労働者側は就職・転職の難易度や給与が異なってくる。いってコストの安さだけでも選べない。処理速度が重要な分野は、今でもC++が選ばれる。遅いLLでは実用にならない。これもやはり、外国語のたとえで考えれば分かりやすい。第二外国語の選択に、その国への渡航費用などのコストと、旅行なり投資なりのリターンが関係してくるのと同じことだ。言語自体よりコミュニティを見るでは具体的にどうやって言語を選ぶのか?くわしくは別の機会にゆずるが、一言でいえば「コミュニティを見る」、ということをおすすめしたい。外国語のたとえで考えると、外国語の言語自体で決めようとするのは、労多くして功少なしだと思う。いや言語仕様の話ははてブなどネットをにぎわせている。あるていど習得してから判断できるのであって、外部からは分かりにくい。外国語を学ぼうとするときに、大多数の人は言語構造で決めたりしないはずだ。旅行に行きたいとか、投資がしたいとか、できるようになることで決めるはず。すると言語の文法がどうとかよりも、治安とか為替といった言語使用国の事情のほうが重要だったりする。いった情報を一言でかんたんに言ったのが、ここでの「コミュニティ」になる。言語のコミュニティ、たとえば公式サイトとか情報発信者のブログとか関連書籍とかから、自分の作りたい方向に沿っているかどうかを見ればよい。RailsでWebアプリをかんたんに作れるからRuby、HTML5やNode.jsでWebアプリを作れるからJavaScript、といったことだ。個人開発でなく職業プログラマの場合でも、けっきょく就職・転職したい企業が何を作るか、ということだ。軽薄なようだがそれでいい。RubyはPerlをはじめとしてLispやSmalltalkの言語仕様に影響を受けている、といった言語自体の細部は語りたくなる(私もいずれ語りたい)けれど、それはあるていど習得してからの話だ。おわりに最後になるが冒頭の話に戻って、じつは私がLispを知って学ぼうと決めたのには、ポール・グレアムの存在が大きかった。エピソード自体が強力な説得力があるのと、彼自身がLispの解説書も書いているので、マイナー言語ではあるが飛び込むモチベーションができたのだ。これも「コミュニティを見よ」ということに沿っている。グレアムはLispコミュニティの代表的な伝道者だろうから。見る*1:ただ新しい言語がかならず機能的に上位だとも限らない。グレアムが推奨するLispも古代言語である。(1)月別アーカイブリンクdev2のはてなブックマーク参加グループプログラミングはてなブログをはじめよう!dev2さんは、はてなブログを使っています。ブログを報告するスターをつけました引用をストックしましたストック一覧を見る閉じる引用するにはまずログインしてくださいログイン閉じる引用をストックできませんでした。再度お試しください閉じる限定公開記事のため引用できません。