プログラミング言語 比較

選択


プログラミング言語の選択で悩んでる人の参考になればと思います
比較するプログラミング言語はC/C++、Java、Kotlin、C#、Rust、Go言語、Python、Rubyを対象としています。

各プログラミング言語のメリット


C/C++

低水準な開発や高パフォーマンスが求められる開発、全てを1から行いたい場合に向いています。
また、何らかのプラットフォームにあえて依存した開発をしたい場合などに向いています。
メモリ管理がプログラマ側から行えるので、メモリ管理が小まめに必要なシステムの開発などでは有力です。
Visual StudioではマネジメントタイプのC++とアンマネジメントタイプのC++の開発ができますが、個人的にはメモリ管理がプログラマレイヤで行えてこそC++の価値があると思っているので、アンマネジメントのC++を使うことをお勧めします。
C#などでGUI開発をした際に、GUIからもっと低水準なアクセスを行いたい場合などにC++とQtの組み合わせによる開発を考えてみてもいいかもしれません。
そのほか情報処理を学ぶ際に基礎を正しく理解する上で、低水準言語の学習は必要だと思うので、C/C++を一度でも学んでみることをお勧めします。

C#

C#は基盤となるものに.NET Frameworkと.NET Coreがあります。
C#はCIL動作の言語で、実行に必要なプログラムがあるわけですが、それが.NET Frameworkや.NET Coreなわけです。
JavaでいうJVMってとこです。
C#、.NET Framework、.NET Coreはマイクロソフトが開発しているプログラミング言語、CILです。
WindowsのGUIプログラムを開発したい場合やWindowsに依存した開発が必要な場合は迷わずC#を選ぶといいと思います。
macOSやLinuxでももちろん動作しますが、どちらかと言うとサーバサイドとして使うイメージで、Windowsほど強力なGUI開発にはちょっとね。。。。
C#を学ぶ大きなメリットとして低水準の開発には向きませんが、ゲーム開発からデスクトップ、モバイル、ウェブと広範囲をサポートしています。
またゲームやデスクトップ開発に関してはかなりメジャーな分類に入るでしょうし、モバイルも最近は力が入ってるようです。
ウェブはAzureと組み合わせればかなり強力と言えます。

Java

一時期は注目が集められた言語なのですが、最近はちょっと。。。
Javaを学ぶならKotlinかC#を学びましょう。
そのほうが未来があります。絶対。

Kotlin

Java同様でJVM動作の言語です。
GoogleがAndroidの言語をJavaからKotlinに以降するということで一気に表に出てきましたね!
まだ日本語の書籍が少ないので学びにくいですが、この先Androidの開発では必要になるので学んでおいて間違いなしです。
これからAndroidのアプリを作ろうと思ってるならKotlinを学ぶと吉です。

Rust

Mozillaが開発に関わっている言語です。
FireFoxを作っている組織ですね。
最近、Go言語と比較されることが多いようです。
安全性、パフォーマンス、並列を特徴としているようです。
C言語などの立場で活躍できるようなっていう風によく見かけます。
Rustの実績としてFireFoxやDropBox、Chefなどがあります。どれもよく見かける有名なサービスです。
利用実績からしても実力のある言語であることは間違いなし。
Go言語より少ないため学習にかかる労力はRustの方が大きいかもしれません。。。
しかし、言語自体は実力のある言語であり、またプロジェクトなので興味のある方は試してみるのもいいかも。

Go言語

Googleが開発しているプログラミング言語です。
最近のプログラミング言語の中でももっとも学びやすい言語だと思います。
なにしろ言語の仕様がシンプルでわかりやすいため取っ付きやすさは間違いなくあります。
C/C++ほど低水準ではなく、それよりももうすこいアプリケーション部分の開発にぴったりな言語だと思います。
ネットワーク系のミドルウェアとかですかね。
実際にDockerがGo言語で開発されています。
1つ学んでおいて間違いのない言語です。
ご参考にどうぞ

Python

スクリプト言語です。つまり実行方式はインタプリタですね。
自分の感覚としてはスクリプト言語の中でもっとも高速なのでは?と思ってます。
Pythonを学ぶ価値は現時点で測りきれないでしょう。
まずデータサイエンスや人工知能理論など計算機科学をはじめとした科学の分野で力を発揮するライブラリが豊富であり、また実績がある点。
TensorflowなどでもPythonは重要な要素ですね!
人工知能などの分野で人気なだけではなく、ウェブなどでもバッチり使える言語の1つです。
またスクリプト言語であるため気軽・手軽に書くこと・実行することができることも良い点ですね。つまり何らかの反復作業の自動かにもってこい!

