プログラムは「データ」と「処理」の2つで構成されているという仕組みを学びました。
プログラマーは、「処理」の書き方についていろいろ工夫してきました。
プログラムの「処理」の書き方は、どのように改善され、発展してきたのでしょうか?~今回はその歴史について触れてみましょう。
命令型プログラミングと宣言型プログラミング
現代のプログラミング・パラダイム(考え方)には、
-
命令 型 -
宣言 型
という2つの流派があります。
例えるならば、
カレーを作るときに調理の順番を事細かく指示を出す方法が「命令型」で、
カレーを作るときに調理の順番は何でもOKだけど、「欲しいものはカレー」という結論を明示して指示を出す方法が「宣言型」です。
この違いは、後で実際に命令型と宣言型でプログラムを書いてみたらよく分かります。
いずれもコンピュータへの指示の出しかたなのですが、
- 命令型は、複数の指示がある場合、指示と指示の間の順序関係を指定します。「最初にこうして、次にこうして、最後にこうする。」など。
- 宣言型は、指示を「最終的にはこうなっている」とか、「こうなっているときにはこうする」というように表現し、指示と指示の間の実行順序を関知しません。
基礎となる計算モデルによる分類
命令型や宣言型の中身をさらに細分化すると、4つに分類できます。
-
手続 型:C、Javaなど -
関数 型:Lisp、Haskellなど -
問合 型:SQLなど -
論理 型:Prologなど
- 手続型は「命令型」に属しています。
- 関数型、問合型、論理型は「宣言型」に属しています。
(参考)「日経ソフトウエア」2008年3月号(p.55)
パラダイム | 分類 | 基礎となる計算モデル | 具体例 |
命令型 | 手続型言語 | チューリングマシン | C、Javaなど |
宣言型 | 関数型言語 | ラムダ計算 | Lisp、Haskellなど |
問合型言語 | 関係モデル | SQLなど | |
論理型言語 | 一階述語言語 | Prologなど |
Wikipediaで各計算モデルの説明を読むと、どれも数学による裏付けがあることが分かります。
ぶっちゃけ、計算モデルの詳細を知らなくてもプログラムは書けます。
将来、プログラミング言語の仕組みを詳しく知りたいときが来たら、掘り下げてみてください。
入門の段階では「こういう話もあるよ」ということを頭の片隅にでも留めておいていただければと思います。
オブジェクト指向プログラミング
「OOP」(Object Oriented Programming オブジェクト指向プログラミング)という手法もありますが、これは手続型に属しています。
計算可能性
手続型・関数型・問合型・論理型の4つは、見た目がちょっと違うけど、「チューリング完全」と言って、計算できること(計算可能性)は同じと保証されています。
(同じ計算ができます。)
最初は手続き型(命令型)が分かりやすい
いろいろなプログラミング学習の本を見てみると、最初は手続型(命令型)のプログラミング言語を取り上げています。
手続型は「買物のメモ」みたいに、人間にとって直感的に分かりやすいので、プログラミング入門に最適なのかもしれません。
たのプロでも、最初は手続型(命令型)のプログラミング言語を使って、学習を進めていきます。
コンピューター・サイエンス
なお、プログラミングの歴史については「コンピューターサイエンス」(計算機科学)という分野で詳しく研究されています。
詳細を知りたい方は、コンピューターサイエンスの本も読んでみてください。