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

      2017/07/03

気持ちよさそうに寝る猫

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

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

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

そんな状況を踏まえて、主要プログラミング言語の将来性を考えてみたいと思います。

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

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

Jun 2017 Jun 2016 Change Programming Language Ratings Change
1 1 Java 14.493% -6.30%
2 2 C 6.848% -5.53%
3 3 C++ 5.723% -0.48%
4 4 Python 4.333% +0.43%
5 5 C# 3.530% -0.26%
6 9 Visual Basic .NET 3.111% +0.76%
7 7 JavaScript 3.025% +0.44%
8 6 PHP 2.774% -0.45%
9 8 Perl 2.309% -0.09%
10 12 Assembly language 2.252% +0.13%
11 10 Ruby 2.222% -0.11%
12 14 Swift 2.209% +0.38%
13 13 Delphi/Object Pascal 2.158% +0.22%
14 16 R 2.150% +0.61%
15 48 大幅↑ Go 2.044% +1.83%
16 11 大幅↓ Visual Basic 2.011% -0.24%
17 17 MATLAB 1.996% +0.55%
18 15 Objective-C 1.957% +0.25%
19 22 Scratch 1.710% +0.76%
20 18 PL/SQL 1.566% +0.22%

ここ数年で大きく動いたのはObjective-Cが下がってSwiftが上がったことです。あとは、Goですね。48位から15位まで上がっています。

それ以外の言語はじわじわと上がったり下がったりといった感じです。

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

ただ、Ratingには大きなポイントが現れています。

実はJavaがダントツ?

今までは大抵JavaとCが1位2位を争う感じだったんですが、ここに来て、Javaがダントツの1位(Raitingが14.493%)となっています。2位のC言語が6.848%なので、大分差がついてます。3位のC++とは5.723%と微差なので、数字的には「Java VS その他言語」といった状況であることが読み取れます。

海外と日本の違い

「Pythonは海外で流行ってるのに日本ではRubyに人気を奪われたため流行っていない」

「Javaのフレームワークは日本では未だにStruts1が使われてるけど、海外ではSpringやPlay、JSFに移ってる」

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

グローバル化と言っても完全に均質化するわけではないですし、そうなってしまっては面白くありません。

自分的にはPythonよりRubyが好きですし、業務システム開発の経験者としてはStruts1が未だに使われているのも納得がいきます。業務システム開発のプロジェクトは、技術革新に対してかなり保守的ですからね。

最近のプログラミング言語の進化の傾向

関数型言語化していく?

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

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

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

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

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

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

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

静的型言語の復権?

2000年から2010年くらいまでのトレンドは「Javaみたいな静的型言語ってコンパイルめんどいし、コードも冗長だからPHPやRubyみたいな動的なスクリプト言語の方がサクサク開発出来て良いよね」って感じだったかと思います。

ところがここ数年は「やっぱ、JavaScriptにも型があった方がいいよね」とTypeScriptやECMAScriptからJavaScriptへと変換(トランスパイル)するAltJSの人気が出たり、GoやScalaみたいな「静的型言語だけど、簡潔な書き方が出来る言語」も生まれました。

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

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

Javaの将来性予想

おそらく、10年後も業務システム開発では一番使われてると思います。

Webサービスやゲームのバックエンドでは、少しずつ別の言語へとシフトしていくのではないかと思われます。

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

そのため、Webサービスやゲームのバックエンドで処理性能が求められるような高負荷システムの場合Javaが使われてきましたが、LL言語の性能も改善が重ねられていますし、GoやScalaのようなJava以外で処理性能の高い言語が出てきた為、今後はこの分野でのJavaの利用は減っていくのではないかと思います。

ただ、業務システム開発は新しいものをなかなか取り入れようとしない保守的な業界ですし、これまでにJavaで開発してきたコード資産も膨大なので、引き続きJavaが使われていくと思うんです。

Javaのもう一つの使われ方としてAndroidアプリ開発がありますが、こちらはGoogleとOracleとのJavaの特許・著作権紛争がどう決着するかによっては「Androidアプリ開発にJavaが使えない」なんでこともありうるかもしれません。もしそうなったら、新たに、どの言語が採用されるのかが楽しみです。Goなのか、JavaScriptなのか、はたまたAppleのSwiftみたく新言語が開発されるのか等。

