logo

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

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

定義

プログラミングパラダイムとは、与えられた問題を解決するプログラムを書くときの見解や方法論を指す。特定のパラダイムに適したプログラミング言語はそのプログラミングパラダイムを持つと言い、ほとんどの言語は一つのパラダイムを持つ。複数のパラダイムを持つ言語をマルチパラダイム言語と言う。

一つのパラダイムを持つとは、他のパラダイムの概念が全く含まれていないわけではなく、その言語の潜在性能を完全に引き出す方法がそのパラダイムであるということだ。ほぼすべての言語が時代が変わるにつれて良い機能を取り入れて変化する。しかし、言語が発表された時の設計理念が変わることはほとんどなく、通常、当初の設計通りにコードを書くのが最善であるとされる。

手続き型プログラミング

手続き型プログラミングとは、簡単に言うと、命令を順番に受けて問題を解決する方法だ。最も直感的であり、最も古い方法で、数値計算に特化したフォートラン(1954)、修飾子が必要ないC(1972)など、年代がある言語が例として挙げられる。21世紀に入り、これらの言語は主に速度を最優先する状況で使用される。手続き型言語では関数だけでなくサブルーチンプロシージャとして文法的に実装されている。関数が「ある値を与えるとある値を返すもの」であるのに対し、サブルーチンは「ある過程をコピーして貼り付けるもの」と似ている。これは手続き型で考えられるプログラミング方法で、慣れれば簡潔で速く、バグの少ないコードを書くのに良い。

フォートラン

フォートランの理念は、「式を簡単に表現する」で、今に至るまでほぼすべての言語がそうである。フォートランがほぼすべての言語に遅れを取っているわけではなく、ほぼすべての言語がフォートランの影響を受けたと見るべきだ。産業界ではほぼ廃れているにもかかわらず、自然科学に近い学界ではその地位は依然として変わらず、既に開発されたライブラリが非常に多く、プログラミングよりも自分の分野に集中したい教授たちの保守的な性向と、その教え子たちもそれを引き継ぐ雰囲気、フォートランよりも速い言語が特にないためだ。

C

Cの理念は、「プログラマを信じる」で、書かれたコードを疑わずに実行するため、生産性は落ちるが非常に速い速度を出せる。フォートランとは比べ物にならないほど多様な分野で使用され、学界でもその地位はそれなりに堅固である。2010年代に入ると、CPUのスペックが低い環境、例えば埋め込みシステムやドローン、物のインターネットなどで強みを示している。より最適化を進めるには、アセンブリ言語にまで踏み込まなければならない。

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

オブジェクト指向プログラミングとは、簡単に言えば、プログラムを小さく分けて、それぞれの簡単な機能を集めて問題を解決する方法だ。プログラムの機能が多様化し、多くの要求に対応しようとするほど、コードは複雑になる。コンピュータができることが多くなるにつれ、手続き型パラダイムだけではどうしても時間内に完成できないプロジェクトが出てきて、多くの人が一緒に作業することで非効率性も大きくなっただけだ。このために、オブジェクト指向プログラミングのような方法論が考案された。一人の天才が一つの完璧なプログラムを書くことは非現実的だが、多くの凡人が「簡単な機能」の作成に集中し、それらを使って問題を解決することは現実的だ。

パイソン

パイソンの理念は、「たった一つの最も美しい解決策が存在する」というもので、比較的厳格な文法を持っているため、誰がコードを書いても美しく、読みやすい。これは直ちに生産性の向上につながり、「人生は短く、君にはパイソンが必要だ」という名言が生まれた。パイソンの生産力は驚くほどで、産業界で活発に使われるだけでなく、2010年代に入りディープラーニングが人気を博して以来、使用率が高い。

R

Rの理念は、「概念をソフトウェアに迅速かつ忠実に移す」というもので、統計分析に特化しているため、問題を解決するメソッドを実装するよりも、データを受け取り、様々なパッケージの助けを借りて即座に問題を解決するのに非常に有利である。統計に適しているため、ほぼすべての分野で遭遇する可能性があり、初心者には「使いにくい」と指摘されることがあるが、これは言語としてではなく、統計プログラムとしての評価に過ぎない。R以外の言語にある程度慣れている人が初めて触れた場合、概念を移すという理念に沿って、複雑なデータ操作を魔法のようにこなせる。逆に、多くの統計学者がそうであるように、最初のプログラミングをRで始めてしまうと、Rがあまりにも簡単なため、他の言語を習得する際に苦労することもある。

関数型プログラミング

関数型プログラミングは、簡単に言えば、プログラムを一つの大きな関数とみなし、それを小さな関数の合成関数として実装して問題を解決する方法だ。これはある意味で、オブジェクト指向パラダイムよりもさらに問題を細分化したものだが、その他の制約により、より簡潔で、メンテナンスが容易になるように設計されている。手続き型、オブジェクト指向パラダイムは命令型プログラミングに属しているが、関数型プログラミングは宣言型プログラミングに属する。宣言型プログラミングとは、出力される値をプロセスではなく、結果として記述することを言う。命令型プログラミングでは、出力値を得るためのプロセスの構築に集中するが、宣言型プログラミングでは、提示された条件を満たせば、その方法はどうであれ良い。

ハスケル

ハスケルの理念は「数学を使ってプログラミング言語を作る」というもので、一般的な純粋関数型言語の特徴を持ち、すべての関数型プログラミング言語の原型となる可能性がある。多くの数学の概念を借りており、その根本に相応しく、コードも数学的な記述に非常に似ている。まだ産業界で活発に使われているわけではないが、学界から抜け出し、徐々に市場占有率を上げている。