プログラミング・パラダイム


プログラムは「データ」と「処理」の2つで構成されているという仕組みを学びました。

www.tanopro.net

プログラマーは、「処理」の書き方についていろいろ工夫してきました。

プログラムの「処理」の書き方は、どのように改善され、発展してきたのでしょうか?~今回はその歴史について触れてみましょう。

命令型プログラミングと宣言型プログラミング

現代のプログラミング・パラダイム(考え方)には、

  1. 命令 めいれい
  2. 宣言 せんげん

という2つの流派があります。

例えるならば、

カレーを作るときに調理の順番を事細かく指示を出す方法が「命令型」で、

カレーを作るときに調理の順番は何でもOKだけど、「欲しいものはカレー」という結論を明示して指示を出す方法が「宣言型」です。

この違いは、後で実際に命令型と宣言型でプログラムを書いてみたらよく分かります。

ja.wikipedia.org

ja.wikipedia.org

jp.quora.com

いずれもコンピュータへの指示の出しかたなのですが、

  • 命令型は、複数の指示がある場合、指示と指示の間の順序関係を指定します。「最初にこうして、次にこうして、最後にこうする。」など。
  • 宣言型は、指示を「最終的にはこうなっている」とか、「こうなっているときにはこうする」というように表現し、指示と指示の間の実行順序を関知しません。

基礎となる計算モデルによる分類

命令型や宣言型の中身をさらに細分化すると、4つに分類できます。

  1. 手続 てつづき :C、Javaなど
  2. 関数 かんすう :Lisp、Haskellなど
  3. 問合 といあわせ :SQLなど
  4. 論理 ろんり :Prologなど
  • 手続型は「命令型」に属しています。
  • 関数型、問合型、論理型は「宣言型」に属しています。

(参考)「日経ソフトウエア」2008年3月号(p.55)

パラダイム分類基礎となる計算モデル具体例
命令型手続型言語チューリングマシンC、Javaなど
宣言型関数型言語ラムダ計算Lisp、Haskellなど
問合型言語関係モデルSQLなど
論理型言語一階述語言語Prologなど

ja.wikipedia.org

ja.wikipedia.org

ja.wikipedia.org

ja.wikipedia.org

ja.wikipedia.org

Wikipediaで各計算モデルの説明を読むと、どれも数学による裏付けがあることが分かります。

ぶっちゃけ、計算モデルの詳細を知らなくてもプログラムは書けます。

将来、プログラミング言語の仕組みを詳しく知りたいときが来たら、掘り下げてみてください。

入門の段階では「こういう話もあるよ」ということを頭の片隅にでも留めておいていただければと思います。

オブジェクト指向プログラミング

「OOP」(Object Oriented Programming オブジェクト指向プログラミング)という手法もありますが、これは手続型に属しています。

ja.wikipedia.org

計算可能性

手続型・関数型・問合型・論理型の4つは、見た目がちょっと違うけど、「チューリング完全」と言って、計算できること(計算可能性)は同じと保証されています。

(同じ計算ができます。)

ja.wikipedia.org

ja.wikipedia.org

最初は手続き型(命令型)が分かりやすい

いろいろなプログラミング学習の本を見てみると、最初は手続型(命令型)のプログラミング言語を取り上げています。

手続型は「買物のメモ」みたいに、人間にとって直感的に分かりやすいので、プログラミング入門に最適なのかもしれません。

たのプロでも、最初は手続型(命令型)のプログラミング言語を使って、学習を進めていきます。

コンピューター・サイエンス

なお、プログラミングの歴史については「コンピューターサイエンス」(計算機科学)という分野で詳しく研究されています。

詳細を知りたい方は、コンピューターサイエンスの本も読んでみてください。

ja.wikipedia.org