これまでに触れてきたプログラミング言語のまとめ

自分がこれまでに業務内外で触れてきたプログラミング言語をまとめました。以下免責事項です。

達人プログラマーの「毎年1つの新しい言語を習得しよう」を実践しようとする人が、 次に習得するべき言語を何にしようか迷ったときに参考にしてもらえるような記事を書くこと目的にしています。

修正点などがありましたら https://twitter.com/itometeam までお願いします。

JVM系言語

JVM(Java Vertual Machine)上で動く言語系統で、筆者が普段業務で一番使うことの多い系統の言語です。 ハードウェアの違いをJVMが受け止めてくれるおかげで実際の動作環境を気にせずに済む上に、ほとんどの言語ではJavaとの相互呼び出しが可能になっているため、 新しい言語でもJavaの豊富な資産を使うことができるというメリットがあります。 最近は各OSに動作環境があるスクリプト言語が多かったり、新しい言語が当然のようにクロスコンパイルに対応していたり、 LLVMのような機械語レベルでOSの違いを抽象化をする仕組みがあったりと、Javaの登場初期に比べてアドバンテージは少なくなりましたが、 いまだに多くのユーザーを抱えている言語系統です。なんてったって30億のデバイスで動いてるんだから。

Java

JVMはもともとJavaのための仕組みで、他の言語からJavaの資産が使われることが多いため、JVM系の言語を学ぶなら避けて通れない言語です。 オブジェクト指向の代表的な言語の一つで特にクラスベースのオブジェクト指向が特徴です。 プログラミング言語の中では少し古めな分類ですが、ローカル変数の型推論やラムダ式など流行りの機能もアップデートで追加されていっています。

Kotlin

Intellijなどの統合開発環境を開発しているJetBrainsが開発した言語で、“100 interoperability with java”(Javaと100%相互運用可能)を掲げています。 Javaの言語仕様に加えて、null安全性や拡張関数を使った柔軟な言語拡張など、過去のプログラミング言語のエッセンスを少しずつ寄せ集めたような言語です。 2017年にAndroid開発の公式言語になりました。

Scala

関数型のパラダイムを取り入れたJVM言語です。Kotlinと比べてより関数型言語色が強く、型クラスやモナド、パターンマッチなど関数型言語特有の機能を備えています。 implicit classによる暗黙の型変換で既存のクラスの挙動が拡張や、強力なパターンマッチが使えたりなどJavaにない特徴的な機能が多いです。

Clojure

LISP系言語の方に書きます。

ブラウザで動く言語

主にJavascriptと、それにトランスパイル(ある言語を他の言語に書き換えること)される言語です。ブラウザで動くため、エンドユーザーにとってはもっとも動作環境を選ばない言語だと思います。 NodeJSのおかげで、シェルで動くツールやサーバーサイドなどでも使える汎用性があります。

Javascript

筆者がJavascrptを勉強し始めた頃は「プロトタイプベースのオブジェクト指向言語」という説明が最もよくされていましたが、 最近ではクラスの導入や関数型パラダイムの流行などがあり、だいぶ様変わりした感じがあります。 クラスも関数も同じオブジェクトで、 function をそのまま呼び出すこともインスタンス化することもできます。 Javaからプログラミングを始めた自分にとって function をもとに高階関数の理解が進んだことは、他の言語を学ぶいい足がかりになったと思います。

Typescript

Javascriptに型注釈をつけた言語です。結局トランスパイルされて最終的に動作するのはJavascriptなので、型をつけることによって実行時のパフォーマンスがよくなることはありませんが、 コード補完が効いたり型の不一致による実行時のエラーが減らせたりします。複雑化しているWebアプリ開発にとってはありがたい存在です。 既存のJavascriptに型をつけるために結構複雑な型定義を書かないけないことがあります。

Dart

Javascriptの問題を解決すべくGoogleによって開発された言語。AltJSはJavascriptにトランスパイルして動くものが多いが多いですが、 Dartは独自のエンジンの上で動く言語として作られました。(現在ではJavascriptにトランスパイルする方針に変わっています) 言語仕様はJavascriptとJavaの中間のような言語です。Flutterの開発言語です。

以前に書いたFlutterに関する記事

https://itome.team/blog/2019/08/flutter-for-android-developer/

その他のスクリプト言語

Javascript以外のスクリプト言語。

Python

Ruby

これから書く

LISP系言語

Common Lisp

これから書く

Emacs Lisp

これから書く

Clojure

これから書く

その他

Rust

Go

Elixir