プログラミング言語人気TOP10の簡易解説
0-1. 前書き
この世にはたくさんのプログラミング言語が存在します。Wikiepdiaのプログラミング言語一覧を見ると、実に200個以上というわけの分からない数の言語が並んでいたりします。
【参考URL】プログラミング言語一覧 - Wikipedia
http://ja.wikipedia.org/wiki/%E3%83%97%E3%83%AD%E3%82%B0%...
200の中にはほとんど使われてない言語も混じってるので、実際に仕事でざくざく使われている言語は20とか30とかそういうオーダーなのですが、それでも1人の人間が把握するにはちょっと多過ぎる数です。
本記事では、そうした有り余るプログラミング言語の海の中で「どれを勉強したらいいの?」とか「どれを採用するのが適切?」という悩みをお持ちの方が「よし、この言語に決めた!」と自信を持って決断できるように背中を押すことを目的として書かれました。
無責任に背中をドンと押すことが目的なので、これを読めば正しい判断ができるかという点についてはノーコメントとさせていただきます。使ってみないと過ちには気付けないものさ。
【参考URL】各言語の実行速度はこの辺を見るとわかりやすい
http://shootout.alioth.debian.org/
【参考URL】真面目な記事を必要としている人はこの辺を見た方が良いかも
http://ja.wikipedia.org/wiki/%E3%83%97%E3%83%AD%E3%82%B0...
http://codezine.jp/article/detail/1502
0-2. 人気TOP10言語の条件
2011年1月度のTIOBEのランキング上位10言語を基本とし、そこから7位のVBを排除して11位のJavaScriptを格上げしています。
【参考URL】 TIOBE Programming Community Index http://www.tiobe.com/index.php/content/paperinfo/tpci/
VBを落としている理由は、今年(2011年)はJavaScriptの年になりそうな予兆がちらほら見えることと、VBの説明がC#と若干被る部分があるので(MSの話とか、MSの話とか)、ネタ的な問題もあって入れ替えています。
一応、これを書いてる人間はObjective-C以外の9言語は仕事で使ったことがあります。Java、JavaScript、Ruby、Pythonはけっこうガリガリ使ってます。C#、Perlはさらっとしか使ったことがないのであまり自信はないです。お察しください。
以上、前置きでした。では本編をどうぞ。
1. Javaとは
・どんな言語か
ここしばらくTIOBEのランキングで1位を取っている有名言語。でも親会社はドナドナされた。
中間コードにコンパイルされVM上で動作するので移植性が高く、Web系や組込み系、Androidなど幅広い分野で利用されている。でも親会社はドナドナされた。
そんな言語も今ではプロプライエタリの申し子であるOracleさんの持ち物となり、今後どうなっていくかは今ひとつ不透明ドナ。
・長所
実行速度はCに及ばないもののスクリプト言語よりは数十倍速い。ガベージコレクション付き言語の中では最速クラス。
下位互換とクロスプラットフォームが割としっかりしているので、一度コードを書けばそれが広い範囲で長期間利用できる。Java1.4で書かれたライブラリが今でも普通にJava6から呼ばれていたりするみたいな。
・短所
VMを立ち上げるのに時間がかかるので、一瞬で終わる軽い処理を実行する場合はどの言語よりももっさりした動きになる。
名前空間とか、型の宣言とか、かなり厳密にやらないといけない。ダックタイピングなんてお行儀の悪いこともできない。ちゃんとインターフェース書きなさい、とな。
バグを防ぐという意味では厳密さはありがたくもあるけど、コード量は多くなるしディレクトリ構造は複雑になるので、コードを書く時はIDEがないとやってられない。
・誰が学ぶべきか
最近だと話題のHadoopとかCassandraとかがJavaで書かれている。その辺りのソフトと親しくなりたい場合は覚えておくと良いかもしれない。
あとは企業で利用されているケースが目立つので、覚えておけば仕事を得る手助けになる。
けど、言語としてはだいぶ古いし、なんとか0xほどではないにしても新しいバージョンの仕様がなかなか決まらないし(クロージャ入れると言い始めてはや何年?)、モダンなものを求めてしまう人には向かないかもしれない。
・ 参考図書
実はJavaの本はあまり読んだことがない。書籍よりJDKのListのコードとかを読んだ方が勉強になる気がする。
2. C言語とは
・どんな言語か
世の中はCでできている。WindowsだってLinuxだってアメンボだって、みんなみんなCでできている。
プログラミング言語だってCでできている。PythonだってRubyだってオケラだって、みんなCでできている友達なんだ。
というように世の中の基板になるところを支えている言語。
・長所
有名な高級(?)言語の中では最速の実行速度を誇る。なのでスクリプト言語を利用している時に速度が出なくて困ったら、その部分をちょろっとCで書き直すと平気で100倍速になったりすることもある。
何十年も使われてきた歴史ある言語なので、周りにはCで書かれたいろんな資産がある。学習する時に参考になる良いソースを探すのも楽。参考図書にも困らない。
・短所
ガベージコレクションがないのでメモリ管理を忘れた世代には使いづらい言語。コード量も軽量な言語と比べるとかなり多くなる。
自分で何かソフトを作ることになったとして、ピュアなCでガリガリ書くというシチュエーションはあまり思い浮かばない。C++を使うような気がする。
あと移植性が低い。たとえばLinuxで動いているコードをWindowsで動かそうと思ったら、いろいろ書き換えないといけないところが出てくる。#ifdef Windowsみたいな。
・誰が学ぶべきか
軽い言語だと勝手に裏側でやってくれるようなメモリの確保とかファイルポインタの操作なんかも、Cでは自分で意識して書かないといけない。ので、一度触れておくとプログラムが裏側で何をしているかが意識できて良いかもしれない。
OSや言語の細かい挙動を追いたいという願望が生まれた時に(たとえばPHPのネットワーク関連の機能について、実際にこれは裏では何をしてるんだ、ということが知りたくなった時とか)、Cが読めると割とあっさり答えに辿りつけたりもする。
ガリガリ書けるようになる必要があるかは別として、とりあえず知っておいて損はない言語。
・ 参考図書
書店でドキドキしながらはじめてのCを買うがいいさ。
3. C++とは
・どんな言語か
C言語にテンプレートとか、クラスとか、継承とか、多重継承とか、演算子のオーバーロードとか、デフォルト引数とか、その他いろんなパンドラの箱に入っていそうな仕様を取り付けることで出来上がった言語。
多くの仕様が加わることによって生み出されるコードは混沌としたが、最後には希望が残ったと言われているとかいないとか。
・長所
速度はCと同じく音速。その上オブジェクト指向やらスマートポインタやら様々な機能が付加され、Boostなんていう強力という言葉がよく似合うライブラリも使えるので、多彩なコードの書き方ができる。
CでできることはC++でもすべてできるので、個人的にはC++を使わずにCを使うというシーンがあまり思い浮かばない。
・短所
スマートポインタがいるとはいえガベージコレクションはないのでメモリ管理はやはり面倒。
学習する際はC言語の基本を学んでからC++に手を伸ばすような経路が一般的。つまり、ただでさえ学習コストが他の言語より高めなCを学んで、さらにC++の概念を学ばないといけない。使えるようになるまでかなり時間がかかる。
主観的な点数を付けると、PythonやRubyの学習コストを10として、Javaを15、Cを20とすると、C++の学習はコストが30くらいかかるような感じ。
あと、大規模なプロジェクトだとビルドにけっこうな時間がかかるのが割とストレス。
・誰が学ぶべきか
間違っても「ちょっとプログラムというのを学んでみたい。C++ってかっこよさそう」なんていう気持ちで手をつけてはいけない。「ちょっと登山を経験してみよっかな」と言ってチョモランマに登るようなものである。悪いことは言わないので高尾山(PHPとかJavaScript)あたりから初めておこう。
速くて省メモリな○○ライブラリというような触れ込みで公開されるライブラリはC++で書かれていることが多い。たとえば去年(2010年)Googleが公開したRE2という速くて省メモリな正規表現ライブラリはC++で書かれていた。
そういう良く呼び出され、速度が求められ、書き捨てられるようなコードではない系のソフトを作りたい人は甘えたことは言わずにC++に手を出すのが良いかもしれない。
・参考図書
Effective C++は本当にEffectiveな本だと思う。
4. PHPとは
・どんな言語か
正式名称は「PHP: Hypertext Preprocessor」(意訳:我はHTMLを生み出すために在る)。
JavaやRubyがWebアプリでも使える汎用的な言語なのに対して、PHPはその名の通りWebアプリで使うことを目的として作られた男らしい言語。
スクリプトレットでHTMLの中にさらっとプログラムを書きこんで動的なページを作る目的で作られた。その後、あれも欲しいこれも欲しいと拡張を続けていったら、いつの間にかもっともらしい言語っぽくなっていた。こうした日々拡張を重ねる言語をハウルの動く城式言語と呼ぶ(今考えた)。
・長所
初心者がプログラムを学び始めてから動的なページが作れるようになるまでにかかる学習時間の短さは魅力的。コードの量も短い。環境設定も簡単。
多くの有料レンタルサーバはPHPを使える環境を用意しているので、仕事じゃなく個人で使う用途でも活躍する機会が多い。
巷に出回っている求人の量が多いのも魅力。RubyやPythonの求人よりも圧倒的に多い。但しPHPを使える人の数も多いので仕事が取りやすいかどうかは別の話。
・短所
実行速度はスクリプト言語らしい速度。
Webアプリ以外の場所ではあまり利用されない。ので、Web向け以外の用途で使うためのライブラリとかはそんなに多くない。
PHPしか使えないプログラマはPHPerと呼ばれて迫害される決まりになっている。
・誰が学ぶべきか
これからプログラムを学びたいという人で、Web系を考えている人はとりあえずPHPから始めると手っ取り早いかもしれない(もちろんその前にHTMLは覚えておく必要はある)。
逆にWeb系以外(データ処理、GUIプログラム等)に手を出したいと思っている人にとっては、検討する必要がまったくない言語である。
既にいくつか言語を学んだことがある人なら学習にそれほど手間取ることはないはずなので、必要になった時に学ぶくらいのスタンスで良いかもしれない。
・参考図書
気になるPEARのライブラリを適当に読んでおけば自然と腕は上がるような気がする。あとは慣れてきたらプログラミングPHPを立ち読みすると迷いが晴れたりする。
5. Pythonとは
・どんな言語か
彼の名はPython(ニシキヘビ)。ライバル言語はPerl(改名前はPearl=真珠だった)とRuby(ルビー)。もっと良い名前はなかったのだろうか。
インデントを使ったブロックの表現と、プログラマがselfという文字をタイプする能力を格段に向上させる言語仕様が特徴的。
とてもお行儀が良い言語。PerlやRubyがTMTOWTDI(それをやる方法は幾通りも存在する)な言語であるのに対して、Pythonはやり方を1つだけ用意するようにしているところとかがお上品に見える。
・長所
簡潔で見やすいコードを書きやすい。書きあがったコードを見ると、なんというかどの言語よりもあっさりしているように感じる。
NumPyとか数学系のライブラリがけっこう充実している。MATLABの代わりに使う人もいるとか。
あとGoogleと仲良しで(Pythonの神様はGoogleで働いている)、GAEでも利用できたりする。
・短所
実行速度はやはりスクリプト言語らしい速度。
日本ではPythonを使った仕事に出くわすことはあまり多くない。Webフレームワークはいくつか存在するけど、Web系の仕事で見かけることもあまりない。
参考図書を選ぶ時にリアルなニシキヘビの絵を目にしないといけなかったり、利用している時にあまりかわいくない蛇のアイコンを目にしないといけなかったりすることがあるので、蛇嫌いな人は手を出しづらい言語。
・誰が学ぶべきか
プログラミング言語は、ヘビー級(C++やJava)とライト級(PythonやRuby)を1つずつ覚えておくと、その場に応じて使い分けられるので何かと便利。
ライト級の言語を1つも習得してなくてどれにしようか迷っているなら、Pythonは1つの選択肢になる。
既にライト級の言語を覚えているなら、無理にPythonに手を出す必要はあまりないかもしれない。
・参考図書
リアルなニシキヘビの絵が書かれた本。
6. C#とは
・どんな言語か
CをインクリメントするとC++になる。C++をさらにインクリメントするとC#になる。という名前の見た目からCに近い系統なのかと誤解してしまいそうだけど、実際のC#はJavaのコピー。
いろんなところがJavaと似ているので(中間コードに翻訳してVMで動くところとか、クラスの振る舞いとか)、Javaを知っているプログラマはそんなに悩むことなく学習することができる。
・長所
WindowsでGUIアプリを作ろうと思った場合、けっこういいものが作れる。SwingほどUI的に(お察しください)な状態にもならず、C++で作るほどコーディングが(お察しください)な状態にもならない。
Javaよりも後出しの言語である分、クロージャとか型推論とか、Javaにはない便利な機能もちらほら付いている。
実行速度も速い。Windowsで動かす分にはJavaより若干速かったはず。IDEもVisualStudioという鉄板ソフトがある。
・短所
Monoは頑張ってはいるけど、Linuxでの動作に関してはそれほど実績がない。現状ではApple頼みのObjectiveCほどではないものの、Micorosoft頼みの色が強い。
そのため、MSコケたら使う場所がなくなったという現象が起こらないとも限らない。そう簡単にMSが転ぶとは思わないけど、例えばモバイル分野辺りで居場所が確保できるかは少し不透明。いい言語なんだけどね。
Javaに似た言語ということで、記述するコードの量は軽量言語と比べると多め。
・誰が学ぶべきか
MSシンパな人、Windowsが大好きな人は、C#を学ぶことが義務付けられている。
逆にMSを敵だと認識している人は、どんなことがあっても使ってはいけない。
Windowsで動くGUIアプリを作りたい場合は、C#から始めるのもアリなんじゃないかと思う。
・参考図書
C#はあまり本格的に勉強はしてないので、オススメの書籍とかはよくわからない。なんかJavaっぽいなぁと思いながら書いたらちゃんと動いた。ということはきっと独習Javaを読めば書けるようになるんじゃないだろうか。
7. Objective-Cとは
・どんな言語か
名前の通り、Cにオブジェクト指向を組み込んだ言語。まさかこの言語が人気言語を扱う記事の中に登場するようになるとは、数年前までは予想もしていなかった。すいません、D言語より来ないだろうなんて思ってました。
スティーブ・ジョブズがMacに戻る前あたりから使っているお気に入りの言語。人気が出た理由はひとえにiPhone。iPhoneアプリを作るにはObjective-Cを使う必要があったことから利用者が急増していつの間にやらTOP10に入るような言語になっていた。
なぜC++じゃなくObjective-Cなのか。それはジョブズにしか分からない。
・長所
Cと互換性があるので、Cが使えるならObjective-Cを学習するのは割と簡単。もちろん実行速度も十分に高速。iPhoneのようなCPUを使い過ぎると電池的に困るような端末はこういう言語が向いてるのかもしれない。
最近のObjective-Cはガベージコレクションも付いてるらしい(今知った)。何かと進歩してるのだなぁ。
・短所
使いこなすにはCを知らないといけない。ということはC++と同じく、学習コストはスクリプト言語とは比べものにならないくらい高くなる。記述するコードの量ももちろん多くなる。
Apple以外の機器で利用されるケースはけして多くないので、もしAppleが「Objective-C、やめました」と言ったら一気にマイナー言語に逆戻りすることも考えられる。
・誰が学ぶべきか
あなたがApple信者であれば、他の言語には目も向けずObjective-Cを学びなさい。
あなたがMS信者であれば、C#かVBを学びなさい。
あなたがGoogle信者であれば、Pythonかgoを学びなさい。
あなたがSun信者なら……過去は忘れて新しい企業に入信しなさい。IBMあたりはどうでしょう?
iPhoneアプリを作りたいのであれば、宗派に関係なくObjective-Cを学んでおけば良いと思われる。逆にAndroid派なら目を向けなくても良い言語。
・参考図書
Appleのリファレンスのサイトがけっこう読みやすかった。
8. Perlとは
・どんな言語か
古くからCで書くほどでもないことをさらっと書きたい時に愛用されてきた歴史ある言語。銃器で言えばコルト・ガバメントみたいなものだと言えば分りやすいのではないだろうか。つまりCがトンプソンM1で、PythonはベレッタM92くらいということだ。
十分に手に馴染んでいる銃器をあえて手放すほどの理由をベレッタに感じなければ、コルトを使い続けるのも良いのではないだろうか。
・長所
長く使われてきた分、いろんなモジュールが揃っている。あと、たいていの環境に入っているので、客先のサーバで作業をしないといけない時とかにも役に立つことがある。
Learning Perlは読み物としても面白い。あとラクダの絵がかわいい。
・短所
実行速度はスクリプト言語らしい速度。
用途的にPythonやRubyと被るので、今あえてPerlを取る理由というのが個人的には思い浮かばない。生粋のPerl使いならきっと流暢な解答を用意してくれると思う。
・誰が学ぶべきか
職場で昔のPerlのソースをメンテする必要に迫られるというシチュエーションはけっこうあるので、さらっと読める程度は学んでおいた方が良いかもしれない。
これから学ぶのであれば、まずどのバージョンを学ぶのかから考える必要がある。新しくPerl6(Rakudo Star)が用意されつつあるけど、Perl5と比べるとだいぶ違う言語になっている。
レガシーなPerlを触る必要性を意識して学ぶならPerl5を、新しいPerlってどんなものだろうと探究心から学ぶならPerl6を手にとれば良いんじゃないだろうか。
・ 参考図書
ラクダがかわいいです。
9. Rubyとは
・どんな言語か
純粋オブジェクト指向でメタプロでPerlとLispが結婚して隔世遺伝が黒魔術で生まれた言語。
主な出産地は島根県の県庁所在地、松江市。小学校の頃に全県の県庁所在地を覚えるように言われた時、どうしても覚えられなかった松江市。
・長所
楽しくプログラミングができることを意識しているそうで、あまりプログラマを束縛するようなことはしない開放感溢れる言語仕様になっている。
作者が日本人なので、言語仕様に関するメーリングリストの議論も普通に日本語で行われている。日本人にはその辺が取っつきやすい。
Railsがけっこう便利。
・短所
実行速度はスクリプト言語らしい速度。
end, end, end...
行儀の悪い書き方をしてもあまり怒られない。ので、大人数で開発した時に「わるいプログラマ LV26」が混ざっていると混沌としやすい。目の届く範囲の少人数チームで使うのが正しい利用法なんじゃないだろうか。
・誰が学ぶべきか
Pythonを学ぶか、Perlを学ぶか、Rubyを学ぶか、と考えた時に、日本人だしRubyに一番親近感が湧くなと思ったら手を出すと良いかも。
Rails系の仕事はポツポツあるので、周囲で最近そういう案件見かけるなぁと感じた人は学んでおくと仕事の足しになるかも。
言語の硬度を測定すると、Javaは硬度8くらい、Pythonは6くらいになるのに対して、Rubyは3くらいになる。柔らかい手触りが好きだなと思う人はRubyを学ぶといいかも。
・参考図書
コードの世界を読んでRuby教に入信するればいいさ。あとActiveRecordとActiveSupportのソースを読む。
10. JavaScriptとは
・どんな言語か
ブラウザ上で動く言語。最近はnode.jsなんていうサーバサイドJavaScriptなんてものも出てきている。
ブラウザの世界はどこの国土にも属さない紛争地域になっているので、そこで生息するJavaScriptは周囲からのいろんな要求を受け入れてファットになるか、何も受け入れずに「勝手にしろ」と開き直るかのどちらかを選択する必要があった。
そこで彼は基本的なことだけをサポートした上で「あとはjQueryにでも言えよ。俺に言うな」というスタンスを取った。それで彼はあの激戦区の中にいてもハウルの城になることもなく、小さくシンプルなままの姿で居ることができている。
・長所
ブラウザ紛争地域で勝者になるには速度を追い求める必要があることから、実行速度は「その辺のスクリプト言語よりもよほど速いんじゃない?」というベンチマークをたたき出すようになっている。JITがトレーシングで最適化な感じで。
JavaScriptは軽量な言語だけど意外と何でもできる。オブジェクト指向だろうと、イベント指向だろうと、メタプロだろうと、関数型プログラミングだろうと、割と無理なく実現できる。
・短所
メインはブラウザ上で動作する言語なので、用途は限られる。間違っても巨大ファイルを操作してデータ処理をしようなんて用途に使うものではない。
一人前のJavaScript使いになるためには、ブラウザの違いに翻弄されて目を血走らせながら「IEがぁ、IEがあぁぁ」と叫ぶ儀式を通過しなければいけない。
・誰が学ぶべきか
Web業界で生きていくなら知っていないといけない言語。Webじゃない世界で生きていくなら知っていても役立つことが少ない言語。
手軽にGUIでグリグリするものが書きたい、と思った時に実はJavaScriptを学ぶのが一番近道なんじゃないかと思ったりすることもある。できることに制限はあるけど短時間で動くものが作れる。レトロゲームを再現する程度のアニメーションもできる。
・参考図書
書籍よりもprototype.jsとjQueryを読んだ方が勉強になる。gihyo.jpにソースコードリーディング的な記事があった気がする。
番外. Scalaとは
・どんな言語か
最近私がハマっている関数型オブジェクト指向言語。コンパイルされるとJavaと同じclassファイルに変換され、JVM上で動作する。
言語のイメージはここを見ればだいたい分かってもらえると思う。
http://blog.mwsoft.jp/article/41830073.html
・長所
Java並の実行速度とRuby並の書きやすさが合わさり最強に見える。Javaの資産が使い放題で、Erlangのような並列処理まで合わせ持つのでもう手に負えない。
コードの量もその辺のスクリプト言語並に短くて済む。
・短所
覚えるのにけっこう時間がかかる。CやC++ほどではないけどJavaよりも難易度高め。
・誰が学ぶべきか
初心者がいきなり手を出すのは少し難しいかもしれない。まずはJavaかRubyに手を出し、その後Scalaにとりかかるのが良いと思われる。
Javaを使っている人は、老若男女問わず今日からでもScalaを始めた方がいい。
Rubyを使っている人の中で、実行速度がもう少し速くならんものかなぁと思っている人は、今日からでもScalaを始めた方がいい。
Pythonを使っている人は、Pythonの神様が微妙と言っていたようにちょっと言語の方向性が違うので、興味があるなら使ってみるくらいのスタンスで。
・参考図書
Scalaプログラミング入門を読み終わった。いい本だった。次はプログラミングScalaを読む。その次はScalaスケーラブルプログラミングを読む。