プログラムの自動生成は可能か?

要求をインプットすればそれを実現するプログラムが生成できる、そのようなことが可能かどうかについてです。設計から自動的にプログラムのベースを出力したり、visualにマウスだけでプログラミングできるツールというものがあります。これらが発展していったときに最終的に自動的なプログラム生成ができるようになるかですが、これは基本的には不可能だと思っています。(もちろん、人間の思考をエミュレートするまで技術が発展したとすると話は別です。)


言語というのは世界モデル、概念を記述するためのルールセットです。人が通常使う自然言語のようにプログラム言語も世界を記述します。ある言語で世界を記述する場合、どのくらいの簡潔さで対象を記述できるかどうか、これが言語の言語としての優秀さであると考えられますが、どの概念も同じように簡潔に記述することは不可能です。そのため、どれを簡潔に記述可能にしてどれを犠牲にするかというトレードオフが発生します。このトレードオフに関する違いが言語の違いと考えられます。


何を簡潔に伝えられるようにするかは、何に価値を置くかとも考えられるので、言語の違いは価値観の体系の違いともいえそうです。プログラミング言語はコンピュータの概念を表しやすいように論理的な側面が強いものとなり、自然言語は人の感覚的なものを記述しやすいように進化してきたのではないかと思われます。


本題のプログラム生成についてですが、これを考えるにあたり「要求が何か」を明確にする必要がありそうです。要求とはビジネスを機械に実行させることです。このことは以下の2つに分けることができます。

  • (1) ビジネスを論理的な形式で書き下すこと(論理モデルを構成すること)
  • (2) (1)のモデルを機械で実行可能にすること。

(2)に関しては機械語のような低レベル言語からスクリプトなどの高級言語への構成によってほぼ自動化することができますが、(1)に関しては「ビジネスとは何か」ということを明らかにする必要があります。英語翻訳はどのようにすればよいか、商品の価値をどのように測ればよいか、ある機能は将来どれくらい使われそうか、例えばこのようなことを論理モデルによって構成することが(1)には必要です。


高級言語によって論理モデルをプログラム言語で記述することは非常に容易になっていますが、ビジネスの論理モデルを記述することは難しいままです。それは日本語のような自然言語でも同じように難しいことです。それはビジネスそのものを意味していて同程度の記述の難しさがあります。もしもプログラムの自動生成ができるシステムができた場合、それに入力すべきデータは高級言語でのプログラミングと同様のものになると思います。