あなたが学ぶべき10のプログラミング言語

純粋関数型言語は当然学ばなければなりません。
副作用の分離とモナドによる抽象化は本当のプログラマーなら知っておくべきでしょう。
遅延評価のメリット・デメリットとそれを活かしたアルゴリズムも重要です。

  • Scala

オブジェクト指向と関数型の機能を合わせ持ったマルチパラダイム言語のScalaを学ぶことは、あなたにとって新たな知見となるでしょう。
Twitterのインフラで使われるなど実績も十分で、現在のプログラマーにとっては当然のように使えるべき言語の1つです。
Haskellもまたそうですが、Scalaは型が強力なので型レベルプログラミングを学び、コンパイル時のエラー検出について考えてみるのもよいでしょう。

マルチコアのCPUが当たり前になった現在では、難しい並列処理をいかにして簡潔に実現するのかというのは非常に重要なテーマです。
Erlangは並列処理を念頭において開発された言語で、アクターモデルによる並列処理が特徴です。
アクターモデルによる新しい並列処理のアプローチは今後必ず重要になってくるので当然学ぶべきでしょう。
Rubyライクな記述のできるElixirを学ぶのもいいかもしれません。

HTML5が普及してWebアプリケーションの重要性増しており、JavaScriptの重要性もまた非常に高まっています。
プロトタイプベースのオブジェクト指向や、プロトタイプチェーンによる継承など、クラスベースのオブジェクト指向と違ったアプローチは学ぶ価値があるでしょう。
また関数が第一級のオブジェクトなので関数型のような記述も可能です。
関数型言語で学んだ知見はここでも多いに役立つでしょう。

歴史ある関数型のLISPやその方言のSchemeなどはプログラマーを名乗るのであれば書けて当然の言語でしょう。
S式による一貫した記法によってコードそものものを第一級のオブジェクトとして扱える柔軟性は他にはない素晴しいものです。
マクロによるプログラミングについても大いに学ぶことがあるでしょう。

歴史ある関数型言語MLから派生して生まれた、オブジェクト指向の機能を持った関数型言語です。
純粋な関数型言語Haskellとはまた少し違ったアプローチのOCamlを学ぶことで、関数型言語に対する理解がさらに深まるでしょう。

  • Coq

プログラムにはバグが付きものですが、バグを無くすにはどうすればいいでしょう。
テストを書けばテストケースに漏れがない限りはプログラムの品質を保証できます。
しかし、定理証明系のCoqを使えば、プログラムの動作を完全に証明することもできます。
テスト駆動開発、ビヘイビア駆動開発に続く、証明駆動開発について学ぶことは新しい知見となるでしょう。

Templateを使ったGenericプログラミングや、constexprによるコンパル時実行、型推論、ラムダ式など先進的な機能がたくさん詰ったC++は是非学んでおきたい言語です。
ある程度の規模の高速なネイティブプログラムを開発しようと思うとCでは非力すぎるため、多くの場合C++が最良の選択肢でしょう。
高速なネイティブプログラムが必要となる場面というのは未だ多く、学ばなければならない言語の1つでしょう。

Luaはプログラムに組み込んで使うこと目的として開発されたJavaScriptライクなスクリプト言語です。
言語として特徴的なのは途中で処理を止めて再開することができるコルーチンを持っている所でしょう。
スクリプト言語でありながら動作が非常に高速で、プログラムに組込むDSLとして最適と言えます。
例えばプログラムの設定ファイルの記述をLuaで柔軟に行なえるようにするなど、DSLを組込みこんだ設計というのは学ぶべき価値があるものです。