C言語のきほん|プログラミング言語の歴史

0と1からC言語へ。歴史を知ると、プログラミングがもっとわかる。

C言語を学ぶとき、いきなり文法から入ってももちろん勉強はできます。
でも、プログラミング言語がどう生まれて、どう進化してきたかを先に知っておくと、C言語の立ち位置がとてもよく見えてきます。

なぜ昔は機械語だったのか。
なぜアセンブリ言語が必要になったのか。
なぜさらに高級言語が登場したのか。

この流れを知ると、C言語が単なる昔の言語ではなく、今でも多くの技術の土台を支える重要な言語だと実感しやすくなります。ここでは、機械語 → アセンブリ言語 → 高級言語 という流れを、表や図を使ってやさしく整理していきます。

プログラミング言語の歴史を学ぶ意味

まず最初に、歴史を学ぶメリットを整理しておきます。

歴史を学ぶメリット

視点わかること
仕組みの理解コンピュータが本当は 0 と 1 で動いていること
言語の役割人間が書きやすくするために言語が進化したこと
C言語の位置づけ低レベルと高レベルの橋渡し的な存在であること
学習のコツ文法暗記ではなく、意味で理解しやすくなること

C言語の学びやすさや難しさの理由も、歴史の流れを知ると納得しやすくなります。

最初期のプログラムは機械語だった

1946年ごろの初期のコンピュータでは、プログラムは 機械語 で書かれていました。
機械語は、コンピュータが直接実行できる命令の形です。

ただし、人間にとっては非常に読みづらく、書くのも修正するのも大変でした。

機械語のイメージ(図)

機械語(コンピュータが直接読む)
10111000 00101101
00000001 10001110
11010000 10111100
00110100 00000101
00110110 10001100
00011110 01011000
00000000 10110100
00110000 11001101

この図は、コンピュータには理解しやすいけれど、人間には意味がつかみにくいことを表しています。
0 と 1 の並びを見ても、どんな処理をしているのか直感的にはわかりませんよね。

アセンブリ言語の登場

機械語の扱いにくさを改善するために登場したのが アセンブリ言語 です。
アセンブリ言語では、機械語の命令を人間が覚えやすい記号(ニーモニック)で表します。

たとえば、加算なら ADD、データ移動なら MOV のように書けます。

機械語とアセンブリ言語の比較(図)

機械語
10111000 00101101
00000001 10001110
11010000 10111100
00110100 00000101

↓ 人間にわかりやすい記号へ置き換え

アセンブリ言語
main:
    MOV BX,1
    MOV AX,2
    ADD BX,AX
    XOR AX,AX
    RET

この図で見てほしいのは、アセンブリ言語になると 命令の意味が少し見えるようになる ところです。
MOV は移動、ADD は加算、というように、処理の意図を人間が追いやすくなります。

機械語とアセンブリ言語の違い(表)

項目機械語アセンブリ言語
読みやすさとても低い機械語より高い
実行速度直接実行できるアセンブラで変換して実行
書きやすさとても難しいかなり改善される
CPU依存非常に強い強い(CPUごとに書き直しが必要)

ポイントは、アセンブリ言語は便利になったとはいえ、まだ CPUごとの差 が大きいことです。
つまり、別のコンピュータで動かそうとすると、書き直しが必要になることが多かったんですね。

ニーモニックとは?

本文にも出てくる大事な言葉なので、ここで整理しておきます。

