プログラミング言語とは

f:id:kyart:20160802085732j:plain
プログラミング言語、という言葉があります。JavaとかPHPとかRubyとかC言語とかいろいろな「言語」と呼ばれるものが存在します。これは一体なんのことなんでしょうか。

「言語」

通常人間の世界で「言語」といえば、他者とコミュニケーションを取るための手段です。日本語で話せば日本語を話す人と会話ができ、日本語で手紙を書けば日本語を読める人に意思を伝えることが出来ます。
プログラミング言語とは、人間がコンピューターに意思を伝えるための言語、あるいは命令の書き方のルールのようなものです。

コンピューターが命令を処理するにはマシン語という人間がみても意味が不明な数字の羅列のようなものが必要です。しかしそれを人間が直接書くのは難しいので、もう少し意味がある書き方をしたものをマシン語に変換して使います。その意味がある書き方というのがプログラミング言語です。

例えば以下にあるのはPHPというプログラミング言語で書かれたプログラムの一部です。

if ( ! function_exists('is_loaded'))
{
	/**
	 * Keeps track of which libraries have been loaded. This function is
	 * called by the load_class() function above
	 *
	 * @param	string
	 * @return	array
	 */
	function &is_loaded($class = '')
	{
		static $_is_loaded = array();

		if ($class !== '')
		{
			$_is_loaded[strtolower($class)] = $class;
		}

		return $_is_loaded;
	}
}

こちらはJavaScriptという言語の例です。

  function _defineProperties(target, props) {
    for (var i = 0; i < props.length; i++) {
      var descriptor = props[i];
      descriptor.enumerable = descriptor.enumerable || false;
      descriptor.configurable = true;
      if ("value" in descriptor) descriptor.writable = true;
      Object.defineProperty(target, descriptor.key, descriptor);
    }
  }

次のPythonの例です。

def generate_upsert_queries(data_item):
    upserts = {}
    for table in data_item:

        keys_str = ""
        for key in data_item[table]:
            keys_str = keys_str + key + ","

        keys_str = keys_str[:-1] 
        values_prepared_str = "%s," * len(data_item[table])
        values_prepared_str = values_prepared_str[:-1]  # deleting the last comma

どれも全く意味がわからないと思うかもしれません。しかし

003D 02E1 01AB 039E
のようなものよりはまだいくらか意味を成す単語が見えるのではないでしょうか。

プログラミング言語にはそれぞれ書き方の「作法」のようなものがあります。例えば上の2つの言語では、行の終わり(右端)にセミコロンがあります。一番下のPythonにはそれがありません。
:(コロン)が意味するものの、{}(波括弧)が意味するものに違いがあります。しかしいずれの場合も、最終的にマシンに行って欲しい処理を書く書き方のルールに過ぎません。

プログラマーはどの言語を使うかをどうやって選ぶのか

プログラマーに成ればどんなプログラミング言語も自由に使いこなせるわけではありません。英語を話せる人が自動的にロシア語を話せるわけではないのと同じです。

逆にプログラミング言語を一つも使えなえれば、そもそもプログラマーとは呼べないでしょう。

使う言語の選び方ですが、まず第一にその言語か似た言語を知っている、ということが必要です。ある程度一つの言語に精通すると、別の言語の習得は外国語よりも遥かに容易です。コンセプトはだいたい同じなので、書き方のルール(コロンを付けるとか、変数名に$を付けるとか)が分かれば、ネットで検索しながらも新しい言語を比較的すぐに使い始める事もできます。

すでに稼働しているプロジェクトに加わる場合には、そのプロジェクトで使用している言語に合わせることが必要です。できない人が割り当てられることはまず無いので、それほど心配する必要はありません。

自分で選択できる場合には、やろうとしている作業、つまりコンピューターに与えようと思っている命令の種類によって、向き不向きの言語というものもあります。

例えばウェブサイトでの処理をプログラムしたい場合に、C言語を選ぶのは効率的ではありません。もっとそれに向いている言語がたくさんあるからです。向いている、というのは書くプログラムのコード量が短くて済むとか、その言語でその作業をする場合に人員を確保しやすいかなどが関係します。

C言語でウェブサイトの処理をさせることは可能でしょうが、一般的で無いが故にそれを使えるようにするための設定や道のりがRubyPHPなどと比べて何倍にもなります。

機械学習をするという場合にはRとかPythonとかを選ぶと、すでにそのためのライブラリーと呼ばれる機能群が充実しています。誰かがすでに作った車輪を再発明する必要がなくなり効率的です。

携帯で動くアプリを作りたいのであれば、AndroidiOS両方一度に作れるDartベースの仕組みを使うのが楽です。でもAndroidiOS別々に作ってでも少しでもサクサク動くということを優先する場合は、それぞれの端末OSに最適化された言語で別々に作るということもあり得ます。

このように言語の選択は、得意であるか、何を目的とするかによって最適な選択が変わってくるのです。