プログラミングとは何か

April 20, 2020

概要

今回はプログラミングとは何かについて書いていこうと思います。また、プログラミング言語に様々な種類がある理由も説明していきます。

プログラミングとは

コンピュータは非常に厳格な性格なので、言われたことしかやりません。また、曖昧な表現が含まれていても機嫌を損ねてしまいます。ですので、私たちがコンピュータに「こうして欲しい」と思ったときに、それをコンピュータが理解できるように、曖昧な表現を含まないように命令する必要が出てきます。

このような命令を考えて、書いていく作業をプログラミングと言います。また、コンピュータに命令するときに用いる言語をプログラミング言語と言います。

プログラミング言語は通常、次のような英単語と数字と記号が混ざったようなものです。

#include<stdio.h>

int main( void )
{
	printf( "Hello Programming!\n" );
	return 0;
}

慣れるまでは読みにくいと感じるかもしれませんね。慣れてくると、曖昧さが排除された綺麗さに気づくと思います。あくまで主観ですが。。

プログラミング言語の種類

プログラミング言語はたくさんの種類があります。マイナーなものもあれば、メジャーなものもあります。山手線ゲームをすれば結構続くレベルの量です(適当)。

プログラミング言語はその言語特性によって、様々な分類をすることができます。ここでは、低水準言語/高水準言語という分け方、フロントエンド言語/バックエンド言語という分け方の二種類を紹介します。

Webアプリ開発になると、後者のフロントエンド/バックエンドという分類が頻繁にされますので、特に覚えておいて欲しい知識です。

低水準言語/高水準言語

プログラミング言語は低水準言語/高水準言語という分け方で分けることができます。

低水準言語は機械語に近い言語のことを言います。
そもそも、コンピュータは電流が流れている/流れていないということしか理解することができません。そして、この電流が流れている/流れていないの組み合わせによって、コンピュータは計算をすることができるのです。スイッチがたくさんあって、そのそれぞれがON/OFFの状態を持っていると考えてみてください。これが奇妙に組み合わせられることによって、計算することができるのです。

コンピュータでは、2進数(0と1のみで表現される数)を用いて、電流が流れているONの状態を1、電流が流れていないOFFの状態を0とする機械語を用いています。

00010010 00010000
00000000 00000001
01010010 00010000
00000000 00000010
10000001 00000000

え?二進数なんて理解できないし、プログラミングまぢ無理。リスカしよ。。って人もいるかもしれませんが、大丈夫です。今の時代を生きている人で機械語を使いこなしている人はそうはいません(もちろん僕もさっぱりわかりません)。では、どうしているかというと、それをもっと人間にわかりやすいように改良しているのです。

機械語の進化の第一形態が、アセンブリ言語です。機械語の役割の塊ごとに人間にわかるように当てはめた言語となっています。次のアセンブリ言語は上の機械語と同じ意味を持ちます。

MAIN	START
	    LAD	   GR1, 1
	    SLL	   GR1, 2
	    RET
	    END

主に、機械語とアセンブリ言語を指して、低水準言語と言います。低水準は機械に近いという意味でしたね。コードを見てみると、なかなかごっつい感じになっていますよね。まだまだこの状態では人間にとって読み書きしやすいとは言えません。

そこで登場したのが、高水準言語です。高水準言語は、記述の抽象度が高く、人間にも理解しやすいような言語仕様になっています(わーうれしー)。現在使われているプログラミング言語の大半がこちら側に所属します。例として次のようなものが挙げられます。

  • C
  • C++
  • Java
  • Python
  • Ruby

例えば、C言語は次のようなコードになります。

#include <stdio.h>
 
int main(void){
  printf("WINC\n");
  return 0;
}

何を行っているかはわからなくても、なんとなく機械語やアセンブリ言語よりは理解しやすいことが感じられると思います。これが高水準言語の恩恵です。しかもこのような言語の多くが、無料で使えるのはすごくないですか。おトクですね(主婦かよ)

フロントエンド言語/バックエンド言語

