Java言語とは
200以上あるプログラミング言語(PCに命令を伝えるための人工的なコトバ)のなかから人気の3つを取り上げこれから学んで行くJava言語がどういったものかを理解します。
(参考「プログラミング言語人気TOP10の簡易解説」http://www.mwsoft.jp/column/program_top10.html)
1. Javaとは
・どんな言語か
ここしばらくTIOBE(プログラミング言語)のランキングで1位を取っている有名言語。
中間コードにコンパイルされVM上で動作するので移植性が高く、Web系や組込み系、Androidなど幅広い分野で利用されている。
・長所
実行速度はC言語に及ばないもののスクリプト言語よりは数十倍速い。
一度コードを書けばそれが広い範囲で長期間利用できる。Java1.4で書かれたライブラリが今でも普通にJava6から呼ばれていたりするみたいな。
・短所
VM(仮装マシーン)を立ち上げるのに時間がかかるので、一瞬で終わる軽い処理を実行する場合はどの言語よりももっさりした動きになる。
名前空間とか、型の宣言とか、かなり厳密にやらないといけない。
・誰が学ぶべきか
最近だと話題のHadoopとかCassandraなどがJavaで書かれている。その辺りのソフトと親しくなりたい場合は覚えておくと良いかもしれない。
あとは企業で利用されているケースが目立つので、覚えておけば仕事を得る手助けになる。
けど、言語としてはだいぶ古いし、なんとか0xほどではないにしても新しいバージョンの仕様がなかなか決まらないし(クロージャ入れると言い始めてはや何年?)、モダンなものを求めてしまう人には向かないかもしれない。
2. C言語とは
・どんな言語か
プログラミング言語もCでできている。
というように世の中の基板になるところを支えている言語。
・長所
有名な高級(?)言語の中では最速の実行速度を誇る。なのでスクリプト言語(比較的単純なプログラムを記述するための、簡易的なプログラミング言語全般)を利用している時に速度が出なくて困ったら、その部分をちょろっとCで書き直すと平気で100倍速になったりすることもある。
何十年も使われてきた歴史ある言語なので、周りにはCで書かれたいろんな資産がある。学習する時に参考になる良いソースを探すのも楽。参考図書にも困らない。
・短所
コード量が軽量な言語と比べるとかなり多くなる。
自分で何かソフトを作ることになったとして、ピュアなCでガリガリ書くというシチュエーションはあまり思い浮かばない。C++を使うような気がする。
移植性が低い。たとえばAndroidで動いているコードをiOSで動かそうと思ったら、いろいろ書き換えないといけないところが出てくる。
・誰が学ぶべきか
軽い言語だと勝手に裏側でやってくれるようなメモリの確保やファイルポインタの操作なんかも、Cでは自分で意識して書かないといけない。そのため、一度触れておくとプログラムが裏側で何をしているかが意識できるようになり良い。
OSや言語の細かい挙動を追いたいという願望が生まれた時に(たとえばPHPのネットワーク関連の機能について、実際にこれは裏では何をしてるんだ、ということが知りたくなった時とか)、Cが読めると割とあっさり答えに辿りつけたりもする。
ガリガリ書けるようになる必要があるかは別として、とりあえず知っておいて損はない言語。
3. C++とは
・どんな言語か
C言語にテンプレート、クラス、継承、多重継承、演算子のオーバーロード、デフォルト引数など、その他いろんな厄介な仕様を取り付けることで出来上がった言語。
多くの仕様が加わることによって生み出されるコードは混沌としたが、最後には希望が残ったと言われているとかいないとか。
・長所
速度はCと同じく音速。その上オブジェクト指向やらスマートポインタやら様々な機能が付加され、Boostなんていう強力という言葉がよく似合うライブラリ(ある特定の機能を持ったプログラムを、他のプログラムから利用できるように部品化し、複数のプログラム部品を一つのファイルにまとめたもの。)も使えるので、多彩なコードの書き方ができる。
CでできることはC++でもすべてできるので文字通りCにプラスされた感じ。
・短所
メモリ管理は面倒。
学習する際はC言語の基本を学んでからC++に手を伸ばすような経路が一般的。つまり、ただでさえ学習コストが他の言語より高めなCを学んで、さらにC++の概念を学ばないといけない。使えるようになるまでかなり時間がかかる。
PythonやRubyの学習コストを10として、Javaを15、Cを20とすると、C++の学習はコストが30くらいかかるような感じ。
大規模なプロジェクトだとビルド(最終的な実行可能ファイルを作成すること)にけっこうな時間がかかる。
・誰が学ぶべきか
間違っても「ちょっとプログラムというのを学んでみたい。C++ってかっこよさそう」なんていう気持ちで手をつけてはいけない。「ちょっと登山を経験してみよっかな」と言ってチョモランマに登るようなものである。
速くて省メモリな○○ライブラリというような触れ込みで公開されるライブラリはC++で書かれていることが多い。たとえば去年(2010年)Googleが公開したRE2という速くて省メモリな正規表現ライブラリはC++で書かれていた。
そういう良く呼び出され、速度が求められ、書き捨てられるようなコードではない系のソフトを作りたい人は甘えたことは言わずにC++に手を出すのが良いかもしれない。
ーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーー
最初に登場したJavaをこれから学ぶということで、次回はそのための開発環境の整え方を学びます。