需要No. 1言語はどれ? 2016年度人気プログラミング言語を徹底比較
本稿は、Codementorのブログ記事を、Codementorより了解を得て日本語翻訳したものである。
科学、技術、工学および数学の素養がある人材に大きな需要があり、高い賃金が支払われているのは特に目新しいニュースではない。米国におけるソフトウェア関連職種のオンライン求人数は、2007年から2012年にかけて、他の求人に比べ3倍の速さで成長している。
米国労働統計局は、2012年から2022年にかけてソフトウェア開発に関する求人は、22%増加すると見込んでいる。2014年5月時点のソフトウェアアプリケーション開発者の平均年収は95,510ドル(約965万円)となっていた。
これからプログラミングを学ぼうと思っている初心者は、どの言語を学ぶべきか考えていることだろう。
各プログラミング言語の給与、需要、そして将来性を比較することによって、その疑問への回答のヒントとなるはずだ。
目次
各プログラミング言語の現状(動的/静的)
言語別求人ランキング
言語別給与ランキング
プログラミングに関するサポート体制について
各プログラミング言語の将来性
動的プログラミング言語
学びやすく面白さもあるため、一般的に動的プログラミンング言語は、初心者におすすめ出来る言語だと考えられている。コードを多用せず、ゼロからアプリケーションを構築可能で、難しいルールに従う必要がない。
通常、動的プログラミング言語は最高層で使用される。そのため、細部の習得に多くの時間を費やす必要がなく、言語の概要の理解に時間を費やすことができる。これも早期に結果を出したいと望むプログラミング初心者に人気の理由の1つだろう。
JavaScript
JavaScript(Javaとは別言語)は、フロントエンド(最初と最後の工程)に必要なクライアント側の言語だ。JavaScriptはすべてのブラウザと相性がよく、しばしば「jQuery」のようなライブラリ、AngularJSやEmber.js、Reactなどのフロントエンドフレームワークを活用した双方向のウェブアプリケーションに使用される。
JavaScriptは、Node.jsを活用したサーバ側の言語としても使用される。Node.jsは比較的新しく、勢いのあるコミュニティだ。
FacebookのReact NativeでJavaScriptを使用したネイティブモバイルアプリケーションを構築できるほか、phonegapなどのフレームワークでJavaScriptを使用しハイブリッドモバイルアプリケーションを構築することも可能だ。
しかし、JavaScripは型のない言語であるため、ミスを見つけて修正するのが難しく、扱い難い言語としても知られている。マイクロソフトのTypeScriptやReactが使用するJSXなどの、静的な型付きのバージョンも存在する。
Ruby
開発を面白く、かつ効率的にするために開発されたRubyは、Ruby on Railsのフレームワークによって人気を博した。
Ruby on Railsは、プログラミングの快適性を追求した「フルスタックのフレームワーク」である。Rubyは英語のように解読でき、Railsは、共通タスクを容易にするツールを備えている。
Shopify、Bloomberg、HuluやSlideshareなどの人気サイトでは、バックエンド開発の大部分にRubyを使用しており、Ruby on Railsで構築されている。
Python
Pythonもまた初心者におすすめできる言語の1つであり、米国の一流大学で言語学習の導入段階においてもっとも学ばれている。デスクトップアプリやWebアプリケーション等を構築する際に使用され、データマイニングに最適なツールを備えている。さらに、Pythonはコンピュータサイエンスやデータ解析、生物情報学など、アカデミックなコミュニティでも人気がある。
たとえば、Google、 Dropbox、 Pinterest、 Instagram、 Reddit、 BitTorrent、 Civilization IVなどはPythonで構築されている。
PHP
PHPはサーバ側のスクリプト言語で、PHPのコードで何をするか概念化が容易なため、初心者向けの言語と考えられている。この言語はWeb向けに特化しており、多くのWebサイトはPHPで構築されている。
たとえば、Facebook、Wikipedia、Yahoo!、 Tumblr、 WordPressなどはPHPで構築されたものだ。
静的型付き言語
静的型付き言語で構築されたアプリケーションはより拡張性と安定性があり、保守性に優れていることで知られている。静的言語はタイピングのチェックによる機能が厳しく、エラーの抽出が容易である一方、プロトタイプの作成が可能なため、多くのコードを使用する。ゲームエンジン、モバイルアプリケーションや企業のバックエンドは、一般的に静的型付き言語で構築される。
Java
汎用性のある言語としてJavaは、Androidアプリ、デスクトップアプリやゲームに使用される。また、先ほど述べたように企業のバックエンドの開発にも使用されている。
さらに、ビッグデータの保存や加工に使用するフレームワークHadoopは、Javaをベースとしており、Yahoo、Facebook、 Amazon Web Servicesといった企業で採用されている。
C
C言語は、システムソフトウェアの共通言語として、しばしば使用されているものだ。
Cは、今回紹介するほぼすべてのプログラミング言語、とりわけObjective-Cと C++に影響を与えた。つまり、もしCの知見があれば他の一般的な言語の習得は難しくないだろう。
しかし、簡単なタスクを実行するのに複雑なコードを必要とするため、はじめての言語として選んだ場合は苦労することになるだろう。といっても、Cの知識はきっとプログラマの助けになることは間違いないが。
Objective-C / Swift (iOS開発向け)
Objective-Cは、C言語を基にした言語であり、静的だが動的型付けもできる。AppleのSwiftは、Objective-Cと互換性をもつように設計された静的言語だが、静的型付けによりエラーを起こし難くなっている。
Pythonに触発されたSwiftは、新参のプログラマが習得しやすくObjective-Cに見られるいくつかの課題を解決するように設計されている。
C++
C++は、C言語を基にした影響力のある言語だ。システムソフトウェアのプログラミング用に設計されたが、ゲームやゲームエンジン、デスクトップアプリ、モバイルアプリ、Webアプリにも使用されてきた。C++は迅速なので、Facebookもいくつかの高性能で高信頼性のあるシステムをこの言語で構築している。
Adobe Systems、Amazon、Paypal、Chromeなどの多くのソフトウェアがC++で構築されている。Cと同様、C++は一般的に初学には向かない言語だと考えられているため、はじめて学ぶならばMeetups、またはC++Codementorで相談してみるのもよいだろう。
C#
C#(C シャープ)はマイクロソフトWindowsのNET フレームワークのために開発された。
C#は、Web開発、ゲーム開発およびマイクロソフトの開発一般に使用されている。マイクロソフトは互換可能なクロスプラットフォームでは知られていなかったが、C#を他のプラットフォームへ移行させ、Linux技術者によりよい開発ツールを提供する目的で、Monoと呼ばれるオープンソースプロジェクトを発案した。
最近では、C#をiOSやAndroid向けのネイティブモバイルアプリに使用できるようになった。
SQL
SQL(SequelまたはStructured Query Language)は、データベースとコニュニケーションをおこなう問い合わせ用の言語だ。
SQLはアプリケーションを構築するためには使用されないが、リレーショナルデータベース管理システム(RDMS)を使用するアプリケーションのデータ管理に使用される。
言語別求人のランキング
さて、ここまで各プログラミング言語の概要を少しだけ紹介した。
しかし、すべての言語に同じ需要があり、同等の給与が支払われるわけではないのだ。もし言語習得の目的が就業であり、また、言語習得がどんどん難しくなってきているという話にがっかりさせられたくないのであれば、次に紹介する内容が「どの言語を学ぶべきか」という問いに対するヒントになるだろう。
下のグラフは、indeed.comによる給与統計を基に、各プログラミング言語を9つの層に分割したものだ。
その結果、Swiftが一番多くの給与を得ることができ、Java、Ruby、 Python、C++とCも決して悪くない選択であることが判明した。さらに、給与のみに焦点を当てた場合はJavaScript、C#、SQLおよびPHPは理想的な選択ではないと言えるだろう。
平均給与は、需要(どの程度求人があるか)、供給(何人の開発者がその言語を使えるか)および経験(経験の浅い開発者はシニアの開発者より当然賃金は安くなる)などに影響される。これに従い、結論を急ぐ前に他の要素もじっくり確認してみよう。
求人のトレンド
以下は、プログラミング言語別の求人トレンド(indeed.comから抜粋)だ。
C、SQL、JavaおよびJavaScriptには多くの求人がある。一方、C#、C++とPythonもまた需要のある言語だ。
しかし、新興企業の職を得たいのであれば、indeed.comのトレンドはふさわしい指標ではない。
下のグラフの基となったAngelListは、新興企業による求人のためのサイトであり、ここの求人リストを見ると先とは異なるプログラミング別の需要を確認できる。
JavaScriptの需要があることが確認できる。また、新興企業ではJava、C、C++と C#よりもPythonおよびRuby (on Rails)の方が求められているということがわかるだろう。
言語別給与ランキング
次は、求人広告の内容から、潜在的にどの程度の賃金が得られるのかみてみよう。このデータはgooroo.ioから抜粋しており、求人広告で提示された給与の平均値で積算している。
Ruby、C++またはJavaを知っている技術者は、高い初任給を得られそうだ。優秀なRubyとPythonの開発者は不足し、高い需要があるので、RubyとPythonは潜在的にもっとも高い給料を得られるだろう。
JavaScriptは、2015年4月時点で188,168ドル(約2000万円)だったが、今では124,oo0ドル(約1300万円)に減っていて、落ち込みが大きい。
しかし、JavaScriptは特殊はケースだと言える。以下で説明しよう。
特殊なケース:JavaScriptのフレームワーク
単純にJavaScriptを他の言語と比較するだけでは、どの程度稼げるのかを正確に予測することはできない。
各プログラミング言語の概説で説明したとおり、JavaScriptはさまざまに分類される。フロントエンドのウェブサイトの開発を促進するため、多くのフレームワークが開発されてきたのだ。したがって、JavaScriptやjQueryを知っているだけでは、JavaScriptのフレームワークを理解している技術者よりも稼げる可能性は少ないだろう。
米国におけるJavaScriptのフレームワーク別、技術者の平均給料をみてみよう。(React & Backboneはライブラリであり、フレームワークとはしていない。Node.jsは含んでいる。)
平均給与は悪くない。
特に、Reactの展望は明るいだろう。もちろん、ここに記載されているのはあくまで参考であり、ineed.comでは平均給与105,000ドル以上とみている。これらの技術を学ぶにはJavaScriptを知る必要があり、逆にフレームワークを身につければJavaScriptをより有益なスキルにしていけるはずだ。
これらのフレームワーク技術者の需要を見てみよう。
Node.jsはバックエンドの開発用であるため、単にフロントエンドのフレームワークとなればAngularJSが圧倒的だ。フロントエンドのJavaScript技術者に関心があるのなら、AngularJSを学ぶといいだろう。
一方でReactは、比較的新しい技術だということもあり、AngularJSの初期段階と同じような勢いで人気を得ている。
まだ初期段階だが、AngularJSよりも汎用性があり、ユーザの使い勝手もいいため、これから需要はますます広がるだろう。
プログラミングに関するサポート体制について
独学でプログラミング言語を学ぶ場合、他の技術者からサポートを受けることが非常に重要な助けになると気づくだろう。
サポートコニュニティの一員となることは将来のあなたの技術者生活をより快適なものにする。
StackOverflow
StackOverflowは、相互支援の場として世界中の技術者に使用されている最大のコミュニティであり、プログラミング言語がどの程度普及し人気があるのか、また同時にそのコニュニティが言語習得に程度役に立つのか、を知ることができる。
言語の人気
StackOverflowのフォロワーを根拠として、各言語の現時点の人気を確認しよう。
すでにJavaとJavaScriptが技術者に大きな需要があることは確認した。これらの言語がもっとも多くのフォロワーをもっていることには驚きもないだろう。「JavaScrip」は現在「Java」を追い抜き、StackOverflowでもっとも多く使用されているタグだ。
SQLやRuby、Swiftのフォロワーは少ないが、RubyはWebの開発にもっぱら使用されていて、Swiftは比較的新しい言語であるため当然の帰結かもしれない
StackOverFlowでの回答率
StackOverflowでは質問を「正確に」しなければならない、という暗黙のルールがある。このことを頭に入れて各言語別の質問に対する回答を得られる確率を見てみよう。
この情報によると、C、SQL、それとC++関連では、質問に対し60%以上の回答を得ることができるとのことだ。
CとC++は専門性が高く、質問者はプログラミング経験豊富だからこそ、より正確に自分の質問を表現できるのではないか、と考える人もいるだろう。その一方で、SQLは物事を構築するために使用されているわけではない
注目に値するのはStackOverflowにおいて、PythnとRubyの技術者も回答に協力的である、という点だ。前述の通りPythonとRubyは初心者にもっともおすすめできる言語であることを考慮しても、30日以内に60%の回答があるということは驚きだ。
一方で、広範に使用されているはずのPHPの回答率は最低である。これは、多くの人がPHPに関する質問をしても回答はあまり得られていない、ということを意味する。
GitHub
開発に参加すると、できる限り既存のソリューションを使用することが最善だと気づくだろう。既存のソリューションは、一般的にオープンソースから取得でき、GitHubはこれを取得する手法を提供する。ユーザは自分の気に入ったプロジェクトに星印をつけ、あるプロジェクトに多くの星印がつくほど、そのプロジェクトは盛んになるという仕組みだ。
以下はGitHubの人気プロジェクトの言語別分布である。
JavaScriptがもっとも人気のあるツールだということは細部を確認せずとも明らかである。JavaScriptは、フレームワークや技術の移り変わりにおいて、技術者が現状についていくのは困難であると認識するほどに変化の速い言語だ。
加えて、Node.jsを除いてJavaScriptはフロントエンドの開発にもっとも使用されている。したがって、Ruby、Pythone、JavaおよびPHPといったバックエンド向けの言語と直接競い合っているわけではない。JavaScriptが他の言語とこれだけ差がある、というのは驚くべきことではないのだ。
一方で、RubyとObjective-Cは開発のためのたくさんのツールとリソースがある。興味深いのは、StackOverflowでの比較において、いずれの言語もJavaほど人気があるわけではないが、技術者はこれらの言語のオープンソースプロジェクトを有益と考えていることだ。
言語別の総プロジェクト数を確認すると、特にObjective-Cにこの傾向が強いとわかるだろう。
また、CやC++のオープンソースプロジェクトのほとんどはCやC++のためではなく、開発全般のツールにするために書かれている(たとえば、もっとも使用されているPythonの解釈プログラムはCPythonだ。これはCで構築されている)。
各プログラミングの概説で述べたとおり、CとC++はシステムアプリケーション開発によく使われている。そのため、GitHubのオープンソースプロジェクトもシステムツールのためだということがよくわかるのではないだろうか。
さいごに、PHPは広範に使用されているにも関わらず、使用可能なリソースの数という点では遅れをとっている。C#に関しては、マイクロソフトが自前の多くのサービスでオープンソースを模索しているため、将来GitHubにおける価値は拡大するだろう。
各プログラミング言語の将来性
さて、将来プログラミング言語はどの程度必要とされるのだろうか?
プログラミング言語の将来性は、「若い人材がどの程度その言語を採用するか」がその言語の人気やリソースの確保につながるため、多分にそれを使用するコミュニティの成長に依存する。では、人々が学習の対象としてどの言語に関心があるかを見てみよう。
Python、JavaScript、C#とSwiftは人々の関心をもっとも集めている。現在知られているトレンドを基にすると、次のような各論を出せる。
JavaScript
JavaScriptは疑いの余地なく人気の言語となっており、特にバックエンドの開発に使用されている。ちなみに、潜在的に(ReactNativeを介し)モバイルアプリケーションも構築できる。また、JavaScriptは多くのツールを取得し続け、かなり速いペースでアップデートされている。したがって、将来においても重要な言語であり続けるだろう。
Ruby
スタートアップは「Ruby on Rails」を好む。Airbnb、Twitch、Huluなどの多くの有名サイトはRailsで構築されており、Ruby技術者を必要としているだろう。Railsは習得しやすいため、コーディング初心者にとって人気であり続けると考えられる。
一方、Node.jsの台頭は間違いなくRuby on Railsの人気に影響を及ぼす。Githubにおいて、Node.jsはすでにRailsを追い抜いている。これは決してNode.jsがRailsを凌駕するという兆候ではないが、Railsも数年前にバックエンド開発でPythonの最大のウェブフレームワークDjangoに取って代わり、Djangoより多くの人気を博したこともあるのだ。
さらに、同一構造のアプリケーションという新たなトレンドもRailsの採用に影響するだろう。この慣行はWebアプリケーションのパフォーマンスに影響すると言われている。
同一構造のアプリケーションはNode.jsのプラットフォーム上で動くことを要求されており、フロントエンドと同じくJavaScriptで構築される。たった1つでもよく言語を熟知している(この場合はJavaScript)ということはアピールになるため、Rubyを新たに学ぶ人が少なくなる可能性はあるだろう。Googleの「Go」もまた、新たに注目を集め始めているバックエンド言語である。
しかしながら、Railsは頻繁にアップデートされていることもあり、しばらくは重要な言語であり続けるはずだ。特に開発者にとって豊富な利便性のあるツールもコミュニティも存在するため、多少人気が衰えてもRubyは活躍し続けるだろう。
Python
Pythonは、研究機関とデータサイエンティストに人気で、前述のとおり多くの初心者はPythonでコーディングを学ぶ。これはPythonが着実に普及しており、重要になってきていることを意味する。Pythonは、JavaScripと同様に爆発的な人気を得ているわけではないが、データサイエンス分野では高い需要があり、力強く成長していくだろう。
PHP
この数年間、バックエンドの開発トレンドはPHPから他の言語へ移行してきた。しかし、80%のWebサイトが依然としてPHPで構成されている。これはWeb用に設計された言語なので当然かもしれない。
しかしながら、初心者がどの言語を学ぶべきかをGoogleで調べると、多くの技術者がPHPを薦めていないことがわかるだろう。実際に、PHPは多く技術者から疎まれているのだ。
PHPのコミュニティは、PHPの正しいコーディングの仕方や新しい開発ツールを提供することでPHPに関する悪評を取り除こうとしている。しかし、2015年時点で(少なくとも米国では)PHPの将来性は停滞していると考えられている。
Java
AndroidによりJavaはもっとも人気のある言語に押し上げられ、その安定性と拡張性から開発会社からも支持されている。
ビッグデータ管理用のフレームワークとして「Scala」を使用するSparkと(他の言語をサポートする)Cassandraの台頭により、Hadoopはビッグデータ管理のフレームワークとしてどの程度人気を得続けるか予測が難しくなってきている。
しかし、大企業が転換期にどのように行動するかを考慮すると、Hadoopが捨て去られることはないと考えられる。Javaはバックエンド開発において優れたツールを持っており、企業の開発に不可欠なのだ。
このように、Javaは今後数年間は重要な言語の1つとして力を持ち続けるだろう。
Objective-C/Swift
AppleがSwiftをリリースし、Objective-CがもっぱらAppleの製品に使用されるようになるからといって、Objective-Cの需要がなくなるとは誰も考えないだろう。Apple製品が使用される限り、数年間はObjective-Cは重要な言語であり続ける。
iOS向けのオープンソースプロジェクトの大半は未だObjective-Cで書かれているため、2016年現時点においても学習する価値のある言語だ。一般的にまったく概念を理解することのできないものを学ぶのは効率的ではない。つまり、もしSwiftを知っているのであればObjective-Cは習得しやすいはずだ(その逆もしかり)。
C
Cは、他の言語と比べると極めて下位レベルで使用されるが、OS用の汎用言語でもあるため残り続けるだろう。多くの開発ルールはCとLinuxで構築されている。
SQL
SQLはたいていのデータ管理者が取得しているものだ。しかし、MongoDBやRedisのようなSQLを要しないサービス、またはHadoof、SparkとCassandraのようなSQLを必要としないプラットフォームの台頭により、SQLは勢いを失っていると考えられている。
しかし、現状はそうではない。最近になって、かつてSQLを必要としなかったサービスまでがSQLを活用し始めているのだ。
ビッグデータの台頭とその管理の難しさから、SQLはかつてないほど必要とされているそれは求人トレンドからもわかるだろう)。Googleは、BigQueryサービスをアップデートし、1つのテーブルに対し1秒間で100,000行を処理できるようにした。BigQueryはSQLを使用している。また、Sparkはバージョン1.3からSparl SQL Moduleを採用している。
つまり、ビッグデータを管理する必要性から、SQLは再び重要な言語となったのだ。SQLは単に普及しているというのみならず、重要な言語であり続けるにちがいない。
C++
(Rustに対してまでも)いまだ性能と能力においてパワフルな言語と考えられており、C++は高性能を求められるシステム(ゲームエンジンなど)で重要な言語であり続けるだろう。最新の主要バージョン(C++14)は2017年にリリースされる見込みであり、進化し続けている。
Rustが作るソフトウェアはC++が作るそれより脆弱な場合があるため、将来的にRustは一部のシステムプログラミングでC++と入れ替わると考えられる。
C#
過去マイクロソフトのプラットフォームに限定されていたこととクローズドソースであったことは、C#に有利に働かなかった。しかし、Monoはこの問題の大部分を修正した。(Monoは性能に問題があったが、最近のアップデートにより改善した。)
C#で働いた技術者たちはC#を好きになる傾向があり、この言語はとても強いコミュニティを持っている。C#はUnity 3Dの主要言語であり、iOSやLinux上で動くゲームエンジンにも使用されている。ゲームエンジンとしてのUnity 3Dの台頭は、C#の存在を確固たるものにし、バーチャルリアリティアプリの開発を支えている。バーチャルリアリティは今後さらに重要になってくる技術であるため、C#の未来は明るいだろう。
補足として、C#は米国のほか、たとえば英国の企業における開発でも人気がある。マイクロソフトもC#をしばらくは活用し続けNETプラットフォームで重要な言語とするつもりだろう。そして、技術者が活用しやすいようにアクセス可能なオープンソースの製品を積極的に打ち出すだろう。
まとめ
いくつかの視点から、「プログラミング初心者はどの言語を学ぶべきか」について見てきたが、ついに結論を述べるときがきた。
Web開発に関わるならばJavaScriptを学ばねばならないのは明らかだろう。バックエンドのウェブ開発をしたいのならSQLは必須だ。
データ関連のウェブサイトやデータサイエンスに関心があるのなら、Pythonをおすすめしたい。企業で働くのなら、Javaは必要だ。そして、システムの構築に関心がなく、単に労働機会が欲しいだけならSQLをおすすめする。(特に数学好きであれば尚更だ)
この調査が多くの人の充実した開発ライフと進路選択のの役に立てれば幸いである。
ReadWrite[日本版] 編集部
[原文4]
連載バックナンバー
Think ITメルマガ会員登録受付中
全文検索エンジンによるおすすめ記事
- 【データから紐解く!】2017年の人気プログラミング言語を徹底比較!
- React Nativeとネイティブアプリでの開発の違いとは
- 生まれ変わったJavaScript/ECMAScript
- TIOBE、プログラミング言語の検索数を集計した「TIOBE Index」(2018年4月版)を発表
- 今後欠かせないスキルになる!5分で分かるプログラミングとは
- TIOBE、プログラミング言語の検索数を集計した「TIOBE Index」(2020年1月版)を発表
- 2017年に見ておきたい12のJavaScriptライブラリ
- リアルタイム通信で活用!注目の技術「Node.js」とは【初心者向け】
- 人気軽量プログラミング言語5選
- 【学習タイプ別】入門向け!Pythonの学習サイト10選