Chapter Content

Calculating...

えー、第一章、始めますね。抽象化による進歩、っていうタイトルなんですけど。うーん、なんか難しそう?(笑)

まあ、読んでいくと、技術がどんどん進歩して、より高度なことに挑戦するようになるじゃないですか。そうなると、作るものがどんどん複雑になって、部品の数も増えるって話なんですよね。そりゃそうですよね。簡単な橋だったら、まあ、それなりの部品で済むけど、長い橋を架けるとなると、土台とか柱とか、もう、いろんなものをたくさん使わないと、安全に渡れないですよね。温度変化とか、風とか、地震とか、そういうのも考慮しなきゃいけないし。

で、難しい問題って、結局、考慮しなきゃいけない要素が多くて、それを解決するために、部品が増えちゃうっていうことなんです。歴史を振り返ってみても、昔のものよりも、今のものの方が、圧倒的に部品の数が多いじゃないですか。飛行機とか、送電網とか、衛星とか、自動車とか、マイクロチップとか。本当に、すごい数の部品が使われてるんですよね。

そうすると、当然、それらを作るためには、昔よりも、今のほうが、もっともっと詳しい知識が必要になるんじゃないかって思うじゃないですか。200年前の橋職人より、今の橋職人の方が、そりゃあ、知識が必要だろう、みたいな。

でも、それって、なんか変じゃないですか? たった数世代で、こんなに高度なものを作れるようになるって、どういうこと? 全部の部品を、一人の人間が把握できるわけないし。人間が、急に賢くなったとか、めっちゃ努力するようになったとか、そういうわけじゃないですよね。脳みその構造は、5万年前から変わってないし、現代人が昔の人より頑張ってるとも思えないし(笑)。

実は、もし人間の知識が、技術の進歩に追いつかなきゃいけないんだったら、技術革新なんて、ありえないんですよ。人間が技術を進歩させられるのは、それぞれの世代が、前の世代よりも進んだ状態からスタートできるからなんです。今の世代は、今のレベルでどう動かすかを理解すればいいだけで。人間の創意工夫って、積み重ねなんですよね。前の世代の成果を、次の世代のインプットとして使うことで、どんどん改善していく。進歩っていうのは、頭のいい人がいたり、すごいアイデアが生まれたりすることじゃなくて、前の世代の成果を、新しい始まりに組み込むことで、自動的に、必然的に進んでいくものなんです。

つまり、今の解決策を、使いやすいツールにパッケージ化することによってのみ、人類は前進できる。人間の進歩っていうのは、抽象化の物語なんですね。

具体的に、ソフトウェアの進化を見てみましょう。この50年で、ものすごい進歩があったじゃないですか。少ないコードで、同じことができるようにするっていう話なんですよね。最初は、機械語っていう、一番大変なやり方だったんです。機械語っていうのは、コンピュータのハードウェアが直接処理できる、ゼロとイチでできた命令のことです。ロボットに迷路を歩かせるのを想像してみてください。「歩く」とか「左に曲がる」とか、そういう言葉は使えないんです。全部、ゼロとイチで指示しないといけない。

機械語は、マイクロチップに一番近い命令なので、一番抽象度が低いんです。抽象度が低いっていうことは、一つのタスクを実行するのに、すごく時間がかかるってことなんです。生の材料から家を建てるようなものなんですよね。

一段階、抽象度が高いのが、アセンブリ言語です。これは、機械語を、人間が読みやすいようにしたものです。人間になじみのある記号を使うことで、機械に指示するのが楽になる。アセンブリ言語は、機械語の上に載ってるインターフェースみたいなものですね。このインターフェースのおかげで、プログラマーは、前の世代よりも早く、同じことができるようになった。アセンブリ言語で一つの「レバー」を引くと、機械語では、複数のレバーが引かれる、みたいなイメージです。

さらに抽象度を上げると、手続き型プログラミングっていうのがあります。これを使うと、プログラマーは、名前付きの手続きとか関数を使って、機械に指示できるんです。これは、アセンブリ言語を、あらかじめパッケージ化したもの、みたいな感じですね。抽象度が、さらに高くなる。アセンブリ言語をまとめてパッケージ化することで、プログラマーは、再利用可能なモジュールとして、コンピュータの機能を考えられるようになった。家の建築材料が、部分的に組み立てられた状態で手に入るようなイメージですね。組み立てるのが、楽になる。