科学の分野ではAnacondaというPythonのディストリビューションが有名です。

Ruby

こちらもスクリプト言語です。
気軽にWebサービスを立ち上げたい場合はRailsというフレームワークを用いるのが一般的なイメージのある言語ですね。
個人的な意見としてはウェブ専門の開発であれば学習にかかるコストが少なくて良いのではないでしょうか?


各プログラミング言語のデメリット


それぞれの言語にももちろん多くのメリットがありますが、デメリットもその分存在します。
これらを比較して自分にとって何がもっともベストなのかを考えると良いと思います。
ではそれぞれの悪い点。

C/C++

言語の標準機能としてネットワーク系や暗号化処理系のライブラリは存在せず、プラットフォームが提供する機能(APIなど)を用いる必要があります。
ネットワーク系などのプログラムを作成しようとした場合、外部のライブラリを用いないとプラットフォームに強く依存します。
そのためプラットフォーム間で互換性のとれたコードを書くのは一苦労です。
またメモリ管理などが基本的にはプログラマ任せなので基本的な情報技術に関する知識は固めておく必要があります。
気軽さといった面でも欠けます

C#

高パフォーマンスを求めるのはやはり難しいです。(CILのため)
ウェブなどで用いる場合、AzureなどのIaaSなどであれば良いのですが、共有レンタルサーバなどでは動かせないのでは?
.NET Coreが入れればもちろん動くのですが、C#を動かすほど勢いのあるレンタルサーバはなかなかないでしょう。。。。
IaaSでないときつい。
そういった点では気軽さ・手軽さは欠けます。
また、GUIソフトの開発に関してはWindowsのネイティブなC#であればWindows上で動作するプログラムはわりかし簡単に作れるのですが、別のプラットフォーム(Androidなど)で動作するGUIソフトの開発となると、Xamarinなどの知識が必要となり覚えることが多く大変かもしれません。

Java

言いたいことがたくさんありすぎるんです。が、一部だけ。。。
まずAndroidの公式開発言語から外されました。
Androidなどモバイルの開発ではおさらばになる日も近いかも。
これから先のことは知りませんが。

JVMのパフォーマンスが.NET Frameworkなどよりも悪い気がします。(悪いようです)
開発環境に関してもC#などと比べると劣ります。
また他のプログラミング言語と比べると未来がありませんね。(現時点で)

とにかくJavaを学ぶならKotlinを学びましょう。はい

Kotlin

デメリットというか個人的な残念な点としてJVM動作であることです。
ま〜個人的な意見何ですけどね。
現時点で学ぶのに必要な書籍など日本語のものが少ない点が大きく影響すると思います。
それなりに使えそうな言語なので早く書籍類などが整って~

Rust

書籍が少ない点もあれなのですが、、、
そもそもC++とかでよくね??って点が結構思いつくんですよね。
またはGoでよくないかなぁってとことか。
あまりプログラミングの初歩としては向いてませんよねぇ。
面白さを追求するには良いのでしょうが、現時点でメインの言語として用いるにはリスクが大きいと思います。

Go言語

プログラマの確保が難しいと一時期言われていましたが、だんだんGo言語のプログラマも増えてきたように思います。
その割には書籍類や日本語の情報が少なめに思えます。
言語仕様がシンプルでわかりやすいのだからもっと公式のリファレンスもわかりやすくしていただければ幸いなのですが。。。

Python

インデントが定められているのも場合によってはデメリットと出ますね。
また、当たり前ですがコンパイラタイプと比較するとパフォーマンスは劣りますね。
引数などに特定の記述が強制である点も時には邪魔に思えます。

Ruby

Railsしか使えないプログラマがいる点。
これ、結構痛手です。
Railsというプログラマブルではないフレームワークについて簡単にWebサービスを実装できることに関して言えば良いのですが、Railsしかできない人がプログラマです!って言われても、、、それを超えた応用にたどり着くには0ベースといっても間違えではないでしょう。
また、 Pythonと比較してしまうと力を発揮できる分野が狭いことも少々。。。あれです。

Railsを否定している訳ではないのですけどね〜

こんなとこでしょうか。