ソフトウェアコンポーネント
オブジェクト指向プログラミング (OOP) の考え方では、ソフトウェアはオブジェクトのモデルに従って書かれる。OOP やオブジェクト指向分析設計は実世界の相互作用のモデル化に注目し、そこからエンドユーザーやプログラマが直感的に利用可能なある種の「動詞」と「名詞」を抽出する。
一方、ソフトウェアコンポーネントでは必ずしもそのような前提はなく、事前に製作されたコンポーネント群を組み合わせて、電気製品や機械製品を作るようにソフトウェアを作れることを強調する。実際、有用なコンポーネントの定義はオブジェクトほど直感的ではない。コンポーネントはオブジェクトのように擬人化されることはなく、エンドユーザーによるプログラミングにも悲観的な立場と言える。ソフトウェアコンポーネントに基づいた新たなプログラミングパラダイム、コンポーネント指向プログラミングを提唱する人もいる。
この両者の区別は初期の計算機科学者らにその起源があるとする人もいる。すなわち、ドナルド・クヌースは文芸的プログラミングとして直観と形式モデルの融合を提唱した。一方、エドガー・ダイクストラは論文 The Cruelty of Really Teaching Computer Science でプログラミングは数学の一分野でしかないと主張した。
両者の考え方は学界での論争を呼び、2つの手法の利点と欠点が議論され、両者の融合を可能にする戦略が話し合われた。彼らの立場が本当に対立するものだったかについては異論もある。