ソフトウェア開発では、難しい問題に挑戦するためには、大きなチームと、良いコミュニケーションが必要になります。いろんな要件を管理して、開発プロセスに組み込まないといけない。チームは、より多くの可能性を探って、たくさんの試作を繰り返して、必要なものを実現しないといけない。そうなると、手続き型プログラミングでは、ちょっと大変になってくる。そこで登場したのが、オブジェクト指向プログラミング(OOP)です。これは、手続き型プログラミングの、低いレベルの詳細を抽象化して、オブジェクトっていう概念を導入して、データと振る舞いを、さらに高いレベルで再利用可能なコンポーネントにカプセル化するんです。

OOPを使うと、家の建築材料が、さらに組み立てられた状態で手に入るようになります。OOPは、人間が世界を認識する方法に近い概念を持ち込むんです。継承とか、ポリモーフィズムとか、カプセル化とか、そういう概念を使うことで、ソフトウェア開発を、より高いレベルで行えるようになる。プレハブの建築資材を使うことで、家を建てるのが、より戦略的で、創造的な行為になるように、細部にこだわる必要がなくなる。産業規模で見ると、効率化とか、品質管理とか、拡張性とか、持続可能性とかに、より注力できるようになる。OOPによって、アセンブリ言語から始まった機能の「チャンク化」が、コンピュータプログラミングを、より速く、そして、コンピューティングに興味のある人が、もっと簡単にアクセスできるようにするレベルに達したんです。

でも、それで終わりじゃないですよね。オンラインショッピングサイトとか、ソーシャルメディアプラットフォームとか、オンラインバンキングサービスとか、学習ツールとか、旅行予約サイトとか、ゲームシステムとか、ヘルスケアポータルとか、求人ポータルとか、いろんなオンラインマーケットプレイスとか、動的なウェブアプリケーションが、みんな欲しいじゃないですか。そこで、スクリプト言語っていうのが、重要になってくるんです。インタラクティブで、動的なユーザーインターフェースを開発できるようになる。非同期処理とか、イベント処理とか、ブラウザの互換性とか、そういう課題が出てきて、さらに抽象度の高い言語が登場するようになった。人間が機械に指示する方法を、よりシンプルにして、読みやすくすることで、メモリ管理とか、ポインタ演算とかが抽象化されて、動的型付けとか、豊富なライブラリとか、大規模なコミュニティとか、そういうもので置き換えられて、迅速な開発がサポートされるようになった。スクリプト言語によって、アイデアからソフトウェアになるまでのギャップが、どんどん縮まっていったんです。

一番抽象度が高いのが、ビジュアルインターフェースと、オーディオインターフェースです。グラフィカルユーザーインターフェース(GUI)は、基盤となるデータと機能の視覚的な表現を提供することによって、機械とのやり取りの詳細を抽象化します。今では、ソフトウェアを組み立てるためのドラッグアンドドロップツールがあったり、人工知能(AI)を組み込んだ構築ツールによって、完全にコードレスの開発が現実になりつつあります。障害のある人でも、音声コマンドを使って、コードを書けるようになったり。

今では、数週間で、アプリケーションのプロトタイプを作れるようになったりします。それを可能にする労働の組織化は、50年前とは大きく異なっています。多くの非技術的な人が、今日のソフトウェア製品の実現に重要な役割を果たしています。技術者と非技術者の区別は、今日のソフトウェア開発ツールで達成された高いレベルの抽象化によって、崩れつつあります。

つまり、ソフトウェアで解決できる課題の種類は、前の世代が取り組むことができたものをはるかに上回っているということです。これまで以上に大量のデータを分析できるようになりました。音声認識、画像分類、自然言語処理などのタスクを実行する、ある種の知能を示す機械を構築できます。高度な気候モデルを作成したり、患者の記録を分析して関連付けたり、遠い惑星を探査したり、宇宙現象を研究したり、ビデオ会議を通じて世界中の人々をつなぐことができます。

