AIの進化が進む中、文系AIエンジニアの活躍が期待されています。彼らは文章を通じて意図を正確に伝える能力が高く、これがプロンプト作成において重要だからです。私自身オブジェクト指向プログラミング(以降、OOP)でコーディングしてきた経験から言えることは、現在のようにAIが普及するその前、OOPが使えるようになったその時から、抽象的に論じられる哲学を理解する文系っぽさは既に必要だったという事です。
プラトンのイデア論とオブジェクト指向の共通点
哲学とプログラミングの世界は、一見すると全く異なる領域のように思えます。しかし、プラトンの「イデア論」とプログラミング言語における「オブジェクト指向」には、概念的な共通点があります。
プラトンが提唱したイデア論は、現実世界に存在するすべての物の背後に、完全で永遠の「イデア」があるという考え方です。
同様に、オブジェクト指向プログラミングでは、「クラス」という抽象的な設計図が存在し、その設計に基づいて個々の「オブジェクト」が生成されるという考え方が採用されています。これらは、抽象的な本質と具体的な表現の関係において深い共通性を持っています。
イデア論における普遍的な本質
プラトンのイデア論は、私たちが目にする物理的な世界は「影」に過ぎず、その背後に「本当の現実」が存在すると考えます。
この「本当の現実」とは、物事の理想的で完全な形、つまり「イデア」のことです。例えば、私たちが見ている「椅子」はそれぞれ形が異なるかもしれませんが、それらはすべて「椅子のイデア」を表しているに過ぎません。
イデア自体は変わらず普遍的であり、現実の事物はその不完全な反映でしかありません。ちなみに、挿絵の画家ラファエロの「アテナイの学堂」では赤い外套のプラトンと青い外套のアリストテレスが描かれています。「個物」こそが基本的実在としたアリストテレスと並べると、まるで映画「マトリクス」の赤いピルと青のピルの対比のようです。
OOPのクラスとオブジェクト
OOPでも、クラスが「イデア」に相当する抽象的な存在として機能しています。クラスは、オブジェクトの属性や動作を定義する抽象的な設計図です。
具体的なオブジェクトは、このクラスに基づいて生成され、クラスで定義された性質を持ちます。例えば、「車」というクラスがあれば、それに基づいて「トヨタの車」や「ホンダの車」といった具象的なオブジェクト(インスタンス)が作られるのです。
これらのオブジェクトは、クラスが定める普遍的な性質を持ちながらも、個々の実例として異なる特徴を持つことができます。
抽象と具体の二重構造
プラトンのイデア論とオブジェクト指向プログラミングは、いずれも「抽象」と「具体」の二重構造を基盤としています。
イデア論では、抽象的な「イデア」が不変で永遠の存在であり、具体的な事物はその一時的な写しです。同様に、オブジェクト指向プログラミングでは、クラスが抽象的なモデルとして機能し、オブジェクトはそのクラスを具現化したものとして存在します。
このように、両者は「普遍的な本質」と「具体的な現れ」という共通の構造を持っているのです。
イデアとクラスの具体例
例えば、「椅子」というイデアを考えてみましょう。イデア論では、このイデアは普遍的な「椅子の本質」を指し、私たちが目にするすべての椅子はこのイデアの一部に過ぎません。ある椅子は木製で、別の椅子は鉄製かもしれませんが、これらは「椅子のイデア」を基にした具象的な表現です。
同様に、OOPにおける「椅子クラス」も、普遍的な椅子の属性(プロパティ)や動作(メソッド)を定義したものです。このクラスを基にして、具象的なオブジェクト、たとえば「オフィスチェア」や「ダイニングチェア」といった具体的な椅子オブジェクトが作られます。
これらのオブジェクトは、それぞれ異なる材質や形状を持っていますが、すべて「椅子クラス」によって定義された本質を共有しているのです。
物事を体系的に理解するための抽象化というフレームワーク
プラトンのイデア論とOOPは、異なる分野に属する概念ではあるものの、抽象と具体の関係において重要な共通点を持っています。
イデア論が哲学的な本質論として物事の普遍性を捉えるように、OOPもクラスという抽象的なモデルを基に、個別のオブジェクトを生成します。
この二重構造は、どちらの概念においても、物事を体系的に理解するための重要なフレームワークとなっています。
OOPはプラトンのイデアをモデルにしている説?
OOPの成り立ちは、プラトンのイデア論という哲学的枠組みに直接的に基づいたものではなく、ソフトウェア設計におけるモジュールの結合性や再利用性を高めるために、主に技術的な要求に応じて発展してきたものです。
とはいえ、OOPを開発した人が、自力でこのイデア論的なモデルに辿り着き、それをさらにアーキテクチャとして実装したなら、本当にすごいことです。
今まで、C言語など手続き型の言語からシフトしてきたプログラマーにとっては、抽象化された概念の理解に苦しんだ人も多いと思いますが、この抽象化の理解は問題解決や創造的思考において非常に重要なスキルです。
抽象化の能力は非常に重要です
抽象化の能力とは、具体的な事象やデータから本質的な共通点やパターンを見出し、それをシンプルにまとめるスキルです。
例えば、OOPでは、現実世界の物事を抽象化し、再利用可能な部品として設計する手法に基づいています。これは、例えば社員が仕事をより効率的に進めるために役立つ考え方であり、全体のプロセスを簡潔に理解し、共通の要素を見つけることで、重複作業や無駄を減らすことができるのです。
抽象化は、技術的スキルだけでなく、全体を把握し、ビジネスの大局を理解するためにも重要なスキルです。社員がこの能力を高めることで、個々のタスクにとどまらず、全体の戦略や目的を念頭に置いて働くことができ、結果として組織の成長に大きく貢献できるのです。
ここまで読んでくださってありがとうございます。
今回のコラムを含め、AIをテーマに3回に渡ってコラムを書いています。興味があれば続けて読んで頂けると幸いです。
AIはアリストテレス的進化?OOPはプラトン的設計?哲学的に考えるIT技術 | 株式会社 Tuber Vision
AIのための思考という「化石燃料」 | 株式会社 Tuber Vision