~ 学習するプログラム言語は一つに絞るべきです。 ~
IT業界でプログラマー、SEとして働かれている方々、また、目指されている方々は、あまりにもプログラム言語の種類が多いため、一体どれを学習するべきか必ず迷うと思います。
もちろん、現在所属する現場で利用されているプログラム言語を学習するのが一番ですが、転職の多い業界でもあり、今後のキャリア形成を踏まえて学習する必要があります。
実際、全てのプラグラムが極めることができれば、それは素晴らしいことですが、一人の人間が学習できる時間など、たかが知れており、結局は複数のプログラム言語をつまみ食いする程度という残念な結果にもなりかねません。
ですので、学習するプログラム言語は一つに絞ることを強くお勧めします。他のプログラム言語を学習する時間があるのなら、自身が選んだプログラム言語の学習にその労力を集中させるべきだと思います。
~ では何のプログラム言語を学習するべきか? ~
これはケースバイケースでこれが良いと決めることは非常に難しいです。以下では「このプログラムを学習するのがが良いのではないか」というあくまでご参考レベルの情報をまとめていきます。最終的な結論はご自身でよくお考え下さい。
~ フルスタックエンジニアは目指すべき ~
時間が無駄になるからプログラム言語は一つに絞って学習するべきと書きましたが、ネットワークやデータベースの学習をする時間も無駄という話ではありません。
フルスタックエンジニアとは何でもできるITエンジニアのことを指す言葉で、プログラムだけでなく、ネットワーク、データベース等、IT関係の知識を一元的に理解するエンジニアのことです。
ITサービスの理論では、プログラムはITサービスの一部とされています。顧客はプログラムを提供されただけでは使用できず、ネットワーク、データベース等すべて整って始めてITサービスを利用できるようになるというものです。
開発者としては「私はプログラムの担当なのでネットワークは分かりません」とはならず、提供するITサービス全体を把握できるよう、フルスタックエンジニアを目指して学習するべきです。
そのサービス内のプログラムという分野において重複する知識は無駄なので、学習するプログラム言語を一つに絞るべき。そういった主旨です。
1.Javaがやはり本命
fossBytesのプログラム言語トレンド調査ではJavaが首位で16%のシェアです。
企業の基幹系システムで多く採用されています。IT技術者の求人で一番多いのがJava技術者です。
サーブレット、JSPを利用することで高度なWeb系のプログラム開発にも対応することができます。
Android系スマホのアプリ開発にも対応することができます。
このようにJavaを習得することで、最近のプログラマーに必要とされる、勘定系システム開発、Web系のプログラム開発、アプリ開発という全てをカバーすることができます。
デメリットとは、組込みシステムに弱い、WindowsのDLL系に対応できない、iOSアプリ開発に対応できない、Officeアプリ例えばエクセルマクロ(VBA)等の企業事務系に対応できないといったところでしょうか。
別ページにJavaの開発環境についてまとめていますので、併せて読み下さい。
2.組込みシステムを考えるとC++、C#
fossBytesのプログラム言語トレンド調査ではC、C++、C#併せて16%のシェアでほぼJavaと同じシェアです。
ただし注意しなければならないのは、C++はCの上位互換であり、CとC++は同じと考えることができるのに対して、C#はベースは似ていますが習得するにあたっては別言語と考える必要があります。書き方がかなり違います。実際、C#はマイクロソフトが開発したVisual Studio上でのみ利用可能なC++の派生言語です。そしてその使い処も違います。
しかし、一般の方(求人側)は、C++とC#を区別することなく一つのC言語としてとらえる場合が多く、C言語の技術者は無理をして両方を取得しようと必要以上に労力をかけなければならないイメージです。
C++、C#各々の使い処ですが、C++は主に組込みシステムに利用されます。業界は絞られますが求人は多いです。
C#はWindowsのDLL系のプログラム(C++でもできますが)に加え.NETを利用することで勘定系システム開発に対応でき、ASPを利用することでWeb系のプログラム開発にも対応できます。又、ゲーム開発環境UnityにおいてC#が開発のデフォルト言語になっています。
デメリットは、上記C++、C#両方学習する手間(どちらかに絞って学習するという選択肢もありますが。)、スマホアプリ開発に対応できない、Officeアプリ例えばエクセルマクロ(VBA)等の企業事務系に対応できないといったところでしょうか。
以前はC++の上位互換言語Objective-CがiOSアプリ開発のネイティブ言語でしたが、Swiftに変更になってからは、現状Objective-Cも利用できますが、今後利用できるかは不透明となっています。従いましてAndroid系スマホのアプリ開発に対応できないのはもちろん、iOSアプリ開発にも対応できなくなる可能性があると言えます。
別ページにC++、C#の開発環境についてまとめていますので、併せて読み下さい。
3.Web系のPHP
Web系のプログラム言語です。
fossBytesのプログラム言語トレンド調査ではPythonが4%、PHPが3%のシェアとなっているのですが、別の調査機関Q-SuccessのWEBサーバーサイドプログラミング言語のトレンド調査ではPHPが83%、Rubyが0.5%、Pythonが0.2%のシェアとなっており結果が大きく異なります。
こういった調査機関のシェア調査は、実施方法によって大きく結果が異なりますので、あくまで目安程度にしかならないのですが、感触としてはPHPの利用シーンが多く、求人も多いので、WEB系のプログラム言語習得にあたってはPHPを選択するのが良いのではないかと思います。
Python、Rubyも活発に開発が続いており、選択肢として「あり」ではあると思います。しかし、異論はあると思いますがLinux上での運用がメインのイメージで。Windows環境とLinux環境両方での利用を考えた場合はPHPの取得の方が現状良いのではないかと思います。
求人でのPHP技術者は概ねWEBサイト構築技術を求められますので、PHPを学習する場合はHTML、CSS、JavaScriptを併せて習得しワンストップでWEBサービス、WEBサイトを構築できるようにしておく必要があります。
これら習得により、Web系のプログラム開発に対応できることに加え、HTML、CSS、JavaScriptを学習することで例えばCordovaのようにハイブリット開発環境を利用してAndroid系及びiOSアプリの開発も可能です。
さらにフルスタックエンジニアを目指し、apache、IIS等Webサーバーの知識、ネットワーク知識、イラストレーター、フォトショップ等の画像編集ソフトの習得を目指すというイメージでしょうか。
デメリットは、勘定系システム開発できない、組込みシステムを開発できない、WindowsのDLL系に対応できない、ネイティブスマホアプリ開発に対応できない、Officeアプリ例えばエクセルマクロ(VBA)等の企業事務系に対応できないと多く、あくまでWeb系のプログラム開発に特化していると言えます。
別ページに
PHPの開発環境
HTML、CSSの開発環境
JavaScriptの開発環境
についてまとめていますので、併せて読み下さい。
4.iOS開発に特化、Swift
fossBytesのプログラム言語トレンド調査でSwiftがトップ10入りしました。徐々に開発者が増えていると言えます。
Swiftを習得する意義はiOS用のアプリ、つまりiPhone用のアプリ開発ができるようになることです。Xcodeと呼ばれるアップルの提供するIDE上でiOSアプリだけでなくmacOSにも対応した、つまりアップル製品全般に渡るプログラム開発が可能になります。
デメリットは、iOSアプリ開発だけで、その他の勘定系システム、組込みシステム、Web系システムに対応できないことです。iPhoneの需要は高く、iPhone用アプリ開発の求人も多いですが他につぶしが効かないことが難点です。
別ページにSwiftの開発環境についてまとめていますので、併せて読み下さい。
5.事務系、情報系のVB
fossBytesのプログラム言語トレンド調査では3%のシェアで6位です。
VBは多くはありませんが勘定系システムに採用している企業もあります。ASPを利用することでWeb系のプログラム開発にも対応できます。
VBの一番の強みは事務系、情報系に強いということです。Excel上で利用できるマクロ(VBA)がVBのサブセットなのです。多くの企業でExcelが導入されており、業務の効率化にマクロを利用する場面は多く、これに派生して情報系のシステムつまり勘定系のサブシステムでVBが利用されることが多いです。
デメリットは、組込みシステムを開発できない、WindowsのDLL系に対応できない、スマホアプリ開発に対応できないといったところでしょうか。
加えて日本ではExcelのエキスパート→VBAのエキスパート→VBのエキスパートと事務系の方がステップアップするケースが多いのか、求人は多いものの技術者も多く募集単価が安いです。
又VBは、ほぼVisual Studio上での開発となり、Windows専用のプログラム開発となりLinux等別OSへの展開が難しいです。.NET Coreによりマルチプラットフォーム化が進められていますが、現状十分ではありません。
別ページにVBの開発環境についてまとめていますので、併せて読み下さい。