抽象化の呪い

(この記事は、2010年6月にMixiの日記に書いたものの転載です。Mixiでも、その後再掲したCNETでも、またキヤノン社内の掲示板でも多くのコメントをいただきました。)

抽象化は、複雑な現代に暮らす私たちの強力なツールです。抽象化のおかげで、私たちは複雑なこの世の中の細部まで理解しなくても暮らしていけます。

テレビのスイッチを入れれば、その裏にある技術的な驚異を気にすることなく、ワールドカップサッカーを観ることができます。電車に乗ってA地点からB地点への移動ができるのは、電車の技術的仕組みのみならず、その運行を支える運転士や、駅員や、保線の方々や、その他大勢の人々の努力があるわけですが、一般の乗客としては、これらの細部にほとんど気を留めることなく電車の利用ができます。現代的な社会の市民としての私たちは、所得税や、消費税や、地方税や、その他もろもろの税金、社会保険を払えば、それなりの社会サービスを、それらの細部を詳細に知ることなく、受けられることを知っています。

抽象化は、「細部を捨象し、隠蔽し、よりシンプルな本質だけを見るようにすることによって、複雑なものごとを、我々人間が理解し扱えるようにするための道具立て」ということができるでしょう。その意味では、モデル化、オブジェクト指向、モジュール化などの概念に通じる考え方でもあります。抽象化、モデル化、モジュール化されたものは、その細部が外界から切り離されているために、異なる文脈でも再利用がやりやすくなります。

複雑な問題を、Divide-and-Conquer戦略で小さな部分問題に還元していく、還元主義もこの流れと言えるでしょう。同様に、会社組織を階層的に構成して、それぞれの部門が他の部門とはある程度独立に運営できるようにするのも、抽象化の延長と言えます。このような階層構造にすることによって、大会社の社長は、一人一人の従業員が誰かということを気にすることなく、部門長だけを相手に報告を受けたり、指示を出したりすることができるからです。

***

抽象化はこのように確かに強力なツールです。私たちは子供のころから物事を整理して単純化して理解する訓練を受けています。科学では、世界をできるだけ簡単な原理で説明できるものが美しいという「オッカムの剃刀」の考えたが支配的な価値観ですし、工学ではモジュール化され再利用性を高めたシステムが良い設計とされています。

しかし抽象化、あるいはそれから導かれる還元主義的な考え方だけに頼っていると、落とし穴もありそうです。ここでは、抽象化の落とし穴について、2つの側面を考えてみたいと思います。

一つは、抽象化にはどうしても「漏れ」があることです。抽象化とは細部を捨象することですが、時にはその「細部」を知ることが重要になる場合があります。プログラミング言語を考えてみましょう。Cなどの成熟したプログラミング言語は偉大な抽象化のレイヤーを提供してくれています。C言語のおかげで、私たちはCPUやレジスタや機械語やメモリアドレスやキャッシュやその他もろもろのコンピュータの詳細を知らずにプログラムを書くことができます。しかしながら、C言語が提供する抽象化の裏を知らないと、必要なプログラムを書くことができないこともあります。私の経験ですが、あるプログラムの実行速度があるとき急に一桁遅くなったことがありました。調べてみると、内側ループにある関数呼び出しがコンパイラによってインライン展開されていて、その結果ループ全体がキャッシュに入らず、キャッシュミスを起こしていることがわかりました。このような場合、C言語という抽象化のレイヤーから、CPUのメモリアーキテクチャという細部が漏れ出てしまっていることになります。これが抽象化の「漏れ」です。いくら物事を抽象化しても、その実体には細部が残っている限り、細部を知らなければならない場面がありうる、ということです。日本の製造業が得意な「摺り合わせ開発」は、抽象化に漏れがあることを認めた上で、その漏れを積極的に活用することによって、より高度な全体最適を求める方法論と言えるのではないでしょうか。

抽象化の問題点のもう一つは、もっと本質的な問題です。それは、特に生物や社会の仕組みなどについて、どうしても還元主義的には説明できないものがありそうだ、ということがわかってきたことです。たとえば、生物の仕組みは、どうやら還元主義的な考えでは説明できないようです。人間のDNAのシークエンスは解読されましたが、人がなぜ生まれ、死に、考えるか、という問いには答えられていません。生物学者の福岡伸一さんは、著書「世界は分けてもわからない」で、生命の本質はミクロな「部品」の集合体では無いようだ、ということを主張されています。社会や組織の仕組みについても同様です。IBM CEO Study 2010によれば、世界で成功している会社のCEOは、コマンド&コントロール型の階層的な組織運営の限界を感じていて、個々の従業員が組織の枠を超えて交流するネットワーク型の組織運営にすることによって、より組織の創造性を高めようとしています。

このような複雑なシステムを理解し、あるいは設計するにはどのような原理を用いたらよいのでしょうか?もし、抽象化というツールが使えないのであれば、複雑なシステムを複雑なままの形で扱う理論・原理が必要になります。現在、JST(日本科学技術振興機構)では、「システム科学」という新しい学問領域を考えることができないか、という議論が行われています。ここでの議論の一つは、複雑さをどのように扱うか、ということです。この議論から、どのような結果が導かれるかはわかりません。複雑なものを簡単な原理で解き明かす理論ができればそれはそれで素晴らしいことですが、一方私は、複雑なものを複雑なまま扱う理論が出てこないか、と期待しています。それは次のような理由からです。

私たちは、そもそもなぜ抽象化を好むのでしょうか?それは、人間の理解力に限界があるからだと思います。私たちが、個人として物事を把握するには、どうしても扱える複雑さに限界があります。過去2000年にわたって、人類の科学技術は急速に進歩しましたが、人間の脳の能力はほとんど変わっていないでしょう。だから、我々人間が複雑な世の中を理解し、設計するには、どうしても抽象化の力を借りなければならなかったのです。

しかし、我々は今、人間の知的能力を飛躍的に高める技術、すなわち情報処理技術を持っています。コンピュータは、一人の人間の理解能力をはるかに超えるような複雑なシステムを同時に監視し、処理することができます。ですから、複雑な問題を複雑なままで扱えるチャンスがあるかもしれません。

適切な例かどうかわかりませんが、一つ例を挙げましょう。有名な数学の問題である、4色問題(どんな平面地図も、隣接する領域が異なる色になるように塗るには4色あれば十分だという定理)は、コンピュータを使って解かれています。この証明は、たとえ優秀な数学者であっても複雑すぎてとても一人の人間では検証できないのです。にもかかわらず、多くのコンピュータ・プログラムの追試によって、この定理は証明されたものだと信じられています。コンピュータの力を借りて、「複雑なものを複雑なまま解いた」例の一つと言えるのではないでしょうか。

私たちが当たり前に価値を認めていた「抽象化」というツールを、もう一度見直す時期に来ているのかもしれません。

この記事が気に入ったらサポートをしてみませんか?