主要プログラミング言語の将来性を考えてみた

2015年12月12日に投稿 → に更新 技術

気持ちよさそうに寝る猫

「PHP、Perlはオワコンってよく言われてるからRubyやPythonがいいのかなぁ?」
「Javaは言語仕様が古くてコードが冗長って言われてるけど、未だに使われてるよな?」
「関数型言語ってそろそろ学んだ方がいいのかなぁ?」

ネットでは「○○(言語名)はオワコン」みたいなことがよく言われていますが、そこで挙げられた言語は今もなお使われ続けています。よく非難されているのはJava、PHP、Perlですよね。

どれも未だ現役で、PHP、Javaに至っては求人数トップ2の言語です。

これらを踏まえて、主要プログラミング言語の将来性を考えてみます。

世界のプログラミング言語ランキング

2019/2のTIOBE Index(プログラミング言語のランキング)は以下のようになってます。

Feb 2019 Feb 2018 Change Programming Language Ratings Change
1 1 Java 15.876% +0.89%
2 2 C 12.424% +0.57%
3 4 Python 7.574% +2.41%
4 3 C++ 7.444% +1.72%
5 6 Visual Basic .NET 7.095% +3.02%
6 8 JavaScript 2.848% -0.32%
7 5 C# 2.846% -1.61%
8 7 PHP 2.271% -1.15%
9 11 SQL 1.900% -0.46%
10 20 大幅↑ Objective-C 1.447% +0.32%
11 15 大幅↑ Assembly language 1.377% -0.46%
12 19 大幅↑ MATLAB 1.196% -0.03%
13 17 大幅↑ Perl 1.102% -0.66%
14 9 大幅↓ Delphi/Object Pascal 1.066% -1.52%
15 13 R 1.043% -1.04%
16 10 大幅↓ Ruby 1.037% -1.50%
17 12 大幅↓ Visual Basic 0.991% -1.19%
18 18 Go 0.960% -0.46%
19 49 大幅↑ Groovy 0.936% +0.75%
20 16 大幅↓ Swift 0.918% -0.88%

時々大きく動くときもありますが、だいたいは、じわじわと上がったり下がったりといった感じです。ここ一年だとGroovyが49位から19位へと大幅にランクアップしてますね。

10年くらいのスパンで見ると大きく動いたのはObjective-C、Swift、Goです。

Objective-CとSwiftはAppleの、Go言語はGoogleのゴリ推し言語なので、例外的なランク変動だと考えるとプログラミング言語の人気って急激に変わるものではないようですね。

Pythonが3位になった!

今まではJava、C、C++のC言語ファミリーの言語が1位から3位を占めていましたが、ここにきてPythonが3位に入ってきました。

Pythonは機械学習や人工知能関連の分野での需要爆発によって着実に人気を伸ばしています。

