【完全初心者向け】プログラミング言語の歴史について分かりやすく解説しました

ITを最近勉強し始めた人「最近、ITについて学び始めたんだけど、プログラミング言語の歴史について分かりやすく簡単に学べるサイトないかな..。」
今回は、こういった悩みをお持ちの方向けの記事です。“ほぼ0の知識を1に引き上げる”をモットーに作成しています。
記事の信憑性 (筆者について)
2022年9月、僕は今現在CourseでITについて勉強しております。そして、この記事は「僕がアウトプットに使っているノート」のようなものです。「マジでITについてよくわからなかった僕」が「授業で学んだこと」や「自分で調べて理解したこと」を元に、僕のような完璧初心者でもわかるようにまとめています。僕のノートが、皆さんの役に立てれば嬉しいです。
» Google IT Support Professional Certificate (僕が受けているコースです)
【完全初心者向け】プログラミング言語の歴史について分かりやすく解説しました
「プログラミング言語」を学習するのは、「ちょっと難しいんじゃないか」って思ってる人、正直かなり多いと思います。
でも、プログラミングの歴史を知ったら「うわっ。めっちゃ簡単かも!」って思ってもらえると思います。
だって、1950年代は、「パンチカード」を使って「プログラミング」をしていたんですから。
パンチカードとは?
引用:Wikipedia
「パンチカード」とは、「厚めの紙」によって出来た「カード」のことです。
- カードの中に「穴を開けられる位置」が決まっており、それぞれの穴を「開ける」か「開けない」かの「2択」によって「バイナリーコード」を作る
- CPUは「そのバイナリーコード」で表現された「機械語」から一連の命令を読み取り、実行する
これが、パンチカードを使ってコンピューターに命令する大まかな手順です。
「バイナリーコード」とは、「0と1」の「2つの数字の組み合わせ」で表現された「コンピューターが読めるプログラム」のことをいいます。
例えば、バイナリーコードは次のようなものです。
01101000 01101111 01100100 01101111 01110010
この「01101000」の8つの数字の組み合わせを「1バイト」と言い、「1バイト」は「半角英数字1文字分の情報量」となっています。
これを「パンチカード」でいちいち「穴を掘っていた」んですから「沢山のパンチカード」が必要だし、大変で退屈な作業でした。
ちょっとしたデータ量でも、「積もり積もったパンチカード」の厚さが20cmくらいあったらしいですし。
そもそも「0と1で表現されたデータ」は人間にとっては「暗号」みたいなもんですよね。「意味わかんない」って感じ。
なので、「コンピューターサイエンティスト」は、機械に命令を送るための「より良い方法」を必要としていました。
そこで発明されたのが「アセンブリ言語」です。
アセンブリ言語 (Assembly Language) とは?
パンチカードでは、「バイナリーコード」を使って「機械語」を書くことで「コンピューター」に命令をしていました。
この「ほぼ暗号」みたいで扱いづらく難しい「バイナリーコードで書かれた機械語」を「人間がある程度は理解できるよう文字に置き換えた」のが「アセンブリ言語」です。
まあつまり、「規則に従って記号や単語を数値に変換する」だけで機械語に戻す事が出来ます。
また、アセンブリ言語を実行する時は、機械語に戻してから実行する必要があります。(機械がアセンブリ言語を読めるわけじゃないので)
この時に、アセンブリ言語で記述したプログラムを機械語に戻すことを「アセンブル」といい、戻すときに使うソフトウェアを「アセンブラ」といいます。
どれだけ「アセンブリ言語」になって「便利」になったかを確認するために1つ例を用意しました。
「Hello World」を「バイナリーコード」と「アセンブリ言語」を使ってそれぞれコンピューターに表示させる際のコードを見てみましょう。
バイナリーコードを使った場合
user@my-computer:~$ hexdump demo
0000000 457f 464C 0101 0001 0000 0000 0000 0000
0000010 0002 0003 0001 0000 8080 0804 0034 0000
0000020 00c8 0000 0000 0000 0034 0020 0002 0028
0000030 0004 0003 0001 0000 0000 0000 8000 0804
0000040 8000 0804 009d 0000 009d 0000 0005 0000
0000050 1000 0000 0001 0000 00a0 0000 90a0 0804
0000060 90a0 0804 000e 0000 000e 0000 0006 0000
0000070 1000 0000 0000 0000 0000 0000 0000 0000
0000080 0eba 0000 b900 90a0 0804 01bb 0000 b800
0000090 0004 0000 80cd 0168 0000 cdo0 0080 0000
00000a0 6548 6c6c 2c6f 7720 726f 646c 0a21 2e00
000000 6873 7473 7472 6261 200 6574 7478 2e00
0000OCO 6164 6174 0000 0000 0000 0000 000O 000
0000OdO 0000 0000 0000 0000 0000 0000 0000 0000
4x
0000OfO 00Ob 0000 0001 0000 0006 0000 8080 0804
0000100 0080 0000 001d 0000 0000 0000 0000 0000
0000110 0010 0000 0000 0000 0011 0000 0001 0000
0000120 0003 0000 9000 0804 00a0 0000 000e 0000
0000130 0000 0000 0000 0000 0004 0000 0000 0000
0000140 0001 0000 0003 0000 0000 0000 0000 0000
0000150 00ae 0000 0017 0000 0000 0000 0000 0000
0000160 0001 0000 0000 0000
0000168
user@my-computer:~$
アセンブリ言語を使った場合
section .text ;section declaration
;we must export the entry point to the ELF linker or
global _start ;loader. They conventionally recognize _start as their
;entry point. Use ld -e foo to override the default.
_start:
;write our string to stdout
mov edx,len ;third argument: message length
mov ecx,msg ;second argument: pointer to message to write
mov ebx,1 ;first argument: file handle (stdout)
mov eax,4 ;system call number (sys_write)
int 0x80 ;call kernel
;and exit
mov ebx,0 ;first syscall argument: exit code
mov eax,1 ;system call number (sys_exit)
int 0x80 ;call kernel
section .data ;section declaration
msg db "Hello, world!",0xa ;our dear string
len equ $ - msg ;length of our dear string
「バイナリーコード」は、本当に何を言ってるのか「ちんぷんかんぷん」ですけど、「アセンブリ言語」は「ほんの少し」は読むことができると思います。
それでも、「アセンブリ言語」はかなり「ロボットっぽく」て私たち人間にとって「フレンドリー」じゃないですよね?
そうなんです。アセンブリ言語はまだ「機械語」を「少しマシ」にしたに過ぎず、私たちが「人間の言葉」を使うように「プログラム」を書くことはまだ出来ませんでした。
さらに、アセンブリ言語で書いたプログラムは、それぞれ「特定のCPU専用」になっており、他のCPUとの「互換性」がありませんでした。
これらの問題を解決してくれたのが、「コンパイル型言語」です。
コンパイル型言語 (Compiled language) とは?
1959年「プログラミングを容易にする」ことを目的とし、「アメリカ海軍准将グレース・ホッパー」という超天才な女性によって世界初の「コンパイラ」というプログラムが発明されました。
また、この発明によって新たに沢山のプログラミング言語が生まれました。それらが「コンパイル型言語」と呼ばれるものです。
コンパイル型言語になって大きく変わったことは2つあります。
- 「人間の言葉」を使ってコンピューターに「命令」することができるようになった。
- 特定の種類ではなく、多くの種類のCPUとの「互換性」が出来た。
この「コンパイラ」という発明により、プログラミングの常識が大きく変わりました。ほんと、「グレース・ホッパー様様」ですよね。
それでは、どれだけ「プログラミング」が容易になったかを確認するために、コンパイラ言語を使って「Hello World」をコンピューターに表示させる際のコードを見てみましょう。
C言語 (コンパイラ言語の1つ)を使った場合
#include
int main() {
// printf() displays the string inside quotation
printf("Hello, World!");
return 0;
}
先ほどの「バイナリーコード」や「アセンブリ言語」を使った場合と比べてみてください。「えっ?こんな簡単なの?」って感じですよね。
その過程で、「コンパイル型言語」よりも「より簡単な言語」が誕生しました。それが、「スクリプト言語」です。
スクリプト言語 (Scripting language) とは?
スクリプト言語では、「コンパイル作業」を「私たちの見えないところ」でコンピューターが勝手にやってくれます。
※コンパイルとは:コンパイル型言語で書いたプログラムを「コンパイラ」を使って機械語に戻すこと
なので、私たちは「スクリプト言語」という「私たちが理解しやすい言語」を使うだけで、「コンピューターを動かすことが出来る」のです。
また、代表的な「スクリプト言語」には、「Javascript」や「PHP」などがあります。
それでは、最後に「スクリプト言語」を使って「Hello World」とコンピューターに表示させる際の「コード」を見てみましょう。
Javascript (スクリプト言語の1つ)を使った場合
// the hello world program
console.log('Hello World');
たったのこれだけです。簡単すぎ!笑
以上です!
筆者について
現在スタンフォード大学の教授によって、世界中の誰でもハイレベルな教育を受けられるようにと設立されたCourseraというオンライン授業を受けながら、ITスペシャリストになるべく勉強しています。又、今年の10月からオーストラリアの大学でITを学びます。僕がCourseraで受けてるコースに興味のある方はチェックしてみてください。
» Google IT Support Professional Certificate