물리적 건축물의 구조와는 달리 소프트웨어의 구조가 우리의 직관과 일치 하는지는 분명치가 않다. 건축물에는 명확한 물리적 구조가 있다. 건축물은 중력과 건축 자재의 물리적 특성에 크게 좌우된다.
반면 소프트웨어는 중력과는 상관이 없다. 소프트웨어는 소프트웨어로 구성된다. 큰 소프트웨어 구조물은 작은 소프트웨어 컴포넌트로 만들어지며, 이 컴포넌트는 더 작은 컴포넌트로 만들어진다.
그러나 비록 소프트웨어에서도 우리가 반드시 인정하고 신경 써야 할 물리적인 제약은 분명 존재한다. 프로세서 속도와 네트워크 대역폭은 시스템 성능을 한정짓는 결정적 제약이 될 수 있다. 메모리와 스토리지는 코드 베이스의 야욕을 꺾어 버릴 수 있다.
물리적 건축물
소프트웨어
소프트웨어의 아키텍처의 지향점에 서서,
단단하고 안정적으로 구조화 되었지만 변경할 수 없는 아키텍처
vs.
추측성 일반화로 변경에 자유롭지만 셀 수 없는 파라미터와 실행되지 않는 코드들이 가득한 부수적 복잡성으로 가득 차 있는 아키텍처
이 부드럽고 자유로운 소프트웨어 세상에서 우리가 가장 최우선으로 보존해야 하는 것은 무엇인가?