これについてrebuild.fmで「GoogleはAppleのように開発者に負担を強いるようなことはしないだろうから、裁判で負けてもOracleにライセンス料を払ってAndroidでJavaはずっと使えるようにするんだろう。」という話がされてました。

と思っていたら、GoogleがKotlinをAndroid開発言語として正式にサポートすることが発表されました。KotlinはJava VMで動く言語です。Javaよりも簡潔な文法で生産性が高いと言われています。案外このKotlinがJavaのシェアを奪っていくなんて展開もあるかもしれません。

PHPの将来性予想

今後もWebサービスやスマホアプリ・ゲームのバックエンドで使われ続けると思いますが、徐々にRubyにシェアを奪われていくのではないかと思います。

言語としてPHPよりもRubyの方が洗練されていると感じるからです。

ただ、ちょっとしたWebサービスをインスタントに作ってレンタルサーバで運用するようなケースではPHPの方が断然向いていると思います。それに、世界で最も使われているCMSであるWordPressがPHP製なので、今後も大きな需要があり続けることは明白です。

Rubyの将来性予想

徐々にPHPやJavaのシェアを奪っていくのではないかと思います。

そのためにはWindows上での動作レベルがUnix系OS上でのレベルに追いつく必要があります。Rubyの外部モジュールのいくつかはWindows上ではまともに動きません。

Javaエンジニアの多くはWindowsPC上でコードを書き、単体テストをしています。JavaエンジニアがRubyを使い始めた場合、WindowsPCで開発を行うはずです。その際にエラーが多発して、Rubyをまともに動かすにはMacPCかデスクトップLinuxを使うか、WindowsにLinux仮想環境を構築しなければならないと知ったら、「じゃあ、使わねーよ」となってしまうかもしれません。

…と思っていたのですが、Windows10でBash on Ubuntu on Windowsが導入され、Windows上でもLinux環境を手軽に使えるようになったので心配無用のようです。

とはいえ、最近は「やっぱ静的型があった方が良いよね」って流れがあるので、もしかしたら、ScalaやKotlin、Goにシェアを奪われていくなんてこともあるかもしれません。

C#の将来予想

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

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

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

JavaScriptの将来予想

TypeScript, Dart, CoffeeScriptのようなAltJS経由で書かれるようになり、JavaScriptを直接書くことは減ってくんじゃないかと言われてましたが、AltJS競争はどうやらTypeScriptが生き残りそうな模様です。一方ECMAScriptからJavaScriptへトランスパイルするという流行もあります。

といっても、これは最先端の開発をしている企業での話であって、そうではない多くの企業ではJavaScriptを直接書くパターンが多いんじゃないかと思います。

というのも、JavaScriptはそこまで生産性の低い言語ではないと思うんです。割と簡潔な記述が出来るし、ちょっとしたものをささっと早く作るのには向いてると思います。

それにトランスパイルするのって意外と時間かかってめんどくさいですからね。

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

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

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

IOが発生する所を全てコールバック関数で結果を受け取らなければならないので、コールバックがネストしていって、いわゆるコールバック地獄ってやつです。

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

現在はyield構文が導入されてコールバック地獄はなくなったようですが、やっぱり普通に同期IOの書き方が出来たほうが簡単なので、node.jsがサーバーサイドのメインストリームになることはないんじゃないかとおもいます。

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

プログラミング初心者におすすめのサービス
1. 講師から対面で学びたい派には

プログラマカレッジをおすすめします。ProEngineerという転職エージェントが運営しているプログラミングスクールです。20代限定なんですが、無料で受講できて、修了後、就職支援もしてくれるんです。最高過ぎですよ、これ!!就職の紹介料を企業からもらえるのでスクールを無料にできるんでしょうね。すばらしいシステムだと思います!

30代以上の方には

プログラマカレッジは20代限定なので30代以上の方にはWebスクをおすすめします。受講料の返金保証がついているし、毎日11時〜23時まで通い放題なのでとてもいいと思います!

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

「就職保証付き」オンライン就職予備校をおすすめします。Javaエンジニアコースでは就職保証がついているのでプログラマーとして就職したい方にはぴったりです。Javaエンジニアの求人ってめっちゃ多いし、求められる技術レベルもそこまで高くないのでちゃんとした教育プログラムなら就職保証できるだろうなとJavaエンジニア経験者の私も思います。

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

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

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

 - 技術