ニッチな実験として始まったものが、今や、経済の中で最大のプレーヤーになったと言えるでしょう。ソフトウェアは、前例のない規模で、コラボレーションと人とのつながりをもたらします。そして、これは、ますます高まる抽象化のおかげで可能になったのです。各世代は、前の世代よりも簡単にソフトウェアを組み立てる手段を与えられており、それは、前の世代よりも難しい問題を解決できることを意味します。より難しい問題に立ち向かうために投入しなければならない部品の数を、管理し、制御できることを意味します。

抽象化は、詳細を取り除くのではなく、詳細をより高いレベルの構造に組み込むことで、より少ないレバーで、多くの部品を操作できるようにします。抽象化は、進歩を必然的なものにします。なぜなら、抽象化は、詳細をパッケージ化し、インターフェースを作成することによって、人間の創意工夫を前進させるからです。インターフェースは、次の世代の出発点となります。

周りを見渡して、高層ビルとか、衛星とか、スーパーコンピュータとか、高速鉄道とか、原子力発電所とか、スマートフォンとか、コンピュータとか、生物医学インプラントとかを見ると、人間が、こんなにも洗練されたものを作れるなんて、想像しにくいですよね。人間が作った物の内部構造は、非常に詳細で、複雑な調整とタイミングが必要で、全体として、かなり信頼性があります。しかし、各世代は、前の世代を出発点として使用するだけでよいと理解すれば、進歩がどのように起こるかは明らかになります。ある世代のビルダーは、すべての仕組みを知る必要はありません。現在の抽象化のレベルを理解するだけでよいのです。

つまり、物事の内部構造に関する圧倒的な量の知識は、今日生きている誰もが持っているわけではないということです。そのような知識は、各世代が創造物に加える、ますます高まる抽象化によって、曖昧にされてきました。これは、人間のイノベーションのすべての分野に当てはまります。今日の人間は、私たちの祖先よりも賢くはありません。私たちは、より懸命に働きません。私たちは、それほど多くのことを知っているわけではありません。人間の進歩は、抽象化と、ブートストラップされた進歩の物語として理解するのが一番いいでしょう。

抽象化は、通常、認知の文脈で考えられます。人間は、特定の例の使用法と分類から派生した、高レベルの概念を作成します。特定を組み合わせて単一のカテゴリにすることを選択することにより、抽象化を実装しています。すべての犬種が「犬」というカテゴリに当てはまると言うことは、抽象概念の犬を作成することです。抽象絵画を描くことは、印象を生み出すために必要な、詳細ではない部分のみを想像することです。心の中の抽象化は、生活の詳細を乗り越えるために必要な認知負荷を下げることによって、人間が複雑な環境を理解し、ナビゲートする方法です。

抽象化は、純粋に情報的な現象であると考える人もいるかもしれません。結局のところ、各世代のコンピュータプログラマによってもたらされる高レベルの構造は、情報の塊であり、情報レベルでやり取りされます。プログラミングでモジュールを作成することは、人間の言語で「犬」というカテゴリを作成するのと似ています。ソフトウェア内の膨大な数の詳細を扱うために必要な認知負荷を下げるアクティビティです。

しかし、抽象化は、物理的にもなりえます。家を建てるというアナロジーは、単なるアナロジーではありませんでした。より大きなプレビルドされたピースを出発点として使用する場合、それらは抽象化を使用して動作しています。心が特定を単一のカテゴリに組み合わせることができるのと同じように、物理的な詳細を組み合わせて、より高いレベルで単一の機能を果たすことができます。

物理的な抽象化は、人間がどのように物を使用可能にするかを見ることで理解できます。誰も、石斧を振るときに、刃を柄に押し当てながら振るう必要があれば、石斧を使わなかったでしょう。使用されているバインディングは、刃と柄を組み合わせて単一のオブジェクトにし、ユーザーがそれらの取り付けを考慮する必要性を軽減します。物事は、操作するために必要な労力が、各ピースを手動で調整する必要がある場合に必要な労力よりも低い場合にのみ、使用できます。

