大きな泥だんご
概要
「大きな泥だんご」とは、整然としたアーキテクチャが欠如しているソフトウェアシステムを指します。この用語は、1997年にBrian FooteおよびJoseph Yoderによって発表された論文で広まりました。ソフトウェア工学の観点から、この状態は望ましくないものでありながら、ビジネスのプレッシャーや開発者の革新性の欠如、またはコードのエントロピーなど様々な要因によって引き起こされることが多いのです。これを非難するべきかどうかは一概には言えませんが、実際に動作しているものが多く、それに伴うメンテナンスの困難さが問題となっています。
特徴
大きな泥だんごなシステムは、長期に渡って開発され、それぞれ異なる条件で形成された多様な部品から構成されています。これらの部品は、必ずしも体系的に学んだプログラミング手法やアーキテクチャに基づいていないため、しばしばメンテナンスが難しくなります。システムの設計段階で明確な要件が定義されず、実装者に対する圧力が高まると、追加機能が要求される中で、部分的な要求に対応するためのコードが生まれがちです。
問題点
大きな泥だんごなプロジェクトのプログラマーは、非常に複雑なシステムの理解が求められます。また、運用中に新たな技術革新が加わった場合(例:クライアントサーバーからWebベースへの移行など)、既存のシステム再構築が急務となります。このような技術変化は、システムをスクラッチから見直すための正当な理由となると同時に、大きな課題でもあります。
プログラミング言語の観点
プログラミング言語によっては、大きな泥だんごは異なる意味を持つこともあります。Lispの文脈では、その柔軟性を示すための概念として活用されることもあります。Lispではマクロを用いた言語文法の制御、データ指向プログラミングスタイルの導入などが可能であり、それによってシステムイメージを作成し再利用することもできます。しかし、これらは開発者にとって非常に複雑な要素となり、特に改善や保守が難しい場合も多いです。
例と比喩
過去にジョエル・モーゼスは、
APLを「美しいダイヤモンド」に例え、完璧だが拡張できないと表現しました。一方で、Lispは「大きな泥だんご」と捉えられることが多く、他の泥だんごを加えてもやはり泥だんごのままであると比較されることがあります。この比喩は、他の泥だんごを付け加えることで得られるメリットが少ないことを示唆しています。モーゼスはこの考えに異を唱え、Lispの「ビーンバッグ」という新たな特性を指摘しました。
結論
大きな泥だんごは、現代のソフトウェア開発において克服すべき重要な課題であり、それを解決するためには適切なアーキテクチャ設計や明確な要求定義が欠かせません。継続的なメンテナンスや拡張を見据えた取り組みが必要であることを忘れてはなりません。