【今日のQ&A】プログラミング言語は大きく分けて2種類【教養】

こんにちは、@codeship_techです。

JavaScript、Ruby、PHP、Python、C++、Java、etc…

プログラミング言語ってたくさんありますよね。
全てのプログラミング言語は基本的に2つの種類に分けられます。
それは「低級言語」と「高級言語」です。

たくさんある中からどれを学んだらいいんだろうか?

というのは言語特性や作りたいもの、フレームワークやライブラリの充実度から好きに選んでもらえればいいと思うのですが、今回はもっと深い部分でどのような分類があるのかという質問があったためピックアップさせていただきました。

授業風景

低級言語、高級言語って何ですか?

プログラミング言語の種類の違いで、言語の人間にとっての読みやすさで区別される名称です。

機械語は人間にはほぼ読めない

一般的にプログラムは人間が書いた英語に近い命令文が、コンピュータが解釈できる「機械語」に変換されてから実行されます。

機械は0か1かの、2の倍数の進数表記数値に変換されたものしか解釈できませんから、人間が読める英語に近い命令文を数値に変換する過程が必要になります。

例えばC言語で以下のプログラムを作ったとします。
hello worldを出力するプログラムです。

main( ) {
 printf("hello, C lang!");
}

たとえC言語を習っていなくても「`print`とあるから何かプリントするんだろうなぁ」と、字面だけで動作が何となく想像のつく、人間が読みやすいプログラムです。

これを機械語に変換するとこうなります。

00000220  55 48 89 e5 48 83 ec 10  48 8d 3d 1b 00 00 00 c7  |UH..H...H.=.....|
00000230  45 fc 00 00 00 00 b0 00  e8 00 00 00 00 31 c9 89  |E............1..|
00000240  45 f8 89 c8 48 83 c4 10  5d c3 68 65 6c 6c 6f 20  |E...H...].hello |
00000250  43 20 6c 61 6e 67 21 00  00 00 00 00 00 00 00 00  |C lang!.........|
00000260  2a 00 00 00 00 00 00 01  00 00 00 00 00 00 00 00  |*...............|
00000270  00 00 00 00 00 00 00 00  14 00 00 00 00 00 00 00  |................|
00000280  01 7a 52 00 01 78 10 01  10 0c 07 08 90 01 00 00  |.zR..x..........|
00000290  24 00 00 00 1c 00 00 00  88 ff ff ff ff ff ff ff  |$...............|
000002a0  2a 00 00 00 00 00 00 00  00 41 0e 10 86 02 43 0d  |*........A....C.|
000002b0  06 00 00 00 00 00 00 00  19 00 00 00 01 00 00 2d  |...............-|
000002c0  0b 00 00 00 02 00 00 15  00 00 00 00 01 00 00 06  |................|
000002d0  01 00 00 00 0f 01 00 00  00 00 00 00 00 00 00 00  |................|
000002e0  07 00 00 00 01 00 00 00  00 00 00 00 00 00 00 00  |................|
000002f0  00 5f 6d 61 69 6e 00 5f  70 72 69 6e 74 66 00 00  |._main._printf..|
00000300

たくさん謎の数値が出てきました。

これは右の文字部分に対応している数値なのですが、とても読めたものではありません。
どんな挙動をとるかなどもってのほかです。

C言語をはじめとしたプログラミング言語は、人間が普通に話す言葉(これを「自然言語」と言います)に極めて近い文法で書き、PCのミドルウェアと呼ばれる領域が機械語に変換することで処理をされます。

質問の回答ですが、変換前のC言語のように人間に比較的読みやすい言語を指して「高級言語機械語もしくはそれと同等のアセンブラ言語を指して「低級言語と言います(性能の優劣とは全く関係ありません)。

C言語もPythonもRubyもPHPも JavaもJavaScriptもGoも、いずれも人間の読みやすい高級言語です。

開発は高級言語で

この数値と文字の対応を覚えないといけないのですか?

いいえ、そのようなことをする必要はほぼ全く無いと思います。

世の中には、機械語を読み解いてプログラムの挙動などを改変する極めて技術力の高いプログラマが存在するようですが(私の周りにはいません)、世の職業プログラマはそこまでの技術を要されることはまず無いです。

言語を一から作る技術者となると非常に高度な知識が要され、対応を読み解く必要がありますが、職業プログラマは世の中に存在する高級言語を用いてシステム開発を行うことが需要とされているのが現実です。

授業日記についてのご意見

CodeShipの授業について「こんな事が知りたい・紹介して」というご意見・ご提案がありましたら、CodeShip公式Twitterアカウント(【CodeShip】プログラミングスクール)までDMまたはリプライにてお寄せください。パネル