自動車について考えてみてください。ドライバーが、内燃機関、シャーシ、トランスミッションのすべての内部構造を手動で調整する必要がある場合、誰も車を運転できないでしょう。ドライバーに提供されるインターフェースは、機械の内部構造よりもはるかに詳細が少なくなっています。マニュアルトランスミッションのスティックシフトでさえ、物理的な抽象化です。それは、すべての抽象化が行うことを実現します。つまり、タスクを完了するために引かなければならないレバーの数を減らすインターフェースを提供します。スティックシフトを使用すると、ドライバーは、ギアボックス内の各ギアを物理的に噛み合わせる必要なしに、レバーとクラッチを動かすだけで、目的のギアを選択できます。明確にマークされたギア位置はインターフェースであり、ドライバーが一連の内部詳細をナビゲートすることなく選択できるようにするインターフェースです。もちろん、自動トランスミッションは、物理的な抽象化を次のレベルに引き上げ、内部の仕組みをほとんど考慮せずにギアを操作できるようにします。

私たちが精神的に異なる物を単一のカテゴリに組み合わせるのと同じように、スティックシフトは、内部物理的な詳細のセットを包含する単一の物理的な構造を表し、自動トランスミッションは、これをさらに高くします(後続の世代のおかげで)。人間の創意工夫に伴う物理的なバージョンの抽象化は、人間の進歩の重要な部分です。

特定の業界または専門職内で実装される一連のベストプラクティスは、私たちが作成する物理的な抽象化を中心に構成されています。MRI技師は、磁化、RFパルス励起、信号検出、データ収集、画像再構成を調整していません。バリスタは、手動で水を加熱したり、圧力をかけたり、豆を挽いたり、フレーバーを抽出したり、蒸気を生成したりしていません。アスファルト舗装機は、石、砂利、砂を調達したり、バインダーを試したりしていません。あらゆる分野の専門家は、物理的な抽象化を介して、以前に検討された詳細のレベルを超えて操作しています。これは、知識とスキルの概念が、物理的な抽象化と完全に一致していることを意味します。なぜなら、それらは、人々が自分の分野のシステムを操作するために使用する出発点だからです。

人間の進歩はすべて、前の世代よりも多くの知識や労力を必要とせずに、人類を前進させる物語です。しかし、そのような進歩は自動的で必然的なものであるように、インターフェースを作成するには、慎重な思考が必要です。物理的な抽象化を行うことは、長く慎重な検討を必要とする意図的な行為です。人間によって作成された物理的な抽象化は、歴史的に、設計によって可能になりました。

物理的な抽象化を作成する最も明白な方法は、設計によるものです。含めるピース、それらを接続する方法、およびインターフェースを介して基盤となる機能を公開する方法について、意識的な決定を下すことができます。コンピューティングの例では、手続き型プログラミングは、機械語のピースをより高いレベルの構文とセマンティクスにバンドルする方法について、意図的な決定を下すことによって生まれました。これには、計算された推論が必要です。現在の抽象化レベルの内部に手を伸ばし、それらのピースを接続して、より高いレベルで公開する方法を決定する必要があります。設計は、オブジェクトの内部構造をパッケージ化することによって、物理的な抽象化を作成します。これにより、異なる機能が、より高いレベルで単一の構造にグループ化されます。システムの内部にある異なる機能を、外部からより簡単に調整できるようになるのは、このバンドルによるものです。

これは、抽象化の情報バージョンと物理バージョンが深く結びついていることを示しています。設計で使用される意図的な推論により、異なる物のグループの共通の特性に気づきます。スティックシフトは、共通の目的を共有する、より低いレベルの内部ピースのセットに接続されているため、機能します。そのような物理的な構造は、パターンに気づき、それらのパターンをより高いレベルの形式にグループ化する精神的な能力を使用することによって達成されました。物理的な抽象化は、私たちが心の中で行う意識的な抽象化の反映です。

人間が抽象化によって技術的な進歩を遂げていること、そして抽象化が設計によって実現できることがわかります。これにより、設計は、私たちの歴史的な進歩の核となる部分になりました。しかし、設計にはコストがかかります。なぜなら、システムの内部ピースが互いにどのようにぶつかり合っているかを目撃せずに設計することはできないからです。

