Webサービスやスマホアプリなど、動かすためにはプログラムを書かなければなりません。
そして、動かすためのプログラミング言語は数多く種類が存在します。なぜいくつものプログラミング言語があるのか、それぞれの言語の特徴は何なのか解説しています。
これからプログラミングを勉強しようと思っている方も覚えておきたい内容でしょう。
目次
- プログラミング言語とは
- フロントエンドとは
- バックエンドとは
- 各言語のメリット/デメリット・学習難易度
プログラミング言語とは
世の中にプログラミング言語はいったいどれだけ存在するのでしょうか。インターネット最大の百科事典Wikipediaには数百もの言語が登録されています。もちろんその全てが現実的に用いられているわけではありませんが、現在様々な業務で使われている言語は少なくとも20以上にも及びます。
なぜこれほどまでにプログラミング言語が多く存在するのでしょうか?
たくさんの言語があればあるほどプログラマは学習するコストがかかってしまいますし、企業側もシステムで使用しているプログラミング言語を乗り換えるコストがかかってしまいます。一見すると多すぎる言語には、デメリットしか無いように感じます。
しかし、これほどたくさんのプログラミング言語が作られ、そして実際に現場で使われているのには訳があるのです。
プログラミング言語は得意な分野がそれぞれ違う
例えば人気言語の1つ、PHP。
PHPは習得が容易なためにプログラミング初心者でもすぐに覚えることができます。それではもう世の中のプログラミング言語はPHP1つでいいじゃないか、と思われる方もいると思いますが、残念なことにPHPだけではどうしても「できないこと」があるのです。
PHPはWebサイト構築に特化した言語であるため、例えばiPhoneアプリケーションや大規模な金融システムを作ることはできません。PHPには得意な分野(Webサイト構築)がある一方で、できないこともたくさんあるのです。もしiPhoneアプリケーションを作るならばそれに適した言語、例えばSwiftやObjective-Cを使わなくてはいけません。
このように各プログラミング言語には得意な分野と苦手な分野があるために、多くのプログラミング言語が同時並行的に存在するのです。木を切る時はノコギリ、刺し身を切る時は包丁を使うように、プログラミング言語も適材適所で使い分けをしなくてはならないのです。
また、プログラミング言語に多様性があるからこそ、効率的に各製品を作り出すことができるとも言えるでしょう。
フロントエンドとは
フロントエンドとは、ユーザー側、つまりWebブラウザ側という意味です。「ユーザーから見えるところ、ユーザーが触れるところ」とも言えるでしょう。Webサイトにおいてはユーザーが直接目にしたりクリック・スクロールできる部分がフロントエンドに該当し、これらの部分ではHTML、CSS、JavaScriptが主に使われます。
HTML
HTMLはプログラミング言語というよりマークアップ言語と呼ばれます。サイト上のテキストはほぼ全てこのHTMLで定義されており、またリンクなどの機能もHTMLが担当します。Webサイト上のテキストコンテンツを定義付けるとも言いかえられるでしょう。
CSS
HTMLと密接に結びついてテキストなどの装飾を担当するのがCSSです。単なるテキストに色・サイズなどを定義することで、ユーザーが読みやすくなるよう見栄えを調整する働きを担っています。
現代のフロントエンドにおいてHTMLとCSSは密接に結びついているため、どちらか一方だけしか知識が無い人は珍しく、学習段階でHTML+CSSを同時並行的に学ぶことが多いです。Webサイトに関わるデザイナーにとって必須の知識となっています。
JavaScript
JavaScriptとは1990年代よりWebサイトで使われてきた技術で、こちらはHTMLやCSSと違って立派なプログラミング言語に分類されます。以前はさほど注目されてこなかった言語ですが、2005年にAjaxという概念が発見されて、リアルタイムにバックエンドと通信するインタラクティブなWebサイトをJavaScriptが実現し、突如注目が集まるようになりました。
今ではありふれた機能になってしまいましたが、マウスの操作で地図を自由にブラウザ上で動かせるGoogle Mapなどは、発表当時は衝撃的な技術として受け止められました。その後もJavaScriptの持つポテンシャルは様々な企業やプログラマによって引き出され、今ではフロントエンドの花形的な存在へと出世しています。
バックエンドとは
バックエンドとはフロントエンドと逆の概念で、ユーザーからより遠いサーバー側の処理に該当する部分のことです。ユーザーから受け取った入力を処理・加工してデータベースに保存したり、あるいはデータベースからデータを取得してユーザーに送り届けるなどの仕事を担当します。
バックエンドに使われるプログラミング言語はPHP、Ruby、Python、Javaなど多岐に渡ります。またデータベースでもOracle、MySQL、MongoDBなど用途によって様々なデータベースが使い分けられています。
フロントエンドで使える技術の選択肢は非常に限られていますが、バックエンドでは多彩な選択肢からプロジェクトの規模や方向性に応じてプログラミング言語やデータベースを使い分けることができます。どの技術が適しているのかを判断するような能力もバックエンドのエンジニアには求められると言えるでしょう。
各言語のメリット/デメリット・学習難易度
PHP
プログラミング初心者でも容易に習得ができるWebサイト向けに特化された言語で、極めて多くのWebアプリケーションサイトで採用されています。なんとサーバーサイドプログラミング言語を採用しているWebサイトの80%はPHPが使われているという統計データがあるぐらいです。
人気のブログシステムWordPressがPHPで構築されていることも特筆しておかなければならないでしょう。
そのため、10年以上前からプログラミング別求人数では常にトップ3に入るほど安定した人気を誇っています。
欠点としてWebサイト構築に特化されすぎているので潰しが効かず、また言語仕様も現在主流のオブジェクト指向言語とは設計思想が違うために、他の言語を学ぶ際にPHPの知識が足かせになってしまうことが挙げられます。
学習難易度:1
利用分野・サービス:圧倒的大多数のWebサイト、WordPress
Ruby
Rubyは現在の主流のプログラミング言語としては唯一日本発の言語と言えるでしょう。まつもとゆきひろ氏が1995年に発表したRubyは、2005年にWebフレームワークであるRuby on Railsが登場したことにより一気にシェアを伸ばしました。
言語設計の明瞭さ・堅牢さ・美しさから来るプログラミングのしやすさに定評があります。何と言ってもRubyは「Webフレームワークの標準」とも称されるRuby on Railsで使われていることが特徴です。求人数もRails由来のものが多く、似た用途で使われることも多かったPerlを今や上回っています。
学習難易度:2
利用分野・サービス:Ruby on Rails、クックパッド・食べログなど
Python
インデントにてブロックを定義づけるPythonはその可読性の高さから古くから教育言語としての人気がありました。またNumpy/Scipyなどの科学計算ライブラリの豊富さからアカデミックな研究者層からの人気は絶大なものがあり、圧倒的なエコシステムが築かれてきました。
また、人工知能・ディープラーニングブームの真っ只中にある現在においてはPythonを主要言語とするライブラリ(TensorFlow、Keras、Chainer)などが人気を博しています。今後も科学技術分野では圧倒的な強みを誇るのは間違いなく、要注目言語の1つと言えます。
その一方で国内の求人数という観点からは弱みを抱えます。単にPythonが書けるだけの人材を企業や研究室はさほど求めておらず、そのバックグラウンドとして数学的素養や機械学習などの知識があることが前提になっていることが多いからです。
学習難易度:2
利用分野・サービス:科学計算全般、人工知能・ディープラーニング・機械学習の分野、Dropboxなど
Java
基幹業務システム、スマホアプリなど多種多様なジャンルをカバーしていることがJavaの強みで、その使用範囲の広さから求人数では長らくトップに君臨しています。特にAndroidにJavaが採用されていることから、今後もテクノロジー界では重要言語の位置を譲らないことは明白でしょう。プログラマとして将来的にも長きに渡って潰しの効く言語の代表格です。
欠点としてはRuby、Pyhton、PHPなどのスクリプト言語に比べるとコーディング量が多く、学習難易度が若干高めなところでしょうか。しかしそれを補ってあまりある求人数は魅力的です。
学習難易度:4
利用分野・サービス:Android(アプリ開発)、大規模基幹システム
C言語
その高速性からWindowsなどのOSの開発や組み込み用途、機械制御など幅広い分野で古くから使われてきたIT分野を支える基幹言語です。「コンピューターに関わることなら全てCでできる」とも称されるほどです。
C言語そのものは設計の古さ・難解さから、コーディングのしづらさや可読性の悪さといった欠点を抱えているため、現在はC言語そのものを使って新規案件を開発することは少なくなっており、以後に発表されたC++やC#などが使われることが多いです。
C++やC#はオブジェクト指向を取り入れるなど洗練された現代的な設計思想を持っていることから今後も広く使われていくでしょう。C言語そのものの案件数は低下傾向にありますが、古いシステムの保守などで今後も根強い需要は残りそうです。
メモリ管理やポインタの概念など、プログラミング初心者にとってはハードルの高い言語かもしれません。
学習難易度:5
利用分野・サービス:大規模基幹システム、OSなど
Swift
Appleが2014に発表した新しいプログラミング言語です。AppleのiPhoneアプリ開発に使われてきたObjective-Cを置き換える意図があったと言われています。Objective-Cは求人数の上位の一角にランクインし続ける言語でしたが、それはほぼiOSアプリでの開発案件に限られたものであり、「古臭くて難解」とも形容される言語特性から一般的にはほとんど普及しませんでした。
そこでAppleはより洗練されてより高速に動作するSwiftをオープンソース化することで置き換えようとしたのです。その出自から基本的にはAppleのプロダクト(iOS、macOS)などで使われることが想定されていますが、現在は、Javaを使っているAndroid開発でもSwiftに興味を示すなど今後の展開が注目される言語です。
学習難易度:3
利用分野・サービス:現在はiOSアプリ、macOSに特化
多種多様なプログラミング言語から自分に合った武器を身につける
このように世界には様々なプログラミング言語が溢れており、これから言語を身につけようとする人にとっては何を選んだらいいのかわからなくなるかもしれません。
- 求人数などに着目して安定した人気のある言語を選ぶ
- 学びやすい言語を重視する
- 自分が形にしたいアイデアから逆算して言語を選ぶ
など選び方は様々ありますが、「どの言語でも作れるものは同じ」というわけではないので、事前に理解しておきましょう。