サイモンの言う「柔軟性」を習得するには、つまり自身をアーキテクチャとして設計することが必要になる。自らを「人工物」として設計することが、「柔軟性」という進化上の獲得物を確保する要件となるのである。drift)」であると分析している。システムの進化は、システムそれ自体が自らの構造とコードを再記述することによって成り立つ。それは段階的な発展に基づく「進歩(advances)」では決してない。生物の進化の中には、しばしば他の機能を担っていた形質が進化の前提となる機能に転用されることで成り立つ進化もある。引き合いに出される仮説が示しているように、爬虫類から鳥類への進化には、こうした機能の転用が伴っていた。鳥類を爬虫類の進化形態であると考えるだけでは、この進化はあまりにも起こりそうもない現象と思えてしまうために、到底信じられなくなる。爬虫類が羽毛を有していたと考えれば、この進化も無理なく受け入れられるようになる。この場合、爬虫類の羽毛は体温調節のために機能していたと推論できる。この羽毛が飛翔するための機能として転用されることによって、空を飛ぶ鳥類の進化が本格的に現実化するようになったのである。進化論では、こうした既存の機能の転用によって可能になった進化を「前適応」と呼ぶ。意味するということも、より明快となる。自己自身を人工物のアーキテクチャとして設計する設計者は、まさに自身が進化する上での可能性の諸条件を配備していることになる。した自己自身のアーキテクチャ設計に時間を投資する設計者は、自らの「金融商品」としての価値を高めることができるのである。問題再設定:人工物のインターフェイス、あるいは「全体」を凌駕する「部分」サイモンは、人工物と自然物の区別を導入することで、「人工科学」を提唱した。人工物は、人工物それ自体の内部環境と外部環境の接点として、すなわち「インターフェイス」として位置付けられる。内部環境がその人工物の構造的な内容である一方で、外部環境はその人工物が機能する環境を言い表す。一方の環境が他方の環境に適合しているのならば、人工物は意図された目的のために役立つ。コンピュータは、人間が開発した人工物の中でも、とりわけ変幻自在である。正常に作動している限り、コンピュータの実行処理は基本的に機能的な諸要素を組織化した特性を持つ。基礎的な演算速度から観ても、こうした特性を推測できるであろう。データ処理の速度は、ある種の緩慢な構成要素がコンピュータには含まれていないということを暗に仄めかしている。これを抜きにして考えても、実際に作動しているコンピュータの特徴は、ハードウェアの性質とはほぼ無縁であることがわかる。コンピュータは、あくまでもその機能的な諸要素を組織化した人工物である。した構成要素の機能だけが、大雑把に言えば、システム全体の動作に関連しているのである。Extensibility)」を標榜するUnix哲学も指し示している通り、あらゆるコンピュータは単純な基礎的諸要素から構成された小さな単位を組み立てることで設計されており、またそうあるべきとされている。個々の小規模な部品は、インターフェイス越しに、ブラックボックスとして相互に参照し合う関係にある。事実、伝統的にUnixは、デバイスに依存しない単純なストリーム指向のテクストデータを読み書きするプログラムの記述を強く推奨してきた。古くからUnixにおいては、プログラムは可能な限り単純で小規模なフィルタとして機能するように設計されていた。個々のフィルタは、抽象化するならば、入力されたテクスト形式のデータを別のあり方にもあり得るテクストデータのストリームに変換して出力する。したストリーミングデータは、オブジェクト指向におけるメッセージ概念を彷彿とさせる。Unixにおける各プログラムは、フィルタとして機能すると共に、ストリーミングデータの処理部分を言わば隠蔽している。この隠蔽によって、個々のプログラムは独立性を保持するのである。クリーンなインターフェイスで結合される単純な部品を設計するということは、ソフトウェアの全体としての複合性を縮減する。言うのも、個々の部品にインターフェイスを被せてカプセル化しておけば、問題が局所化されるためである。することで、全体の問題の解決へと注力して徒労に終わるリスクを侵さずに済む。beautiful)」という発想こそが重要となる。小さなシステムには、大きなシステムには無い利点が幾つもある。Unixの思想家たちは、これを「美しい」と表現した。確かに小さなプログラムは、一つの問題を解決することに特化している。それは必要最小限のアルゴリズムしか構造化していない。巨大なプログラムは、構造的な複合性を増大させる。複合化したプログラムのソースコードは、その可読性や保守性を大きく損なわせている。高度に複合化したシステムは、全体最適化のパラドックスを招いてしまう。これに対し、小さなプログラムは、インターフェイス仕様に基づいた機能的な再利用可能性と機能的な拡張性によって、別のあり方でもあり得るプログラムとの自由な組み合わせを可能にする。この自由度が、変更容易性を実現し、変更に強い設計を可能にするのである。「小さなプログラムは多くを為さない。これらは精々一つか二つの機能を実行するに過ぎず、それ以上のことはほとんど果たさない。した小さなプログラムを組み合わせれば、その真の力を経験することになる。全体は部分の総和以上となる。大規模で複合的な課題は簡単に処理される。コマンドライン上でそれらを簡単に導入するだけで、新しいアプリケーションを記述することも可能だ。これを前提とすれば、アーキテクチャ設計において俯瞰すべきなのは、この<小さな人工物>と<小さな人工物>の<小さな接点>となる<小さなインターフェイス>である。この人工物の粒度は、無論相対的であると共に、再帰的でもある。ある相対的に大きな人工物は、別の複数の小さな人工物におけるインターフェイス上の結合によって構成されているものだ。アーキテクトの「全体」に対する俯瞰的なマクロ視点は、その「部分」に対するミクロな視点と併存していなければならないのである。