設計は、決定論に依存します。設計とは、抽象化の低いレベルと高いレベルの間で行われる明示的な接続について推論することです。設計が機能するのは、システムの出力がどのように生成されるかを、決定論的な意味で評価できる場合に限ります。異なるギアが互いにどのように影響するかを見ることができなければ、トランスミッションの内部構造を、より高いレベルのスティックシフトにバンドルすることはできません。C言語がどのように機能するかを明示的に見ることができなければ、C言語をC++モジュールにバンドルすることはできません。これは、設計の正当性全体の根底にあります。それぞれの内部ピースがどのように相互作用して出力を生成するかについて推論できない場合、私たちの設計は、推測と憶測にすぎないでしょう。

設計は、実際には高レベルである可能性があると示唆したくなるかもしれません。設計は、努力を前向きな方向に導くのに役立つ一般的なガイドラインのセットではないでしょうか?これにより、設計は、厳密な意味での決定論から切り離されるのではないですか?しかし、それは設計ではなく、方法論またはフレームワークです。フレームワークは、人々が特定の目標を達成するために軌道に乗るのに役立つ包括的な原則です。そのようなものは、システムに手を伸ばして、その内部について推論することはありません。設計とは、異なる要素がどのように相互作用し、互いに関係するかについて、意図的な選択をすることです。設計は、決定論的知識の前提に完全に依存しています。

決定論は、その動作が、その入力と動作を支配するルールに基づいて完全に予測可能なシステムまたはプロセスに関連しています。同じ初期入力を決定論的システムに何度も与えると、常に同じ出力が生成されます。この反復可能性、予測可能性、ランダム性の欠如という概念は、設計の概念に組み込まれています。設計は、入力から出力まで流れる一連の明示的なステップがあるという仮定の下で動作します。そうでない場合、特定のピースと接続を選択することは無駄でしょう。

繰り返しますが、決定論的システム/プロセスと、非決定論的システム/プロセスの区別をすることが重要です。非決定論的システムとは、その動作が完全に予測可能ではないシステムです。特定の入力セットに対して常に同じ出力を生成する決定論的システムとは異なり、非決定論的システムは、同じ入力と初期条件が与えられても、異なる動作または結果を生成することが予想されます。同じセットの車とドライバーが、同じ速度で運転し、一時停止標識や信号機のない交差点に到着した場合、完全に予測可能な交通の流れが生まれることはありません。車両の動きと流れの順序には、大きな変動が生じます。同じ入力が与えられても、異なる結果を生成するシステムは設計できません。

読者の中には、ここで立ち止まり、前の例は間違っていると宣言する人もいるかもしれません。なぜなら、交通システムは実際に設計できることを知っており、明らかに交通の流れに予測可能な動作を追加するからです。しかし、これは交通自体を設計しているのではなく、非決定論的システム(交通)を管理する外部フレームワークを設計しているのです。現在の交通システムは、車両間の特定の相互作用を制御しようとはしていません。単にすべての車両に適用される外部制限を設けているだけです。これは、政府が自由市場を規制するフレームワークを作成するのに似ています。車間または顧客と売り手間の特定の相互作用を指示するなど、システム自体を設計しようとすると、非決定論的システムの機能に干渉することが予想されます。

非決定論は、問題がどれほど難しいかと直接関係しています。非決定論的システムを(内部的に)設計できないのと同じように、難しい問題を決定論で解決することはできません。難しい問題は、第4章で見るように、解決するために試行錯誤とヒューリスティクスが必要な問題です。序論で述べたように、難しい問題は、単純な問題に比べて、より困難なものではなく、非常に異なる種類のソリューションを必要とする、カテゴリー的に異なる状況です。

自然を見ることで、難しい問題を解決するために、どれほど異なるソリューションが必要か理解できます。すでに述べたように、自然のソリューションは、最も難しい問題をすべて解決します。これらの自然に難しい問題は、自然環境によって提示され、入力を、決定論的に接続されたピースの単純なブレンドを使用して出力に変換しないオブジェクトによって解決されます。自然は、創発構造の実現によって課題を解決します。これは、自然が入力と出力の間に明確に定義されたステップを持つソリューションを作成しないことを意味します。そのような構造は、自然に難しい問題を解決できません。なぜなら、自然の状況は、それらを定義する無数の要因と相互作用でできているからです。自然の複雑さを説明するのに十分なルールを収集する問題ではありません。実際、それはルールのゲームではありません。可能なすべての不測の事態に対応するルールを持つオブジェクトを作成できたとしても、難しい問題を解決することはできません。

