達人プログラマーに書いてある「1年に1つは新しい言語を学んでみる」というような言葉があるそうで、最近よく聞きます。おそらくきのこ本の影響もあるのでしょう。
そこで私自身忘れつつある様々な触れてみた言語について、学んだ上で感じた点などをまとめてみようと思います。
C++
私が一番長く、そしておそらくまだまだであるとはいえ慣れている言語だと思います。この言語はかなり難しい言語ですね。とんでもない曲者です。
C言語的な手続き型とオブジェクト指向とが混然一体となっています。楽をしたい人にとってはあまり深入りしない方がいい言語かなと個人的には思っています。
ただ、この言語によるオープンソースはかなり多いので、プログラミングを学ぶ上である程度知っていないと詰まるかもしれませんね。
Java
ある意味私が逃げた言語です。
実際には使い道に困ったというのがあります。私はPC環境自体がWindowsしかなくマルチプラットフォームな対応自体に利点を感じず、C++やC#を触ったりしていたので基本的にはWeb関連でしか使用用途がなく、さらに元々PerlでCGIを触っていたので、Web関連でもしっかり使う場面でなければなかなか役立つ機会がなかったので、勉強はしたけれどガリガリ使う言語にまでは至りませんでした。
あとはIDEの連携あってのJavaなのに、あまりそのあたりを使いこなせなかったのが大きいかもしれません。
最近ではIDEとの連携をしっかり取っている言語として、やっぱりもう少しやっておいた方がよかったかなと思ったりもします。読めなくはないので、本に書いてある基本的なJavaのサンプルソースが読めなくて困るなんてことはないですね。
私がJavaを学んだあとに感じた一番の利点と言えば、コーディングスタイルですね。あれだけ統一されている言語に触れると、コーディングスタイルがしっかりと意識できるようになります。
後はxUnitの使い方はこの言語で学びました。それは良かったかも。
C#
オブジェクト指向ではある程度触った方ですが、.NET Frameworkという巨大フレームワークの前に、本当にある程度でしかなくなってしまいました。
C#自体はWindowsの小規模なGUI開発などではかなり便利だったという印象で、Visual Studioで開発する際もGUI開発が楽にできる環境がそろっていたのでイベント駆動自体はC#で学んだと言ってもいいと思います。
Silverlightはやってて面白かったのですが、Silverlight3が出る少し前くらいのころに触ったので、今はもっと進歩しているんでしょうね。
C#はどうしてもVisual Studioありき、Windowsありきという形なのでそれ以外の環境では難しいのが欠点でしょうか。静的型付けのオブジェクト指向言語としてはかなり好きな部類です。
Python
この言語だけは学び方から入り方から全てがヒドかったですね。
まず始めたきっかけが「リバースエンジニアリング」。
この時点でアウトでした。Pythonというより、スタック上のデータをアドレス指定で取りだすとか、Pythonを組み込みスクリプトとして利用しているデバッガ用のスクリプトを書くとか、そういうことにばかり頭を使うのでPython自体を勉強するなんて感じじゃありませんでした。
ただそこから離れて触るうちに、Pythonの組み込みスクリプトとして強いというのが見えてきました。dllを読み込んだりできるというのは最初に見た時は本当に驚きました。
Ruby
スクリプト言語では、オブジェクト指向がしっかりしたいい言語だと思いますね。
この言語は私としては正規表現はこの言語で学ぶのが一番いいのではないかと感じました。正規表現の文法だけに集中しやすく、それ以外のごちゃごちゃとした構文に惑わされにくいというのはとてもよかったですね。
あとはダックタイピングのような動的言語特有の動作も見やすかったのは良かったですね。
OCaml
この言語はTDDBCでやるためになんとか書けなくもないくらいの状態に1月で持っていった思い出があります。
関数型としてという以上に、強力な型推論が一番私の中に残っています。あの型推論と型に対する機構のおかげでかなり「型」というものをしっかり意識するようになりました。「型は宣言してれば大丈夫」みたいな考えは昔まではある種あったのですが、そんなものは今はありませんね。
最後に
他にも触れた言語はありますが、それほどしっかり学んだことがないものばかりなので割愛します。
書き出してみると、使ってはいなくても自分の中で役に立っているみたいですね。
言語を学ぶ上で大切なのは、言語の特性や言語の生まれた背景です。とくに背景を知ると、「それでこういう風な構文になっているのか」と言ったことを知ることができ、その言語から離れた時にも自分の知識として活かすことができます。
これから先もそういうスタンスで言語を学んでいきたいですね。
次はおそらくGroovy、ですかね。