ニーモニックの説明(表

用語意味
ニーモニック機械語の命令を覚えやすい記号にしたものMOV, ADD, SUB, JMP

ニーモニックは、言ってみれば 命令の短いラベル です。
0と1の並びをそのまま覚えるより、MOV や ADD のほうが圧倒的に扱いやすいですよね。

高級言語の登場

1950年代になると、さらに人間が扱いやすい 高級言語 が登場します。
ここで一気に、プログラムを書く作業が実用的になっていきました。

代表例としてよく登場するのが、以下の2つです。

  • Fortran(科学技術計算)
  • COBOL(事務処理・業務アプリケーション)

高級言語の特徴(表)

項目内容
読みやすさ英語に近い書き方で理解しやすい
開発効率アセンブリ言語より大幅に高い
保守性修正しやすく、複数人で扱いやすい
共通性CPU差を吸収しやすくなった(処理系が変換)

大切なのは、人間が書く負担が大きく減ったことです。
高級言語の登場によって、プログラミングは一部の専門家だけのものから、より広い分野で使われる技術になっていきました。

FortranとCOBOLのサンプル

Fortran の例

program hello
    print *, 'Hello, World!'
end program hello

COBOL の例(日本語メッセージ・日本語コメント)

IDENTIFICATION DIVISION.
PROGRAM-ID. HELLO.

PROCEDURE DIVISION.
    DISPLAY "Hello, World!".
    STOP RUN.

FortranとCOBOLの見た目の違いを比べてみる

同じ「文字を表示する」処理でも、書き方には違いがあります。
ここで、見た目と特徴を比べてみましょう。

Fortran と COBOL の比較表

項目FortranCOBOL
主な用途(当時)科学技術計算業務処理・事務処理
書き方の印象比較的コンパクト文章的で構造がはっきりしている
読みやすさ数式処理に向く帳票や業務手順の表現に向く
学習時の注目点シンプルな命令構造部(DIVISION)ごとの構成

この表からわかるように、言語は「得意分野」に合わせて設計されています。
つまり、プログラミング言語は1つではなく、目的に応じて進化してきたわけです。

高級言語とは?

ここも用語としてしっかり押さえておきたいところです。

高級言語の説明

用語意味
高級言語人間が理解しやすい形でコンピュータに指示を書くための言語
反対のイメージ機械語やアセンブリ言語(コンピュータ寄り)
代表例C言語、Fortran、COBOL、Java、Python など

高級言語という言い方は、優れているという意味よりも、**抽象度が高い(人間向けに整理されている)**という意味で使われます。
C言語も高級言語に分類されますが、比較的コンピュータ寄りの感覚も残っている、ちょうどいい位置の言語です。

言語の進化の流れを図で整理する

ここまでの内容を、1本の流れとして整理しておくと理解が安定します。

プログラミング言語の進化(図)

「使いにくい → 改善する」という流れで進化してきたことがわかります。

C言語はこの歴史の中でどこにいるの?

ここが、C言語学習の入口としていちばん大事なポイントです。

C言語は高級言語の一種ですが、ほかの高級言語よりもコンピュータの仕組みに近い感覚を学びやすい言語です。
そのため、次のような場面で今でも重要です。

C言語の位置づけ(表)

観点C言語の特徴
歴史的な役割高級言語でありながら、低レベルな制御も意識しやすい
学習面の強みメモリ、処理の流れ、CPUに近い考え方を学べる
実用面の強みOS、組み込み、ライブラリ開発などで使われる
他言語との関係C系文法の言語を学ぶ土台になりやすい

ポイントは、C言語が「古いから学ぶ」のではなく、今でも通用する基礎力が身につくから学ぶということです。

機械語とアセンブリ言語

この図は、同じ処理でも表現方法が違うことを示しています。
上の機械語はコンピュータ向け、下のアセンブリ言語は人間向けです。

特に注目したいのは、アセンブリ言語では MOV や ADD など、命令の意味が見える記号が使われている点です。これが、プログラミングを人間に近づける最初の大きな一歩でした。

FortranとCOBOL

この図は、高級言語になるとさらに読みやすくなることを示しています。
Fortran は比較的コンパクト、COBOL は手続きが構造的に書かれていて、用途に応じて言語設計が違うことも見えてきます。

つまりこの図は、単にサンプルを並べているのではなく、言語の進化と多様化を見せる図になっています。

ここまでのまとめ

最後に、今回の内容を整理しておきます。

まとめ表

テーマ要点
機械語コンピュータが直接実行できるが、人間には難しい
アセンブリ言語ニーモニックで少し読みやすくなったが、CPU依存が強い
高級言語人間が書きやすくなり、開発効率が大きく向上
Fortran / COBOL用途に応じて発展した代表的な高級言語
C言語高級言語の中でも、仕組み理解に強い重要な言語

この歴史の流れを知っておくと、これからC言語の文法を学ぶときに、
なんでこういう書き方をするんだろう? が、歴史と役割の視点から理解できるようになります。