IT業界の開発現場では、金融システムやゲーム開発、仮想通貨・AIを始めとした業界/領域ごとに様々な開発用途があり、それぞれ開発に向いているプログラミング言語が存在します。
その中には、ある特定の用途に特化したプログラミング言語もあれば、様々な用途に応用でき、広く対応できるプログラミング言語もあります。今回は業種/領域ごとに用いられる代表的なプログラミング言語と用いられる理由やトレンド性、学習方法についてご紹介したいと思います。
Webサイトの制作/開発ではHTML/CSS(厳密にはプログラミング言語ではなく、文章構造言語)を用いてサイトのデザインを構成します。また、ユーザーのマウス操作によるメニューの表示や非表示、画像を拡大する、要素を順番に出現させる、といったことを実装したい時は、JavaScriptを用いて開発することでサイト上に様々な動きをつけることができます。
更に、Webサイトでより複雑な処理をしたいときには、PHPやScala言語を用います。問い合わせフォームでのデータやメールの送信、ショッピングサイトでの商品表示や購入処理、データベースへのデータ登録の処理等です。
今後Web開発に携わっていく場合、まずHTMLがベースになりますので、最初はHTMLの最新バージョン「HTML5」の学習がおすすめです。
HTMLは、バージョンによって記述方法や対応機能に違いがあります。現在の主流であるHTML5を勉強し、CSS/PHPと対応範囲を広げていくと習得が早いでしょう。
銀行・電力・ガスなどの基幹システムでは、COBOL/アセンブリ言語といった歴史ある開発言語が今でも主流ですが、そのような開発言語が求められる理由は2つあります。
1つ目は、基幹システムでは複雑かつ膨大な計算を行うため、コードの読みやすさが求められる点です。COBOL/アセンブリ言語は、プログラムコードにて自由な表現ができない特徴があり、それがどんなエンジニアがコードを書いても違いが出にくく、コード内容も単純な構文になる、という利点につながっています。
2つ目は、基幹システムでは既存システムのソースコードを維持しながら開発していくので、なかなか新しい開発言語に移行しにくいという点です。金融システムのプログラムコードは、システム内容にもよりますが数百万~数千万行に及ぶことになります。既存システムを維持しつつ、刷新するにもある程度のコードを残しながら開発するので、COBOL/アセンブリ言語が今でも現役の開発言語になっています。
最近の開発傾向として、基幹システムのクラウド化も進んでいます。AWS(Lambdaサービス)は基幹システム向けの開発言語であるCOBOLをサポート言語とし、クラウド開発の環境も向上しています。
COBOLの開発環境を作ることは少々難易度が高いため、学習する際は、eラーニングやWeb学習を申し込み、既にWeb上で完成された開発環境で学習するのが近道です。アセンブリ言語は、開発環境の準備はそれほど難しくないため、参考書を元に準備し学習できます。また、CPUやパソコンの演算を使うため、言語以外に情報処理の知識も学ぶ必要もあります。
組み込み系システムでは、エアコン・冷蔵庫の家電製品や車のカーナビ等に搭載されるソフトウェアなど、モノに付随する開発となります。エアコンでは部屋の温度や湿度調整・制御、カーナビでは目的地までのルート探索・表示、地図描画に活かされます。そこでの組込みシステムの開発では、C言語・Javaが用いられています。
C言語は、組み込み系開発言語として長く使用されていたことから、社内エンジニアや社内ノウハウが多いこと、そして組み込み系開発の主流OSであるLinuxもC言語のため、多くの開発で利用されています。
それ以外にも、コードのサイズが小さく済むことで組み込み機器のスペックを抑えることができる利点もあり、処理速度が速いため、組み込み系に求められるリアルタイム処理にも向いています。
その他の言語としては、最近採用されるにようになったJava言語が挙げられます。Javaはこれまでメモリを消費するプログラムという印象を持たれていましたが、最近では軽量化され、メモリ消費量が抑えられたことで、リアルタイム処理に向くようになりました。また、Javaはメモリのセキュリティも優れているためC言語より脆弱性にも強く、組み込みOSにも依存せず開発できるため、開発環境を選ばず柔軟に開発できます。
最近では、IOT開発において、スマホで家電操作をする・花粉状況から空気清浄機運転を自動調整する、といった開発でもJavaが採用されつつあります。
こうした組み込み系の習得では、開発言語の学習+組み込み独特の知識の2つの要素が必要です。1つ目のC言語やJava言語といった開発言語の学習は、HTMLよりは難易度が高いものの、メジャーな言語のため、Webサイトや書籍が多くあり、学習素材は多いので独習でも対応できます。ただ、範囲が広いため、場合によっては「配列」などの難しい分野は飛ばして、まずは一通り学習してみる、といった考え方でも良いでしょう。
2つ目の組み込み独自の知識は、組み込み独自のOSやマイコン(制御チップ、小さいPC)の動きや構造についてですが、まずは書籍で入門となるような電子回路キット(LED部品が同封され、C言語でLED点灯させる学習等)を購入して学習するのがおすすめです。
ゲーム開発では、主に家庭用ゲーム機やスマートフォン向けゲームの開発が主流です。最近の傾向としては、ゲーム開発を効率的に行うためのツール「ゲームエンジン」で開発する場合も多くみられます。ゲームエンジンとはプログラミング言語を使わずにマウス操作だけでもゲーム制作ができるツールで、Web上で公開されています。キャラクターやステージをマウスや数値入力で絵として作成したり、用意されているアクション(ジャンプ・しゃがむ)を組み合わせて開発できます。
また、本格的な商用ゲームや、より複雑なゲーム開発では、C++やRubyの開発言語をゲームエンジンと組み合わせたり、言語単独で開発することもあります。プログラミング言語によって、得意とするゲーム環境があり、C++では『Xbox』や『Nintendo Switch』等の家庭用ゲームソフト向け、RubyはPC(2D)やスマホ(iPhone/Android)のゲーム開発に向いており、ゲーム開発用のライブラリも存在しています。大手ゲーム開発会社になると、自前でゲームエンジン自体を開発し、それを元に複数のゲームソフトを効率的に開発する例もあります。
ゲーム開発の学習にあたっては、言語についてのみ学習するとゲーム要素が少なかったり、長続きしにくかったりするため、まずはゲームエンジンで自作を行いながら、応用的な処理やエンジンで対応できない部分について、C++などの必要箇所をかいつまみながら学習するのも良いでしょう。
学びだすと奥が深い業界でもありますので、関連企業のインターンシップに参加したり、オープンソースコミュニティに参加したりすることも有効です。
AIや機械学習(ディープラーニング)は、プログラミング言語とデータベース(ビックデータ等)を組み合わせて構築していきます。様々なデータからパターンや類似性を抽出し、効率よくデータを絞り込み、数値予測や解析までを行います。用いられる言語としては、R言語とPythonが挙げられます。
R言語はもともと統計処理の専門言語として開発され、統計解析やデータ可視化に最適化された言語です。コードがシンプルで様々な統計手法が標準で組み込まれており、ヒストグラムや散布図のグラフ表示に優れています。また、R言語は現在も様々な統計処理・最新手法のライブラリが活発に開発され、充実しているのも特徴です。
一方でPythonは、AI・機械学習に限らず、Web開発でも用いることができる言語で、幅広く活用でき、コードもR言語と同様にシンプルさが特徴です。機械学習に必要な重回帰分析や行列計算等の高度な計算が必要なライブラリ(NumPy、SciPy、Pandas)もR言語と同様に充実しています。
R言語とPythonを比較した場合、本格的な統計処理や研究レベルでの追求する場合にはR言語、解析専門でないエンジニアや商用データ分析であればPythonが選択されるようです。
R言語やPythonも開発環境が簡易的に導入でき、コードもシンプルなので学習しやすい言語と言えるでしょう。AIや機械学習以外にもWebアプリ開発にも応用できるため、Pythonがおすすめです。まずは、書籍やネットでPythonの簡易プログラムを開発できるようにし、その後機械学習やAIのライブラリを導入し、専門分野のある開発へ繋げていくと良いでしょう。
ビットコインを始めとする仮想通貨の開発領域では、次のようなことが行えます。
ビットコインやその派生コインはC++で開発されており、仮想通貨の中核技術である、ブロックチェーンも同様にC++で開発されています。また、最近の傾向として、仮想通貨の中核技術であるブロックチェーンが、単独で開発されるようになり、企業間の商取引情報の管理・小売の食品流通履歴の追跡管理等に活用されています。こうした仮想通貨以外でのブロックチェーンでは、JavaやGo言語で開発されています。
C++は、C言語の拡張言語で、C言語にはない概念や考え方もあるため、C++から学習に入るのがよいでしょう。また、ブロックチェーン開発では、JavaやGo言語があり、どちらかと言えばGo言語の方がコードや構造もシンプルなので、Go言語から着手するのがおすすめです。開発言語以外にも、暗号方式やデータベースに関する知識も必要となります。
業界/領域別に様々なプログラミング言語を取り上げてきました。システムの初期で用いられる言語が脈々と引き継がれ、一貫して固定化されることもあれば、技術進歩によってその時流にあった開発言語が選ばれることもあります。
今後、どの領域で活躍したいかを考えながら、まずは1つの言語を習得し、その後2~3言語に広げていくとエンジニアとして開発できる裾野は広がっていくことでしょう。
プログラミング言語も流行のようなものがあり、流行り廃りもあるので、自分が主に習得している言語にアンテナを張り最新情報を取り入れていくのがおすすめです。