難しい問題を、ルールベースのシステムの、より難しいバージョンであるかのように考えることは、古典力学を使用して量子力学を説明しようとするのに似ています。量子領域は本質的に古典的ではないため、古典的な記述は、何が起こっているかとはかけ離れています。程度や近似の問題ではなく、完全に異なるものであるという問題です。

自然のソリューションは、真の複雑さを秘めています。つまり、その出力は、相互作用の合計や、一連の手順の経路の産物ではありません。自然は、ルールベースの処理とは、完全に異なる方法で必要な出力を生成する物質の構成を作成します。この異なるメカニズムについては後で詳しく見ていきますが、今のところ、自然のソリューションは、人間が作り出す単純なシステムとは根本的に異なることを理解することが重要です。自然のソリューションは、多くの非決定論を持っているだけでなく、そのように機能するためには、その非決定論が必要です。

顔認識について考えてみてください。これは、人間と高度なAIシステムによって自然に行われる偉業です。顔認識を難しい問題にしているのは、現象に関連する要因の数が膨大であることだけではありません。「解決」という言葉が、通常の決定論的なフレーミングとは異なる意味を持っているからです。決定論の下では、解決とは、数学で意味するものであり、特定の、明確な答えまたは答えのセットを見つけることです。しかし、非決定論的システムは、ある程度の正しさを持つ、確率的な答えの概念に似ています。それは、決定論で見られるものの、よりソフトなバージョンです。

しかし、このソフトネスのアナロジーは、非決定論の精神に近いものですが、それでも、非決定論を決定論的システムの近似バージョンとして捉えています。たとえば、計算的に難しい問題の解決策を求めるほとんどの計算アプローチは、特定の基準または目標を満たす、満足のいく、または受け入れ可能な結果を見つけるために、最適化のような手法を使用します。しかし、後で主張するように、非決定論が、二流または近似バージョンの決定論であるという考えは正しくありません。

複雑さの下で起こる解決は、より弱い、またはより近似的な解決策ではなく、完全に異なるタイプの解決策です。さらに、複雑さの下で見つかる解決策のタイプは、正確で決定論的な解決策よりも、はるかに強力で現実的です。近似という概念は、複雑なものを単純さのレンズを通して、誤って考えていることの副産物にすぎません。難しい問題に対する真の解決策は近似しません。本質的に異なる計算の概念を使用して、必要な答えを直接計算します。数学的計算を実行することと、現実世界の問題を解決することの重大な区別については、後で詳しく説明します。

複雑さの中心にある因果メカニズムの欠如は、設計が、複雑さを扱いやすくする種類のソリューションを作成できる可能性を排除します。ユーザーに決定論的に接続されたインターフェースを公開するために作成できるバンドルはありません。設計が決定論に依存しているということは、設計が、カテゴリー的に単純な問題に対する解決策しか見つけられないことを意味します。

これは、物を作ることで問題を解決するという、私たちの歴史的なアプローチによって提示された重要な岐路に私たちを導きます。1)進歩するためには、物理的な抽象化を作成する必要がある、2)物理的な抽象化の作成は常に設計によって行われてきた、3)設計は難しい問題を解決できない、4)難しい問題は、私たちが今、物を作って解決しなければならないことです。

私たちが物理的な抽象化を作成する現在の方法は、間もなく終わりを迎えます。設計は、私たちがソリューションを構築するために必要な物を作成できません。私たちが直面している状況に内在する複雑さは、設計が提供できないものを要求します。ピースとその接続について推論することはできません。なぜなら、自然のソリューションが問題を解決するメカニズムは、本質的に異なっているからです。

自然が、何らかの決定論的な機械であるかのように語ることは、常に一種の見当違いの具体性でした。時には、世界を見るための単純な方法にすぎないこともありますが、時には、この違反が社会や政治において危険な形で現れることがあります。しかし、今、自然がルールベースの機械に似ているという概念は、進歩を直接妨げています。物を作るという意味を劇的に再構築することによってのみ、未来は扱いやすいものになります。

問題クラスの根本的な変化、およびそれらを解決するために必要なソリューションは、複雑性の時代に効果的に機能するために必要な哲学的転換を支えています。課題は、因果関係の理解の低下を受け入れることだけではありません。知識、スキル、および人間のイノベーションへのアプローチの概念を再定義することです。私たちは、異なる方法で構築しなければなりません。