では、次にフロントエンド言語/バックエンド言語という分け方を紹介していきます。

フロントエンド言語は主にユーザーが直接触れる部分を書く言語です。ですので、この言語が扱う領域を担当する人(フロントエンドエンジニア)は、プログラミングができるだけではなくて、デザインのセンスや知識も必要になります。あっ、このサイトかっこいいなとか、このソフトのデザインいいなって場合は、フロントエンド の人の腕がいいということになります。

一方で、バックエンド言語は、ユーザーが触れない部分を書く言語です。データベースにアクセスしてデータをとってきたり、その処理などを行ったりします。縁の下の力持ち的な感じですが、こちらの方がプログラミングをしている感はあります。

例えばFacebookアプリを作るとすると、

Facebookにはいいねボタンを含むたくさんのボタンがありますね。そのボタンの形、色、大きさなどをコンピュータがわかるようにプログラムするために用いる言語をフロントエンド言語と呼びます。

一方で、いいねボタンが押されるといいねボタンを押したユーザと押されたユーザの情報を保存し、押された投稿のいいねの数を1増やすような処理をする言語をバックエンド言語と呼びます。

 フロントエンド言語・バックエンド言語の種類

私たちのサークルでは、Webアプリ開発を多く行うので、その分野でのフロントエンド言語/バックエンド言語の種類について、少し深堀しておきます。覚える必要は全くないので、フーンと思って流してもらって大丈夫です。

また、プログラミング言語名の右側に書いてあるのは、その言語の主な役割です。複数のことに使える言語が多数ですが、主要な用いられ方のみを記述しています。

フロントエンド言語

フロントエンド言語には主に以下のようなものがあります。

  • HTML⋯⋯Webページの骨格を作るのに用います
  • CSS⋯⋯Webページをデコレーションするのに用います
  • JavaScript⋯⋯Webページに動きをつけるのに用います

バックエンド言語

バックエンド言語には主に以下のようなものがあります。
右側にいろいろ書かれていますが、Webアプリ開発でバックエンドとしてデータの処理を行う場合は、右側の用法は無視します。あくまで「バックエンド」を行います。

  • Python⋯⋯機械学習を行う際に用います
  • Ruby⋯⋯Ruby on Railsというフレームワークと合わせて簡単にWebサイトが作れます
  • Swift⋯⋯iPhoneのネイティブアプリが作れます
  • Kotlin⋯⋯Androidのネイティブアプリが作れます
  • Java⋯⋯様々な機械の上で動かせます。Androidアプリが作れます
  • Node.js⋯⋯サーバーサイドで動くJavaScriptです
  • Go⋯⋯サーバー構築の際に用います

 結局どのプログラミング言語がいいの?

わーたくさんあってよくわからんぞと錯乱しても無理はありません。一つにすることはできないの?とも思いますよね。でも、それはできません。プログラミング言語によって、得意分野が異なるからです。これはある意味トレードオフであって、全て完璧な言語というのは作ることができません。

では、どの言語が「一番良い」のってことになりますよね。この問いには、次のように答えることができます。

こう想像してみてください。プログラミング言語とは大きな工具箱で一つずつの道具がプログラミング言語であると。板を切るにはのこぎり、ネジを止めるにはドライバー。道具によってできる仕事は違います。この道具箱の中でどれが「一番いい」なんてものはありません。使う用途によって変わります。ドライバーで板を切れないように。

つまり、「一番良い」言語などというものは存在しません。作りたいものがあってそれに一番適している言語が存在するだけなのです。

適材適所というやつです。自分の作りたいものがあって、その用途にあったプログラミング言語をその都度学習していきましょう。

まとめ

  • プログラミングとはコンピュータにする命令を書くことです
  • 低水準言語は機械に近く人間には理解しづらいです
  • 高水準言語は英語に近く人間には理解しやすいです
  • フロントエンド言語はユーザーに見える部分を担当します
  • バックエンド言語はユーザーに見えない部分を担当します
  • 様々な種類のプログラミング言語は用途によって使い分けましょう