プログラミング言語といえばC言語ファミリー(C/C++/C#, Java/JavaScript)でしたが、少しずつ時代は変わりつつあることが伺えます。

なんとなく、最近コードを書いていて、C言語系の構文が古臭く感じる人も多いんじゃないかなと。末尾にセミコロン打ったり、if文にカッコをつけるのとかって、RubyやPythonのコードを書いた直後だと、冗長に感じたりもします。

海外と日本の違い

  • Pythonは海外で流行ってるのに日本ではRuby人気が高い(開発者が日本人のため)
  • Javaのフレームワークが日本では未だにStrutsが使われてるけど、海外ではSpringやPlay、Java EEに移っている

なんて話をよく聞きます。

まぁ、日本は日本なので必ずしも世界の潮流を追う必要はないですし、日本がこのような状況なのにも納得がいきます。

Rubyは文法が洗練されていて書いていて楽しいですし、業務システム開発では技術革新よりも安定した品質でシステムを開発・運用していくことの優先度が高いですからね。

Pythonについては日本でもAIブームによってユーザー数が爆増してるので状況は変わってきています。

最近の言語トレンド

関数型言語化していく?

高階関数、クロージャ等の関数型言語の仕組みを取り入れる言語が増えてきています。

っと言ってもJavaScriptは元から持ってた仕組みなんですけどね。例えば高階関数って以下のようなものです。

function calculate(x, y, operationFunction) {
	cosole.log('x = ' + x + ' y = ' + y);
	var res =  operationFunction(x, y);
	cosole.log('res = ' + res);
	return res;
}
function add(x, y) {
	return x + y;
}
function divide(x, y) {
	return x / y;
}

var res1 = calculate(4, 2, add); // res1 = 6

var res2 = calculate(4, 2, divide); // res2 = 2

calculate関数がoperationFunctionという関数を引数として受け取っている所がポイントです。これが高階関数です。

addという足し算する関数を渡すと足した結果が返ってきて、divideという割り算する関数を渡すと割った結果が返ってきます。

渡された関数を実行する前後でログ出力をしています。
この仕組みを使えば、計算の種類が増えてもログ出力のコードを何度も書かなくて済みます。

オブジェクト指向言語だと、Strategyパターンを使って同じようなことができますが、高階関数を使えば、関数だけで簡潔に実現できます。

Javaの場合、高階関数・クロージャはJava8(2014年)でようやく導入されました。C#では高階関数のことをデリゲートと言いますが、2005年に導入されています。この部分だけで見るとJavaはC#に比べて9年遅れた言語と言えます。

静的型言語の復権?

2000年から2010年くらいまでのトレンドは、

「Javaみたいな静的型言語ってコンパイルめんどいし、コードも冗長だからPHPやRubyみたいな動的なスクリプト言語の方がサクサク開発できて良いよね」

って感じだったかと思います。

ところがここ数年は、

「やっぱ、JavaScriptにも型があった方がいいよね」

と静的型言語であるTypeScriptからJavaScriptへの変換(トランスパイル)する技術や、GoやScala、Kotlinのような「静的型言語だけど、簡潔な書き方ができる言語」も生まれました。

トレンドが動的型言語に傾いていたのが、静的型言語へと揺り戻されているように感じられます。

それでは上記を踏まえて主要プログラミング言語の将来性を考えてみます。

主要言語の将来性予想

Javaは有償化で死亡フラグか?

おそらく、10年後でも業務システム開発では一番使われてるとは思います。ただ、少しずつ減少していくことが予想されます。

というのも、2019年からOracleはJavaの有償化を本格的に進めるようなので、新規開発では敬遠されていくと思うんです。

Javaのいい所は、他の言語に比べて処理速度が速いことです。と言ってもC言語に比べれば遅い場合が多いですが、LL言語(Perl, PHP, Ruby, Python)に比べてずっと速いんです。

C言語より遅いと書きましたが、C言語のビルド最適化度合いによってはJavaの方が速いケースもあります。Javaは実行時にハードウェアに最適化したマシン語を選択して実行するので、C言語をビルドするときにハードウェア最適化せずに汎用的なビルドをした場合はJavaに速度で負ける場合があるんです。

それくらいJavaは高性能なため、Webサービスやゲームのバックエンドのような高負荷システムでもJavaが使われてきました。

ですが、LL言語も性能改善が重ねられていますし、GoやScala、Kotlinのような生産性と処理性能を両立する言語が出てきたため、今後はこの分野でのJavaの利用が減っていくと考えられます。

ただ前述した通り、業務システム開発では技術革新よりも安定稼働が重要ですし、これまでにJavaで開発してきたコード資産も膨大なので、Javaは使われ続けると思います。

Javaのもう一つの使われ方としてAndroidアプリ開発がありますが、こちらはGoogleとOracleとのJavaの特許・著作権紛争でもめましたよね。

GoogleがKotlinをAndroid開発言語として正式にサポートすることを発表したことからも、やはりJava離れが進むと思われます。

KotlinはJava VMで動く言語で、Javaよりも文法が簡潔で生産性が高いと評判です。

PHPは高速化されて追い風

PHP7で処理速度が大幅に高速化されて追い風が吹いています。

PHPの一番の強みは、レンタルサーバでの動作です。

多くのレンタルサーバでRuby、Python、Perlの動作もサポートされていますが、ほとんどがCGIモードでの動作のため、フレームワークが使えません。

PHPはレンタルサーバでも内部モジュールモードで動作できるので、レンタルサーバでフレームワークを使ったプログラムを動かしたいならPHP一択なんです。

それに、世界で最も使われているCMSであるWordPressがPHP製なので、今後も大きな需要があり続けることは明白です。

今後も小規模Webサイトから大規模Webサービスやスマホアプリ・ゲームのバックエンドまで幅広く使われ続けると思います。

RubyはRailsの次が出てきてほしいところ

Rubyは個人的に好きな言語なんですが、人気としては徐々に落ちていくように思います。TIOBEのランキングでも一年間で10位から16位へとけっこう落ちています。

というのも、Ruby on Railsの次のヒットがなく、人気の起爆剤が足りないように思えます。

Rubyは洗練された構文の簡潔さが魅力ですが、ScalaやKotlinのような後発言語もまた負けず劣らず洗練された美しい構文になっています。

言語自体の魅力だけでなくRailsのような言語を使った技術のヒットが必要とされています。

C#はゲーム開発で需要増

今後もMicrosoft製品で使われていくであろうことと、UnityのようなMono環境での利用が伸びる可能性があります。

Monoは.NETのオープンソース版で、これをゲームエンジンに応用したのがスマホアプリ開発でデファクトスタンダードとなっているUnityです。

私もUnityでC#を初めて使ったのですが、C#はJavaに比べて簡潔に書ける工夫がなされていて、とても良い言語だと感じました。

JavaやC++と構文的に共通点が多いので、覚えるのもかんたんでした。

JavaScriptの強さ

JavaScriptは、TypeScript, Dart, CoffeeScriptのようなAltJS経由で書かれるようになり、JavaScriptを直接書くことは減ってくんじゃないかと言われていましたが、そうでもないですよね。

開発の規模にもよるので、ちょっとしたWebサイトでは直接JavaScriptを書くケースのほうがまだまだ主流です。

規模の大きいフロントエンド開発では最新仕様のECMAScriptからブラウザで動作するバージョンのJavaScriptへトランスパイルする方法が人気です。

なんにせよ、ブラウザ上で動く唯一の言語なので需要が一番安泰な言語だとも言えます。

一方、node.jsのようなサーバーサイドでの利用はどうかというと、爆発的に伸びそうではありませんが、使わていくと思われます。

node.jsは趣味でリアルタイムブラウザすごろくゲームを作った際に使ったのですが、正直しんどかったです。

IOが発生する度にコールバック関数で結果を受け取らなければならないので、コールバックがネストしていって、いわゆるコールバック地獄になってしまいます。Promiseなどのコールバックのネストを抑える技術もありますが、それでもふつうの同期IOに比べてプログラムが複雑になってしまいます。

node.jsをしばらくやった後、PHPに戻ったら、「同期IOのプログラミングってなんて楽なんだぁ!」と感動しましたからねw

ですから、node.jsがサーバーサイドのメインストリームになることは難しいとおもいます。

フロントエンドからバックエンドまで全てJavaScriptで書くというのは一つの理想のようでもありますが、やはり適材適所であり、言語にも多様性があったほうがいいですよね。

そんなわけで、プログラミング言語の将来性について、自分が使った経験や聞いた話、技術の流行などから、予想してみました。参考にしてもらえたら、うれしいです!

プログラミング初心者におすすめのサービス
1. 教室で学びたい派なら

プログラマカレッジは20代限定で、無料で受講できて、修了後、就職支援もしてくれるプログラミングスクールです。最高過ぎですよ、これ!!企業からの協賛金によって運営されいているため無料で受講できるんだそうです。すばらしいシステムだと思います!

30代の方には

プログラマカレッジは20代限定なので30代の方にはゼロスクがおすすめです。35歳以下なら無料で受講できます。教室も札幌、仙台、東京、大阪、神戸、福岡と全国展開しているので地方の方でも利用できます。

2. 自宅で学びたい派なら

Udemyという動画講座がおすすめです。時々特別セールがあって驚くほどの低価格で受講できるので、是非チェックしてみてください。

3. つまづいた時に質問したくなったら

プログラマー専用の質問サイトteratailをおすすめします。 つまづいた時にteratrailで質問すれば教えてもらえます。

4. エンジニア未経験の人でも利用できる転職エージェント

ワークポートは未経験の人の転職活動も支援してくれますし、全国の求人を扱っているので地方在住の方にもご利用いただけます。お給料をもらいながら社内研修でプログラミングを学べる会社が狙い目です。

これらのサービスを活用すれば、全くの初心者からでもプログラミングをばっちり出来るようになると思います!レッツトライです!