設計を介して進歩を継続できないことは、進歩には抽象化が必要であるという事実を否定するものではありません。より難しい問題は、より多くのピースを異なるオブジェクトに接続するだけでは解決できません。次の世代が使用するためには、ピースをより高いレベルの構造にバンドルする必要があります。これが、多数のピースを、より複雑なオブジェクトに正しく配置する方法です。数千または数百万のピースを個別に、意図的に、そして適切な調整で配置するのは、計算上、非常に負担がかかります。より低いレベルのピースは、問題を一段階高く解決するために必要な情報的凝集を見つける必要があり、抽象化は、この凝集を達成する方法です。

これは、進歩のあらゆる概念に当てはまります。人間の心が、世界を理解するために抽象化を作成する方法について考えてみてください。私たちが見たり聞いたりしたことを、より高いレベルのエンティティに配置しなければ、人生をナビゲートすることはできません。脅威と機会、友人対敵、食物、危険、避難所などとして物事を分類できなければ、生き残ることはできません。表面的に異なる物を単一のカテゴリに包含する心の抽象化を作成することによって、私たちは、人生を切り抜けるために必要な認知負荷を劇的に下げます。

異なる物間のつながりを見つけるこの能力は、私たちのすべてのイノベーションにまで及びます。新しい哲学から新しいテクノロジーまで、すべては、情報と物理的な物を新しいエンティティに結び付けることができるために生まれます。困難な課題を計算的に実行可能にするのは抽象化です。なぜなら、抽象化は、問題の詳細とソリューションの手順間の1対1のマッチングを必要とせずに計算する、新しい情報的および物理的な構造を生成するからです。より困難な課題の内部にある無数の要因に対応できるように、必要なピースの内部調整を手配するのは抽象化です。要するに、抽象化なしに進歩はありません。

これは、人間にとって真実であるのと同じように、自然にとっても真実です。自然は、時間の経過とともに変化と発展のプロセスを経て進歩します。自然のソリューションは、常に変化する環境ストレスに対して問題を解決します。一歩引いて、人間のイノベーション全体を見ると、これは自然によって解決されている問題です。なぜなら、人間は問題を解決するために集団で相互作用する生物だからです。しかし、私たちの特定の発明に関しては、人間は、すでに議論したように、設計によって新しい抽象化を作成します。一緒に配置されるピースは、それらのピースがどのように相互作用するかについての因果関係情報を使用して、意図的に行われます。これが、自然がその抽象化を作成する方法ではありません。自然は、意識的な推論を使用して、ピースをより高いレベルの構造に結び付けているわけではありません。それにもかかわらず、自然は、人間が橋やロケットエンジンで取り組むものよりも、はるかに難しい問題を解決します。

これは、重要な質問を提起します。抽象化による進歩が普遍的な特性であり、より難しい問題を解決するために進化するあらゆるシステムによって秘められている場合、自然はどのようにして抽象化を作成しているのでしょうか?

いずれの場合も、物理的な抽象化は、機能をより高いレベルのグループにバンドルし、インターフェースを公開することですが、自然のバンドルは、決定論的に設計された集約ではなく、統計的に自動的な物質の現れです。これがすべて抽象的に聞こえる場合は、この本の残りの部分で私が何を意味するのか説明するので安心してください。しかし、この時点で重要なのは、自然の物理的な抽象化は、進歩に不可欠ですが、設計されていないことを認めることです。どのピースと相互作用がバンドルを構成するかを選択するための自然による意識的な努力はありません。したがって、自然の抽象化は、根本的に異なるメカニズムを持っている必要があります。

これは、自然が、どのピースを含めるべきか、どのように接続すべきかについて推論できない場合、自然はどのようにして、どのピースをより高いレベルの構造に結合するかを「知る」のか?自然はどのようにしてバンドルを作成するのか?無意識の自然淘汰のプロセスは、次のレベルに奉仕する1つのレベルの物質を結び付ける類似性をどのように見つけることができるのか?

ふう、長かったですね。続きはまた今度、お楽しみに!

Go Back Print Chapter