こちらは、僕が所属しているVR法人HIKKYの、
Advent Calendar 2023
https://qiita.com/advent-calendar/2023/hikky
https://qiita.com/advent-calendar/2023/hikky
用の記事となります。
今回は「オブジェクト指向」に関するよもやま話を書こうかと思います。
■オブジェクト指向とは
オブジェクト指向とは何かというと・・・いや、内容をまとめるのが面倒なのでChatGPTさんに聞いてみましょうか。
僕:
オブジェクト指向とは何ですか?
オブジェクト指向とは何ですか?
ChatGPT:
オブジェクト指向(Object-Oriented, OO)とは、ソフトウェア設計とプログラミングのパラダイムの一つです。このアプローチは、データとそれに関連する操作を一つの単位、つまり「オブジェクト」としてまとめることに焦点を当てています。(以下略)
オブジェクト指向(Object-Oriented, OO)とは、ソフトウェア設計とプログラミングのパラダイムの一つです。このアプローチは、データとそれに関連する操作を一つの単位、つまり「オブジェクト」としてまとめることに焦点を当てています。(以下略)
というわけで、オブジェクト=モノのようなものを基点に設計する考え方で、それまでの構造化プログラミングとは異なる大きなパラダイムシフトであって、本格的な普及が始まった1990年代当時、なかなか移行できないプログラマが多くいたのを覚えています。
オブジェクト不要論というのもの当時提唱する一部の人もいたりしましたが、21世紀に入ってほぼ主流となりました。
■オブジェクト指向と道教思想の類似性
このオブジェクト指向という考え方が何を元にして誕生したのかはやや謎ではあります。関数型言語は明らかに数学からヒントを得ているのは分かりやすいのですが。
これに関して、道教の思想から影響を受けているのではないかという指摘が一部からおこなわれています。道教の考え方をものすごくざっくりいうと、根源的な存在から万物が生じて、あらゆる現象は万物から生じるみたいな感じです。これ、とてもオブジェクト指向の考え方に似ていますよね。
ただ、オブジェクト指向の誕生に関わった人が道教を参考にしたという証拠は論文でも文献でも何一つないのですが、19世紀から20世紀にかけて欧米で東洋思想ブームが何度も起きているので、影響を受けた可能性は否定できないところではあります。
まあ、影響を受けたとしても、キリスト教文化圏の中で道教からヒントを得たと当時大っぴらに言えたかどうかは難しいところです。東洋思想ブームは少なからずオカルトブームにも結びついており、ブラヴァツキーの神智学だったり、ニューエイジ・ムーブメントだったり。
■東洋思想の多様性
仮に影響を受けなかったとして、ではなぜ類似性があるのかというと、古代の東洋思想や哲学は本当に多種多様で、その中に現代における新しい思想と似たものが見つかるというのは不思議ではないのかもしれません。
例えば、フロイト・ユング以降の意識・無意識・集合的無意識という考え方がありますが、似たようなものとして4世紀頃の古代インドで「唯識」という仏教思想があり、それでは五感含めて意識・末那識・阿頼耶識の計8つがある八識説だったり、もっと多い数を提唱している一派も存在します。
また、唯識は結局この世界が実在するか分からないし、ただ(唯)、識があることしか分からないよねという考え方で、量子論だったりシミュレーション仮説とも似たところがあります。
あと、他にも6世紀頃のインド哲学のヴァイシェーシカ学派は、言葉は実在と1対1で対応するという思想で、1980~90年代のAIがやろうとしていた方法論と親和性があって興味深いです。まあ2010年代のディープラーニング以降からすると古い考え方ではありますが。
■ポストオブジェクト指向
話をプログラミングに戻しますが、オブジェクト指向が主流になって30年以上経つわけですが、次のパラダイムシフト、ポストオブジェクト指向が今後登場するのかを考えたいと思います。
アスペクト指向だったりいろいろなものが提唱されてきたのですが、オブジェクト指向を補完するものだったりして、完全に置き換わるようなものは現状では現れていません。関数型言語がそうなるかというと、多くのプログラマにとってはとっつきにくいのですよね(僕も苦手です)。
オブジェクト指向はなんやかんやで人間の本来の認識に近いとは思います。道教思想が古代において受け入れられたのも同じような感覚があったからではないかとも思います。
仮にポストオブジェクト指向が登場するとしたら、もしかすると東洋思想の中に似たものが既にあるのかもしれませんね。
■AI時代のプログラミング言語
ただ、個人的にはオブジェクト指向の次はなく、異なるパラダイムシフトが起きると思うのですよね。といいますか、もう起きているといいますか。
それはAIによるものなのですが、現時点でも自然言語でこれこれこういう関数を書いてってAIに投げたらコードを書いてくれるわけですが、今は人間:AIの比率が80:20だったり70:30ぐらいかもしれませんが、これがすぐに20:80になってくるのは確実だと思います。
そうなると、プログラマが設計してAIがコードを書くというスタイルからさらに進み、AIがプログラム全部を先に作ってしまって、プログラマが一部を書き替えるといった主従が反転することになります。
そこで扱われるプログラミング言語として何が最適なのかと考えると、それは別にオブジェクト指向であってもなくてもどちらでもいいのですよね。言語とはコミュニケーションするための相互インターフェイスなのですが、お互いのうち知性が低い方に合わせる必要があります。例えば、人間と犬がコミュニケーションするとき、人間は「お手」「おかわり」など限られた単語だけで指示します。AIが今後、人間と同等か部分的には上回る知性を持ったとき、人間の知性に合わせてくることになります。
プログラマならオブジェクト指向言語のソースコードを提示してもらって、それに対してここはこう書き替えて欲しいとかAIに指示するようなコミュニケーションを取るのが正確で早そうですが、非プログラマならScratchのようなビジュアルプログラミング言語でもいいですし、数学者相手なら数式の方がわかりやすいかもしれません。
いや、もはやプログラミング言語である必要はなく、自然言語だけでもいいし、絵文字が含まれていたり、それが2次元上に表現されていなくても3次元でもよく、静止画でなくても動画でもよく、そしてその言語の文法は一人一人に合わせたものでよく、人間同士のコミュニケーションには使われないものになっているかもしれません。
■AIが使うプログラミング言語
人間とAI間の言語はそうなるとして、ではAIとOSだったりハードウェア間の言語はどうなるかというと、基本的には機械語そのものではありますが、人間が読みやすいようにとは考えられず速度だけを優先したアプトプットになると思います。
また、量子コンピュータ向けのプログラミングは人間のプログラマには難しいという声も聞きますが、AIはより量子コンピュータのハードウェアに近いコードを生成し、それはもう人間には難読なモノになってしまいそうです。
■AI時代のソフトウェア開発
AIがプログラマの仕事を奪うのかという議論はよく聞きますが、今のようなプログラマが全部設計してコードを書いてデバッグしてという仕事はなくなっていくのだと思います。
AI主体のソフトウェア開発になれば、今よりもより大規模なソフトを少人数で、もっといえば1人で作れるようになります。
例えば、大規模オープンワールドゲームも1人で3Dモデルなどの素材含めてすべて作れるようになるでしょうが、それでもそれを面白いゲームとして成立させるために、AIに対して指示出しする必要があり、ゲームロジックなど論理的な部分をきめ細かく指定することにはなりそうです。
結局、AIは人間の感情を理解したり模倣できたとしても、AI自身は感情を持たないので、そこは人間の仕事として残るのだと思います。生命体ならすべからく持つ恐怖心(死に対する恐怖)は持たないというか持てないですしね。
■まとめ
話があっちこっちに飛んでまとまりがなく、まとめにくいのですが(笑)、まあ人類がこれまで積み重ねてきた知識体系やらなんやらをAIがすべて吸収し、新しい世界に突入するのを目の当たりに出来る時代に生まれてラッキーだったなぁーと思う次第であります。